Страница 1 из 1

Комплиментарный байт.

Добавлено: Вт окт 03, 2017 06:28:30
icedev
Мяу товарищи.Совсем запутался, наставьте на путь истеный.

Пытаюсь разобраться с протоколом обмена с устройством.
В описании сказано:
Каждый байт пакета ответа между стартовым байтом и ETX дополняется ком-плиментарным байтом (поразрядное инвертирование), а CheckSum вычисляется как ИСКЛЮ-ЧАЮЩЕЕ ИЛИ всех нормальных байт и одного ETX, без учета стартового байта, а также логическое ИЛИ с 0х40.

Формат пакета:
=============
DEL заполнитель
STX стартовый байт
СЕТЕВОЙ АДРЕС
КОМАНДА
ETX стоповые байты
ETX
CheckSum – контрольная сумма
=============


Например ...запрос:

7F 02 21 5E 31 4E 03 03 53

7f это заполнитель
0x02 стартовый байт
0x21 - это адрес устройства
5Е - тот самый комп.байт который я не могу вычислить.
0x31 - команда
4E - тот самый комп.байт который я не могу вычислить.
0x03 - ETX
0x03 - ETX
0x53 - контрольная сумма.CheckSum тоже не понимаю как её получить.

Подскажите как правильно это реализовать.

Re: Комплиментарный байт.

Добавлено: Вт окт 03, 2017 07:10:48
uldemir
Если посылки 7-ми битные, то 0x21 ^ 0x7F = 5E, 0x31 ^ 0x7F = 4E.
^ 0x7F - как раз поразрядно инвертирует 7 младших бит:

Код: Выделить всё

21: 0010 0001 ^
7F: 0111 1111
-----------------
5E: 0101 1110
Далее все нормальные байты и один ETX: 0x21 ^ 0x31 ^ 0x03 = 0x13, затем или с 0x40 даёт как раз 0x53.

Код: Выделить всё

21: 0010 0001 ^
31: 0011 0001
-----------------
10: 0001 0000 ^
03: 0000 0011
-----------------
13: 0001 0011 +
40: 0100 0000
-----------------
53: 0101 0011

Re: Комплиментарный байт.

Добавлено: Вт окт 03, 2017 07:32:44
icedev
[uquote="uldemir",url="/forum/viewtopic.php?p=3197041#p3197041"]Если посылки 7-ми битные, то 0x21 ^ 0x7F = 5E, 0x31 ^ 0x7F = 4E.
^ 0x7F - как раз поразрядно инвертирует 7 младших бит:

Код: Выделить всё

21: 0010 0001 ^
7F: 0111 1111
-----------------
5E: 0101 1110
Далее все нормальные байты и один ETX: 0x21 ^ 0x31 ^ 0x03 = 0x13, затем или с 0x40 даёт как раз 0x53.

Код: Выделить всё

21: 0010 0001 ^
31: 0011 0001
-----------------
10: 0001 0000 ^
03: 0000 0011
-----------------
13: 0001 0011 +
40: 0100 0000
-----------------
53: 0101 0011
[/uquote]

Спасибо тебе добрый человек!