版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、CRC的生成循环冗余校验口域为两个字节,包含一个二进制16位值。附加在报文后面 的CRC的值由发送设备计算。接收设备在接收报文时重新计算CRC的值,并将计算 结果于实际接收到的CRC值相比较。如果两个值不相等,则为错误。CRC的计算,开始对一个16位寄存器预装全1.然后将报文中的连续的8位子节 对其进行后续的计算。只有字符中的8个数据位参与生成CRC的运算,起始位,停 止位和校验位不参与口计算。CRC的生成过程中,每个8 -位字符与寄存器中的值异或。然后结果向最低有 效位化58)方向移动6川代)1位,而最高有效位W58)位置充零。然后提取并检查 LSB:如果LSB为1,则寄存器中的值与一个固定
2、的预置值异或;如果LSB为0,则 不进行异或操作。这个过程将重复直到执行完8次移位。完成最后一次(第8次)移位及相关操 作后,下一个8位字节与寄存器的当前值异或,然后又同上面描述过的一样重复8次。 当所有报文中子节都运算之后得到的寄存器中的最终值,就是口.生成CRC的过程为:.将一个16位寄存器装入十六进制FFFF (全1).将之称作口寄存器.将报文的第一个8位字节与16 (点CRC寄存器的低字节异或,结果置于CRC寄存 器.将CRC寄存器右移1位(向LSB方向),MSB充零.提取并检测LSB.(如果LSB为0):重复步骤3 (另一次移位).(如果LSB为1):对CRC寄存器异或多项 式值 0
3、XA001 (1010 0000 0000 0001).可修编.重复步骤3和4,直到完成8次移位。当做完此操作后,将完成对8位字节的完 整操作。.对报文中的下一个字节重复步骤2到5,继续此操作直至所有报文被处理完毕。. CRC寄存器中的最终容为制值.当放置CRC值于报文时,如下面描述的那样,高低字节必须交换。MODBUS协议的口校验子程序代码为方便读者使用乂0口8兆协议,将VC、VB、ASM51环境下MODBUS协议的口校 验子程序代码一并给出,供读者参考。/*CRC Calculation for MODBUS Protocol for VC *数组5代为地址等传输字节,num为字节数,发为
4、6收为5unsigned int mb_crc(BYTE *snd,int num)(int i,j;unsigned int c,crc=0 xFFFFfor (i=0;inum;i )(c=sndi & 0 x00FF;crcFfor(j=0,j=1;crd=0 xA001;)elsecrc=1)return(crc);)unsigned short int CrcCheck(const unsigned char * buffer, const int buffLen)(unsigned short int crcValue = 0;if (!buffer | buffLen 0)(re
5、turn crcValue;)int CRCHi = 0 x0, 0 xC1,0 x81,0 x40, 0 x1,0 xC0, 0 x80, 0 x41,0 x1,0 xC0, 0 x80, 0 x41,0 x0,可修编0 xC1,0 x81,0 x40, 0 x1,0 xC0, 0 x80, 0 x41,0 x0, 0 xC1,0 x81,0 x40, 0 x0, 0 xC1, 0 x81,0 x40, 0 x1,0 xC0, 0 x80, 0 x41,0 x1,0 xC0, 0 x80, 0 x41,0 x0, 0 xC1,0 x81, 0 x40, 0 x0, 0 xC1,0 x81,0
6、 x40, 0 x1,0 xC0, 0 x80, 0 x41,0 x0, 0 xC1,0 x81,0 x40, 0 x1,0 xC0, 0 x80, 0 x41,0 x1,0 xC0, 0 x80, 0 x41,0 x0, 0 xC1,0 x81,0 x40, 0 x1, 0 xC0, 0 x80, 0 x41,0 x0, 0 xC1,0 x81,0 x40, 0 x0, 0 xC1,0 x81,0 x40, 0 x1,0 xC0, 0 x80, 0 x41,0 x0, 0 xC1,0 x81,0 x40, 0 x1,0 xC0, 0 x80, 0 x41,0 x1,0 xC0, 0 x80,
7、 0 x41,0 x0, 0 xC1,0 x81,0 x40, 0 x0, 0 xC1,0 x81,0 x40, 0 x1,0 xC0, 0 x80, 0 x41, 0 x1,0 xC0, 0 x80, 0 x41,0 x0, 0 xC1,0 x81,0 x40, 0 x1,0 xC0, 0 x80, 0 x41,0 x0, 0 xC1,0 x81,0 x40, 0 x0, 0 xC1,0 x81,0 x40, 0 x1,0 xC0, 0 x80, 0 x41,0 x1,0 xC0, 0 x80, 0 x41,0 x0, 0 xC1,0 x81,0 x40, 0 x0, 0 xC1,0 x81
8、,0 x40, 0 x1,0 xC0, 0 x80, 0 x41,0 x0, 0 xC1,0 x81,0 x40, 0 x1,0 xC0, 0 x80, 0 x41,0 x1,0 xC0, 0 x80, 0 x41, 0 x0, 0 xC1,0 x81,0 x40, 0 x0, 0 xC1,0 x81,0 x40, 0 x1,0 xC0, 0 x80, 0 x41,0 x1, 0 xC0, 0 x80, 0 x41,0 x0, 0 xC1,0 x81,0 x40, 0 x1,0 xC0, 0 x80, 0 x41,0 x0, 0 xC1, 0 x81,0 x40, 0 x0, 0 xC1,0
9、x81,0 x40, 0 x1,0 xC0, 0 x80, 0 x41,0 x0, 0 xC1,0 x81, 0 x40, 0 x1,0 xC0, 0 x80, 0 x41,0 x1,0 xC0, 0 x80, 0 x41,0 x0, 0 xC1,0 x81,0 x40, 0 x1,0 xC0, 0 x80, 0 x41,0 x0, 0 xC1,0 x81,0 x40, 0 x0, 0 xC1,0 x81,0 x40, 0 x1, 0 xC0, 0 x80, 0 x41,0 x1,0 xC0, 0 x80, 0 x41,0 x0, 0 xC1,0 x81,0 x40, 0 x0, 0 xC1,
10、 0 x81,0 x40, 0 x1,0 xC0, 0 x80, 0 x41,0 x0, 0 xC1,0 x81,0 x40, 0 x1,0 xC0, 0 x80, 0 x41,0 x1,0 xC0, 0 x80, 0 x41,0 x0, 0 xC1,0 x81,0 x40);int CRCLo = 可修编0 x0, 0 xC0, 0 xC1,0 x1,0 xC3, 0 x3, 0 x2, 0 xC2, 0 xC6, 0 x6, 0 x7, 0 xC7, 0 x5, 0 xC5, 0 xC4, 0 x4, 0 xCC, 0 xC, 0 xD, 0 xCD, 0 xF, 0 xCF, 0 xCE
11、, 0 xE, 0 xA, 0 xCA, 0 xCB, 0 xB, 0 xC9, 0 x9, 0 x8, 0 xC8, 0 xD8, 0 x18, 0 x19, 0 xD9, 0 x1B, 0 xDB, 0 xDA, 0 x1A, 0 x1E, 0 xDE, 0 xDF, 0 x1F, 0 xDD, 0 x1D, 0 x1C, 0 xDC, 0 x14, 0 xD4, 0 xD5, 0 x15, 0 xD7, 0 x17, 0 x16, 0 xD6, 0 xD2, 0 x12, 0 x13, 0 xD3, 0 x11, 0 xD1,0 xD0, 0 x10, 0 xF0, 0 x30, 0 x
12、31,0 xF1,0 x33, 0 xF3, 0 xF2, 0 x32, 0 x36, 0 xF6, 0 xF7, 0 x37, 0 xF5, 0 x35, 0 x34, 0 xF4, 0 x3C, 0 xFC, 0 xFD, 0 x3D, 0 xFF, 0 x3F, 0 x3E, 0 xFE, 0 xFA, 0 x3A, 0 x3B, 0 xFB, 0 x39, 0 xF9, 0 xF8, 0 x38, 0 x28, 0 xE8, 0 xE9, 0 x29, 0 xEB, 0 x2B, 0 x2A, 0 xEA, 0 xEE, 0 x2E, 0 x2F, 0 xEF, 0 x2D, 0 xE
13、D, 0 xEC, 0 x2C, 0 xE4, 0 x24, 0 x25, 0 xE5, 0 x27, 0 xE7, 0 xE6, 0 x26, 0 x22, 0 xE2, 0 xE3, 0 x23, 0 xE1,0 x21,0 x20, 0 xE0, 0 xA0, 0 x60, 0 x61,0 xA1,0 x63, 0 xA3, 0 xA2, 0 x62, 0 x66, 0 xA6, 0 xA7, 0 x67, 0 xA5, 0 x65, 0 x64, 0 xA4, 0 x6C, 0 xAC, 0 xAD, 0 x6D, 0 xAF, 0 x6F, 0 x6E, 0 xAE, 0 xAA,
14、0 x6A, 0 x6B, 0 xAB, 0 x69, 0 xA9, 0 xA8, 0 x68, 0 x78, 0 xB8, 0 xB9, 0 x79, 0 xBB, 0 x7B, 0 x7A, 0 xBA, 0 xBE, 0 x7E, 0 x7F, 0 xBF, 0 x7D, 0 xBD, 0 xBC, 0 x7C, 0 xB4, 0 x74, 0 x75, 0 xB5, 0 x77, 0 xB7, 0 xB6, 0 x76, 0 x72, 0 xB2, 0 xB3, 0 x73, 0 xB1,0 x71,0 x70, 0 xB0, 0 x50, 0 x90, 0 x91,0 x51,0 x
15、93, 0 x53, 0 x52, 0 x92, 0 x96, 0 x56, 0 x57, 0 x97, 0 x55, 0 x95, 0 x94, 0 x54, 0 x9C, 0 x5C, 0 x5D, 0 x9D, 0 x5F, 0 x9F, 0 x9E, 0 x5E, 0 x5A, 0 x9A, 0 x9B, 0 x5B, 0 x99, 0 x59, 0 x58, 0 x98, 0 x88, 0 x48, 0 x49, 0 x89, 0 x4B, 0 x8B, 0 x8A, 0 x4A, 0 x4E, 0 x8E, 0 x8F, 0 x4F, 0 x8D, 0 x4D, 0 x4C, 0
16、x8C, 0 x44, 0 x84, 0 x85, 0 x45, 0 x87, 0 x47, 0 x46, 0 x86, 0 x82, 0 x42, 0 x43, 0 x83, 0 x41,0 x81,0 x80, 0 x40可修编);int i, m;int dCRCHi = 0 xFF;int dCRCLo = 0 xFF;for (i = 0; i buffLen; i+)(m = dCRCLo 八 bufferi;dCRCLo = dCRCHi 八 CRCHim;dCRCHi = CRCLom;)crcValue = dCRCLo + (dCRCHi 8);return crcValu
17、e;)|/*CRC Calculation for MODBUS Protocol for VB*Function mb_crc(ByRef snd() as BYTE,num as integer) as Longcrc_l=crc_h=&HFF可修编for i=1 to num crc_l=crc_l XOR snd(i) forj=1 to 8 if crc_l AND 1 then crc_l=(crc_l -1)/2 if crc_h and 1 then crc_l=crc_l 128 crc_h=(crc_h -1)/2 end ifcrc_l=crc_l XOR &HA0 cr
18、c_h=crc_h XOR &H01 else: crc_l=crc_l/2 if crc_h and 1 then crcl_l=crc_l 128 crc_h=(crc_h -1)/2 else: crc_h=crc_h/2 end if end if next j next imb_crc=crc_l crc_h*256 End Function可修编;CRC Calculation for MODBUS Protocol for ASM51;R1为发送(接收)字节的缓存首地址;R2为发送(接收)字节的字节数(不含制字节),;R3为制校验低位字节,;R4为制校验高位字节,CRC: MOV
19、 A,#0FFHMOV R4,AMOV R3,ACRC1: MOV A,R1XRL A,R3MOV R3,AMOV R2,#08HCRC8: CLR CMOV A,R4RRC AMOV R4,AMOV A,R3RRC AMOV R3,AJNC CRC10MOV A,R3可修编XRL A,#01HMOV R3,AMOV A,R4XRL A,#0A0HMOV R4,ACRC10: DJNZ R2,CRC8INC R1DJNZ CRC1RETLRC的生成纵向冗余校验(LRC)为一个字节,含有8位二进制值。LRC由发送设备计算,并附加LRC到报文。接收设备在接收文时计算LRC,并将计算的结果与在1口接收到的实 际值相比较,如果两个值不相等,则结果为错。LRC的计算,对报文中的所有的连续8位字节相加,忽略任何进位,然后求出其二 进制补码。LRC为一个8位域,那么每个会导致值大于255新的相加只是简单的将域的值在零” 回绕”。因为没有第9位,进位被自动放弃。生成一个LRC的过程为:.不包括起始“冒号”和结束CRLF的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 火鸡场鸡舍建设方案
- 辽宁省葫芦岛市长江卫生中等职业技术学校2024-2025学年高三上学期11月期中英语试题(含答案)
- 2024-2025学年山东省临沂实验中学九年级(上)月考物理试卷(10月份)(含答案)
- 旅游监管栏目方案
- 浙江公务员面试模拟25
- 2021年四川省眉山市中考数学试卷(解析版)
- 基于通yong学习设计原理的特教语文融合教学策略
- 上海市公务员面试真题汇编31
- 吉林行政职业能力模拟5
- 福建公务员面试模拟83
- 2022北京市海淀区初三英语一模试卷(教师版)
- 集体学习制度
- 中国数学发展历史(课堂PPT)
- 道岔线路综合整治施工方案
- 15吨每小时垃圾渗滤液管式超滤技术方案
- 旺角城广场商铺招商代理协议书
- 英语书写标准三线格可A4纸双面打印
- 《基础会计学》教案(共70页)
- 自己编制的表格-两孔箱涵(结构、配筋、裂缝、基底应力)箱涵结构计算(恒载+活载)
- 小型雕刻机结构设计说明书
- 小流量多头泵中文说明书C
评论
0/150
提交评论