Modbus分为:
-
-
-
ModbusRTU
RTU
-
远程终端单元
DTU
-
数据传输单元
Modbus设备分为
- Master(Client) 发请求
- Slave(Server)响应 , Modbus支持 247 个Slave,但RS485协议限定为32 个
ModbusRTU请求格式
开头 | 地址段 | 功能码 | 数据段 | 校验码 | 结尾 |
---|
空闲大于等于3.5个字符时间 | 地址段8位 | 功能码8位 | 根据功能码不同而不同 | CRC16 低高8位或高低8位 | 空闲大于3.5个字节时间 |
Modbus功能码 04 读输入寄存器
开头 | 地址段 | 功能码 | 数据段 | 校验码 | 结尾 |
---|
省略 | 比如1(Hex01) | 4(Hex04) | 寄存器开始地址高8位,寄存器开始地址低8位,寄存器数量高8位,寄存器数量低8位,...(寄存器数量*8*2 , 最大125个寄存器) | CRC低8位,CRC高8位 | 省略 |
功能码04 数据段示例
读取从1A地址开始的125(最大)个寄存器
功能码 | 04 |
---|
寄存器开始地址高8位 | 00 |
寄存器开始地址低8位 | 1A |
连续的寄存器数量高8位 | 00 |
连续的寄存器数量低8位 | 7D |
CRC校验码低8位 | YY |
CRC校验码高8位 | XX |
ModbusTCP
Tcp就是在Rtu之前加了6字节,并去掉Rtu最后的CRC
6字节中:
1,2字节是自定义序号, 比如设为 66 88 , 返回的开头也就是 66 88
3,4字节固定为 00 00 表示协议为Modbus
5,6字节表示后面的长度有多少字节
用功能吗03示例
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/8755991dff9d2356911dd810db4c96be.png#pic_center)