已知CRC-16校验码的crc校验生成多项式式求用Matlab编程输出结果位CRC校验码表输出结果如图

这几天一个朋友在一个现场调试┅个工业控制项目由于临时更换设备使得原来已经编写好的底层通讯程序不得不重新编写,通讯协议也进行了很大的更改新设备采用標准的Modubs-RTU协议进行数据的通讯。Modubs协议是一种广泛使用的协议采用16位CRC校验。朋友在校验这里出了问题由于现场查找资料等信息不方便委託我将一系列的字节数据(发送命令报文)进行校验然后将校验结果回复他。为了方便起见我写了一个专门用于Modubs协议通讯校验的16位CRC校验程序给他。程序虽然比较简单但是中间的数据类型转换,进制转换以及计算校验等觉得可能对正在寻求这个方面信息的人有帮助所以放上来供大家共同研究一下!^_^

    随着计算机技术的不断发展,在现代工业中利用微机进行数据通讯的工业控制应用得也越来越广泛。由于傳输距离、现场状况等诸多可能出现的因素影响计算机与受控设备之间的通讯数据常会发生无法预测的错误。为了防止错误所带来的影響一般在通讯时采取数据校验的办法,而循环冗余码校验是最常用的校验方法之一循环冗余码校验原理循环冗余码校验英文名称为Cyclical

这樣我们可以定制一个计算CRC校验的界面了。由于针对Modubs的一个DemoModubs发送命令格式为:地址,功能码读寄存器高地址,读寄存器低地址读取字節个数高地址,读取字节个数低地址校验低,校验高所以我们定制的界面运行如下:


我们来编写一个从界面获得CString类型十六进制数据转換成为int类型的函数封装以及方向函数封装。

计算按钮触发计算处理可以为:

CRC16位校验应用在通讯的各个方面这个Demo中距离了CRC校验的实现和调鼡,这里调用实现了长度为6的校验结果计算同时我们可以使用这个计算校验函数完成更多长度的CRC校验。由于时间比较仓促中间有很多嘚小bug或者不足,希望有问题和我探讨我的联系方法是:

更多技术文章请参看施昌权的个人网站:

我要回帖

更多关于 crc校验生成多项式 的文章

 

随机推荐