Я пытаюсь отменить разработку протокола последовательного порта для чтения и установки регистров в устройстве черного ящика.
Вот один пример связи чтения одного регистра:
< 2019/10/08 18:46:21.936528 length=13 from=0 to=12
02 00 01 10 a3 00 17 01 10 a2 16 24 03
> 2019/10/08 18:46:21.947386 length=1 from=0 to=0
06
> 2019/10/08 18:46:21.990617 length=9 from=1 to=9
02 20 01 01 00 00 20 26 03
< 2019/10/08 18:46:21.991501 length=1 from=13 to=13
06
> 2019/10/08 18:46:21.999473 length=16 from=10 to=25
02 21 01 14 00 0c 01 01 0c 00 0c 01 05 0c 01 01
> 2019/10/08 18:46:21.999719 length=12 from=26 to=37
0c 01 01 0c 01 01 0c 01 01 3c b1 03
< 2019/10/08 18:46:22.000367 length=1 from=14 to=14
06
> 2019/10/08 18:46:22.008810 length=16 from=38 to=53
02 22 01 10 b5 00 0c 01 10 a2 0c 01 10 a2 0c 01
> 2019/10/08 18:46:22.009059 length=16 from=54 to=69
10 a3 0c 01 01 0c 01 01 0c 01 01 0c 01 01 38 b6
> 2019/10/08 18:46:22.009221 length=1 from=70 to=70
03
< 2019/10/08 18:46:22.009699 length=1 from=15 to=15
06
> 2019/10/08 18:46:22.018275 length=16 from=71 to=86
02 23 01 10 b5 00 0c 01 10 a3 0c 01 1a 0c 01 05
> 2019/10/08 18:46:22.018434 length=16 from=87 to=102
0c 01 01 0c 01 10 a2 0c 01 01 0c 01 01 25 d3 03
< 2019/10/08 18:46:22.019009 length=1 from=16 to=16
06
> 2019/10/08 18:46:22.027574 length=16 from=103 to=118
02 24 01 10 b5 00 0c 01 04 0c 01 01 0c 01 05 0c
> 2019/10/08 18:46:22.027786 length=14 from=119 to=132
01 01 0c 01 01 0c 01 01 0c 01 01 3d bb 03
< 2019/10/08 18:46:22.028465 length=1 from=17 to=17
06
> 2019/10/08 18:46:22.032601 length=8 from=133 to=140
02 25 01 00 00 24 29 03
< 2019/10/08 18:46:22.033328 length=1 from=18 to=18
06
В ответе закодирована эта таблица:
1,0,5,1,1,1,1
2,2,3,1,1,1,1
3,26,5,1,2,1,1
4,1,5,1,1,1,1
Я уже обнаружил, что связь основана на сообщениях, которые начинаются с байта 02
и заканчиваются 03
. После каждого сообщения второе устройство возвращает 06
, чтобы подтвердить, что оно успешно получило сообщение, и после этого может быть отправлено другое сообщение. Если сообщение содержит один из этих управляющих байтов, оно преобразуется в последовательность 10 a2
для 02
и т. Д.
Первая строка сообщения выше содержит команду. Байты до тех пор, пока байт 17
в примере не является общим для каждой команды, которую я пробовал. Байт 17
устанавливает номер регистра для работы и байт 01
после того, как он устанавливает команду «Чтение». Последовательность 16 24
кажется некоторой контрольной суммой, которую я не знаю.
Сообщения таблицы, кажется, являются одним начальным и одним конечным сообщением. После запуска есть некоторый тип индексации сообщения, начинающегося с байта 20
и увеличивающегося с каждым сообщением.
Я знаю, как анализировать данные в сообщениях, но я не знаю, как вычислять контрольные суммыи что означает байты в заголовках (в сообщении 21
это может быть длина, но в других сообщениях это не так).