编写一个字节数的rtu C语言校验程序,Modbus通信协议中CRC校验的快速C语言算法

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

1-780-png_6_0_0_59_453_364_276_862.5_1236-946-0-269-946.jpg

间,它被使用在网络中(显示为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生成器多项式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值