近期因为用到了modbus,看了两天公司代码,有点蒙,周六的时候闲了在网上又搜了下相关的说明。现在清晰明了了。在这里总结下:
1.modbus协议,是在物理层的rs485电气连接的基础上广泛用于工业仪表通信的协议。因为rs485电器上采用了两根差分线来进行传输,因此抗干扰以及对外辐射减小,因此,传输距离更远。
2.modbus通信采用的是主从模式,跟i2c类似,有主设备和从设备之分。modbus支持的设备 32,64,128,256个设备,但是数量的不同好像是跟采用的rs485芯片有关,因该是芯片的参数决定的。
3.modbus有两种传输方式:ASCII 以及 RTU,但是普遍采用的好像还是 RTU 模式,两种方式的数据包结构相同都为 <地址> <功能码> <数据> <校验>。modbus的最大 协议数据单元(Protocol Data Unit)继承于第一次的modbus实现,最大 应用数据单元(Application Data Unit)256bytes限制。因此ADU的大小为253bytes:
RS232 / RS485 ADU = 253 bytes + Server address (1 byte) + CRC (2 bytes) = 256 bytes.
TCP MODBUS ADU = 253 bytes + MBAP (7 bytes) = 260 bytes.
请求 PDU 格式为 {function_code, request_data}
function_code = [1 byte] MODBUS function