【问题标题】:Serial Port / C# / Seems to ignore sending \r\n串口/C#/似乎忽略发送\r\n
【发布时间】:2018-05-02 10:33:32
【问题描述】:

一直在使用 C# 中的串行端口,一个特定的设备让我很烦恼。

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

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

_serialPort.NewLine = ...

没有解决问题。

看MSDN(代码sn-p),就是一个简单的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。这可能吗?如果不是,还有哪些可能?

【问题讨论】:

  • 您是否尝试过将cultureinfo 设置为CultureInfo.InvariantCulture 并发送Environment.NewLine
  • 还没有。 PC 是为美国配置的,所有硬件都是为美国设计的。有了这些信息,你还怀疑有问题吗?
  • 我想你想在最后发送一个&lt;CR&gt;&lt;LF&gt;,而你正在发送一个&lt;LF&gt;&lt;CR&gt;char CR = (char)13; char LF = (char)10; 所以你应该先发送 13,然后再发送 10。

标签: c# visual-studio serial-port


【解决方案1】:

对不起,伙计们……原来这不是我的错。这是硬件问题!

话虽如此,与硬件进行通信的最稳定方式似乎是:

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

而不是配置

WriteLine()

应该有区别吗?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-01
    • 1970-01-01
    • 2018-04-01
    • 2021-10-28
    • 2016-09-30
    • 2016-03-16
    相关资源
    最近更新 更多