Modbus学习总结

本文详细介绍了Modbus协议的基础知识,包括其作为通用语言的作用、通信模式、协议分类和消息帧结构。重点讲解了ASCII和RTU两种传输模式的区别、优缺点,并探讨了Modbus在TCP/IP环境下的数据帧结构。此外,文章还讨论了Modbus功能码、数据模型、地址分配以及在实际应用中需要注意的事项,如超时设置和稳定性考虑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

               

一、介绍

Modbus 协议是应用于电子控制器上的一种通用语言。通过此协议,控制器相互之间、控制器经由网络(例如以太网)和其它设备之间可以通信。Modbus协议定义了一个控制器能认识使用的消息结构,而不管它们是经过何种网络进行通信的。它描述了一控制器请求访问其它设备的过程,如果回应来自其它设备的请求,以及怎样侦测错误并记录。它制定了消息域格局和内容的公共格式。

Modbus 是一个请求/应答协议。也叫做Slave和Master与Server和Client。
同一种设备在不同领域的不同叫法。
Slave:工业自动化用语;响应请求;
Master:工业自动化用语;发送请求;
Server:IT用语;响应请求;
Client:IT用语;发送请求;
在Modbus中,Slave和Server意思相同,Master和Client意思相同。

 

modbus结构示意图

二、协议分类

ModBus协议是应用层报文传输协议(OSI模型第7层),它定义了一个与通信层无关的协议数据单元(PDU),即PDU=功能码+数据域。     

ModBus协议能够应用在不同类型的总线或网络。对应不同的总线或网络,Modbus协议引入一些附加域映射成应用数据单元(ADU),即ADU=附加域+PDU。目前,

Modbus有下列三种通信方式: 

 1.以太网,对应的通信模式是MODBUS TCP。 

 2.异步串行传输(各种介质如有线RS-232-/422/485/;光纤、无线等),对应的通信模式是MODBUS RTU或MODBUS ASCII。     

 3.高速令牌传递网络,对应的通信模式是Modbus PLUS。

 

ASCII模式

:

地址

功能代码

数据数量

数据1

...

数据n

LRC高4位字节值

LRC低4位字节值

回车

换行

RTU模式

地址

功能代码

数据数量

数据1

...

数据n

CRC高字节

CRC低字节

 所选的ASCII或RTU方式仅适用于标准的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

8Bit

8Bit

n个8Bit

16Bit

T1-T2-T3-T4

 

消息帧的地址域包含两个字符(ASCII)或8Bit(RTU)。可能的从设备地址是0...247 (十进制)。单个设备的地址范围是1...247。主设备通过将要联络的从设备的地址放入消息中的地址域来选通从设备。当从设备发送回应消息时,它把自己的地址放入回应的地址域中,以便主设备知道是哪一个设备作出回应。地址0是用作广播地址,以使所有的从设备都能认识。当Modbus协议用于更高水准的网络,广播可能不允许或以其它方式代替。

应答包中,数据包括了数据字节长度+数据值,请求包中数据只包含数据值。

 Modbus TCP/IP数据帧结构

Modbus TCP/IP数据帧除了TCP已经有的包头外,还有modbus TCP协议数据单元(ADU),包括MBAP帧头以及与RTU数据内容相同的应用数据单元(PDU),地址码除外。


       其中与单纯的TCP/IP或是modbus-RTU相比,多的内容就是一个MBAP报文头:


MBAP报文头定义

       可以看出来,MBAP报文头主要添加了以下附加信息,为了识别是请求还是响应而设置的事务元标识符(2个字节,通常为0,客户端发出的检验信息,服务器端只是需要将这两个字节的内容复制以后再放到回复报文的相应位置就可以)、为了判断协议类型设置的协议标识符(2个字节,0=MODBUS协议)、为了区分可变长度数据帧结束的数据帧长度(从下一个字节起至结束的长度,2个字节)、还有用于标识从站地址的单元标识符(1个字节,即从站地址),与RTU不同的是,从站地址放在了MBAP帧头里。这个里面的2个字节默认都是大端对齐(高字节、低字节)。

PDU单元与MODBUS RTU数据内容基本相同,由于有TCP/IP和链路层(以太网)校验和机制所以去掉了CRC校验码,从站地址也放在了MBAP帧头里。

另外Modbus TCP/IP默认端口为502。 

例子:

Modbus 控制命令为:
00 01 00 00 00 09 04     10 00 00 00 01 02 00 01

       MBAP                                PDU

上述命令可简单的解释为:00 01(事务标识符)00 00(协议标识符)00 09(后续字节数)04(设备标识符,即从站地址)10(功能码,写多个保持寄存器值)00 00(第一个地址,即地址 1)00 01(写寄存器的个数,1个)02(后续所写数据的长度)00 01(具体写的数据)。

Modbus RTU与Modbus TCP读指令对比

 
MBAP报文头
地址码
功能码
寄存器地址
寄存器数量
CRC校验
Modbus RTU
01
03
01 8E
00 04
25 DE
Modbus TCP
00 00 00 00 00 06 00
03
01 8E
00 04

指令的涵义:从地址码为01(TCP协议单元标志为00)的模块0x18E(01 8E)寄存器地址开始读(03)四个(00 04)寄存器。

Modbus RTU与Modbus TCP写指令对比

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值