Последовательный порт / C # / Кажется, чтобы игнорировать отправку \ r \ n - PullRequest
0 голосов
/ 27 апреля 2018

Работа с последовательным портом в C # и одно конкретное устройство меня раздражает.

Устройство принимает команды, используя H-термин (http://www.der -hammer.info / терминал / ) и работает как ожидалось:

  1. Я отправляю команду,
  2. оканчивается на \ r,
  3. отвечает ответом

Я пытаюсь воспроизвести это в C #, и у меня много проблем. Суть дела в том, что он игнорирует команду.

Устройство ожидает \ r. Я знаю это, основываясь на (x2) экспериментах:

  1. Я использую пример 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));
        }
    }
  1. Если я напишу простую программу на C # с:

    _serialPort.WriteLine (команда)

и все вышеперечисленные варианты, затем я приостанавливаю программу на C # и перехожу в H-Term и отправляю \ n, она принимает команду!

Кажется, что WriteLine не всегда отправляет \ n. Это возможно? Если нет, каковы другие возможности?

1 Ответ

0 голосов
/ 02 мая 2018

Извините, ребята ... оказывается, это не моя вина. Это была проблема H / W!

При этом наиболее стабильным способом общения с H / W представляется:

serialPort.Write(stringMessage + (char) 13 + (char) 10)

вместо настройки

WriteLine()

Должна ли быть разница?

...