CRC校验算法-程序例子

  • 格式:docx
  • 大小:14.01 KB
  • 文档页数:2

下载文档原格式

  / 4
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

变量定义

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;