Modbus协议在串行链路上的实现指南

1. 概述

    Modbus串行链路协议是一个主/从协议。该协议位于OSI模型的第二层。

    一个主从类型的系统有一个向向某个“子”节点发出显式命令并处理响应的节点(主节点)。典型的子节点在没有收到主节点的请求时并不主动发送数据,也不与其它子节点通信。

    在物理层,Modbus串行链路系统可以使用不同的物理接口(RS485、RS232)。最常用的是RS485两线制接口。作为附加的选项,也可以实现RS485四线制接口。当只需要短距离的点到点通信时,RS232串行接口也可以使用。

                                   

位于OSI模型第7层的Modbus应用层报文传输协议,提供了连接与总线或网络的设备之间的客户机/服务器通信。在Modbus串行链路上客户机的功能由主节点提供而服务器功能由自己节点。

2. Modbus数据链路层

① Modbus主站/从站协议原理

    Modbus串行链路协议是一个主--从协议。在同一时刻,只有一个主节点连接与总线,一个或多个子节点(最大编号为247)连接于同一个串行总线。Modbus通信总是有主节点发起。子节点在没有收到来自主节点的请求时,从不会发送数据。子节点之间从不互相通信。主节点在同一时刻只会发起一个Modbus事务处理。

主节点以两种模式对子节点发出Modbus请求:

① 在单播模式,主节点以特定地址访问某个子节点,子节点接到并处理完请求后,子节点向主节点返回一个报文(一个应答)

    在这种模式下,一个Modbus事务处理包含2个报文:一个来自主节点的请求,一个来自子节点的应答。

    每个子节点必须有唯一的地址(1到247)这样才能区别于其他节点被独立的寻址。

②在广播模式,主节点向所有的子节点发送请求。

    对于主节点广播的请求没有应答返回。广播请求一般用于写命令。所有设备必须接受广播模式的写功能。地址0是专门用于表示广播数据的。

单播和广播模式的区别在一个多点的结构下(RS485)更加易于理解。

② Modbus帧描述

    Modbus应用协议Ⅰ定义了简单的独立于其下面通信层的协议数据单元PDU

                                

在不同总线或网络的Modbus协议映射在协议数据单元之外引入了一些附加的域。发起Modbus事务处理的客户端构造Modbus PDU,然后添加附加的域以构造适当的通信PDU

                     

    在Modbus串行链路,地址域只含有子节点地址。

合法的子节点地址为十进制的0-247.每个子设备被赋予1-247范围中的地址。主节点通过将子节点的地址放到报文的地址域对子节点寻址。当子节点放回应答时,它将自己的地址放到应答报文的地址域以让主节点知道那个子节点在回答。

功能码指明服务器要执行的动作。功能码后面可跟有表示含有请求和响应参数的数据域。

错误检测域是对报文内容执行“冗余校验”的计算结果。根据不同的传输模式(RTU or ASCII)使用两种不同的计算方法。

3.主站/从站状态图

Modbus由两个不同的子层组成:

    主/从协议

    传输模式(RTU和ASCII模式)

① 主站状态图

                          

Ⅰ 状态“空闲” =无等待的请求。这是电源上电后的初始状态,只有在“空闲”状态请求才能被发送。发送一个请求后,主节点离开“空闲”状态,而且不能同时发送第二个请求。

Ⅱ 当单播请求发送到一个子节点,主节点将进入“等待应答”状态,同时一个临界超时定时启动。这个超时称为“响应超时”。它避免主节点永远处于“等待应答”状态。响应超时的时间依赖具体应用

Ⅲ 当收到一个应答时,主节点在处理数据之前检验应答。在某些情况下,检验的结构可能为错误。如收到来自非期望的子节点的应答,或接收的帧错误。在收到来自非期望子节点的应答时,响应超时继续计时;当检测到镇错误时,可以执行一个重试。

Ⅳ 响应超时但没有收到应答时,则产生一个错误。那么主节点进入“空闲”状态,并发出一个重试请求。重试的最大次数取决于主节点的设置。

Ⅴ当广播请求发送到串行总线上,没有响应从子节点返回。然而主节点需要进行延迟以便使子节点在发送新的请求处理完当前请求。该延迟被称作“转换延迟”。因此,主节点会在返回能够发送另一个请求的“空闲”状态之前,到“等待转换延迟”状态。

Ⅵ 在单播方式,响应超时必须设置到足够的长度以使任何子节点都能处理完请求并返回响应。而广播转换延迟必须有足够的长度以使任何子节点都能只处理完请求而可以接收新的请求。因此,转换延迟应该比响应超时要短。典型的响应超时在9600bps时从1s到几秒。而转换延迟从100ms到200ms

Ⅶ 镇错误包括:  对每个字符的奇偶校验  ;  对整个帧的冗余校验

② 从站状态图

                     

Ⅰ 状态“空闲” = 没有等待的请求。这是电源上电后的初始状态

Ⅱ 当收到一个请求时,子节点在处理请求中要求的动作前检验报文包。不同的错误可以发生于:请求的合适错,非法动作,当检测到错误时,必须想主节点发送应答

Ⅲ 当要求的动作完成后,单播报文要求必须格式化一个应答并发往主节点。

Ⅳ 如果子节点在接受到的帧中间的错误,则没有响应返回到主节点

Ⅴ 任何子节点均应该定义并管理Modbus诊断计数器以提供诊断 信息。通常使用Modbus诊断功能码,可以得到这些计数值。

③ 主站/从站通信时序图

                           

Ⅰ 请求、应答,广播阶段的持续时间依赖于通信特征(帧长度和吞吐量)

Ⅱ  等待和处理阶段的持续时间取决于子节点应用的请求处理时间




猜你喜欢

转载自blog.csdn.net/qq_21815001/article/details/80521889