Вот этот кусок
Код:
IF WORD_TO_BOOL(crc AND 16#0001) THEN crc:= ( SHR(crc, 1) XOR 16#A001);
ELSE crc := SHR(crc, 1); END_IF
... можно упростить:
Код:
crc := SHR(crc, 1) XOR 16#A001 * BOOL_TO_WORD(crc.0);