IF RUN THEN
CRCPloy:= 16#A001;
LSBNoZero:= FALSE;
RCRC:= 16#FFFF;
IF((DataLength MOD 2)<>0) THEN
flag:= TRUE;
DataLengthWord:= DataLength/2+1;
ELSE
flag:= FALSE;
DataLengthWord:= DataLength/2;
END_IF;
FOR loop_I:= 0 TO DataLengthWord-1 DO
HiByte:= SHR((CRCData[loop_I] AND 16#FF00),8);
LoByte:= CRCData[loop_I] AND 16#FF;
RCRC:= RCRC XOR HiByte;
FOR shiftCount:= 0 TO 7 DO
Temp:= RCRC AND 16#0001;
IF WORD_TO_INT(Temp)<>0 THEN
LSBNoZero:= TRUE;
ELSE
LSBNoZero:= FALSE;
END_IF;
RCRC:= SHR(RCRC,1);
IF LSBNoZero THEN
RCRC:= RCRC XOR CRCPloy;
END_IF;
END_FOR;
IF(loop_I=(DataLengthWord-1)) AND (flag=TRUE) THEN
CRCLo:= SHR((RCRC AND 16#FF00),8);
CRCHi:= RCRC AND 16#FF;
RETURN;
END_IF;
RCRC:= RCRC XOR LoByte;
FOR shiftCount:= 0 TO 7 DO
Temp:= RCRC AND 16#0001;
IF WORD_TO_INT(Temp)<>0 THEN
LSBNoZero:= TRUE;
ELSE
LSBNoZero:=FALSE;
END_IF;
RCRC:= SHR(RCRC,1);
IF LSBNoZero THEN
RCRC:= RCRC XOR CRCPloy;
END_IF;
END_FOR;
END_FOR;
CRCLo:= SHR((RCRC AND 16#FF00),8);
CRCHi:= RCRC AND 16#FF;
END_IF;