RS485 Modbus 类型(S016A)
[TOC]
一、实现功能简介
基于 FlexLua 《DTU01万能采集器》实现对CON615D型号的 RS485 多合一水质传感器 (水温/电导率/电阻率/盐度/TDS) 的采集,并可通过下面八种无线/有线通信方式中的一种将传感器数据上报至云平台服务器,八种方式分别为:
- 4G 无线 Mqtt 主动传输
- 4G 无线 TCP 主动传输
- WiFi 无线 Mqtt 主动传 输
- WiFi 无线TCP 主动传输
- Lora 无线 主动传输
- Lora 无线 被动传输
- 以太网有线主动传输
- 以太网有线被动传输
二、传感器简介
本文采用联凌电智能的 CON615D 型号的 RS485 Modbus 多合一水质传感器,该传感器可用在水产养殖,水质检测,信息化数据采集,物联网水质检测等领域。
产品特点: | |
---|---|
隔离电源设计,数据稳定性,抗干扰能力强 | |
二极式石墨电导率/盐度传感器 | |
外壳材料:钛管体积小巧、无需安装 | |
尺寸:直径13mm*75mm(长) 耐腐蚀、高稳定性,适合淡水、海水连续监测 | |
内置温度传感器 | |
补偿温度:25.0℃(默认) | |
补偿系数:2%/℃(默认) | |
数字接口方式 通讯方式: RS485 接口*1 | |
通讯速率: 4800/9600(默认)/14400/19200 可选 | |
通讯协议: Modbus-RTU 协议 (03,06,0x10 支持指令) | |
测量 | 水中盐度/电导率/TDS |
测量范围 | 电导率: 0-10000uS/cm; |
TDS: 0-10000ppm | |
盐度: 0- 60.00ppt | |
分辨率 | 1uS/cm; 0.01mS/cm; 1ppm; 0.01ppt |
温度范围 | -20~60℃ |
传感器类型 | 二极式石墨传感器 |
测量精度 | 5%F.S.;±0.5℃ |
数据补偿 | 默认25.0℃补偿温度,2%/℃ |
供电方式 | 12VDC |
功耗 | 30mA @12VDC |
该传感器说明书资料可在
{FlexLua开源网盘}
->{Spec}
->{S016A}
文件夹中找到。
三、DTU01 万能采集器介绍
基于《DTU01采集器》实现采集市面上常见的 RS485 Modbus 多合一水质传感器数据,并将采集到的传感器数据以 Json 字符串的形式通过可选的 4G/WiFi/以太网/Lora 其中一种方式发送给网关或云服务器。在需要电池供电的场景下,还可通过给 DTU01 增加低功耗模块以实现周期性休眠采集,休眠电流可低至 3uA 以内,以实现在电池供电场景下的几个月甚至几年的周期性长期采集。
关于 DTU01 万能采集器:
《DTU01万能采集器》内部核心主控采用 ShineBlink C2M 低代码物联网核心模组,使用该主控核心模组可轻松采集大量市面上常见的传感器数据,并可自由选择通过 4G/WiFi/以太网/Lora 中的一种方式进行数据通信。本采集器硬件资料和源代码开放且源码极其精简,所以开发者无论是否有嵌入式单片机开发经验,皆可轻松基于源码进行二次开发(例如:新功能增加、 边缘数据处理、逻辑判断、特殊协议解析等)。当然如果使用者对编程不感兴趣也可直接参考下面的技术指导文章即可实现大部分场景的需求。
四、DTU01 硬件要求
由于 DTU01 的硬件接口是可配置的,所以需要确认一下您手上的 DTU01 采集器是否满足要求,如果确认已满足就无需再做任何操作,否则请按《DTU01硬件使用指导书》完成下面的硬件配置:
- DTU01 电路板上的 ‘A’ 和 ‘B’ 引脚需配置成 485 接口的 ‘A’ 和 ‘B’,即 S3 选择
- DTU01 电路板上的 ‘+’ 和 ‘-’ 电源输出引脚需配置成 12v 输出(注意在 DTU01 电路板上 ‘+’ 和 ‘-’ 对应 ‘VIN’ 和 ‘GND’)
《DTU01硬件使用指导书》可在
{FlexLua开源网盘}
->{Hardware}
->{DTU01万能采集器}
->{DTU01硬件使用指导书}
文件夹中找到。
五、传感器采集核心代码
参考传感器资料中的 RS485 通信参数以及 Modbus 寄存器点位表,可得如下代码,将以下代码覆盖至对应的 main.lua 源代码文件中即可实现传感器的采集。
--读取RS485多合一水质传感器
--获取到的Json数据形如:{"Temp":26.5, "ElecMs":12.34:, "ElecUs":1000, "TDS":200, "Salt":0.51, "R":0.251}
function ModbusToJson()
--配置RS485 Modbus转Json功能,并设置将要生成的Json字符串最大长度为150字节
LIB_ModbusToJsonConfig(150)--必须小于255
--多合一传感器寄存器地址0x00~0x05存储: 水温,电导率ms,电导率us,TDS,盐度,电阻率
LIB_ModbusToJsonAdd(0,"U_AB",1,"Temp")--水温度,16bit无符号AB型,小数点个数1个,Json Key名称"Temp"
LIB_ModbusToJsonAdd(1,"U_AB",2,"ElecMs")--电导率(ms),16bit无符号AB型,小数点个数2个,Json Key名称"ElecMs"
LIB_ModbusToJsonAdd(2,"U_AB",0,"ElecUs")--电导率(us),16bit无符号AB型,小数点个数0个,Json Key名称"ElecUs"
LIB_ModbusToJsonAdd(3,"U_AB",0,"TDS")--TDS值,16bit无符号AB型,小数点个数0个,Json Key名称"TDS"
LIB_ModbusToJsonAdd(4,"U_AB",2,"Salt")--盐度,16bit无符号AB型,小数点个数2个,Json Key名称"Salt"
LIB_ModbusToJsonAdd(5,"F_ABCD",3,"R")--电阻率,32bit浮点数ABCD型,小数点个数3个,Json Key名称"R"
--参数设置(9600,无校验,1位停止位,功能码"03",从机地址0x01,应答最长等待1000ms,包与包最短间隔100ms)
LIB_ModbusToJsonSend("BAUDRATE_9600","NoneParity","StopBit_1","03",0x01,1000,100)
end