Благодаря пользователю Валенок получилось вычислить КС. Немного поправил, как мог.
Код:FUNCTION crc16Calc : WORD VAR_INPUT buffer : POINTER TO ARRAY[0..16] OF BYTE; n : INT; END_VAR VAR i : INT; crc1, crc2, tmp : BYTE; END_VARЗапрос/ответКод:crc1 := crc2 := 16#FF; i := 0; WHILE i < n DO crc2 := crc2 XOR buffer^[i]; tmp := ((ROL(crc2,4) OR ROR(crc2,4)) AND 16#0F) XOR crc2; crc2 := crc1; crc1 := tmp; tmp := (ROL(tmp,4) OR ROR(tmp,4)) AND 16#F0; crc2 := crc2 XOR tmp; tmp := SHL(tmp,1) XOR crc1; crc1 := SHR(crc1, 3); crc2 := crc2 XOR crc1; crc1 := tmp; i := i + 1; END_WHILE crc16Calc := crc2 + SHL(BYTE_TO_WORD(crc1), 8);
[22/05/2021 12:00:56] Written data (COM4)
03 00 02 03 49 1d ....I.
[22/05/2021 12:00:56] Read data (COM4)
03 00 02 6a b4 92 ...jґ’
1 байт - адрес устройства
2 байт - адрес устройства (пусто)
3 байт - регистр управления ключом
4 байт - регистр состояния 6 дискретных входов
5,6 КС
Из описания
4.jpg
Теперь надо осуществить процедуру обмена. Уф, это ещё неделю сидеть буду. А потом ещё циклический опрос 15 устройств.




Ответить с цитированием