计蒙内部通信
本章节介绍计蒙内部数据通信方式、原理等,仅用于计蒙内部设备之间的通信参考。计蒙与外界通信请看 计蒙外部通信 部分。
数据格式
由于设备量少,我们根据 ModBus-RTU 协议进行轻微的改写,使得适配我们目前的设备情况。当通信时,只有接收到一帧完整的数据,才被认为是有效数据;反之,中断指令,重新发送。
数据帧格式
一帧完整的数据由地址码、功能码、数据码、校验码组成。所有的数据为 16 进制格式,1 个字节为 2 位 16 进制数: 0x01 、 0x0C
- 地址码: 从设备的标识符,地址码唯一,一个从设备只对应一个地址码。
- 功能码: 具体实现的功能标识符,功能码唯一,一个功能只对应一个地址码。
- 数据码: 我们的通信协议中,有部分功能需要向从设备写入数据,写入的数据即为数据码,数据格式以及长度由指令具体功能决定。不需要写入数据的指令的数据码统一为 00 00 00 00
- 校验码: 通过 ModBus-CRC16 循环校验方法计算出的 2 字节 16进制数,高位在前、低位在后。
校验码格式
循环冗余校验(Cyclic redundancy check,通称:CRC)是一种根据网路数据封包或电脑档案等数据产生简短固定位数验证码的一种散列函数,主要用来检测或校验数据传输或者保存后可能出现的错误。生成的数字在传输或者储存之前计算出来并且附加到数据后面,然后接收方进行检验确定数据是否发生变化。由于本函数易于用二进制的电脑硬件使用、容易进行数学分析并且尤其善于检测传输通道干扰引起的错误,因此获得广泛应用。
CRC 校验的多项式与方法众多,我们在此选用适合我们设备间通讯的 ModBus-CRC16 校验方式:
设置 CRC 变量的初始值为 FFFF,称此变量为 CRC 寄存器
把第一个 8 位数据与 CRC 寄存器的低位异或,并把结果存放于 CRC 寄存器。
检测 CRC 寄存器最低为,若为 1:寄存器右移 1 位,再与多项式(8005) A001H 异或;若为 0, 则寄存器只需右移 1 位
重复步骤三,直到右移 8 次,处理完 8位数据
重复步骤二~四,进行下一个 8 位数据处理
将最后得到的 CRC 寄存器的值取出,即为 CRC 校验码.
CRC校验代码
1 | /** |
TS-2000 传感器探头交互指令
更新 11 条 TS-2000 在线水质传感器通信指令,用于主从设备通讯,后续指令将持续更新:
指令 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 以后开启串口,避免因传感器端上电复位导致的信号波动.
指令 2 - 读取 TS-2000 传感器版本号 | 此指令报废!!!合并至指令 2 中!!!
主设备发送: 01 02 00 00 00 00 0A 78
从设备返回:
每个 TS-2000 传感器都有固定的唯一版本号
例: 01 54 53 2d 32 30 30 30 2d 30 30 30 30 30 31
有效数据: TS-2000-000001 (ASCII码转换后)
响应时间: 50ms
注意: 此指令报废!!!! 新的指令 2 于 2022年6月23日更新!!!
指令 3 - 写入 TS-2000 传感器积分时间
主设备发送: 01 03 XX XX XX XX HC LC
从设备返回:
设置成功 01 52 49
设置失败 01 46 41
校验失败 01 43 52 43 45 52
响应时间: 50ms
指令 4 - 查询 TS-2000 传感器积分时间
主设备发送: 01 04 00 00 00 00 0A F0
从设备返回:
示例 01 00 00 01 F4
响应时间: 50ms
指令 5 - 写入 TS-2000 传感器平均次数
主设备发送: 01 05 00 00 XX XX HC LC
从设备返回:
设置成功 01 52 49
设置失败 01 46 41
校验失败 01 43 52 43 45 52
响应时间: 50ms
指令 6 - 读取 TS-2000 传感器平均次数
主设备发送: 01 06 00 00 00 00 CA 89
从设备返回:
示例 01 00 32
响应时间: 50ms
指令 7 - 读取 TS-2000 传感器暗信号条件下光谱数据
主设备发送: 01 07 00 00 00 00 0A B4
从设备返回: 共 2063 字节
数据量过大不易在此展示,请在附录中查看
响应时间: 随积分时间与平均次数的变化而变化,默认为:500us积分时间,50次平均
指令 8 - 读取 TS-2000 传感器参考信号条件下光谱数据
主设备发送: 01 08 00 00 00 00 0B E0
从设备返回: 共 2063 字节
数据量过大不易在此展示,请在附录中查看
响应时间: 随积分时间与平均次数的变化而变化,默认为:500us积分时间,50次平均
指令 9 - 读取 TS-2000 传感器样品信号条件下光谱数据
主设备发送: 01 09 00 00 00 00 CB DD
从设备返回: 共 2063 字节
数据量过大不易在此展示,请在附录中查看
响应时间: 随积分时间与平均次数的变化而变化,默认为:500us积分时间,50次平均
指令 10 - 一次性读取暗、参、样三种信号条件下传感器光谱数据
主设备发送: 01 0A 00 00 00 00 CB 99
从设备返回: 共 6189 字节
数据量过大不易在此展示,请在附录中查看
响应时间: 随积分时间与平均次数的变化而变化,默认为:500us积分时间,50次平均
指令 11 - 读取 TS-2000 传感器管内温度、湿度、芯片温度
主设备发送: 01 0B 00 00 00 00 0B A4
从设备返回:
01 32 34 2e 33 34 35 39 2e 34 33 34 33 2e 33 32
有效数据:24.3459.4343.32
响应时间: 500ms
更新 5 条 TS-2000 在线水质传感器通信指令,用于两组系数标定,后续指令将持续更新:
指令 12 - 读取 TS-2000 传感器波长值
主设备发送: 01 0C 00 00 00 00 CB 11
从设备返回: 共 8205 字节 01 AA 55 BB 44 CC 33 DD 22 … … DD DD AA AA
数据量过大不易在此展示,请在附录中查看
响应时间: 3s
指令 13 - 写入 TS-2000 传感器波长系数
主设备发送:
01 0D
00 00 00 00 00 00 00 00
3D B1 7F 1C 7E 71 E7 98
BE 6D 29 79 FF A7 63 0F
3E F3 AA 03 46 F2 1A 6E
3F E5 6F 47 42 CC 1F 27
40 66 BA E8 7E 6E 46 1C
60 DD
从设备返回:
设置成功 01 52 49
设置失败 01 46 41
校验失败 01 43 52 43 45 52
响应时间: 100ms
指令 14 - 查询 TS-2000 传感器波长系数
主设备发送: 01 0E 00 00 00 00 0B 68
从设备返回:
01
00 00 00 00 00 00 00 00
3D B1 7F 1C 7E 71 E7 98
BE 6D 29 79 FF A7 63 0F
3E F3 AA 03 46 F2 1A 6E
3F E5 6F 47 42 CC 1F 27
40 66 BA E8 7E 6E 46 1C
响应时间: 100ms
指令 15 - 写入 TS-2000 传感器能量系数
主设备发送: 01 0F 00 01 4096字节数据 HC LC
从设备返回:
设置成功 01 52 49
设置失败 01 46 41
校验失败 01 43 52 43 45 52
响应时间: 1s
指令 16 - 读取 TS-2000 传感器能量系数
主设备发送: 01 10 00 00 00 00 09 C0
从设备返回: 共 8205 字节 01 AA 55 BB 44 CC 33 DD 22 … … DD DD AA AA
数据量过大不易在此展示,请在附录中查看
响应时间: 3s
更新 1 条 TS-2000 在线水质传感器通信指令,用于提供硬件版本号,后续指令将持续更新:
指令 17 - 读取 TS-2000 传感器硬件版本号 | 此指令报废!!!合并至指令 2 中!!!
主设备发送: 01 11 00 00 00 00 C9 FD
从设备返回:
01
56 31 2E 30 2E 30
A1 6E
有效数据:V1.0.0 (ASCII码转换后)
响应时间: 50ms
注意: 此指令报废!!!合并至指令 2 中!!!
更新 3 条 TS-2000 在线水质传感器通信指令,其中更新了指令 2,另外两条指令用于读取一次指令循环后的吸光度以及MCU复位,后续指令将持续更新:
指令 2 - 读取 TS-2000 传感器设备ID和硬件版本号
主设备发送: 01 02 00 00 00 00 0A 78
从设备返回:
每个 TS-2000 传感器都有固定的唯一版本号
例: 01 54 53 2d 32 30 30 30 2d 30 30 30 30 30 31 2f 56 31 2e 30 2e 30
有效数据: TS-2000-000001/V1.0.0 (ASCII码转换后)
响应时间: 50ms
指令 17 - 读取 TS-2000 传感器一次循环后的光谱数据、吸光度值
主设备发送: 01 11 00 00 00 00 C9 FD
从设备返回: 共 16397 字节 01 AA 55 BB 44 CC 33 DD 22 … … DD DD AA AA
数据量过大不易在此展示,请在附录中查看
响应时间: 预估至少 10s
指令 FF - 复位 TS-2000 传感器MUC电路
主设备发送: 01 FF FF FF FF FF 4A 14
从设备返回: 返回字符串:Will restart the MCU in 1s …
响应时间: 未知
注意: 目前仅可在读取光谱强度数据卡顿时,使用此指令,用来以指令的方式“硬复位”传感器主板电路!!!
更新 2 条 TS-2000 在线水质传感器通信指令,读取和设置传感器光程,光程为 4 字节十六进制数(进制转换)。
指令 18 - 读取 TS-2000 传感器光程
主设备发送: 01 12 00 00 00 00 C9 B9
从设备返回: 01 40 A0 00 00
响应时间: 50ms
指令 19 - 写入 TS-2000 传感器光程
主设备发送: 01 13 XX XX XX XX HC LC
从设备返回:
设置成功 01 52 49
设置失败 01 46 41
校验失败 01 43 52 43 45 52
响应时间: 50ms
更新 1 条 TS-2000 在线水质传感器指令:读取 一次循环后的光谱数据、吸光度值(未经光程处理)
指令 20 - 读取 TS-2000 传感器一次循环后的光谱数据、未经光程处理的吸光度值
主设备发送: 01 14 00 00 00 00 C9 31
从设备返回: 共 16397 字节 01 AA 55 BB 44 CC 33 DD 22 … … DD DD AA AA
数据量过大不易在此展示,请在附录中查看
响应时间: 预估至少 10s
TS-2000 雨刷交互指令
更新 3 条 TS-2000 在线水质传感器辅助设备 - 刷机 通信指令:一次性刷洗;刷洗开始;刷洗停止。
指令 1 - 一次性刷洗镜头
主设备发送: 02 01 00 00 00 00 39 3C
从设备返回:
设置成功 02 52 49
校验失败 02 43 52 43 45 52
响应时间: 2500 ms
指令 2 - 刷洗开始
主设备发送: 02 02 00 00 00 00 39 78
从设备返回:
设置成功 02 52 49
校验失败 02 43 52 43 45 52
响应时间: 50ms
指令 3 - 刷洗停止
主设备发送: 02 03 00 00 00 00 F9 45
从设备返回:
设置成功 02 52 49
校验失败 02 43 52 43 45 52
响应时间: 50ms
计蒙外部通信
本章节介绍 计蒙控制端 - 白泽 与外界通信的方式以及一些拟定好的协议格式,旨在为客户提供通信资料,辅助客户搭建设备间的通信。
TS-2000 - 白泽公共端输出交互指令
在设计的初衷,白泽公共端(3 孔航空插头)只可输出 RS485 信号,所以本小节介绍的是嵌入在白泽内的通信协议。在这里的指令以地址码 0x01 代表演示。
- 注: 未来一个 RS485 公共网络中计蒙 TS-2000 设备的数量多少,决定了地址码的数量。在现阶段,当白泽控制盒为主设备时,最多可容纳 256 个 RS485 通信设备。当白泽控制盒作为中控系统的从设备时,最多可容纳 256 个白泽控制盒。
更新 9 条 白泽公共端输出交互指令(RS485),用于向公网(DCS/PLC/服务器)传输水质参数数据。
COD、TOC、浊度、硝酸盐、亚硝酸盐、BOD、总磷、氨氮、总氮
指令 1 - 发送 每一次循环后计算出的水质参数 - 化学需氧量(COD)
终端控制盒设备发送: 01 01 xx xx xx xx HC LC
响应时间: 预估至少 50ms
指令 2 - 发送 每一次循环后计算出的水质参数 - 总有机碳(TOC)
终端控制盒设备发送: 01 02 xx xx xx xx HC LC
响应时间: 预估至少 50ms
指令 3 - 发送 每一次循环后计算出的水质参数 - 浊度(Turbidity)
终端控制盒设备发送: 01 03 xx xx xx xx HC LC
响应时间: 预估至少 50ms
指令 4 - 发送 每一次循环后计算出的水质参数 - 硝酸盐(NO3-)
终端控制盒设备发送: 01 04 xx xx xx xx HC LC
响应时间: 预估至少 50ms
指令 5 - 发送 每一次循环后计算出的水质参数 - 亚硝酸盐(NO2-)
终端控制盒设备发送: 01 05 xx xx xx xx HC LC
响应时间: 预估至少 50ms
指令 6 - 发送 每一次循环后计算出的水质参数 - 生化需氧量(BOD)
终端控制盒设备发送: 01 06 xx xx xx xx HC LC
响应时间: 预估至少 50ms
指令 7 - 发送 每一次循环后计算出的水质参数 - 总磷(TP)
终端控制盒设备发送: 01 07 xx xx xx xx HC LC
响应时间: 预估至少 50ms
指令 8 - 发送 每一次循环后计算出的水质参数 - 氨氮(NH3-N
终端控制盒设备发送: 01 06 xx xx xx xx HC LC
响应时间: 预估至少 50ms
指令 9 - 发送 每一次循环后计算出的水质参数 - 总氮(TN)
终端控制盒设备发送: 01 09 xx xx xx xx HC LC
响应时间: 预估至少 50ms
RS485 转模拟量(电流/电压信号) 交互协议说明
现因某项目的需求,只可由模拟量输出后接入项目上的 DCS 系统,所以在此进行 RS485 转模拟量输出的协议开发以及说明。
我们购入 RS485转模拟量输出模块,外接后转出 4~20mA / 0~20mA 的模拟量输出,从而适配项目的需求。
模块概述
此模块为 12 位 2 路模拟量输出模块,隔离 RS482 通信接口,Modbus RTU 协议。
- 电源输入 DC 15~36V ,有过流和反接保护。
- 隔离 RS485 通信接口
- Modbus RTU 协议
- 信号接口有静电、雷击、浪涌保护
- 两孔/卡口固定安装
规格参数
模块参数
项目 | 参数 |
---|---|
工作电压 | DC 15~36V |
工作电流 | ≤ 100mA |
输出类型 | 2 路电流模拟量 |
输出量程 | 0~20mA , 4~20mA |
分辨率 | 12 位 |
输出精度 | ± 0.5% |
电流负载电阻 | 400R(max) |
温漂 | ± 25ppm/℃ |
产品尺寸 | 1005432mm |
产品重量 | 75g(净重) 100g(毛重,含配件及盒子) |
使用环境 | -40 ~ 85℃ ,相对湿度 5 ~ 95% |
通讯参数
项目 | 参数 |
---|---|
通信类型 | 隔离性 RS485 (隔离电压 2500V) |
通信协议 | Modbus RTU |
通信距离 | RS485 端有效距离 1200 米,模拟两端根据取压电阻和导线电阻决定 |
波特率 | 1200~115200bps , 默认 9600 (8,n,1) |
其他 | 停止位可设置,校验位可设置 |
保护等级 | RS485 接口每线 600W 的防雷浪涌保护,± 15 KV ESD 保护 |
功能说明
本模块是 RS485 从站设备,最多可接 247 台从站。
1 | 通道 1 输出电流 | 0 ~ 2000 | 0 ~2000 对应 0 ~ 20mA | 输出电流1 |
2 | 通道 2 输出电流 | 0 ~ 2000 | 0 ~2000 对应 0 ~ 20mA | 输出电流2 |
3 | 开路报警 | 0 | 1 和 2 , 没有开路 | 配置软件开路通道显示红色 |
1 | 1 开路,2 没开路 | |||
2 | 2 开路,1 没开路 | |||
3 | 1 和 2 , 开路 | |||
4 | 通道1量程 | 0 | 输出量程 0 ~ 20mA | |
1 | 输出量程 4 ~ 20mA | |||
5 | 通道2量程 | 0 | 输出量程 0 ~ 20mA | |
1 | 输出量程 4 ~ 20mA | |||
6 | 看门狗使能 | 0 | 看门狗关闭 | |
1 | 看门狗启动 | |||
7 | 安全替代值 | 0 ~ 2000 | 写入 0 ~ 20mA | |
8 | 看门狗时间 | 1 ~ 65536 | 写入 1 ~ 65536 秒 | |
9 | 设置设备地址码 | 1 ~ 247 | 写入 1 ~ 65536 秒 | |
10 | 波特率 | 0 | 1200 | 10中波特率 |
1 | 2400 | |||
2 | 4800 | |||
3 | 4800 | |||
4 | 9600 | |||
5 | 14400 | |||
6 | 38400 | |||
7 | 56000 | |||
8 | 57600 | |||
9 | 115200 | |||
11 | 校验位 | 0 | 无校验 | 3个参数 |
1 | 偶校验 | |||
2 | 奇校验 | |||
12 | 停止位 | 0 | 1位停止位 | 2个参数 |
1 | 2位停止位 |
数据规定
目前,我们只用该模块输出水质参数 COD 的数值,采用 4 ~ 20mA 输出模式。
4mA 为对应的最小值 0mg/L ,20mA 为对应的最大值 1600mg/L ,精度为 1 mg/L。
例:
- 4.01mA 表示 1mg/L
- 4.02mA 表示 2mg/L
集成模块
PH 值传感器模块
指令 1 - 查询当前的 PH 数值
终端控制盒设备发送: 03 03 00 00 00 01 85 E8
PH 模块返回值通用数据格式: 03 03 xx xx xx LC HC
其中 03 为地址码,03 为功能码 ,xx 为数据长度,xx xx 为数值,LC HC 为校验码(注意低位高位顺序)。
响应时间: 预估至少 5ms
其中的数据值转换为十进制后÷100,即为当前 PH 值,
例如测得 PH 值为 7.25 的溶液返回值为:03 03 02 02 D5 01 7B