在其它网络上(象MAP和Modbus Plus)Modbus消息被转成与串行传输无关的帧。
1、ASCII模式
当控制器设为在Modbus网络上以ASCII(美国标准信息交换代码)模式通信,在消息中的每个8Bit字节都作为两个ASCII字符发送。这种方式的主要优点是字符发送的时间间隔可达到1秒而不产生错误。
代码系统
·
十六进制,ASCII字符0...9,A...F
·
消息中的每个ASCII字符都是一个十六进制字符组成
每个字节的位
·
1个起始位
·
7个数据位,最小的有效位先发送
·
1个奇偶校验位,无校验则无
·
1个停止位(有校验时),2个Bit(无校验时)
错误检测域
·
LRC(纵向冗长检测)
2、RTU模式
当控制器设为在Modbus网络上以RTU(远程终端单元)模式通信,在消息中的每个8Bit字节包含两个4Bit的十六进制字符。这种方式的主要优点是:在同样的波特率下,可比ASCII方式传送更多的数据。
代码系统
·
8位二进制,十六进制数0...9,A...F
·
消息中的每个8位域都是一个两个十六进制字符组成
每个字节的位
·
1个起始位
·
8个数据位,最小的有效位先发送
·
1个奇偶校验位,无校验则无
·
1个停止位(有校验时),2个Bit(无校验时)
错误检测域
·
CRC(循环冗长检测)
三、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 ASCII消息帧
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
|
图3 RTU消息帧 |