传感网应用开发(微课版)
上QQ阅读APP看书,第一时间看更新

1.5.4 Modbus的串行消息帧格式

在计算机网络通信中,帧(Frame)是数据在网络上传输的一种单位,一般由多个部分组合而成,各部分执行不同的功能。Modbus通信协议在不同的物理链路上的消息帧是有差异的。本项目主要介绍串行链路Modbus RTU模式的消息帧格式。

1.Modbus RTU模式的消息帧格式

在Modbus RTU模式中,消息的发送与接收以至少3.5字符时间的停顿间隔为标志。

Modbus网络上的各设备都不断地侦测网络总线,计算字符间的间隔时间,判断消息帧的起始点。当侦测到地址域时,各设备都对其进行解码以判断该帧数据是否是发给自己的。

另外,一帧数据必须以连续的字符流来传输。如果在消息帧传输完成之前有超过1.5字符时间的间隔,则接收设备将认为该消息帧不完整。

典型的Modbus RTU模式的消息帧格式如表1-5所示。

表1-5 典型的Modbus RTU模式的消息帧格式

2.消息帧各组成部分的功能

地址域。地址域存放了Modbus消息帧中的从机地址。Modbus RTU模式的消息帧的地址域长度为1个字节。在Modbus网络中,主机没有地址,每个从机都具备唯一的地址。从机的地址范围为0~247,其中地址0作为广播地址,因此从机实际的地址范围是1~247。

在下行帧中,地址域表明只有符合地址码的从机才能接收由主机发送来的消息。上行帧中的地址域指明了该消息帧发自哪个设备。

功能码域。功能码指明了消息帧的功能,其取值范围为1~255(十进制)。在下行帧中,功能码告诉从机应执行什么动作。在上行帧中,如果从机发送的功能码与主机发送的功能码相同,则表明从机已响应主机要求的操作;如果从机没有响应操作或发送出错,则将返回的消息帧中的功能码最高有效位(Most Significant Bit,MSB)置为1(即加上0x80)。例如,主机要求从机读一组保持寄存器时,消息帧中的功能码为0000 0011(0x03),从机正确执行请求的动作后,返回相同的值;否则,从机将返回异常响应报文,其功能码将变为1000 0011(0x83)。

数据域。数据域与功能码紧密相关,用于存放功能码需要操作的具体数据。数据域以字节为单位,长度是可变的。

循环冗余校验(Cyclic Redundancy Check,CRC)。在基于串行链路的Modbus通信中,RTU模式的消息帧的CRC字段由16位(共2个字节)构成,其值是通过对全部报文内容进行循环冗余校验计算得到的,计算对象包括差错校验域之前的所有字节。将CRC码添加进消息帧时,先添加低字节,然后添加高字节,因此,最后一个字节是CRC校验码的高字节。