
本通信协议采用标准ModBus协议,采用RTU(十六进制数)传输模式。ModBus协议是一种主---从式协议。任何时刻只有一个设备能够在线路上进行发送。由主站管理信息交换,且只有主站能发起。主站会依次对从站进行轮流查询。只有当从站地址与轮询地址相匹配,从站才能回复消息。从站之间不能进行直接通信。协议桢中不包含任何消息报头及消息结束符,消息的开始和结束依靠间隔时间来识别,当间隔时间长于或等于3.5个字符时,即作为检测到桢结束。如果网络内没有与查询地址相一致的从站或从站接收时CRC校验出错,主站将不会接收到返回桢,这时主站根据超时设定判断是否超时,如超时,作出重发或弹出异常错误窗口动作。
协议桢定义如下:
| 从站地址 | 功能代码 | 数据区 | CRC16 |
在同个主站网络中每个从站地址必须唯一。
设定仪表二级参数DE。
功能代码:包含读、写多个寄存器。
数据: 以二进制代码传输。
CRC16: 循环冗余校验,校验从从站地址到数据区最后一个字节,计算多项式码为A001(hex)。
通讯口设置
通讯方式 异步串行通讯接口,如RS-485,RS-232,RS-422等
波特率 1200~9600bps(可由设定仪表二级参数自由更改,设定仪表二级参数BT,默认9600)见表10
字节数据格式 HEX
. 一位起始位
. 八位数据位
. 一位停止位
. 无校验
| 1 | * | * | * | * | * | * | * | * | 1 |
消息桢格式 (读、写功能是从主站角度定义的)
读寄存器桢
| 从站地址 | 功能代码 | 首寄存器地址 | 寄存器数N | CRC16 |
| 1字节 | 1字节 | 2字节 | 2字节 | 2字节 |
| 1---247 | 03H | AddrH, AddrL | NH, NL (1---24) | CrcL, CrcH |
| 从站地址 | 功能代码 | 字节数 | 寄存器数据 | CRC16 |
| 1字节 | 1字节 | 1字节 | N*2字节 | 2字节 |
| 1---247 | 03H | N*2 | DataH, DataL | CrcL, CrcH |
| 从站地址 | 功能代码 | 首寄存器地址 | 寄存器数N | 字节数 | 寄存器数据 | CRC16 |
| 1字节 | 1字节 | 2字节 | 2字节 | 1字节 | N*2字节 | 2字节 |
| 1---247 | 10H | AddrH, AddrL | NH, NL 1---24 | N*2 | DataH, DataL | CrcL, CrcH |
| 从站地址 | 功能代码 | 首寄存器地址 | 寄存器数N | CRC16 |
| 1字节 | 1字节 | 2字节 | 2字节 | 2字节 |
| 1---247 | 10H | AddrH, AddrL | NH, NL 1---24 | CrcL, CrcH |
| 从站地址 | 功能代码 | 错误代码 | CRC16 |
| 1字节 | 1字节 | 1字节 | 2字节 |
| 1---247 | 查询功能代码+80H | 见表2 | CrcL, CrcH |
| 功能代码 | ModBus名 | 功能名 | 广播 | 一次连续的N的最大值 |
| 03H | Read Holding Registers | 读N个寄存器值 | No | 24 |
| 10H | Write Multiple Registers | 写N个寄存器值 | No | 24 |
| 错误代码 | 说明 |
| 1 | 寄存器长度超限 |
| 2 | 寄存器地址超限 |
| 3 | 从站密码保护 |
| 4 | 读或写不允许 |
03,16命令对应的保持寄存器地址表,一共有17个参数。
| 序号 | 寄存器 地址 (DEC) | 参 数 名 称 | 数据格式 | 类型 | 备注 |
| 1 | 00 | 测量通道信号类型 | Char | 读写 | 最多26种信号类型,0~25 |
| 2 | 01 | 测量通道小数点 | Char | 读写 | 0~3 |
| 3 | 02 | 测量通道量程下限 | Float | 读写 | 全量程 |
| 4 | 04 | 测量通道量程上限 | Float | 读写 | 全量程 |
| 5 | 06 | 测量通道测量值 | Float | 只读 | |
| 6 | 08 | 第1路报警方式 | Char | 读写 | 0~2 |
| 7 | 09 | 第1路报警值 | Float | 读写 | 全量程 |
| 8 | 11 | 第1报警状态 | Char | 只读 | 0:无报警,1:有报警 |
| 9 | 12 | 第2路报警方式 | Char | 读写 | 0~2 |
| 10 | 13 | 第2路报警值 | Float | 读写 | 全量程 |
| 11 | 15 | 第2报警状态 | Char | 只读 | 0:无报警,1:有报警 |
| 12 | 16 | 第3路报警方式 | Char | 读写 | 0~2 |
| 13 | 17 | 第3路报警值 | Float | 读写 | 全量程 |
| 14 | 19 | 第3报警状态 | Char | 只读 | 0:无报警,1:有报警 |
| 15 | 20 | 第4路报警方式 | Char | 读写 | 0~3 |
| 16 | 21 | 第4路报警值 | Float | 读写 | 全量程 |
| 17 | 23 | 第4报警状态 | Char | 只读 | 0:无报警,1:有报警 |
