Modbus通信协议中CRC校验的快速C语言算法
2004年第11期 福 建 电 脑 63
Modbus通信协议中CRC校验的快速C语言算法
孟开元
(西安石油大学计算机学院陕西西安710065)
【摘 要】 本文主要讨论了Modbus通信协议的RTU帧格式中常用的错误校验方法,即循环冗余校验法(CRC)。
提出了Modbus协议反转CRC校验的方法,推导了反转CRC校验快速计算表格,并用C语言实现了基于快速查表算法的循环冗余校验程序。
【关键词】 校验算法,循环冗余校验,生成多项式,查表法
1 Modbus协议应用简介
Modicon可编程控制器,既可以在它们之间,也可以和各种网络上其他的设备间进行数据传输。所支持的网络包括Mod2bus和ModbusPlus工业网络,还有标准网络,如MAP和Ether2net。网络通过控制器的接入线或者网络适配器,和Modicon可利用的出口等相连。连接关系图见图1
。
间,它被使用在网络中(显示为T1-T2-T3-T4,如表2)。然后被发送的是第一个域设备地址。联网的设备不断地监控网络总线,包括在‘默认’间隔期间。当第一个域(地址域)被接收到时,每台设备译解它去查找该地址的设备。在最后一个传送的字符后面,一个类似的至少3.5字符时间间隔标志者消息的结束。一个新的消息在这个间隔之后开始。整个消息帧必须作为一连续的数据流被传送。如果超过1.5字符时间的默认间隔在帧结束前发生,2所示2---T4
CRC校验域
8比特
8比特
n38比特
16比特
结束标志
T1-T2-T3-T4
2.3地址域的处理
信息框架的地址领域包括2个字符的ASCII或8个比特的RTU,有效可使用的设备地址是从1到247(十进制)单个的可使用设备被设置在从1到247。一个主地址通过信息地址领域安排从属地址。当从属地址发送响应是,它设置自己的地址在响应领域地址中,让主地址知道从地址正在工作。
地址0被用在通信地址中,这个通信地址所有的从地址都认识。当Modbus协议被用在高级的网络上时,通信不能进行,也不能用别的方法代替。例如,Modbus升级版能用一个被全球
图1 Modbus协议应用框图
共享的数据库。这个数据库能被任意更改。
全部的Modicon控制器应用Modbus数据通信协议。这个
2.4功能域的设置
协议定义了一种信息结构标准,不管信息在何种网络上传输,
信息框架的功能代码域包括两个字符的ASCII或八个字
控制器都可以识别和应用这个结构。它描述了控制器通常接
节的RTU。有效代码范围从1到255(十进制)。当然,一些代
入其他设备的进程,它如何应答别的设备的请求,如何可以检
码能适用所有的Modicon控制器,但是一些代码只可用于某些
查和显示错误。它为信息域的页面格式和内容建立了一个标
模式,并且还有一些被保留供以后使用。各信息传送各子设备
准的格式。
时,功能代码域告诉子设备所要进行哪种运行类别。例如,读
为了分析信息,Modbus协议提供了为Modicon控制器所应
一组不连续线圈或输入端的开/关状态;读一组寄存器的内容;
用的内部标准。在Modbus网络上传输期间,协议决定每个控
写指定线圈或寄存器;或者允许装载,记录,或在子设备中验证
制器如何知道它的设备地址,如何识别信息地址;决定用来操
程序。当子设备反应给主设备时,要用代码域功能显示其他的
作的类型;和提取所有的数据或包含在信息中的其他信息。
正常反应或一些错误发生(称为异常反应)。作为正常响应,子
2 Modbus协议中数据帧格式
设备简单应答原来的功能代码。作为异常反应,子设备返回一
2.1ASCII帧格式
个代码,这个代码等价于原先的功能代码(在字节中最有效的
在ASCII模式中,消息开始于一个‘:’字符(ASCII码为
设置)。除了对例外响应的功能代码修改外,子设备在响应信
3A),结束于一个‘回车/换行’对(CR/LF)(ASCII码为0D和
息数据域里设置一个唯一的代码。这样告诉主设备发生了哪
0A)。联网的设备不断地对‘:’字符监控网络总线。当一个‘:’
类错误,和错误的原因。
被接收到时,每个设备译解它去查找该地址的设备。一个典型
3 RTU错误校验域的内容
的消息帧如表1。
3.1CRC校验域的次序
表1 ASCII消息帧格式
当RTU模式用在字符格式中时,错误校验域包含一个16
开始标志地址域功能域数据域LRC校验域结束标志
比特位,相当两个8位字节的校验值。校验值是对信息内容计
1字符‘:’2字符2字符n字符2字符2字符CRLF算的CRC结果。CRC域被附加在信息最后,作为信息最后的
域。CRC域内低字节被附加在先,跟在后面的是高字节,CRC2.2RTU帧格式
在RTU模式中,消息开始于一个默认的至少3.5字符时高字节被设置为信息的最后。间的间隔。这是最容易被实现的在波特率中作为一多字符时3.2选择CRC生成器多项式