Отправка ключа «ВВОД» через последовательный порт - PullRequest
5 голосов
/ 26 января 2011

Привет. Я хочу отправить некоторую команду на мое устройство, подключенное через последовательный порт.Как отправить?

Например, я нашел это в поиске Google, но для меня это бесполезно.

Control + E это сочетание клавишза 5, так:

serial.Write(new byte[]{ 5 }, 0, 1);

Ответы [ 8 ]

7 голосов
/ 26 января 2011

Microsoft вводит или вводит новую строку \r\n, которая 0x0d 0x0a в шестнадцатеричном формате.

  • \r - возврат каретки

    В оболочке или принтере курсор вернул бы курсор к началу строки.

  • \n - перевод строки

    Помещает курсор на одну строку ниже, в некоторых оболочках это также помещает курсор в начало следующей строки , принтер просто прокрутит бумагу немного.

Так много для урока истории. Современные системы Windows по-прежнему используют эти символы для обозначения конца строки. Dos сгенерировал этот код при нажатии , введите .

Код ключа немного другой. Начиная с клавиши esc , равной 1. Ввод равен 28.

Источник: hlkeycodes linux с www.comptechdoc.org

5 голосов
/ 26 января 2011

Чтобы отправить ключ ввода, вам нужно будет использовать

serial.Write(new byte[]{13,10}, 0, 2);

Предполагая, что ваш синтаксис для Control + E правильный. Клавиша ввода интерпретируется и обычно сохраняется в файле как CR-LF. Однако в зависимости от вашего устройства может потребоваться только CR=13 или LF=10. Вы должны попробовать все 3 комбинации с вашим устройством, чтобы увидеть, что оно ожидает.

Если вы ищете фактический код сканирования клавиши ввода, на клавиатуре ПК 102/104 это "43". В зависимости от компьютера, который вы используете, он может отличаться. Например, на Commodore 64 код сканирования для клавиши Return равен «1», что эквивалентно Enter на клавиатуре ПК. *

3 голосов
/ 27 января 2011

Спасибо, ребята.

Это работает:

serial.Write("\r\n") 

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

serial.Write("your_command\r\n");
1 голос
/ 26 января 2011

В предыдущих ответах говорилось, как отправить символ NEWLINE - это не то же самое, что «клавиша ввода». Если вы действительно хотите указать удаленной машине, что на клавиатуре была нажата «клавиша ввода», это совершенно другое и может быть невозможно, в зависимости от вашей операционной системы и аппаратного обеспечения.

0 голосов
/ 22 января 2018

Чтобы отправить ключ ввода, вам нужно будет использовать SerialPort.NewLine Свойство - значение, представляющее конец строки

_serialPort = new SerialPort();
// ... this COM port parameters
_serialPort.NewLine = "\r"; // "\r" - CR (0x0D); "\r\n" - CRLF (0x0D 0x0A)
try
{
    _serialPort.Open();
}
catch (Exception ex)
{
  Console.Write(ex.Message);
  return;
}
_serialPort.WriteLine("Send string"); // Writes `Send string` string and the `NewLine` value to serial port
 // or
_serialPort.WriteLine((char)2 + "VWD:040" + (char)3); // Writes `<HEX 0x02>VWD:040<HEX 0x03>` string and the `NewLine` value to serial port

. Для полного примера работы споследовательный порт, см. здесь .

0 голосов
/ 19 декабря 2015

Я добавил "\ r \ n" в строку и вызвал метод Write (), и он работает для меня. Например,

serial.Write("abcd\r\n");

0 голосов
/ 08 января 2014

Вам необходимо отправить команды CR (возврат каретки) и LF (перевод строки или новая строка).

Для этого просто отправьте вашу команду плюс CR и LF следующим образом:

string command = "myCommand";

port.write(string.format("{0}\r\n", command));

\ r \ n = CR + LF -> Используется как символ новой строки в Windows

0 голосов
/ 26 января 2011

Это зависит от того, что является ENTER для вашего устройства. В Windows это CRLF (13, а затем 10), Linux - LF (только 10.) Это просто вопрос того, что ожидает ваше устройство, потому что оно не может видеть ENTER, просто «байт 10, байт 13, байт». . "

...