Перейти к содержанию
    

Расчет контрольной суммы в протоколе обмена

Разбираюсь с блоком управления масажной ванны. Уперся в расчет контрольной суммы. Явно XOR или суммирование. Но пока не получяется понять. Может кто наведет на решение? 

02 получается начало пакета. 03 - окончание. После него идет контрольная сумма. В самом протоколе как я понял данные ASCII передаются.

Вот сэмплы:

02 6c 31 30 30 30 30 03 39 45 ( ASII  l100009E)

02 6c 31 31 30 30 30 03 39 44 ( ASII  l110009D)

02 6c 31 32 30 30 30 03 39 43 ( ASII  l120009C)

Еще

02 62 42 30 30 31 31 30 38 03 32 44 (ASII .bB001108.2D)

02 62 43 30 30 31 34 30 38 03 32 39 (ASII .bC001408.29)

02 77 35 03 34 46

02 62 35 03 36 34

Еще. Тут к контрольной сумм 55 добавилось.
02 6c 35 30 30 30 30 30 31 32 41 30 30 03 36 36 55

02 6c 35 03 35 41 02 6c 35 30 30 30 30 30 31 32 41 30 30 03 36 36 55

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

На сайте https://crccalc.com  удобно проверять последовательности на предмет использования распространенных алгоритмов вычисления контрольных сумм.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 11/23/2018 at 10:56 AM, vesago said:

Разбираюсь с блоком управления масажной ванны. Уперся в расчет контрольной суммы. Явно XOR или суммирование. Но пока не получяется понять. 

Да, очевидно, что это сумма. Хорошо видно при сравнении разницы (арифметической) между двумя похожими пакетами.

Следите за руками:

Пакет: 02 6c 31 30 30 30 30 03 39 45

Команда: l1

Параметры: 0x00 0x00

Контрольная сумма: 0x9E

Считаем:

( 0x02 + 0x6c + 0x31 + 0x30 + 0x30 + 0x30 + 0x30 + 0x03 (весь пакет без контрольной суммы) + 0x9E (контролька) ) % 256 == 0

Что такое 0x55 в конце, не знаю. Это точно не подтверждение от второго блока (линия-то одно- или двупроводная?) ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да Вы гений!! Спасибо! Не допетрил я сам. Вижу, что меняется линейно, а подобрать не могу. Хотя ранее имел дело с подобным алгоритмом. Получается так:

02 77 35 03 34 46  (контролька 4F)

((0xFF - ((((((0x02 + 0x77)&0xFF) + 0x35)&0xFF) + 0x03)&0xFF)) + 1) = 0x4F

Проверил на ряде пакетов - сходится. Еще раз -  большое спасибо!

55 - точно наверное на линии плавают уровни. Я сначала смотрел салеалоджиком прямо на входе микросхемы драйвера 485 интерфейса. Почему-то в пассивном состоянии там около 0. Перед передачей пакета уровень подымается до 5в, передается пакет на 19200, потом снова около 0. Не знаю для чего так сделали. Возможно из-за этого кое-где 55 принимает преобраз юсб-485. Ванну смастерили итальянцы. Люди своеобразного мышления :)

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...