Jump to content

    
Sign in to follow this  
vesago

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

Recommended Posts

Разбираюсь с блоком управления масажной ванны. Уперся в расчет контрольной суммы. Явно 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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
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 в конце, не знаю. Это точно не подтверждение от второго блока (линия-то одно- или двупроводная?) ?

Share this post


Link to post
Share on other sites

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

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. Ванну смастерили итальянцы. Люди своеобразного мышления :)

 

 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this