Работа с последовательным портом в C # и одно конкретное устройство меня раздражает.
Устройство принимает команды, используя H-термин (http://www.der -hammer.info / терминал / ) и работает как ожидалось:
- Я отправляю команду,
- оканчивается на \ r,
- отвечает ответом
Я пытаюсь воспроизвести это в C #, и у меня много проблем. Суть дела в том, что он игнорирует команду.
Устройство ожидает \ r. Я знаю это, основываясь на (x2) экспериментах:
- Я использую пример MSDN (https://msdn.microsoft.com/en-us/library/system.io.ports.serialport(v=vs.110).aspx)
вставляю
_serialport.WriteLine("command");
и позвольте примеру продолжать принимать данные с консоли. Если я наберу, команда будет выполнена. Если нет, устройство игнорирует команду.
Я пробовал несколько вариантов на эту тему, в том числе:
_serialport.WriteLine("command\r\n");
_serialport.Write("command" + (byte) 10 + (byte) 13);
string message = "command" + (byte) 10 + (byte) 13;
_serialport.WriteLine(message);
string message = "command" + (byte) 10 + (byte) 13);
_serialport.Write(message);
Все имеют одинаковый результат. Если я не наберу, используя пример MSDN, устройство не будет отвечать. Если я печатаю, устройство каким-то образом слушает образец кода MSDN, отправляющий \ r, и отвечает на команду. Я пробовал различные комбинации
_serialPort.NewLine = ...
и никто не решил проблему.
Глядя на MSDN (фрагмент кода), это всего лишь простой WriteLine!?
while (_continue)
{
message = Console.ReadLine();
if (stringComparer.Equals("quit", message))
{
_continue = false;
}
else
{
_serialPort.WriteLine(
String.Format("<{0}>: {1}", name, message));
}
}
Если я напишу простую программу на C # с:
_serialPort.WriteLine (команда)
и все вышеперечисленные варианты, затем я приостанавливаю программу на C # и перехожу в H-Term и отправляю \ n, она принимает команду!
Кажется, что WriteLine не всегда отправляет \ n. Это возможно? Если нет, каковы другие возможности?