您好我想将命令发送到通过串口连接的设备。怎么发送?
例如,我在谷歌搜索中发现了这个,但对我来说这没用。
Control + E 是5的键盘快捷键,所以:
serial.Write(new byte[]{ 5 }, 0, 1);
答案 0 :(得分:7)
输入或换行的微软版本为\r\n
,其中十六进制为0x0d 0x0a
。
{b} \r
是回车
在shell或打印机中,这会将光标放回到行的开头。
{b} \n
是换行符
将光标放在下面一行,在某些shell中这也是将光标放在下一行的开头。打印机只需滚动一下纸张。
历史课非常重要。当前的Windows系统仍然使用这些字符来表示行结尾。按输入时,Dos生成此代码。
密钥代码有点不同。从 esc 键开始是1. Enter 是28。
答案 1 :(得分:5)
要发送回车键,您必须使用
serial.Write(new byte[]{13,10}, 0, 2);
假设 Control + E 的语法正确。输入键被解释并通常作为CR-LF
保存在文件中。但是,根据您的设备,可能只需要CR=13
或LF=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。