Modbus 协议是一种应用于电子控制器的通用通信规约。是由MODICON公司最先倡导并于1979年开发的,后来逐渐发展成为国际通用的通信标准。在我国,GB/Z 19582《基于Modbus协议的工业自动化网络规范》于2004年9月发布,该指导性技术文件发布后得到了国内自动化产品生产厂家、自动化系统集成商和广大用户的高度关注和重视,并极大地推动了基于Modbus协议的产品的开发和应用。2006年4月,Modbus-IDA国际组织在中国正式授权建立了唯一的MODBUS(中国)产品一致性测试实验室(MCTL),为Modbus技术在中国的全面开发和应用提供了硬件平台支持。
按照全国工业过程测量和控制标准化技术委员会关于建立现场总线标准体系的有关要求,有关部门于2007年11月完成了GB/Z 19582《基于Modbus协议的工业自动化网络规范》标准的修订工作,将作为国家推荐标准上报国家标准化管理委员会,2008年3月国家标准化管理委员会正式批准为GB/T 19582-2008。
2. Modbus的两种传输模式
Modbus的两种传输模式分别是ASCII(美国标准信息交换代码)和RTU(远程终端装置)。用户要实现Modbus网络通信,必须选中一种传输模式并配置串口通信参数(波特率、校验方式等)。在同一个Modbus网络上的所有设备都必须选择相同的传输模式和串口参数。
当消息在标准的Modbus系列网络传输时,每个字符或字节以如下方式发送(从左到右):最低有效位...最高有效位。
2.1 ASCII模式
有奇偶校验:
启始位 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
奇偶位 |
停止位 |
无奇偶校验:
启始位 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
停止位 |
停止位 |
ASCII模式编码说明:
. 每发送一个字节包含:
1个起始位、7个数据位(最小的有效位先发送)、1个奇偶校验位(无校验则无)、1个(有校验时)或2个停止位(无校验时)
. 错误检测采用LRC(纵向冗长检测)
ASCII模式的消息帧结构:
冒号符 |
地址码 |
功能代码 |
数据数量 |
数据1 |
... |
数据n |
LRC高字节 |
LRC低字节 |
回车符 |
换行符 |
2.2 RTU模式
有奇偶校验:
启始位 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
奇偶位 |
停止位 |
无奇偶校验:
启始位 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
停止位 |
停止位 |
RTU模式编码说明:
1个起始位、8个数据位(最小的有效位先发送)、1个奇偶校验位(无校验则无)、1个(有校验时)或2个停止位(无校验时)
. 错误检测采用CRC(循环冗长检测)
当控制器设为在Modbus网络上以RTU模式通信时,在消息中的每个字节(8Bit)包含两个4Bit的十六进制字符。这种方式的主要优点是:在同样的波特率下,可比ASCII方式传送更多的数据。
RTU模式的消息帧结构:
地址 |
功能代码 |
数据数量 |
数据1 |
... |
数据n |
CRC低字节 |
CRC高字节 |
3. Modbus的消息帧结构
3.1 ASCII帧
起始位 |
设备地址 |
功能代码 |
数据 |
LRC校验 |
结束符 |
1个字符 |
2个字符 |
2个字符 |
n个字符 |
2个字符 |
2个字符 |
3.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.3 地址域
消息帧的地址域包含两个字符(ASCII)或8Bit(RTU)。允许的从设备地址范围是十进制的0~247。主设备将要联络的从设备的地址放入消息中的地址域来选通从设备。当从设备发送回应消息时,它把自己的地址放入回应的地址域中,以便主设备知道是哪一个设备作出的回应。
地址0用作广播地址,以使所有的从设备都能认识。当Modbus协议用于更高水准的网络时,广播可能被禁止或以其它方式代替。
3.4 功能域
消息帧中的功能码域包含了两个字符(ASCII)或8Bits(RTU)。可能的代码范围是十进制的1~255。有些功能码适用于所有控制器,有些仅适应用于某种控制器,还有些暂且保留以备后用,参见表1表2。
上一篇:CRC校验原理与程序设计——(RS485总线系统应用之1)
下一篇:Modbus协议的常用基本定义——(RS485总线系统应用之2)续
推荐阅读最新更新时间:2024-05-03 00:01