15

Помогите рассчитать контрольную сумму

Добрый день!

Имеется монитор с управлением по RS-232.

Не могу понять как рассчитать контрольную сумму. В мануале написано "This value is set so that the bottom eight bits of the sum of all bytes from the byte count to the checksum inclusive are zero.". Как я понял это нижние 8 битов суммы всех байтов от счетчика до контрольной суммы, но не получается. Или я как-то не так складываю(

Помогите рассчитать контрольную сумму Rs232, Bit, Byte, Алгоритм, Длиннопост

Методом подбора контрольной суммы получилось успешно выполнить команду


0x02 0x03 0x01 0x50 0x6E 0x3E


// 00000001 0x01

// 01010000 0x50

// 01101110 0x6E

// 00111110 0x3E


На нее пришел ответ в том же формате


0x02 0x04 0x50 0x01 0x7E 0x22 0x0B


// 01010000 0x50

// 00000001 0x01

// 01111110 0x7E

// 00100010 0x22

// 00001011 0x0B


При ошибочном запросе получаю ответ


0x02 0x04 0x50 0x01 0x05 0x04 0xA2


// 01010000 0x50

// 00000001 0x01

// 00000101 0x05

// 00000100 0x04

// 10100010 0xA2



Простое сложение не дает правильных результатов, CRC тоже не подходит. Помогите найти правильный алгоритм

Правила сообщества

Посты с процессом ремонта создавайте в родительском сообществе pikabu.ru/community/remont.


В этом сообществе, можно выкладывать посты с просьбами о помощи в ремонте электро-техники. Цифровой, бытовой и т.п., а про ремонт картин, квартир, ванн и унитазов, писать в других сообществах :)

Требования к оформлению постов:

1. Максимально полное наименование устройства.

2. Какие условия привели к поломке, если таковые известны.

3. Что уже делали с устройством.

4. Какое имеется оборудование.

5. Ну и соответственно, уровень знаний.

2
Автор поста оценил этот комментарий

Спасибо всем, вы меня очень выручили!!
Проверил, это действительно значение 0x0100 - (0x03 + 0x01 + 0x50 + 0x6E)

1
Автор поста оценил этот комментарий

This value is set so that the bottom eight bits of the sum of all bytes from the byte count to the checksum inclusive are zero

Значение Checksum подбирается так, что нижние 8 бит суммы всех байт, начиная от (byte count) до checksum включительно равны 0


Я бы это поняла так: сложить все байты (не включая checksum) Пусть эта сумма будет X. Далее подобрать checksum так, чтобы X + checksum в результате давало 0
(т.е. при сложении вышло 1 0000 0000)


Но с 0x3E у меня не сошлось, может ошиблась.

Можете пояснить, что обозначают закомментированные строчки?
// 00000001 0x01

// 01010000 0x50

// 01101110 0x6E

// 00111110 0x3E

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Это я расписал в двоичной системе для удобства