2011-01-26 3 views
5

Привет, я хочу отправить некоторую команду на устройство, подключенное через последовательный порт. Как отправить его?Отправка ключа «ENTER» через последовательный порт

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

управления + E является сочетание клавиш для 5, так:

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

Нам нужна дополнительная информация о протоколе, который устройство использует для связи с вашим компьютером, и наоборот. – Merijn

+0

serial.WriteLine (""); –

ответ

6

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

  • \r является возврат каретки

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

  • \n является подводящей линии

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

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

Код ключа немного отличается. Начиная с ESČ ключа, являющегося 1. Enter составляет 28

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

+0

Спасибо, я получил свой ответ Маттиас. –

4

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

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

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

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

+0

Небольшая коррекция, я подозреваю, что третьим аргументом метода Write может быть количество байтов, которые нужно записать. Если моя догадка правильная, вы должны изменить ее с 1 на 2. – kaoD

+0

Возможно, правильно, я изменю это. Я не знаю API в этом случае, но это хорошее предположение. – Kibbee

0

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

1

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

2

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

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

serial.Write("\r\n") 

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

serial.Write("your_command\r\n"); 
0

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

Для этого просто отправить команду плюс на CR и LF, как это:

string command = "myCommand"; 

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

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

0

Я приложил «\ r \ n» в строке и вызвал метод Write(), и он работает для меня. Для примера,

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

0

Чтобы отправить клавишу ввода, вы должны использовать 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 

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

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