|
|
@@ -1,161 +0,0 @@
|
|
|
-5. 通信协议
|
|
|
-5.1 通讯基本参数
|
|
|
-编 码
|
|
|
-8 位二进制
|
|
|
-数据位
|
|
|
-8 位
|
|
|
-奇偶校验位
|
|
|
-无
|
|
|
-停止位
|
|
|
-1 位
|
|
|
-错误校验
|
|
|
-CRC(冗余循环码)
|
|
|
-波特率
|
|
|
-4800bit/s、 9600 bit/s 、115200 bit/s可设, 出厂默认为 115200 bit/s
|
|
|
-
|
|
|
-5.2 读取数据帧格式定义
|
|
|
-采用 Modbus-RTU 通讯规约, 格式如下:
|
|
|
-初始结构 >=4 字节的时间
|
|
|
-地址码 = 1 字节
|
|
|
-功能码 = 1 字节
|
|
|
-寄存器起始地址=2字节
|
|
|
-寄存器长度=2字节
|
|
|
-有效字节数=1字节
|
|
|
-数据区 = 2*N 字节(N为读取寄存器个数)
|
|
|
-错误校验 = 16 位 CRC 码
|
|
|
-结束结构 >=4 字节的时间
|
|
|
-地址码: 为PDU RS485串口的地址, 在通讯网络中是唯一的(出厂默认 0x01)。
|
|
|
-功能码: 主机所发指令功能指示, 本PDU对应的功能码 0x03(读取保持寄存器数据)。
|
|
|
-数据区: 数据区是具体通讯数据, 注意 16bits 数据低字节在前!
|
|
|
-CRC 码: 二字节的校验码,多项式X16+X15+X2+1,即0x8005。
|
|
|
-对应的帧结构如下:
|
|
|
-主机问询帧结构:
|
|
|
-地址码
|
|
|
-功能码
|
|
|
-寄存器起始地址
|
|
|
-寄存器长度
|
|
|
-校验码低位
|
|
|
-校验码高位
|
|
|
-1 字节
|
|
|
-1 字节
|
|
|
-2 字节
|
|
|
-2 字节
|
|
|
-1 字节
|
|
|
-1 字节
|
|
|
-从机应答帧结构:
|
|
|
-地址码
|
|
|
-功能码
|
|
|
-有效字节数
|
|
|
-数据一区
|
|
|
-第二数据区
|
|
|
-第 N 数据区
|
|
|
-校验码
|
|
|
-1 字节
|
|
|
-1 字节
|
|
|
-1 字节
|
|
|
-2 字节
|
|
|
-2 字节
|
|
|
-2 字节
|
|
|
-2 字节
|
|
|
-本PDU中读取寄存器起始地址为4000,详细的PDU状态数据段定义详见《寄存器地址表》中读寄存器数据定义。
|
|
|
-
|
|
|
-5.2 写入数据帧格式定义
|
|
|
-采用 Modbus-RTU 通讯规约, 格式如下:
|
|
|
-初始结构 >=4 字节的时间
|
|
|
-地址码 = 1 字节
|
|
|
-功能码 = 1 字节
|
|
|
-寄存器地址=2字节
|
|
|
-数据位 = 2 字节
|
|
|
-错误校验 = 16 位 CRC 码
|
|
|
-结束结构 >=4 字节的时间
|
|
|
-地址码: 为PDU RS485串口的地址, 在通讯网络中是唯一的(出厂默认 0x01)。
|
|
|
-功能码: 主机所发指令功能指示, 本PDU对应的功能码 0x06(写入保持寄存器数据)。
|
|
|
-数据位: 数据区是具体写入数据, 注意 16bits 数据低字节在前!
|
|
|
-CRC 码: 二字节的校验码,多项式X16+X15+X2+1,即0x8005。
|
|
|
-对应的帧结构如下:
|
|
|
-主机问询帧结构:
|
|
|
-地址码
|
|
|
-功能码
|
|
|
-寄存器地址
|
|
|
-数据位
|
|
|
-校验码低位
|
|
|
-校验码高位
|
|
|
-1 字节
|
|
|
-1 字节
|
|
|
-2 字节
|
|
|
-2 字节
|
|
|
-1 字节
|
|
|
-1 字节
|
|
|
-从机应答帧结构:
|
|
|
-写入成功,返回应答帧结构与问询帧结构一致。
|
|
|
-本PDU中写入寄存器起始地址为5000,详细的PDU状态数据段定义详见《寄存器地址表》中写寄存器数据定义。
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-5.4 通讯协议示例以及解释
|
|
|
-5.4.1 读取设备地址 1的通道1 的电压值
|
|
|
-问询帧
|
|
|
-地址码
|
|
|
-功能码
|
|
|
-起始地址
|
|
|
-数据长度
|
|
|
-校验码低位
|
|
|
-校验码高位
|
|
|
-0x01
|
|
|
-0x03
|
|
|
-0x0F 0xA0
|
|
|
-0x00 0x02
|
|
|
-0xFF
|
|
|
-0XB6
|
|
|
-应答帧(例如读到电压为220V)
|
|
|
-地址码
|
|
|
-功能码
|
|
|
-字节数
|
|
|
-寄存器1
|
|
|
-寄存器2
|
|
|
-校验码低位
|
|
|
-校验码高位
|
|
|
-0x01
|
|
|
-0x03
|
|
|
-0x04
|
|
|
-0x5B 0x60
|
|
|
-0x00 0x03
|
|
|
-0x2B
|
|
|
-0x31
|
|
|
-起始地址:4000,即0x0FA0,读取2个寄存器4字节
|
|
|
-电压: 220.000V(保留三位小数),实际对应两个寄存器4字节存储int值 涉及到大小端的问题,当前应答帧的为小端,所以:
|
|
|
-电压220.000V = ((寄存器2) << 16 | (寄存器1)) / 1000.0
|
|
|
-
|
|
|
-
|
|
|
-5.4.1 写入设备地址 1的所有通道的开关状态
|
|
|
-问询帧(设置所有通道打开)
|
|
|
-地址码
|
|
|
-功能码
|
|
|
-寄存器地址
|
|
|
-数据位
|
|
|
-校验码高位
|
|
|
-校验码低位
|
|
|
-0x01
|
|
|
-0x06
|
|
|
-0x14 0x48
|
|
|
-0x00 0x01
|
|
|
-0xCD
|
|
|
-0xEC
|
|
|
-应答帧
|
|
|
-地址码
|
|
|
-功能码
|
|
|
-寄存器地址
|
|
|
-数据位
|
|
|
-校验码高位
|
|
|
-校验码低位
|
|
|
-0x01
|
|
|
-0x06
|
|
|
-0x14 0x48
|
|
|
-0x00 0x01
|
|
|
-0xCD
|
|
|
-0xEC
|
|
|
-
|
|
|
-寄存器地址:5192,即0x1448,写1个寄存器2字节
|
|
|
-所有通道打开数据位:0x0001。
|
|
|
-5.4.2 详细寄存器地址:
|
|
|
-
|