eXeL@B —› Вопросы новичков —› Вычисление контрольной суммы |
Посл.ответ | Сообщение |
|
Создано: 29 сентября 2017 17:58 · Личное сообщение · #1 Всем доброго дня! Перенесите тему если не по адресу... Ломаю закрытый протокол. Пытаюсь работать с устройством через COM порт. Работа, как обычно для COM представляет собой обмен последовательностями HEX байтов. Сами последовательности я проснифферил, тут проблем нет. Проблема в том, что не удаётся раскусить алгоритм рассчёта контрольной суммы, а без этого весь труд насмарку. Кое-какой систематизации удалось добиться методом раздумий и анализа, считай методом тыка. Может найдётся кто-то головастый в математике и сможет мне помочь? Что нужно предоставить для облегчения помощи? Начну пожалуй так: 0x02, 0x00, 0x30, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x20 0x02 - начало сообщения (по идее отбрасывается) Жирным выделил - 4 значащих байта(они изменяются, что, собственно, и влияет на значение контрольной суммы) Последний байт 0x20- собственно искомая контрольная сумма(всегда 1 HEX byte). Сейчас я пытаюсь двигаться так: вычисляю XOR8+некий коэффициент. По некоему наитию скорее решил что это сработает. К примеру, для: 0x01-0x0f - коэффициент равен +0x10 0x10-1F = +0x30 0x20-2F = -0x30 30-3F = -0x10 И далее всё повторяется циклически(+10+30-30-10) вплоть до FF. Дальше - хуже. Если к примеру заполнены 2 байта из 4, то коэффициент вычисляется по наибольшему значению. Таблица смещений продолжает работать, при условии что один из байтов не превышает 0x0f. Если превышает начинается другая чехарда и так далее. Я понимаю что я не математик и поэтому делаю дурную работу. Может тут всё на самом деле просто? Убеждён, используется определённый алгоритм... |
|
Создано: 29 сентября 2017 18:07 · Поправил: kunix · Личное сообщение · #2 |
|
Создано: 29 сентября 2017 18:17 · Личное сообщение · #3 |
|
Создано: 29 сентября 2017 18:23 · Поправил: kunix · Личное сообщение · #4 |
|
Создано: 29 сентября 2017 18:29 · Личное сообщение · #5 |
eXeL@B —› Вопросы новичков —› Вычисление контрольной суммы |