如何在发送命令后捕获串口的返回?

2 .net c c# serial-port

如何在发送命令后捕获串口的返回?回报没问题.我怎么读?我尝试使用readLine()和ReadExisting()不起作用.

        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();
            }
Run Code Online (Sandbox Code Playgroud)

Mar*_*all 5

您需要将EventHandler附加到DataReceived事件.

从上面的链接:

表示将处理SerialPort对象的数据接收事件的方法

private static void DataReceivedHandler( object sender, SerialDataReceivedEventArgs e)
{
    SerialPort sp = (SerialPort)sender;
    string indata = sp.ReadExisting();
    Console.WriteLine("Data Received:");
    Console.Write(indata);
}
Run Code Online (Sandbox Code Playgroud)

您可以在设计师中附加,也可以像这样在程序上附加.

serialPort.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);
Run Code Online (Sandbox Code Playgroud)

每次单击按钮时,都会附加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");

    }
}
Run Code Online (Sandbox Code Playgroud)