此文章仅用于 TS-3000 微站数据通讯使用。

计蒙 TS-3000 微站,是将 计蒙 TS-2000 传感嵌入至一个小型的金属微站内,同时集成 五参传感器、一分四模块、水泵、电球阀、水箱等元件进行集中采集的小型设施。

五参传感器通信协议

本章节着重讲解终端控制器与五参传感器之间的通信方式、原理等,计蒙 TS-2000 的通信方式已在上文中给出。

数据格式

基于较为标准的 ModBus - RTU 协议,但该传感器仅支持三个功能码: 03、06、10

  • 03: 读取多个连续寄存器指令。
  • 06: 写入单个寄存器指令。
  • 10: 写入多个连续寄存器指令。

数据帧格式

主站发送方: 一帧完整的数据由 地址码、功能码、寄存器地址码(寄存器起始地址码)、寄存器数量码、校验码构成。所有的数据为 16 进制格式 1 字节, 1 个字节为 2 为 16进制数: 0x01 0x0C

  • 地址码: 从设备的标识符,地址码唯一,在同一个系统中,一个从设备只对应一个地址码。
  • 功能码: 具体实现的功能标识符,标准的 ModBus - RTU 功能码只有两个功能:读/写,且功能码唯一,一个功能只对应一个地址码(该传感器仅支持 03、06、10 三个功能码)。
  • 寄存器地址码: 实际进行操作的寄存器的地址,或连续的寄存器的起始地址。
  • 寄存器数量码: 实际进行操作的寄存器的数量,根据寄存器所占的空间进行自动匹配,int 型寄存器占 1 字节,float 型寄存器占 2 字节。
  • 校验码: 过 ModBus-CRC16 循环校验方法计算出的 2 字节 16进制数,**低位在前、高位在后**。

校验码格式

循环冗余校验(Cyclic redundancy check,通称:CRC)是一种根据网路数据封包或电脑档案等数据产生简短固定位数验证码的一种散列函数,主要用来检测或校验数据传输或者保存后可能出现的错误。生成的数字在传输或者储存之前计算出来并且附加到数据后面,然后接收方进行检验确定数据是否发生变化。由于本函数易于用二进制的电脑硬件使用、容易进行数学分析并且尤其善于检测传输通道干扰引起的错误,因此获得广泛应用。

CRC 校验的多项式与方法众多,我们在此选用适合我们设备间通讯的 ModBus-CRC16 校验方式:

CRC校验过程

设置 CRC 变量的初始值为 FFFF,称此变量为 CRC 寄存器
把第一个 8 位数据与 CRC 寄存器的低位异或,并把结果存放于 CRC 寄存器。
检测 CRC 寄存器最低为,若为 1:寄存器右移 1 位,再与多项式(8005) A001H 异或;若为 0, 则寄存器只需右移 1 位
重复步骤三,直到右移 8 次,处理完 8位数据
重复步骤二~四,进行下一个 8 位数据处理
将最后得到的 CRC 寄存器的值取出,即为 CRC 校验码.

CRC校验代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
/**
* @brief CRC16 check code.
* The function is used for data verification when communicating with PC.
* @param pdata
* @param len
* @return uint16_t
*/
uint16_t ModBus_CRC16( uint8_t *pdata, int len) //polynomial: 8005
{
crc = 0xFFFF;
for ( CRC_j=0; CRC_j<len;CRC_j++)
{
crc=crc^pdata[CRC_j];
for ( CRC_i=0; CRC_i<8; CRC_i++)
{
if( ( crc&0x0001) >0)
{
crc=crc>>1;
crc=crc^ 0xA001; //We take 8005 in reverse.
}
else
crc=crc>>1;
}
}
return ((crc & 0xFF) << 8) | (v >> 8);
//return crc;
}

寄存器地址表

