Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何捕获发送命令后串行端口的返回?_C#_.net_C_Serial Port - Fatal编程技术网

C# 如何捕获发送命令后串行端口的返回?

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

如何捕获发送命令后串行端口的返回?还可以。我如何阅读? 我尝试使用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();
            }

您应该从不同的线程读取和写入串行端口。您可以旋转另一个线程以阻塞
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");

    }
}