2011-01-26 1370 views
5

嗨我想发送一些命令到我的设备,通过串口连接。如何发送?通过串口发送“ENTER”键

例如我发现这在谷歌搜索,但对我来说是没用的。

控制 + Ë是5键盘快捷键,所以:

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

我们需要对设备使用与您的计算机,反之亦然通信的协议的详细信息。 – Merijn 2011-01-26 14:42:50

+0

serial.WriteLine(“”); – 2011-01-26 14:57:10

回答

6

微软版本的输入或新行是\r\n这是在十六进制0x0d 0x0a

  • \r是回车

    在外壳或打印机这会给光标回行的开头。

  • \n是换行

    提出下面一行的光标,在一些壳这也把光标到下一行的开头。打印机只会简单地滚动纸张。

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

关键代码有点不同。与ESC键为1 输入开始是28

来源:linux hlkeycodes from www.comptechdoc.org

4

要发送回车键,你将不得不使用

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

假设你的语法控制 + E是正确的。回车键被解释并通常保存在一个文件中,如CR-LF。但是,根据您的设备,它可能只需要CR=13LF=10。您应该尝试使用您的设备的所有3种组合,以了解它的期望。

如果您正在查找输入键的实际scan code,则它在PC 102/104键盘上为“43”。根据您使用的实际计算机,可能会有所不同。例如在Commodore 64返回密钥的扫描码为“1”,其具有等同用途在PC键盘上输入

+0

稍微纠正一下,我怀疑Write方法中的第三个参数可能是要写入的字节数。如果我的猜测是正确的,你应该把它从1改为2. – kaoD 2011-01-26 14:45:55

0

这取决于什么是您的设备输入。在Windows中,它是CRLF(13,然后是10),Linux是LF(只有10)。这只是你的设备期望的问题,因为它不能看到ENTER,只是“字节10,字节13,字节。 。“

1

什么以前的答案都告诉你是如何发送一个换行符 - 这是不一样的作为“输入密钥”。如果您想要做的是实际向远程机器指示键盘上的“输入密钥”已被按下,则完全不同,并且可能不可行,具体取决于您的操作系统和硬件。

2

谢谢你们。

这工作:

serial.Write("\r\n") 

注:如果您想通过串口发送命令,我用下面的作品行我。

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

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

对于这仅仅是送您的命令加了CR和LF这样的:

string command = "myCommand"; 

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

\ r \ n = CR + LF - >作为新行字符在Windows

0

我在字符串中添加“\ r \ n”,并调用Write()方法,它适用于我。例如,

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

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