寄存器名称 寄存器地址 数据类型 读写类型 备注
测量参数1值 0002H Float 读 测量参数由配置的传感器决定,
需进行提前读取预知各个参数
测量参数2值 0004H Float 读
测量参数3值 0006H Float 读
测量参数4值 0008H Float 读
测量参数5值 000AH Float 读
测量参数6值 000CH Float 读
测量参数7值 000EH Float 读
测量参数8值 0010H Float 读
测量参数9值 0012H Float 读
测量参数10值 0014H Float 读
测量参数11值 0016H Float 读
测量参数12值 0018H Float 读
参数1/参数2 001AH UINT 读 查询对应的参数代码(即参数名称)
高字节代表奇数位参数,
低字节代表偶数位参数,
例如查询 “参数1/参数2” ,
读取到 0x02 0x03,
则参数1为02电导率参数,
参数2为03溶解氧参数
参数3/参数4 001BH UINT 读
参数5/参数6 001CH UINT 读
参数7/参数8 001DH UINT 读
参数9/参数10 001EH UINT 读
参数11/参数12 001FH UINT 读
传感器连接状态 0020H UINT 读 由低到高依次对应 1~4 通道,
连接成功为1,否则为0
通道1/通道2 0022H UINT 读 对应通道搭配的传感器型号
高字节代表奇数位通道,
低字节代表偶数位通道,
例如查询 “通道1/通道2” ,
读取到 0x04 0x07,
则通道1为04浊度传感器,
通道2为07氨氮传感器
通道3/通道4 0023H UINT 读
通道5/通道6 0024H UINT 读
通道7/通道8 0025H UINT 读
温度通道绑定 0028H UINT 读/写 默认绑定通道1,
可绑定任何一个传感器读取
生产批次 0029H UINT 读 2218
传感器序号 002AH UINT 读 1001
地址码 002BH UINT 读/写 1 ~ 31可改;默认 1
波特率 002CH UINT 读/写 0 - 9600;1 - 19200;2 - 115200
校验位 002DH UINT 读/写 0 - NONE;1 - ODD;2 - EVEN
停止位 002EH UINT 读/写 0 - 1 bit;1 - 2 bit
1点校正 002FH UINT 写 命令11H
1点标准值 0030H Float 读/写 默认 4.01
2点校正 0032H UINT 写 命令21H
2点标准值 0033H Float 读/写 默认 6.86
3点校正 0035H UINT 写 命令31H
3点标准值 0036H Float 读/写 默认 9.18

参数代码表

参数代码(十六进制) 对应测量参数名 单位 校正说明
01 温度 ℃ B
02 酸碱度 无计量单位 B + 2point
03 电导率 uS/cm
(1μS/cm=10^-4 S/m)
K、B + 2point
04 浊度 NTU K、B + 3point
05 氧化还原电位 mV B
06 悬浮物
(浊度传感器复合输出)
mg/L K、B + 3point
07 氨氮 mg/L K、B + 2point
08 化学需氧量
(传感器复合输出浊度)
mg/L K、B + 3point
09 氟化物 mg/L K、B + 2point
0A 氯化物 mg/L K、B + 2point
0B 硝酸盐 mg/L K、B + 2point
0C 水位 cm K、B + 2point
0D 透明度 cm K、B + 1point
0E 叶绿素 ug/L K、B + 3point
0F 蓝绿藻 kcells/mL K、B + 3point
10 - - -
11 水中油 ppm K、B + 3point
12 - - -
13 盐度
(电导率传感器复合输出)
ppt K、B
14 溶解性固体
(电导率传感器复合输出)
mg/L K

五参传感器交互指令

指令 1 - 读取单个参数值

主设备发送: 01 01 00 00 00 00 0A 3C
从设备返回:
设置成功 01 52 49
设置失败 01 46 41
校验失败 01 43 52 43 45 52

响应时间: 1.5s
注意: TS-2000 传感器上电后请等待 2~3s 以后开启串口,避免因传感器端上电复位导致的信号波动.


此间车厢已使用  次 |   人乘坐过此趟开往世界尽头的列车