2015-07-24 3 views
2

Итак, я пытаюсь отправить шестнадцатеричную (строку?), Которая выглядит так: «7E 00 00 FF 00 00 00 00 00 00 00 00 00 00 00 00 FF» над Серийный порт. Мой код выглядит следующим образом:(C#) отправка шестнадцатеричного кода по порядку

serialport.write("7E 00 00 FF 00 00 00 00 00 00 00 00 00 00 00 00 00 FF");

Контроллер, который получает это не подтверждает эти данные, я предполагаю, что кодировка символов последовательного порта, который по умолчанию ASCII является проблемой. Как я могу это исправить?

+0

Я могу получить свой контроллер, который получает его, чтобы отвечать на данные, когда я отправляю его из программы последовательного терминала (comviewer); Я отправляю его как шестую строку, и данные отправляются сразу. –

ответ

3

Я полагаю, что вы используете SerialPort Class, правильно?

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

Я думаю, что-то вроде этого:

string str = "7E 00 00 FF 00 00 00 00 00 00 00 00 00 00 00 00 00 FF"; 
byte[] bytes = str.Split(' ').Select(s => Convert.ToByte(s, 16)).ToArray(); 
serialport.Write(bytes, 0, bytes.Length); 
+0

Ах, SerialPort Class должен был быть тем, что означало «последовательный порт». Моя голова была больно, пытаясь понять, как аппаратное обеспечение кодирует символы. –

+0

Awesome Я попробую это завтра и отправлю назад мои результаты! –

+0

Отлично работает! Спасибо, тонну! –

0

Значение 0xFF используется для обозначения UART Rx буфер пуст, и, следовательно, необходимость преобразования в представительные ASCII байтов по сравнению с обычным серийным, чтобы избежать этого значения.

Смежные вопросы