C#,如何通过串行端口以特定顺序向 Linux SBC(BeagleBone) 命令 read/write?
C#, How can I read/write commands to a Linux SBC(BeagleBone) through a serial port in a certain order?
我正在尝试通过串行端口向 BeagleBone 写入命令,然后读取该输出,但由于某些原因它似乎不起作用。这是我的代码:
SerialPort port = new SerialPort("COM1", 115200, Parity.None, 8, StopBits.One);
port.ReadTimeout = 500;
port.WriteTimeout = 500;
port.DataReceived += new SerialDataReceivedEventHandler(port_DataReceived);
port.Open();
port.WriteLine("debian\r\n"); //default login username
port.WriteLine("temppwd\r\n");//default login password
void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
string message = port.ReadExisting();
System.Diagnostics.Debug.WriteLine(message);
}
例如,port.WriteLine("debian\r\n")
似乎可以正常工作,但紧接着 port.WriteLine("temppwd\r\n")
似乎无法正常工作。我期待在调试控制台中看到 debian@beaglebone:~$:
打印出来,但在 port.WriteLine("debian\r\n")
之后,所有打印出来的都是空白 space。这是因为我需要等待第一个命令在第二个命令之前执行吗?据我所知,我认为 SerialDataReceivedEventHandler
解决了这个问题。谢谢,任何帮助将不胜感激。
编辑:澄清一下,我能够建立与 SBC 的连接,因为在调试控制台中打印了登录时的默认文本。
命令之间的简单休眠效果很好,可能足以满足您的用例:
port.WriteLine("debian\r\n");
Thread.Sleep(500);
port.WriteLine("temppwd\r\n");
Thread.Sleep(500);
port.WriteLine("ls /\r\n");
更好的解决方案是解析接收到的数据。请注意,您从串行端口事件中获取的 "message" 字符串
- 可能不包含整行
- 可能包含多行
- 可能永远不会以 CR/LF 结尾(如果是提示的话)
- 可能包含终端控制字符
我正在尝试通过串行端口向 BeagleBone 写入命令,然后读取该输出,但由于某些原因它似乎不起作用。这是我的代码:
SerialPort port = new SerialPort("COM1", 115200, Parity.None, 8, StopBits.One);
port.ReadTimeout = 500;
port.WriteTimeout = 500;
port.DataReceived += new SerialDataReceivedEventHandler(port_DataReceived);
port.Open();
port.WriteLine("debian\r\n"); //default login username
port.WriteLine("temppwd\r\n");//default login password
void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
string message = port.ReadExisting();
System.Diagnostics.Debug.WriteLine(message);
}
例如,port.WriteLine("debian\r\n")
似乎可以正常工作,但紧接着 port.WriteLine("temppwd\r\n")
似乎无法正常工作。我期待在调试控制台中看到 debian@beaglebone:~$:
打印出来,但在 port.WriteLine("debian\r\n")
之后,所有打印出来的都是空白 space。这是因为我需要等待第一个命令在第二个命令之前执行吗?据我所知,我认为 SerialDataReceivedEventHandler
解决了这个问题。谢谢,任何帮助将不胜感激。
编辑:澄清一下,我能够建立与 SBC 的连接,因为在调试控制台中打印了登录时的默认文本。
命令之间的简单休眠效果很好,可能足以满足您的用例:
port.WriteLine("debian\r\n");
Thread.Sleep(500);
port.WriteLine("temppwd\r\n");
Thread.Sleep(500);
port.WriteLine("ls /\r\n");
更好的解决方案是解析接收到的数据。请注意,您从串行端口事件中获取的 "message" 字符串
- 可能不包含整行
- 可能包含多行
- 可能永远不会以 CR/LF 结尾(如果是提示的话)
- 可能包含终端控制字符