Modbus协议简单总结

MODBUS协议

1.Modbus协议简介

MODBUS是法国MODICON(莫迪康)公司最先倡导的一种通讯规约,经过大多数公司的实际应用,逐渐被认可,成为一种标准的通讯规约,只要按照这种规约进行数据通讯或传输,不同的系统就可以通讯。目前,在RS232/RS485通讯过程中,更是广泛采用这种规约。

当在Modbus网络上通信时,此协议决定了每个控制器须要知道它们的设备地址,识别按地址发来的消息,决定要产生何种行动。如果需要回应,控制器将生成反馈信息并用Modbus协议发出。在其它网络上,包含了Modbus协议的消息转换为在此网络上使用的帧或包结构。这种转换也扩展了根据具体的网络解决节地址、路由路径及错误检测的方法。

2.Modbus协议描述

MODBUS协议定义了一个与基础通信层无关的简单协议数据单元(PDU)。特定总线或网络上的MODBUS协议映射能够在应用数据单元(ADU)上引入一些附加域。启动MODBUS事务处理的主机创建MODBUS应用数据单元。功能码向从机指示将执行哪种操作。

 

图1 通用MODBUS帧

用一个字节编码MODBUS数据单元的功能码域。有效的码字范围是十进制1-255(128-255为异常响应保留)。当从主机向从机设备发送报文时,功能码域通知从机执行哪种操作。

从主机向从机设备发送的报文数据域包括附加信息,从机使用这个信息执行功能码定义的操作。这个域还包括离散项目和寄存器地址、处理的项目数量以及域中的实际数据字节数。

在某种请求中,数据域可以是不存在的(0长度),在此情况下从机不需要任何附加信息。如果在一个正确接收的MODBUS ADU中,不出现与请求MODBUS功能有关的差错,那么从机至主机的响应数据域包括请求数据。如果出现与请求MODBUS功能有关的差错,那么包括一个异常码,从机应用能够使用这个域确定下一个执行的操作。

例如,客能够读一组离散量输出或输入的开/关状态,或者主机能够读/写一组寄存器的数据内容。

当从机对主机响应时,它使用功能码域来指示正常(无差错)响应或者出现某种差错(称为异常响应)。对于一个正常响应来说,从机仅对原始功能码响应。      

主机                                从机

 

图2 MODBUS事物处理(无错误)

对于异常响应,会返回差错码和异常码,差错码=功能码+0X80。

 

图2 MODBUS事物处理(有错误)

3.Modbus协议公共功能码

 

读线圈:

 

错误:

功能码:1个字节 功能码+0x80

异常码1个字节:01 或02 或03 或04

读保持寄存器:

 

写单个线圈:

十六进制值FF00请求输出为ON。十六进制值0000请求输出为OFF。其它所有值均是非法的,并且对输出不起作用。

 

异常相应:

如果从机设备接收到无通信错误的请求,并且可以正常地处理询问,那么从机设备将返回一个正常响应。当出以下情况是被认为是异常响应。

(1)如果由于通信错误,从机没有接收到请求,那么不能返回响应。主机程序将最终处理请求的超时状态。

(2)如果从机接收到请求,但是检测到一个通信错误(奇偶校验、CRC),那么不能返回响应。主机程序将最终处理请求的超时状态。

(3)如果从机接收到无通信错误的请求,但不能处理这个请求(例如,如果请求读一个不存在的输出或寄存器),从机将返回一个异常响应,通知用户错误的本质特性。

异常响应报文有两个与正常响应不同的域:

功能码域:在正常响应中,从机利用响应功能码域来应答最初请求的功能码。所有功能码的最高有效位(MSB)都为0(它们的值都低于十六进制80)。在异常响应中,从机设置功能码的MSB为1。这使得异常响应中的功能码值比正常响应中的功能码值高十六进制80。通过设置功能码的MSB,主机的应用程序能够识别异常响应,并且能够检测异常码的数据域。

数据域:在异常响应中,从机返回数据域中的异常码。这就定义了产生异常的从机状态。

