1

Тема: Реализация 8ми битной XOR суммы

Здравствуйте! Стоит задача по протоколу NMEA 0183 передавать скорость в устройство. Но столкнулся с моментом необходимости расчета контрольной суммы сообщения. Принцип расчета понял, но не пойму как это реализовать, т.к. размер сообщений может быть динамический, т.е. та же скорость может быть 1 а может быть 100 и итоговая длина сообщения изменится.
Подсчет суммы как в ModbusRTU не применить, т.к. расчет идет без учета первого и последнего символа сообщения.
$GNRMC,075720.000,A,,,,,,,201023,,,A,V*2C ($ и * не учитываются, 2С контрольная сумма)
Если реализация этого довольно сложна, то готов заплатить за готовое решение.

2

Re: Реализация 8ми битной XOR суммы

размер сообщений может быть динамический, т.е. та же скорость может быть 1 а может быть 100

А если передавать скорость с лидирующими нулями?
Например:

  1 как 001
 50 как 050
100 как 100

3

Re: Реализация 8ми битной XOR суммы

не пробовал ещё. хочу снять лог с "пойманными" спутниками и посмотреть какие еще данные передаются и в каком виде. В любом случае не могу в голове составить рабочую диаграмму которая обработает это сообщение(

4

Re: Реализация 8ми битной XOR суммы

Предлагаю вам проверить возможность передачи сообщения фиксированной длины и начать создавать вашу диаграмму, а при возникновении конкретных вопросов в процессе её создания - задавать их здесь и прикладывать к ним файл вашей диаграммы.
Если же вам требуется готовое решение, то я могу перенести тему в специальный раздел форума:Поиск исполнителей

5

Re: Реализация 8ми битной XOR суммы

Постарался разобраться самостоятельно, пока время позволяет. Как понимаю эта конструкция на скрине должна сработать правильно. При xor как и при обычном сложении сумма от перестановки слагаемых не меняется, т.е. и порядок проведения операции над разными символами как понимаю не отразится на конечном результате. Я правильно думаю?

Вложений в сообщении

Иконка вложения canny.PNG 198.62 кб, скачивался 19 раз, последний раз 2023-11-02 

6

Re: Реализация 8ми битной XOR суммы

Операция "Исключающее ИЛИ" обладает свойством ассоциативности: https://ru.wikipedia.org/wiki/%D0%98%D1 … 0%B2%D0%B0

Свойства операций можно проверить экспериментально в симуляторе.

7

Re: Реализация 8ми битной XOR суммы

Подскажите, я допустил где-то ошибку в диаграмме, или все таки не правильно понял как должна рассчитываться контрольная сумма в этом случае? Несколько ошибок исправил, на данный момент пришел к такому решению, но оно не бьется с тем, что получилось в исходной строке. Нашел онлайн калькулятор в нем получается такой же ответ как и у меня - 34.

Вложений в сообщении

Иконка вложения xor summ.cfd 8.36 кб, скачивался 50 раз, последний раз 2023-11-06 

8

Re: Реализация 8ми битной XOR суммы

Я не вижу ошибки в диаграмме.

Возможно ошибка в контрольном примере?

$GNRMC,075720.000,A,,,,,,,201023,,,A,V*2C

Мне попался другой пример, который проходит проверку на калькуляторе: https://nmeachecksum.eqth.net/

$GNRMC,141821.00,V,,,,,,,300518,,,N,V*19

9

Re: Реализация 8ми битной XOR суммы

Константин, CANNY пишет:

Я не вижу ошибки в диаграмме.

Возможно ошибка в контрольном примере?

$GNRMC,075720.000,A,,,,,,,201023,,,A,V*2C

Сегодня еще раз записал лог, действительно в примере затесалась какая-то ошибка, несколько сообщений сегодняшних перепроверил - всё сходится)

Спасибо за ссылку на калькулятор, не знал что даже конкретно такой может быть.