1、Modbus-TCP
Modbus 由 Modicon 公司于 1979 年开发,是一种工业现场总线协议。
1996 年施耐德公司推出基于以太网 TCP/IP 的 Modbus 协议:ModbusTCP。
2、Modbus TCP 协议的使用说明
2.1、Modbus TCP 数据帧
Modbus TCP 的数据帧可分为两部分:MBAP+PDU。
2.2、MBAP 报文头
MBAP 报文的长度为 7 个字节,组成如下:
处理标识 | 协议标识 | 数据长度 | 单元标识符 |
2 字节 | 2 字节 | 2 字节 | 1 字节 |
内容 | 注释 |
处理标识 | 报文的序列号,一般每次通信之后需要加 1 用以区别不同 通信数据报文,2 个字节。 |
协议标识 | 00 00 ,2 个字节,用以表示 Modbus TCP 协议 |
数据长度 | 后续报文的数据长度,2 个字节 |
单元标识符 | 在 Modbus TCP 中,单元标识符对应于 Modbus-RTU 中的设备地址 |
2.3、PDU
PDU 由功能码和数据组成。功能码为 1 字节,数据长度不定,由具体功能码决定。
功能码(编码器使用) | 注释 |
03H | 读保持寄存器 |
04H | 读输入寄存器 |
06H | 写单个保持寄存器 |
10H | 写多个保持寄存器 |
2.4、Modbus TCP/IP 读取编码器位置数据示例
编码器分辨率为 4096/8192:多圈分辨率为 4096,单圈分辨率为 8192。
主站发送报文(16 进制):
00 01 00 00 00 06 01 03 00 00 00 04
根据上面的协议格式从左到右依次为:
00 01 为传输标识符;
00 00 协议标识符(这里是 Modbus TCP 协议);
00 06 报文后边的字节数;
01 单元标识符 ;
03 功能码(读保持寄存器的值);
00 00 寄存器起始地址;
00 04 读取寄存器的个数 (这里读取 4 寄存器,一个寄存器 2 个字节);
从站应答报文(16 进制):
00 01 00 00 00 0B 01 03 08 00 08 D8 DA 00 46 18 DA
从左到右依次为:
00 01 为传输标识符(与请求报文一致);
00 00 协议标识符;
00 0B 报文后边的字节数(11 个字节);
01 单元标识符;
03 功能码;
08 返回数据的字节数;
00 08 为编码器当前位置数据高 16 位–00 00 寄存器的数据(8);
D8 DA 为编码器当前位置数据低 16 位–00 01 寄存器的数据(55514);
编码器当前位置数据为:8*65536+55514=579802;
00 46 为编码器当前圈数–00 02 寄存器的数据(70);
18 DA 为编码器当前单圈数–00 03 寄存器的数据(6362)。
编码器当前位置数据为:70*8192+6362=579802,与上文计算一致
3、通讯例程
3.1与西门子PLC通讯
https://www.ad.siemens.com.cn/productportal/prods/s7-200-smart-portal/200smarttop/smartsms/077.html