从机和主机通信异常相应的例子:

 

3.Modbus协议两种传输方式

常用的MODBUS通讯规约有两种,一种是MODBUS ASCII,一种是MODBUS RTU。每个设备必须都有相同的传输模式。所有设备都支持RTU模式,ASCII传输模式是选项。

1ASCII传输方式

Modbus串行链路的设备被配置为使用ASCII模式通信时,报文中的每8位字节以两个ASCII字符发送。例:字节0X5B会被编码为两个字符:0x35和0x42进行传送(ASCII编码0x35="5",0x42="B"),这样传输效率会降低。

在ASCII模式,报文用特殊的字符区分帧起始和帧结束。一个报文必须以一个‘冒号’(:)(ASCII十六进制3A)起始,以‘回车-换行’(CRLF)对(ASCII十六进制0D和0A)结束。设备连续的监视总线上的‘冒号’字符。当收到这个字符后,每个设备解码后续的字符一直到帧结束。报文中字符间的时间间隔可以达一秒。如果有更大的间隔,则接受设备认为发生了错误。

 

图1 ASCII报文帧

2RTU传输方式

当设备使用RTU(RemoteTerminalUnit)模式在Modbus串行链路通信,报文中每个8位字节含有两个4位十六进制字符。这种模式的主要优点是较高的数据密度,在相同的波特率下比ASCII模式有更高的传输效率。每个报文必须以连续的字符流传送。

RTU模式每个字节(11位)的格式为:

编码系统:8位二进制

1起始位

8数据位,首先发送最低有效位

1位作为奇偶校验

1停止位

偶校验是要求的,其它模式(奇校验,无校验)也可以使用。为了保证与其它产品的最大兼容性,同时支持无校验模式是建议的(无校验要求2个停止位)。默认校验模式模式必须为偶校验。每个字符或字节均由此顺序发送(从左到右):最低有效位(LSB)...最高有效位(MSB)进行发送。

 

图2RTU模式位序列

由发送设备将Modbus报文构造为带有已知起始和结束标记的帧。这使设备可以在报文的开始接收新帧,并且知道何时报文结束。不完整的报文必须能够被检测到而错误标志必须作为结果被设置。在RTU模式中,报文帧由时长至少为3.5个字符时间的空闲间隔区分。如果两个字符之间的空闲间隔大于1.5个字符时间,则报文帧被认为不完整应该被接收节点丢弃。+

 

图3 RTU报文帧

因此一般来说,通讯数据量少而且主要是文本的通讯则采用MODBUS ASCII规约,通讯数据量大而且是二进制数值时,多采用MODBUS RTU规约,目前大多数设备都采用MODBUS RTU规约。

4.差错检验方法

标准Modbus串行链路的可靠性基于两种错误检验:奇偶校验(偶或奇)应该被每个字符采用,帧检验(LRC or CRC)必须运用于整个报文。

(1)奇偶检验

用户可以配置设备使用偶(要求的)或奇校验,或无校验(建议的)。这将确定每个字符的奇偶位如何设置。无论指定了偶还是奇校验,则数据部分的为1的位的总数被计数(ASCII模式7数据位,RTU8数据位)。而奇偶位会被设置为0或1以使为1的位的总数为偶数或奇数。例如,RTU字符帧的数据为:11000101为1的位的总数为4。如果使用偶校验,帧的奇偶位为0,使为1的位的总数仍然为偶数(4);如果使用奇校验,帧的奇偶位为1,使为1 的位的总数为奇数(

(2)帧检验

在RTU模式,包含一个对全部报文内容执行的,基于循环冗余校验(CRC-Cyclical RedundancyChecking)算法的错误检验域。CRC域检验整个报文的内容。不管报文有无奇偶校验,均执行

在ASCII模式,包含一个对全部报文内容执行的,基于纵向冗余校验(LRC-Longitudinal Redundancy Checking) 算法的错误检验域。LRC检验不包括起始“冒号”和结尾CR LF。

 

 

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Frank范

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

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

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

打赏作者

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

抵扣说明:

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

余额充值