论文(基于Modbus的上位机通讯) 下载本文

换也扩展了根据具体的网络解决节地址、路由路径及错误检测的方法。Modbus有两种传输模式,一种是ASCII模式,另一种是RTU模式。当控制器设为在Modbus网络上以ASCI工(美国标准信息交换代码)模式通讯,在消息中的每个s字节都作为两个ASCI工字符发送。这种方式的主要优点是字符发送的时间间隔可达到1秒而不产生错误。本文以RUT模式为例说明。

4.1.2 变频器的Modbus RUT通信

这里所使用的变频器是三菱公司的FR--D700系列,

4.1.2.1 Modbus通信协议描述

1、Modbus通信协议

Modbus协议定义了一个与基础通信层无关的简单协议数据单元(PDU)。特定总线或网络上的Modbus协议映射能够在应用数据单元(ADU)上引入一些附加域。

图 图4-1

启动Modbus事务处理的客户机创建Modbus应用单元。功能码向服务指示将执行哪各操作。

Modbus协议建立了客户机启动的请求格式。

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

向一些功能码加入子功能码来定义多项操作。

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

在某种请求中,数据域可是不存在的(0长度),在此情况下服务器不需要任何附加信息。功能码仅说明操作。

8

如果在一个正确接收的Modbus ADU中,不出现与请求Modbus功能有关的差错,那么服务器至客户机的响应数据域包括请求数据。如果出现与请求Modbus功能有关的差错,那么域包括一个异常码。服务器应用能够使用这个域确定下一个执行的操作。

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

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

图4-2Modbus事务处理(无差错)

对于异常响应,服务器返回一个与原始功能码等同的码,设置该原始功能码的最高有效位为逻辑1.

图4-3 Modbus事务处理(异常响应)

9

2、Modbus主站/从站协议原理

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

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

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

在这个模式,一个Modbus事务处理包含2个报文:一个来自主节点的请求,一个来自子节点的应答。每个子节点必须有唯一的地址(1到247),这样才能区别于其它节点被猪瘟独立的寻址。

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

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

图4-4 单播模式

10

图4-5广播模式

3、 CRC16校验

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

CRC 域作为报文的最后的域附加在报文之后。计算后,首先附加低字节,然后是高字节。CRC高字节为报文发送的最后一个子节。

附加在报文后面的CRC 的值由发送设备计算。接收设备在接收报文时重新计算CRC 的值,并将计算结果于实际接收到的CRC 值相比较。如果两个值不相等,则为错误。

CRC 的计算, 开始对一个16 位寄存器预装全1。然后将报文中的连续的8 位子节对其进行后续的计算。只有字符中的8个数据位参与生成CRC 的运算,起始位,停止位和校验位不参与CRC计算。

CRC 的生成过程中, 每个 8–位字符与寄存器中的值异或。然后结果向最低有效位(LSB)方向

移动(Shift) 1位,而最高有效位(MSB)位置充零。然后提取并检查LSB:如果LSB 为1, 则寄存器中的值与一个固定的预置值异或;如果LSB 为 0, 则不进行异或操作。

这个过程将重复直到执行完8 次移位。完成最后一次(第8 次)移位及相关操作后,下一个8位字节与寄存器的当前值异或,然后又同上面描述过的一样重复8 次。当所有报文中子节都运算之后得到的寄存器忠的最终值,就是CRC。 当 CRC 附加在报文之后时,首先附加低字节,然后是高字节。

11