|
|
@@ -0,0 +1,158 @@
|
|
|
+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中写入寄存器起始地址为4500,详细的PDU状态数据段定义详见《寄存器地址表》中写寄存器数据定义。
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+5.4 通讯协议示例以及解释
|
|
|
+5.4.1 读取设备地址 1的通道1 的电压值
|
|
|
+问询帧
|
|
|
+地址码
|
|
|
+功能码
|
|
|
+起始地址
|
|
|
+数据长度
|
|
|
+校验码高位
|
|
|
+校验码低位
|
|
|
+0x01
|
|
|
+0x03
|
|
|
+0x0F 0xAB
|
|
|
+0x00 0x02
|
|
|
+0XB6
|
|
|
+0xFF
|
|
|
+应答帧(例如读到电压为220V)
|
|
|
+地址码
|
|
|
+功能码
|
|
|
+字节数
|
|
|
+寄存器1
|
|
|
+寄存器2
|
|
|
+校验码高位
|
|
|
+校验码低位
|
|
|
+0x01
|
|
|
+0x03
|
|
|
+0x04
|
|
|
+0x00 0x03
|
|
|
+0x5B 0x60
|
|
|
+0x31
|
|
|
+0x2B
|
|
|
+起始地址:4011,即0x0FAB,读取2个寄存器4字节
|
|
|
+电压: 220.000V(保留三位小数),实际对应两个寄存器4字节存储int值220000,因此读取的寄存器中实际值需要除以1000。
|
|
|
+
|
|
|
+5.4.1 写入设备地址 1的所有通道的开关状态
|
|
|
+问询帧(设置所有通道打开)
|
|
|
+地址码
|
|
|
+功能码
|
|
|
+寄存器地址
|
|
|
+数据位
|
|
|
+校验码高位
|
|
|
+校验码低位
|
|
|
+0x01
|
|
|
+0x06
|
|
|
+0x12 0x0A
|
|
|
+0x00 0x01
|
|
|
+0X6D
|
|
|
+0x70
|
|
|
+应答帧
|
|
|
+地址码
|
|
|
+功能码
|
|
|
+寄存器地址
|
|
|
+数据位
|
|
|
+校验码高位
|
|
|
+校验码低位
|
|
|
+0x01
|
|
|
+0x06
|
|
|
+0x12 0x0A
|
|
|
+0x00 0x01
|
|
|
+0X6D
|
|
|
+0x70
|
|
|
+
|
|
|
+寄存器地址:4618,即0x120A,写1个寄存器2字节
|
|
|
+所有通道打开数据位:0x0001。
|
|
|
+
|