Бинарный Аске и обратно - PullRequest
0 голосов
/ 18 мая 2010

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

42 21 21 21 21 41 45 21 26 21 29 21 26 59 5F 41 30 21 2B 21 27
42 21 21 21 21 41 47 21 27 21 28 21 27 59 5D 41 32 21 2A 21 28  

Когда я запускаю их через преобразователь hex в ascii, команды не имеют смысла. Эти сообщения на самом деле отличаются от шестнадцатеричных? Я надеялся увидеть сообщения, передаваемые устройством, и эмулировать их с помощью c #. Что я могу сделать, чтобы точно узнать, что это за сообщения?

Ответы [ 2 ]

5 голосов
/ 18 мая 2010

Указывает ли аппаратное устройство протокол? Просто потому, что это соединение через последовательный порт, это не значит, что оно должно быть ASCII / Readable English Text. Это также может быть просто последовательность байтов, где, например, 42 - это команда, а 21212121 - данные для этой команды. Может быть последовательность инициализации или что-то еще.

В конце концов, все, с чем вы работаете, это серия байтов. Смысл их можно найти в спецификации протокола или, если у вас его нет, вам нужно вручную посмотреть каждую команду. Введите команду на устройство, запишите ввод, введите другую команду.

Ищите узоры. Общая инициализация? Какие могут быть команды? Какие данные передаются?

Да, это утомительно, но реверс-инжиниринг редко бывает легким.

ASCII для Hex:

B !!!! AE! &!)! & Y_A0! +!
B !!!! AG!! (! Y] A2! *! (

Для меня это выглядит своего рода протоколом с некоторой последовательностью инициализации (B !!!!) и командами (AE и AG), но это только предположение.

0 голосов
/ 18 мая 2010

Решение отправляет данные на компьютер. Все цифровые данные имеют форму единиц и нулей, например 10101001010110010 .... Чаще всего объединяют группы из восьми таких битов ( двоичные цифры ) в байты , поэтому все данные состоят из байтов. Таким образом, один байт может представлять любое из 2 ^ 8 значений от 0 до 2 ^ 8 - 1 = 255 или, в шестнадцатеричном формате, любое из чисел от 0x00 до 0xFF.

Иногда байты представляют собой строку буквенно-цифровых (и других) символов, часто кодируемых ASCII. Этот формат данных назначает символ каждому значению от 0 до 127. Но все данные не являются символами в кодировке ASCII.

Например, если устройство является датчиком интенсивности света, то каждый байт может давать интенсивность света в виде числа от 0 (черный цвет) до 255 (настолько яркого, насколько это возможно). Или данные могут быть растровым изображением. Затем данные будут начинаться с пары четко определенных структур (а именно this и this ), определяющих глубину цвета (количество бит на пиксель, т.е. более или менее количество цветов ), ширина, высота и сжатие растрового изображения. Затем начнутся данные пикселей. Обычно байты отправляются BBGGRRBBGGRRBBGGRR, где первый BB - интенсивность синего цвета первого пикселя, первый GG - интенсивность зеленого цвета первого пикселя, первый RR - интенсивность красного цвета первого пикселя, второй BB - интенсивность синего цвета второго пикселя и т. д.

На самом деле данные могут означать что угодно. Что это за устройство? Есть ли у него открытая спецификация?

...