VAR_TEMP i : Int; j : Int; data_value : Byte; // 需要发送的数据字节 crc_value : Word; flag : Word; END_VAR
BEGIN #crc_value:=16#ffff;//预置CRC寄存器 FOR #j:=0 TO (#length-1) BY 1 DO #data_value:=PEEK(area:=b#16#84, dbNumber:=#db_no, byteOffset:=(#j+#db_offset));//第一个8位二进制数据 #crc_value:= #data_value XOR #crc_value;// 把第一个8位二进制数据(既通讯信息帧的第一个字节)与CRC寄存器相异或 FOR #i:= 0 TO 7 BY 1 DO IF (#crc_value AND 16#0001)=0 THEN//移出位为0,把CRC寄存器的内容右移一位 #crc_value:=SHR(IN:=#crc_value ,N:=1); ELSIF (#crc_value AND 16#0001)=1 THEN//移出位为1,CRC寄存器与多项式A001进行异或,再右移一位 #crc_value:=SHR(IN:=(#crc_value),N:=1)XOR 16#a001; END_IF; END_FOR; END_FOR; #low_crc:=WORD_TO_BYTE(#crc_value AND 16#00ff); #high_crc:=WORD_TO_BYTE(SWAP(#crc_value AND 16#ff00));