编写一个字节数的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生成器多项式

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/392985.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何让CloudStack使用KVM创建Windows实例成功识别并挂载数据盘

问题产生背景: 使用CloudStack KVM组合进行资源池纳管工作,通过ISO镜像文件创建了两个模板: RHEL6U3 64位系统以及WindowsServer2008 R2 SP1 64位系统。然后通过模板创建实例,挂载外接存储,实例启动后,通过…

云计算openstack介绍

转载于:https://www.cnblogs.com/WIU1905/p/11107593.html

**加密解密基础、PKI及SSL、创建私有CA**

进程间通信 socket通信 客户端-->请求--> 路由转发 --> 服务端,取出资源 --> 封装为可响应给客户端的请求报文从接收请求端口发出 SSL/TLS协议的实现 OpenSSL OpenSSL程序组件 1234[rootlocalhost CA]# rpm -ql openssl /usr/lib/libcrypto.so.10 //加…

5.3 上午

观看英语课程——《恋练有词》 学习Linux 转载于:https://www.cnblogs.com/bgd140206110/p/6801164.html

mysql索引随记

为什么80%的码农都做不了架构师?>>> 先了解下Btree:https://my.oschina.net/u/3646190/blog/1593094 为什么每个数据项,即索引字段要尽量的小,比如int占4字节,要比bigint8字节少一半? 通过上面…

c语言写桌面程序unity,Unity和iOS原生界面交互示例

注意上面的Main方法中出现的UnityAppController,该类就是作为控制类来实现Unity在iOS上显示的功能,在Main方法中就是将该控制器作为参数传递,即Main方法之后就会进入该类执行。所以这是我们进入到UnityAppController.mm,来查看该类…

浏览器中插入富文本编辑器

常用的富文本编辑器有CKEditor、UEEditor、TinyEditor、KindEditor等、以下以kindeditor编辑器的使用为例。 1.官网下载KindEditor编辑器http://kindeditor.net/down.php, 当前最新版本为4.1.11,解压缩后放入项目的static目录,作为js插件引用…

获取Extjs文本域中的内容

经常在Ext.select()和Ext.query()等问题上纠结,今天终于有了点新认识: 需求,假设我们的页面上有个panel ,其id为clusterstab_edit_details,这个panel的内部有个textarea,这个textarea的name为editDetails_Description,那么我们有多少方法可以…

Asp.NetCoreWebApi - RESTful Api

REST 常用http动词 WebApi 在 Asp.NetCore 中的实现3.1. 创建WebApi项目.3.2. 集成Entity Framework Core操作Mysql 3.2.1. 安装相关的包(为Xxxx.Infrastructure项目安装)3.2.2. 建立Entity和Context3.2.3. ConfigureService中注入EF服务3.2.4. 迁移数据库3.2.5. 数据库迁移结果…

android动画影子效果,Android TV常用动画的效果,View选中变大且有阴影(手机也能用)...

因为电视屏幕比较大,而我们看电视时距离电视有一定距离,这样就需要动画效果比较明显,这个动画就是应用最广泛的,因为很酷,呵呵,你懂得,看了就知道。效果如下图:public class MainAct…

linux 高可用----keepalived+lvs

什么是高可用? HA(high availability)即高可用性;就是在高可用集群中发生单点故障时,能够自动转移资源并切换服务,以保证服务一直在线的机制。 LVS LVS:(linux virtual server&#…

用户配置相关文件

用户配置相关文件小总结 /etc/passwd 记录用户相关的信息 /etc/shadow 密码影子文件 /etc/group 记录用户组相关的信息 /etc/gshadow 密码影子文件(组密码) /etc/passwd 文件中各段的内容 第1段:用户名 第…

华为5c android n风格,华为荣耀畅玩5C的屏幕怎么样

华为荣耀畅玩5C的屏幕怎么样屏幕方面,华为荣耀畅玩5C采用了5.2英寸1080P级别GFF贴合屏幕,塑料边框采用了弧面状的设计,握感比较舒适。华为荣耀畅玩5C采用了双主天线的设计,分别在上下的塑料区域。此外,边框以及后盖的上…

spring解析配置文件(三)

一、从XmlBeanDefinitionReader的registerBeanDefinitions(doc,resource)开始 1 protected int doLoadBeanDefinitions(InputSource inputSource, Resource resource) 2 throws BeanDefinitionStoreException { 3 try { 4 …

使用kibana和elasticsearch日志实时绘制图表

前言: 此文接的是上篇,上次的内容是,用python操作elasticsearch存储,实现数据的插入和查询。 估计有些人一看我的标题,以为肯定是 logstash kibana elasticsearch的组合。这三个家伙也确实总是勾搭在一块。 其实logst…

android 网络调试 源代码,Android源代码调试环境搭建

我们在调试Android应用程序的时候,有时候遇到一些莫名其妙的问题,因此我们需要查看Android内部是如何调用的。我们都知道Android是一个伟大的开源项目,因此debug的时候肯定是支持源代码级别调试的。采用源代码调试,一方面有利于发…

如何使用HTTP压缩优化服务器

鉴于互联网上的宽带有限,网络管理人员任何旨在加速接入速度的努力都是有价值的。其中的一个方法就是通过HTTP压缩技术实现接入速度的加速,它通过减少在服务器和客户端之间传输的数据量,显著地提高网站的性能。数据压缩本身并不新鲜。但是&…

OpenGL研究3.0 多边形区域填充

OpenGL研究3.0 多边形区域填充 DionysosLai(906391500qq.com)2014-06-22 所谓多边形区域填充。就是将多边形内部区域,所有已相同色块填充。注意:这里讨论的多边形是简单多边形(即不考虑诸如五角星这样的相交多边形)。简单多边形&a…

ping、网络抖动与丢包

基本概念: ping: PING指一个数据包从用户的设备发送到测速点,然后再立即从测速点返回用户设备的来回时间。也就是俗称的“网络延迟” 一般以毫秒(ms)计算 一般PING在0~100ms都是正常的速度,不会有较为明显的卡顿。 测试…

[luoguP2801] 教主的魔法(二分 + 分块)

传送门 以为对于这类问题线段树都能解决,分块比线段树菜,结果培训完才知道线段树是一种特殊的分块方法,有的分块的题线段树不能做,看来分块还是有必要学的。 对于这个题,先分块,然后另开一个数组对于每个块…