串口/ C#/似乎忽略发送\ r \ n

时间:2018-04-27 17:31:31

标签: c# visual-studio serial-port

使用C#中的串口,一个特定的设备让我感到烦恼。

设备使用H-Term(http://www.der-hammer.info/terminal/)接受命令并按预期工作:

  1. 我发送命令,
  2. 以\ r,
  3. 结尾
  4. 回答
  5. 我尝试在C#中重现这一点,我遇到了很多麻烦。问题的关键在于它忽略了命令。

    设备似乎在等待\ r \ n。我基于(x2)实验知道这个:

    1. 我使用MSDN示例(https://msdn.microsoft.com/en-us/library/system.io.ports.serialport(v=vs.110).aspx
    2. 我插入

      _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示例键入,则设备将不会响应。如果我输入,设备会以某种方式监听发送\ r \ n的MSDN示例代码并响应该命令。我尝试了各种

      的组合
      _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(命令)

      2. 以及上面的所有变化,然后我暂停C#程序并转到H-Term并发送\ n,它接受命令!

        似乎WriteLine并未始终如一地发送\ n。这可能吗?如果没有,还有其他可能性吗?

1 个答案:

答案 0 :(得分:0)

对不起伙计......结果证明这不是我的错。这是一个H / W问题!

话虽这么说,与H / W沟通最稳定的方式似乎是:

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

而不是配置

WriteLine()

应该有区别吗?