基于MODBUS协议的CRC编码研究.pdf

基于MODBUS协议的CRC编码研究.pdf

ID:52701662

大小:85.57 KB

页数:3页

时间:2020-03-29

基于MODBUS协议的CRC编码研究.pdf_第1页
基于MODBUS协议的CRC编码研究.pdf_第2页
基于MODBUS协议的CRC编码研究.pdf_第3页
资源描述:

《基于MODBUS协议的CRC编码研究.pdf》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、2007年第9期研究与探讨TAIYUANSCI-TECH文章编号:1006-4877(2007)09-0040-02基于MODBUS协议的CRC编码研究向阳,徐景涛,董鹏永(河南理工大学计算机科学与技术学院,河南焦作454000)摘要:MODBUS协议是工业现场常用的通信协议,它描述3.5个字符时间的传送停顿,接收设备将刷新不完了一个控制器请求访问其他设备的过程,回应来自其他设备整的消息并假定下一字节是一个新消息的地址域;的请求,以及如何侦测并记录错误信息。介绍了ModBus协如果一个新消息在小于3.5个字符时间内接着前个议原理及其CRC编码方

2、法,研究MODBUS协议的CRC编消息开始,接收设备将认为它是前一消息的延续。码,并给出计算上位机16bitModbusCRC编码的程序代码。一帧信息的标准结构见表1。关键词:MODBUS协议;CRC编码;程序代码表1MODBUS_RTU协议的帧结构中图分类号:TP311.5文献标志码:A开始地址域功能域数据域CRC校验结束在通信传输中,接收端收到的信息与发送端发T1-T2-T1-T2-8Bit8Bitn个8Bit16BitT3-T4T3-T4送的信息不可避免地要受到各种干扰的影响,即信号在传输过程中产生了误码,通常采用差错检测控地址域:“主机

3、”是通过把“要联络的从机”制方法来降低误码。在以太网通信中,设置了帧校的地址放入“消息”中的“地址域”,来选择相应验方式(FCS)来检测数据包在传输过程中是否有的“从设备”。“从机”的地址范围是1⋯15(十进错误发生,以控制是否接收。以太网传输协议规制)。定,FCS的校验方法采用是32位的循环冗余校验功能域:有效的编码范围是1⋯255(十进制);码CRC-32(CyclicRedundancyCheck)[1]。“从机”收到的“消息”(发自“主机”)里的“功1ModBus协议能代码”将告诉“从机”,“主机”需要它完成的1.1ModBus-RTU

4、协议动作。例如,读、写一组寄存器的数据内容等。ModBus协议定义了一个控制器能够认识使用数据域:“主机”发给“从机”的“数据域”的消息结构,不管它们通过何种网络进行通信,该中,包含了“从机”要完成“功能域”指示的动作协议制订了消息域的格局和内容的公共格式,并描时所必需的附加信息。如,寄存器地址等。述了一个控制器请求访问其他设备的过程,回应来CRC校验:CRC生成之后,低字节在前,高字自其他设备的请求,以及如何侦测并记录错误信节在后。息。实际的应用中,通信速率为9600b/s,通信时通过ModBus协议,控制器可以在网络(如以帧与帧之间的响应间

5、隔不大于5ms。太网)和其他设备之间完成信息和数据的交换与传2CRC码的计算方法送,使各种不同的可编程顺序控制器(PLC)和2.1CRC校验(错误校验码)RTU(远程终端单元),SCADA,DCS(分散控制在通信中的主机和从机,应用校验码来进行接系统DistributedControlSystem)或与兼容ModBus收信息,并判断传输的信号是否正确。由于电子噪协议的第三方设备之间可以连成工业网络,构建各声的干扰,信息在传输的过程中有可能会出现错种复杂的监控系统,有利于系统的维护和扩展[2]。误,循环冗余校验码(CRC)可以检验主机或从机1.2

6、MODBUS_RTU协议的帧结构在通信数据传送过程中的信息是否有误,如果是错消息发送至少要以3.5个字符时间的停顿间隔误的,数据即可放弃[3]。作为开始。整个消息帧都是有连续的数据流来传ModBus通信协议的CRC(冗余循环校验码)送,如果整个数据流在传送完成之前,出现了超过包含2个字节,即16位二进制数。CRC码由发送设备计算,放置于所发送信息帧的尾部。接收信息收稿日期:2007-08-16;修回日期:2007-08-20的设备再重新计算所接收信息(除CRC之外的部作者简介:向阳(1979-),男,湖南澧县人。2004年6月毕分)的CRC,比

7、较计算得到的CRC是否与接收到的CRC相符,如果两者不相符,则认为数据出错[4]业于燕山大学,硕士,助教。。402007年第9期研究与探讨TAIYUANSCI-TECH1)预置1个16位的寄存器为十六进制FFFF}(即全为1),称此寄存器为CRC寄存器。unsignedintcar_crc(unsignedchar*pty,unsigned2)把第一个8位二进制数据(通信信息帧的charlen)第一个字节)与16位的CRC寄存器的低8位相异{unsignedintcrc;或,把结果放于CRC寄存器。unsignedcharda;3)把CRC寄存

8、器的内容右移一位(朝低位)crc=0xffff;用0填补最高位,并检查右移后的移出位。while(len--!=0)4)如果移出位为0,重复第3步(再

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。