ModbusTCP学习笔记

1 简介

modbus由MODICON公司于1979年开发,是一种工业现场总线协议标准。1996年施耐德公司推出基于以太网TCP/IP的modbus协议:modbusTCP。

Modbus协议是一项应用层报文传输协议,包括ASCII、RTU、TCP三种报文类型。

标准的Modbus协议物理层接口有RS232、RS422、RS485和以太网接口,采用master/slave方式通信。

2 帧结构

Modbus定义了一个简单的协议数据单元(PDU):功能码+数据。

功能码 描述 访问类型 PLC地址 数据类型 操作数量
01H 线圈寄存器 00001-09999 单/多
02H 离散输入寄存器 只读 10001-19999 单/多
03H 保持寄存器 40001-49999 单/多
04H 输入寄存器 30001-39999 单/多
05H 线圈寄存器 00001-09999 单个
06H 保持寄存器 40001-49999 多个
0FH 线圈寄存器 00001-09999 多个
10H 保持寄存器 40001-49999 多个

3 事务处理

客户端请求:功能码+数据
服务器正常响应:请求功能码+响应数据
服务器异常响应:异常功能码+异常码,其中异常功能码即将请求功能码的最高有效位置1,异常码指示差错类型

4 ModbusTCP

IANA(Internet Assigned Numbers Authority,互联网编号分配管理机构)给Modbus协议赋予TCP端口号为502,这是目前在仪表与自动化行业中唯一分配到的端口号。

ModbusTCP数据帧
事务处理标识 协议标识 长度 单元标识符 功能码 数据
2字节 2字节 2字节 1字节 1字节 n字节

事务处理标识:一般每次通信之后就要加1以区别不同的通信数据报文。
协议标识符:00 00表示ModbusTCP协议。
长度:表示接下来的数据长度,单位为字节。
单元标识符:设备地址。

ModbusTCP通信过程

1.connect 建立TCP连接
2.准备modbus报文
3.使用send命令发送报文
4.在同一连接下等待应答
5.使用recv命令读取报文,完成一次数据交换
6.通信任务结束时,关闭TCP连接

5 Modbus poll / Modbus slave

modbus poll 和modbus slave是一组modbus仿真软件,可以实现modbus RTU、TCP、串口仿真等。
在modbusTCP中,modbus poll 作为客户端请求数据,modbus slave 作为服务器端处理请求。
使用c语言编写客户端连接modbus slave时,注意数据格式,一条指令一次性发出,否则连接会出错。
Linux C作为客户端连接modbus slave的源码:
链接:https://pan.baidu.com/s/146svXpit0umpk809TV1Sdw 密码:b6gn

参考:
https://wenku.baidu.com/view/c2a9e1cc376baf1ffd4fad5c.html
https://blog.csdn.net/zwxue251/article/details/24154951
https://blog.csdn.net/lakerszhy/article/details/68927178?locationNum=4&fps=1

你可能感兴趣的:(ModbusTCP学习笔记)