这篇在简书发过一次,增加了一点内容,尝试一下用CSDN
1 简介
modbus由MODICON公司于1979年开发,是一种工业现场总线协议标准。1996年施耐德公司推出基于以太网TCP/IP的modbus协议:modbusTCP。
Modbus协议是一项应用层报文传输协议,包括ASCII、RTU、TCP三种报文类型。
标准的Modbus协议物理层接口有RS232、RS422、RS485和以太网接口,采用master/slave方式通信。
2 ModbusTCP数据帧
ModbusTCP的数据帧可分为两部分:MBAP+PDU。
2.1 报文头MBAP
MBAP为报文头,长度为7字节,组成如下:
事务处理标识 | 协议标识 | 长度 | 单元标识符 |
---|---|---|---|
2字节 | 2字节 | 2字节 | 1字节 |
事务处理标识 :可以理解为报文的序列号,一般每次通信之后就要加1以区别不同的通信数据报文。
协议标识符 :00 00表示ModbusTCP协议。
长度 :表示接下来的数据长度,单位为字节。
单元标识符 :可以理解为设备地址。
2.2 帧结构PDU
PDU由功能码+数据组成。功能码为1字节,数据长度不定,由具体功能决定。
2.2.1 功能码
modbus的操作对象有四种:线圈、离散输入、输入寄存器、保持寄存器。
- 线圈:PLC的输出位,开关量,在MODBUS中可读可写
- 离散量:PLC的输入位,开关量,在MODBUS中只读
- 输入寄存器:PLC中只能从模拟量输入端改变的寄存器,在MODBUS中只读
- 保持寄存器:PLC中用于输出模拟量信号的寄存器,在MODBUS中可读可写
根据对象