2023归纳总结Modbus通信协议

305 阅读4分钟

Modbus

总线通信协议、是一种应用层的报文传输协议

Modbus-RTU(常用)、Modbus-ASCII、Modbus-TCP

通讯模式:主从方式通信,不能同步进行通信

 

Modbus-RTU协议

帧结构 = 地址(占一个字节) + 功能码(占一个字节) + 数据地址 + 寄存器数量 + CRC校验码

功能码:01 读线圈寄存器 02 读离散输入寄存器 03代表查询 04 读输入寄存器 06代表修改 10代表连续修改

 

例如查询功能码03:

主机发送:01 03 00 00 00 01 84 0A

从机发送:01 03 02 19 98 B2 7E

分析主机:

01 代表从机地址,也就是传感器地址

03 功能码 代表查询功能,查询传感器的数据

00 00 代表查询的起始寄存器的地址,从0x0000开始查询

01 代表查询寄存器的数量:1个

84 0A 代表CRC校验码 从首个字节开始到84前面为止

分析从机:

01 代表这个传感器的地址

03 功能码 代表查询功能,查询传感器的数据 这里主机与从机必须保持一致,否则数据有问题

02 代表后面数据的字节数

19 98 代表01这个寄存器的数据值

B2 7E 代表CRC校验码 从首个字节开始到B2前面为止

 

例如修改功能码06:

主机发送:01 06 00 00 00 01 48 0A

从机发送:01 06 00 00 00 01 48 0A

分析主机:

01 代表从机地址,也就是传感器地址

06 功能码 代表修改单个寄存器功能

00 00 代表查询的起始寄存器的地址,从0x0000开始修改

00 01 代表修改的值为 00 01

48 0A 代表CRC校验码 从首个字节开始到48前面为止

分析从机:

跟主机一致

 

归纳:

03-主机发送起始地址+寄存器数量,从机回复总字节数+数据

06-主机发送起始地址+数据内容,从机返回起始地址+数据内容

10-主机发送起始地址+寄存器个数+总字节数+数据,从机返回起始地址+寄存器数量

 

Modbus-ACSII协议

ASCII码虽然效率不如RTU,但是RTU是16进制发送,显示屏显示不出,会出现乱码,所以为了方便调试显示,而选择ACSII

帧形式:起始(1字符) + 地址(2字符) + 数据 + LRC(2字符) + 结束(2字符 CR,LF)

 

Modbus-TCP协议

数据帧分为:MBAP+PDU

 

报文头MBAP:长度为7字节

事务处理标识(2字节) + 协议标识(2字节) + 长度(2字节) + 单元标识符(1字节)

事务处理标识:报文的序列号,一般每次通信后要加1以区别不同的通信数据报文

协议标识:00 00表示Modbus TCP协议

长度:表示接下来的数据长度,单位为字节

单元标识符:可以理解为设备地址

 

帧结构PDU

由功能码+数据组成,功能码为1字节,数据长度不定,由具体功能决定

Modbus的操作对象有四种:线圈、离散输入、保持寄存器、输入寄存器

线圈:PLC的输出位,开关量,在Modbus中可读可写

离散量:PLC的输入位,开关量,在Modbus中只读

输入寄存器:PLC中只能从模拟量输入端改变的寄存器,在Modbus中只读

保持寄存器:PLC中用于输出模拟量信号的寄存器,在Modbus中可读可写

 

通信方式:

主站为client端,主动建立连接,从站为server端,等待连接

主站请求:功能码+数据

从站正常响应:请求功能码+响应数据

从站异常响应:异常功能码+异常码,其中异常功能码即将请求功能码的最高有效位置1,异常码指示差错类型

 

通信过程

1、connect建立TCP连接

2、准备Modbus报文

3、使用send命令发送报文

4、在同一连接下等待应答

5、使用recv命令读取报文,完成一次数据交换

6、通信任务结束时,关闭TCP连接