text 使用STL在S7 CPU中计算crc16

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了text 使用STL在S7 CPU中计算crc16相关的知识,希望对你有一定的参考价值。

VAR_INPUT
   DB_NO : INT ; 
   DBB_Start : INT ; 
   DBB_Counts : INT ; 
END_VAR
VAR_OUTPUT
   CRC_H : BYTE ; 
   CRC_L : BYTE ; 
END_VAR
VAR_TEMP
   CRC_REG : WORD ; 
   DB_NO_TEMP : INT ; 
   BytesChecked : INT ; 
   BitsChecked : INT ; 
END_VAR
BEGIN
NETWORK
TITLE =
 
       L     W#16#FFFF; 
       T     #CRC_REG; //预置CRC寄存器
       L     #DB_NO; 
       T     #DB_NO_TEMP; 
       OPN   DB [#DB_NO_TEMP]; 
       L     #DBB_Start; //读入校验起始字节
       SLD   3; 
       LAR1  ; 
 
       L     #DBB_Counts; //读入校验字节数量
 _A:   T     #BytesChecked; //字节处理循环
       L     DBB [AR1,P#0.0]; 
       L     LB     1; 
       XOW   ; 
       T     LB     1; 
 
       L     8; 
 _B:   T     #BitsChecked; //位处理循环
       L     #CRC_REG; 
       SRW   1; 
       T     #CRC_REG; 
       JZ    _C; //检验移出位是否为1
       L     #CRC_REG; 
       L     W#16#A001; 
       XOW   ; 
       T     #CRC_REG; 
 
 _C:   L     #BitsChecked; //校验下个位
       LOOP  _B; 
 
       +AR1  P#1.0; //校验下个字节
       L     #BytesChecked; 
       LOOP  _A; 
 
       L     LB     1; //输出校验码
       T     #CRC_H; 
       L     LB     0; 
       T     #CRC_L; 
END_FUNCTION

以上是关于text 使用STL在S7 CPU中计算crc16的主要内容,如果未能解决你的问题,请参考以下文章

CRC16校验码如何计算

计算 CRC16 (Modbus) 值的函数

计算CRC校验值(CRC16和CRC32)(网络传输检验)

计算 Modbus RTU CRC 16

使用 python 计算 CRC 16

如何用多项式 x16 + x12 + x5 + 1 计算 CRC 16