Modbus学习总结

一、介绍

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

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

 

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

  • 44
    点赞
  • 261
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
Freemodbus Slave是一种开源的MODBUS通信协议从站实现,用于在工业自动化系统中实现与主站的通信。下面是关于Freemodbus Slave学习的一些建议。 首先,要了解MODBUS通信协议的基础知识。MODBUS是一种常用的用于工业领域的通信协议,它定义了从站和主站之间的通信规则和数据格式。学习MODBUS的基础知识可以帮助理解Freemodbus Slave的实现原理。 其次,阅读Freemodbus Slave的文档和用户手册。官方提供了详细的文档和用户手册,其中包含了安装、配置以及使用Freemodbus Slave的详细说明。仔细阅读这些文档可以帮助理解Freemodbus Slave的各个功能和参数设置。 然后,实践操作和编程。使用开发板或者模拟器,将Freemodbus Slave添加到自己的工程中进行实验和测试。通过实践操作和编程,可以更好地理解Freemodbus Slave的使用方法和功能。 此外,参考社区和论坛的资源。Freemodbus有一个积极的开发者社区,这里有很多经验丰富的开发者和用户分享他们的经验和解决方案。在这些社区和论坛中进行交流和讨论,可以获得更多关于Freemodbus Slave的学习资源和帮助。 最后,不断练习和提升。通过不断实践和使用Freemodbus Slave,深入了解其各种功能和使用场景。并且保持学习的态度,关注最新的更新和发布,不断提高自己的技能和知识。 总结来说,学习Freemodbus Slave需要掌握MODBUS通信协议的基础知识,阅读官方文档和用户手册,进行实践操作和编程,参考社区和论坛的资源,持续练习和提升。通过这些步骤,可以逐渐掌握Freemodbus Slave的使用方法和技巧。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

byxdaz

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值