C# 如何捕获发送命令后串行端口的返回?
如何捕获发送命令后串行端口的返回?还可以。我如何阅读? 我尝试使用readLine()和ReadExisting()都不起作用C# 如何捕获发送命令后串行端口的返回?,c#,.net,c,serial-port,C#,.net,C,Serial Port,如何捕获发送命令后串行端口的返回?还可以。我如何阅读? 我尝试使用readLine()和ReadExisting()都不起作用 serialPort.PortName = "COM1"; serialPort.BaudRate = 115200; serialPort.Open(); if (serialPort.IsOpen) { // Send co
serialPort.PortName = "COM1";
serialPort.BaudRate = 115200;
serialPort.Open();
if (serialPort.IsOpen)
{
// Send command
serialPort.Write("at");
// string data = portaSerial.ReadLine();
// Close serial port
serialPort.Close();
}
您应该从不同的线程读取和写入串行端口。您可以旋转另一个线程以阻塞
ReadLine()
,也可以连接SerialDataReceivedEventHandler
以在数据到达串行端口时接收事件
还请记住,
DataReceived
事件不能保证为接收到的每个字节引发。您需要使用BytesToRead
属性来检查缓冲区中有多少字节。您需要将EventHandler附加到
从以上链接:
表示将处理SerialPort对象的数据接收事件的方法
您可以将其附加到设计器中,也可以像这样编程
serialPort.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);
每次单击按钮时,您都会附加DataReceivedEvent处理程序,而且正如Greg提到的,一旦发送数据,您就会关闭端口。看看这种方法是否有效。我没有任何串行设备来测试这虽然。我通常只会在会话开始时打开端口,并将其保持打开状态,直到您完成所有通信
public partial class Form1 : Form
{
SerialPort serialPort = new SerialPort();
public Form1()
{
InitializeComponent();
serialPort.PortName = "Com1";
serialPort.BaudRate = 115200;
serialPort.DataReceived += new SerialDataReceivedEventHandler(DataRecievedHandler);
openSerial();
}
void DataRecievedHandler(object sender, SerialDataReceivedEventArgs e)
{
SerialPort sp = (SerialPort)sender;
string indata = sp.ReadExisting();
MessageBox.Show(indata);
closeSerial();
}
public void openSerial()
{
if (!serialPort.IsOpen) serialPort.Open();
}
public void closeSerial()
{
if (serialPort.IsOpen) serialPort.Close();
}
private void button1_Click(object sender, EventArgs e)
{
openSerial();
serialPort.Write("Hello");
}
}
我还是不能。我是C#的初学者。这是我当前的代码:@Mark你知道我们是否使用初始命令,即/\r\n要与设备通信,设备如何发回响应以及我们如何能够看到它。我仍然无法。我是C#的初学者。这是我当前的代码:pastebin.com/hK5MjFUz@Juninho-一旦写入串行端口,您就将其关闭。您需要保持打开状态,以便接收数据。我将保持打开状态,然后重试。谢谢大家!@Juninho-没问题,如果有帮助,不要忘记接受,欢迎使用stackoverflow。
public partial class Form1 : Form
{
SerialPort serialPort = new SerialPort();
public Form1()
{
InitializeComponent();
serialPort.PortName = "Com1";
serialPort.BaudRate = 115200;
serialPort.DataReceived += new SerialDataReceivedEventHandler(DataRecievedHandler);
openSerial();
}
void DataRecievedHandler(object sender, SerialDataReceivedEventArgs e)
{
SerialPort sp = (SerialPort)sender;
string indata = sp.ReadExisting();
MessageBox.Show(indata);
closeSerial();
}
public void openSerial()
{
if (!serialPort.IsOpen) serialPort.Open();
}
public void closeSerial()
{
if (serialPort.IsOpen) serialPort.Close();
}
private void button1_Click(object sender, EventArgs e)
{
openSerial();
serialPort.Write("Hello");
}
}