Modbus消息帧


一、Modbus消息帧

串口通信消息帧

在串口传输模式中(ASCII或RTU),传输设备以将Modbus消息转为有起点和终点的帧,这就允许接收的设备在消息起始处开始工作,读地址分配信息,判断哪一个设备被选中(广播方式则传给所有设备),判知何时信息已完成。部分的消息也能侦测到并且错误能设置为返回结果。

1.ASCII帧

使用ASCII模式,消息以冒号(:)字符(ASCII码 3AH)开始,以回车换行符结束(ASCII码 0DH,0AH)。

其它域可以使用的传输字符是十六进制的0…9,A…F。网络上的设备不断侦测“:”字符,当有一个冒号接收到时,每个设备都解码下个域(地址域)来判断是否发给自己的。
消息中字符间发送的时间间隔最长不能超过1秒,否则接收的设备将认为传输错误。一个典型消息帧如下所示:

起始位 设备地址 功能代码 数据 LRC校验 结束符
1个字符 2个字符 2个字符 n个字符 2个字符 2个字符

2.RTU帧

使用RTU模式,消息发送至少要以3.5个字符时间的停顿间隔开始。在网络波特率下多样的字符时间,这是最容易实现的(如下图的T1-T2-T3-T4所示)。传输的第一个域是设备地址。可以使用的传输字符是十六进制的0…9,A…F。网络设备不断侦测网络总线,包括停顿间隔时间内。当第一个域(地址域)接收到,每个设备都进行解码以判断是否发往自己的。在最后一个传输字符之后,一个至少3.5个字符时间的停顿标定了消息的结束。一个新的消息可在此停顿后开始。

整个消息帧必须作为一连续的流转输。如果在帧完成之前有超过1.5个字符时间的停顿时间,接收设备将刷新不完整的消息并假定下一字节是一个新消息的地址域。同样地,如果一个新消息在小于3.5个字符时间内接着前个消息开始,接收的设备将认为它是前一消息的延续。这将导致一个错误,因为在最后的CRC域的值不可能是正确的。一典型的消息帧如下所示:
起始位 | 设备地址 | 功能代码 | 数据 |CRC校验 |结束符
-|-|-|-|-|-
T1-T2-T3-T4|1个字节|1个字节|0-255个字节| 2个字节 |T1-T2-T3-T4

举例

现有一ModbusRTU协议的温湿度传感器
1.03功能读取数据,06功能写入设置数据
2.数据格式:9600,N,8,1(9600bps,无校验,8位数据位,1位停止位)
3.协议格式说明(数据都是16进制):
4.读操作

设备地址 功能码 数据地址 读取数据个数 16CRC码(低前高后)
主机命令 设备地址 03 00 00 00 02 CRC0 CRC1
设备地址 功能码 数据字节 温度 湿度 16CRC码(低前高后)
丛机返回 设备地址 03 04 T_hi T_lo R_hi R_lo CRC0 CRC1
现在传感器的通讯设备地址为01,此时CRC0=C4,CRC1=0B,那么此时发送命令如下: 发送:01 03 00 00 00 02 C4 0B 返回:01 03 04 00 F8 01 77 3A 74 00 F8为温度,转化为十进制为248 01 77为湿度,转化为十进制为375 5.写操作
设备地址 功能码 数据地址 新地址 16CRC码(低前高后)
主机命令 设备地址 06 00 0F 00 09 CRC0 CRC1
设备地址 功能码 数据地址 新地址 16CRC码(低前高后)
丛机返回 设备地址 06 00 0F 00 09 CRC0 CRC1
如果将01地址修改为09地址: 发送: 01 06 00 0F 00 09 79 CF 返回: 01 06 00 0F 00 09 79 CF

TCP协议消息帧

Modbus TCP的协议构成可以分为, 报文头, 功能码, 数据码 这几个部分

结构 名称 长度 示例 备注
报头文 事务处理标识符 2个字节 97
79
客户机发起,服务器复制,用于事务处理配对,可以自行设定
协议标识符 2个字节 00
00
客户机发起,服务器复制,表示该协议是TCP协议,是固定值,不可以更改
长度标识符 2个字节 00
06
表示该数据帧中,从本子节到最后一个字节的字节个数,根据当前数据帧的情况设定
单元标识符 1个字节 03 客户机发起,服务器复制,这是一个站点号,在多设备通讯时,用来表示该数据的来源于哪个设备或者该数据要去往哪个设备
功能码 功能码 1个字节 05 05表示对线圈进行写操作
数据码 线圈地址 2个字节 00
10
表示对地址为17的线圈进行操作
操作命令 2个字节 FF
00
FF 00 表示将该线圈置1,00 00 表示将该线圈置0

ModbusTCP消息帧与串行链路消息帧的区别

MODBUS TCP和MODBUS RTU的差别不是很大。二者相同的地方是应用数据单元是一致的。差别是MODBUS TCP是传输在TCP/IP网络上的,多了一个报文头,少了CRC校验,采用TCP的502端口,RTU多了设备地址和CRC校验。


文章作者: niww
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 niww !
 上一篇
ThingsBoard网关之Modbus设备模拟采集 ThingsBoard网关之Modbus设备模拟采集
本篇介绍下如何使用ModbusSlave/ModbusPoll模拟ModbusRTU与ModbusTCP协议并与TB的Python网关对接。 1.准备工具1.ModbusPoll(链接: https://pan.baidu.com/s/1c
2020-06-11
下一篇 
Modbus介绍 Modbus介绍
1.简介:Modbus是一种通信协议,用于不同厂商之间的设备交换数据Modbus是一种串行通信协议,是Modicon公司(现在的施耐德电气 Schneider Electric)于1979年为使用可编程逻辑控制器(PLC)通信而发表。Mod
2020-06-09
  目录