Доброго всем котоводы, появилась задачка эмуляции устройства. Устройство подключено в сеть 485 порта, несколько устройств с адресами и комп. Есть возможность подключить устройство к отдельному компу и поиграться с ним. Лог анализатором снял временный интервал инициализации и работы, и вот занимаюсь тем чтобы разобраться в протоколе. Не могу понять каким образом ведется подсчет CRC. Протокол до ужаса простой.
пакет 9 байт, первый всегда 0x02, последний всегда 0x03
насколько я понял, 2рой байт адрес устройства, 3тий адрес регистра в устройстве, 4 байта данных. и CRC
0x02 0x22 0x4B 0x00 0x00 0x00 0x00 0x69 0x03 // девайс -> хост
0x02 0x12 0x4C 0x3C 0x00 0x00 0x00 0x62 0x03 // хост -> девайс
0x02 0x22 0x4C 0x00 0x00 0x00 0x00 0x6E 0x03 // девайс -> хост
Добавлено after 1 minute 36 seconds:
Добавлено after 2 hours 53 minutes 31 second:
Тема закрыта, понял алгоритм.
00010010 ' 0x12
01001011 ' 0x4B
00111100 ' 0x3C
00111100 ' 0x3C
00111100 ' 0x3C
00111100 ' 0x3C
01011001 ' 0x59
пакет 9 байт, первый всегда 0x02, последний всегда 0x03
Спойлер
0x02 0x12 0x4B 0x3C 0x3C 0x3C 0x3C 0x59 0x03Спойлер
0x02 0x12 0x4B 0x3C 0x3C 0x3C 0x3C 0x59 0x03 // хост -> девайс0x02 0x22 0x4B 0x00 0x00 0x00 0x00 0x69 0x03 // девайс -> хост
0x02 0x12 0x4C 0x3C 0x00 0x00 0x00 0x62 0x03 // хост -> девайс
0x02 0x22 0x4C 0x00 0x00 0x00 0x00 0x6E 0x03 // девайс -> хост
Тема закрыта, понял алгоритм.
00010010 ' 0x12
01001011 ' 0x4B
00111100 ' 0x3C
00111100 ' 0x3C
00111100 ' 0x3C
00111100 ' 0x3C
01011001 ' 0x59
Код: Выделить всё
Dim out = 0
For b As Byte = 0 To 7 ' номер бита
Dim countH = 0
For f = 0 To data.Length - 1 ' перебираем байты
If data(f) And (2 ^ b) Then
countH += 1
End If
Next
If countH And (2 ^ 0) Then ' число не четное
out = out Or (2 ^ b)
End If
Next