【问题标题】:Sending "ENTER" key through serial port通过串口发送“ENTER”键
【发布时间】:2011-06-15 21:33:05
【问题描述】:

您好,我想向通过串口连接的设备发送一些命令。怎么寄?

例如,我在谷歌搜索中找到了这个,但对我来说没用。

Control + E 是 5 的键盘快捷键,所以:

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

【问题讨论】:

  • 我们需要有关设备用于与您的计算机通信的协议的更多信息,反之亦然。

标签: c# console keypress signals


【解决方案1】:

要发送回车键,您必须使用 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

【讨论】:

    【解决方案2】:

    我在字符串中附加了“\r\n”并调用了 Write() 方法,它对我有用。例如,

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

    【讨论】:

      【解决方案3】:

      谢谢大家。

      这行得通:

      serial.Write("\r\n") 
      

      注意:如果你想通过串口发送命令,我使用下面的行。

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

      【讨论】:

        【解决方案4】:

        要发送回车键,您必须使用

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

        假设 Control + E 的语法是正确的。回车键被解释并通常保存在文件中为CR-LF。但是,根据您的设备,它可能只需要CR=13LF=10。您应该在您的设备上尝试所有 3 种组合,看看效果如何。

        如果您正在寻找输入键的实际scan code,它在 PC 102/104 键键盘上是“43”。根据您使用的实际计算机,它可能会有所不同。例如,在Commodore 64 上,Return 键的扫描码是“1”,这相当于 PC 键盘上的 Enter

        【讨论】:

        • 稍微修正一下,我怀疑Write方法中的第三个参数可能是要写入的字节数。如果我的猜测是正确的,您应该将其从 1 更改为 2。
        • 可能是对的,我会改变它。在这种情况下,我不知道 API,但这是一个很好的假设。
        【解决方案5】:

        enter 或 new line 的 Microsoft 版本是 \r\n,即十六进制的 0x0d 0x0a

        • \r是回车

          在 shell 或打印机中,这会将光标放回行首。

        • \n 是换行符

          将光标放在下一行,在某些 shell 中,这也会将光标放在下一行的开头。打印机只需稍微滚动一下纸张即可。

        历史课就讲这么多。当前的 Windows 系统仍然使用这些字符来表示行结束。当按下 enter 时,Dos 会生成此代码。

        键码有点不同。从 esc 键开始是 1。Enter 是 28。

        来源:linux hlkeycodes from www.comptechdoc.org

        【讨论】:

        • 谢谢你,我得到了答案,马蒂亚斯。
        【解决方案6】:

        您需要发送命令 CR(回车)和 LF(换行或换行)。

        因为这只是像这样发送您的命令以及 CR 和 LF:

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

        \r\n = CR + LF -> 在 Windows 中用作换行符

        【讨论】:

          【解决方案7】:

          前面的答案告诉您的是如何发送 NEWLINE 字符 - 这与“回车键”不同。如果您要做的是实际向远程机器指示已按下键盘上的“回车键”,那是完全不同的,并且可能无法实现,具体取决于您的操作系统和硬件。

          【讨论】:

            【解决方案8】:

            这取决于您的设备的 ENTER 是什么。在 Windows 中,它是 CRLF(13 和 10),Linux 是 LF(只有 10 个)。这只是您的设备期望的问题,因为它看不到 ENTER,只有“字节 10,字节 13,字节……” 。”

            【讨论】:

              猜你喜欢
              • 2012-11-21
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2017-01-31
              • 2013-09-09
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多