- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
附录A
(资料性附录)
循环冗余校验(CRC)算法
CRC校验(CyclicRedundancyCheck)是一种数据传输错误检查方法。本协议采用ANSI
CRC16,简称CRC16,参照HJ212的要求执行。
CRC16码由传输设备计算后加入到数据包中。接收设备重新计算接收数据包的CRC16
码,并与接收到的CRC16码比较,如果两值不同,则有误。
CRC16校验字节的生成步骤如下:
1)CRC16校验寄存器赋值为0xFFFF;
2)取被校验串的第一个字节赋值给临时寄存器;
3)临时寄存器与CRC16校验寄存器的高位字节进行“异或”运算,赋值给CRC16
校验寄存器;
4)取CRC16校验寄存器最后一位赋值给检测寄存器;
5)把CRC16校验寄存器右移一位;
6)若检测寄存器值为1,CRC16校验寄存器与多项式0xA001进行“异或”运算,
赋值给CRC16校验寄存器;
7)重复步骤4~6,直至移出8位;
8)取被校验串的下一个字节赋值给临时寄存器;
9)重复步骤3~8,直至被校验串的所有字节均被校验;
10)返回CRC16校验寄存器的值。
校验码按照先高字节后低字节的顺序存放。
CRC校验算法示例:
/**************************************************************************
函数:CRC16_Checkout
描述:CRC16循环冗余校验算法。
参数一:*puchMsg:需要校验的字符串指针
参数二:usDataLen:要校验的字符串长度
返回值:返回CRC16校验码
/**************************************************************************
unsignedintCRC16_Checkout(unsignedchar*puchMsg,unsignedintusDataLen)
{
unsignedinti,j,crc_reg,check;
crc_reg0xFFFF;
for(i0;iusDataLen;i++){
crc_reg(crc_reg8)^puchMsg[i];
for(j0;j8;j++){
checkcrc_reg0x0001;
20
crc_reg1;
if(check0x0001){
crc_reg^0xA001;
}
}
}
returncrc_reg;
}
示例:
##0218QN20250416085412992;ST22;CNSP03;MN101110000U0244;Flag13;CP
DataTime20250416100500;DevBrandAPI,DevSeriesT100,DevType0111,DevMN101110
000U024401001;i13106-Info1;i13107-Info0.12;i13102-Info1324,i13102-FlagY8F81\r\n,
其中8F81为CRC16校验码,是对数据段:
QN20250416085412992;ST22;CNSP03;MN101110000U0244;Flag13;CPDataTime
20250416100500;DevBran
文档评论(0)