Контрольная сумма дополнения 2 - PullRequest
2 голосов
/ 23 апреля 2019

Я пытаюсь реализовать протокол , который использует вычисление определенной контрольной суммы, которую я не могу воспроизвести.

В спецификации сказано, что контрольная сумма должна быть "7 бит, сумма дополнения 2 команды и поля сообщения (m.s.b. = 0) ".

Что, по моему мнению, должно быть возможно рассчитать с помощью:

const data = [0x04, 0x00, 0x10, 0x10, 0x18, 0x57, 0x05]
let sum = 0x00
for (let value of data) {
  sum += value
}
const chk = 256 - sum // OR (~sum + 1) & 0xFF

console.log('0x' + chk.toString(16).padStart(2, '0'))

См. https://repl.it/repls/UntidySpotlessInternalcommand.

Тем не менее, я получаю результат 0x68, а в примере, который я имею, он должен быть 0x78.

Не понимаю ли я что-то с точки зрения вычисления суммы дополнения 2?

Пример взят из успешно выполненной команды, которая отображается в окне консоли, предоставленном производителем.

Example

Разбивается на:

SOM   10 02
CMD   04 (CONNECTED)
DATA  00 10 10 18 57
BTC   05
CHK   78
EOM   10 03

1 Ответ

3 голосов
/ 23 апреля 2019

Вам следует обратиться к производителю.Даже при использовании программного калькулятора и использовании только 7 бит контрольная сумма получается равной 0x68.Я не совсем уверен, что ваш расчет правильный, согласно другому комментарию, он может быть не 7-битным.Но сумма чисел, которые вы указали, в любом случае представляет собой 7-битное число, поэтому в приведенном вами примере это не должно иметь значения.Это может иметь значение для других данных, хотя.Но обязательно свяжитесь с компанией, потому что правильная контрольная сумма, кажется, 0x68.

...