CRC校验算法-程序例子
- 格式:docx
- 大小:14.01 KB
- 文档页数:2
变量定义
rtrig1:R_TRIG;
execute: BOOL;
command:ARRAY[0..255] OF BYTE;
number: BYTE;
command_temp: ARRAY [0..255] OF WORD;
CRCHi: WORD;
CRCLo: WORD;
CRC_temp: WORD:=16#FFFF;
i:INT;
j:INT;
k:INT;
result: ARRAY [0..255] OF BYTE;
CRC: WORD;
程序(绿色字体为CRC校验代码)rtrig1(CLK:=execute);
IF rtrig1.Q THEN
CASE command[1] OF
01,02,03,04,05,06: number:=6;
15,16: number:=7+command[6];
END_CASE;
FOR i:=0 TO number BY 1 DO
command_temp[i]:=BYTE_TO_WORD(command[i]);
END_FOR;
FOR j:=0 TO number BY 1 DO
CRCHi:=CRC_temp AND 16#FF00;
CRCLo:=CRC_temp AND 16#00FF;
CRC_temp:=CRCHi OR (CRCLo XOR command_temp[j]);
FOR k:= 0 TO 7 BY 1 DO
IF CRC_temp.0 = 1 THEN
CRC_temp:=SHR(CRC_temp,1);
CRC_temp:=CRC_temp XOR 16#A001;
ELSE
CRC_temp:=SHR(CRC_temp,1);
END_IF;
END_FOR;
END_FOR;
CRC:=(CRCLo*16#0100) OR (CRCHi/16#0100);
ELSE
CRC_temp:=16#FFFF; END_IF;