通过串口发送“ENTER”键

时间:2011-01-26 14:35:44

标签: c# console keypress signals

您好我想将命令发送到通过串口连接的设备。怎么发送?

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

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

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

8 个答案:

答案 0 :(得分:7)

输入或换行的微软版本为\r\n,其中十六进制为0x0d 0x0a

  • {b} \r是回车

    在shell或打印机中,这会将光标放回到行的开头。

  • {b} \n是换行符

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

历史课非常重要。当前的Windows系统仍然使用这些字符来表示行结尾。按输入时,Dos生成此代码。

密钥代码有点不同。从 esc 键开始是1. Enter 是28。

来源:linux hlkeycodes from www.comptechdoc.org

答案 1 :(得分:5)

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

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

答案 2 :(得分:3)

谢谢你们。

这有效:

serial.Write("\r\n") 

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

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

答案 3 :(得分:1)

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

答案 4 :(得分:0)

这取决于您设备的ENTER。在Windows中它是CRLF(13然后是10),Linux是LF(只有10)。这只是你的设备所期望的问题,因为它无法看到ENTER,只是“字节10,字节13,字节无论如何...... 。“

答案 5 :(得分:0)

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

这只是发送你的命令加上CR和LF,如下所示:

string command = "myCommand";

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

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

答案 6 :(得分:0)

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

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

答案 7 :(得分:0)

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