Помогите плиз распарсить CRC.

Здесь принимаются все самые невообразимые вопросы... Главное - не стесняйтесь. Поверьте, у нас поначалу вопросы были еще глупее :)
Ответить
Встал на лапы
Аватара пользователя
Сообщения: 136
Зарегистрирован: Чт янв 02, 2014 21:28:22

Сообщение servmv »

Доброго всем котоводы, появилась задачка эмуляции устройства. Устройство подключено в сеть 485 порта, несколько устройств с адресами и комп. Есть возможность подключить устройство к отдельному компу и поиграться с ним. Лог анализатором снял временный интервал инициализации и работы, и вот занимаюсь тем чтобы разобраться в протоколе. Не могу понять каким образом ведется подсчет CRC. Протокол до ужаса простой.
пакет 9 байт, первый всегда 0x02, последний всегда 0x03
Спойлер0x02 0x12 0x4B 0x3C 0x3C 0x3C 0x3C 0x59 0x03
насколько я понял, 2рой байт адрес устройства, 3тий адрес регистра в устройстве, 4 байта данных. и CRC
Спойлер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 // девайс -> хост
Добавлено after 1 minute 36 seconds:
Лист Microsoft Excel (2).rar
(8.35 КБ) 127 скачиваний
Добавлено after 2 hours 53 minutes 31 second:
Тема закрыта, понял алгоритм.
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
Контактная информация:
Реклама
Ответить

Вернуться в «Теория»