Modbus

Modbus 串行链路协议是一个主-从协议。在同一时刻,只有一个主节点连接于总线,一个或多个子节点 (最大编号为 247 ) 连接于同一个串行总线。 Modbus 通信总是由主节点发起。子节点在没有收到来自主节点的请求时,从不会发送数据。子节点之间从不会互相通信。主节点在同一时刻只会发起一个Modbus 事务处理。
主节点以两种模式对子节点发出 Modbus 请求: 
单播模式
主节点以特定地址访问某个子节点,子节点接到并处理完请求后,子节点向主节点返回一个报文(一个'应答')。在这种模式,一个 Modbus 事务处理包含 2 个报文:一个来自主节点的请求,一个来自子节点的应答。每个子节点必须有唯一的地址 (1 到 247,248~255保留),这样才能区别于其它节点被独立的寻址。 Modbus 主节点没有地址 。
广播模式
主节点向所有的子节点发送请求。对于主节点广播的请求没有应答返回。广播请求一般用于写命令。所有设备必须接受广播模式的写功能。 地址 0 是专门用于表示广播数据的。 
整个消息帧必须作为一连续的流转输
应答包中,数据包括了数据字节长度+数据值,请求包中数据只包含数据值。



一个正确的 MODBUS 响应:响应功能码 = 请求功能码 
MODBUS部分功能码
| 
 代码  | 
 中文名称  | 
 寄存器PLC地址  | 
 位操作/字操作  | 
 操作数量  | 
| 
 01  | 
 读线圈状态  | 
 00001-09999  | 
 位操作  | 
 单个或多个  | 
| 
 02  | 
 读离散输入状态  | 
 10001-19999  | 
 位操作  | 
 单个或多个  | 
| 
 03  | 
 读保持寄存器  | 
 40001-49999  | 
 字操作  | 
 单个或多个  | 
| 
 04  | 
 读输入寄存器  | 
 30001-39999  | 
 字操作  | 
 单个或多个  | 
| 
 05  | 
 写单个线圈  | 
 00001-09999  | 
 位操作  | 
 单个  | 
| 
 06  | 
 写单个保持寄存器  | 
 40001-49999  | 
 字操作  | 
 单个  | 
| 
 15  | 
 写多个线圈  | 
 00001-09999  | 
 位操作  | 
 多个  | 
| 
 16  | 
 写多个保持寄存器  | 
 40001-49999  | 
 字操作  | 
 多个  | 
modbus TCP
例子:
01:
00 00 00 00 00 06 FF 01 00 00 00 01
00 00 00 00 00 04 FF 01 01 00
03(长度0001对应两个字节):
00 00 00 00 00 06 FF 03 00 64 00 01
00 00 00 00 00 05 FF 03 02 02 2B
                    
                
                
            
        
浙公网安备 33010602011771号