指挥正常,但没有回应

本文关键字:回应 | 更新日期: 2023-09-27 18:16:32

我尝试通过打开串行端口连接发送AT命令,我的目标是发送SMS。我能够实现这一点,并且消息被发送出去,这是WriteLine()方法成功完成的标志。然而,我似乎不能得到任何响应在我的接收缓冲区。通过查看stackoverflow上的一些答案,我打开了echo

但是仍然没有回应。我尝试通过使用Thread.Sleep()以及使用处理程序p_DataReceived等待。仍然没有回应。

一个例子是简单的"AT"命令,它应该有一个"ok"的响应。但是根本没有响应(即BytesToRead属性大小为0)

我正在尝试使用D-Link的dwm222 4G LTE USB适配器

请指教,不胜感激!

    private void button_Click(object sender, RoutedEventArgs e)
    {

        mySerialPort = new SerialPort("COM15");
        mySerialPort.BaudRate = 9600;
        mySerialPort.Parity = Parity.None;
        mySerialPort.StopBits = StopBits.One;
        mySerialPort.DataBits = 8;
        mySerialPort.Handshake = Handshake.None;
        mySerialPort.NewLine = Environment.NewLine;
        mySerialPort.DataReceived += new SerialDataReceivedEventHandler(p_DataReceived);
        mySerialPort.Open();
        mySerialPort.DiscardInBuffer();
        mySerialPort.DiscardOutBuffer();

        mySerialPort.WriteLine("ATE1"); //turn on echo

        mySerialPort.WriteLine("AT"); //test response

        Thread.Sleep(3000);
        string responseSTR = mySerialPort.ReadLine();
        if (responseSTR.Contains("OK"))  //empty string
        {
            MessageBox.Show(responseSTR);
         }
        this.SendSms("+XXXXXXXXXXXXXXXXXXX", "Hello From C#");
        mySerialPort.Close();
    }
    public void p_DataReceived(object sender, SerialDataReceivedEventArgs e)
    {
        string s = (sender as SerialPort).ReadExisting();
        buff += s;
        MessageBox.Show(buff);
    }
   void SendSms(string destination, string text)
    { ........}

指挥正常,但没有回应

使能DTR和RTS填满串口对象的缓冲区。

        mySerialPort = new SerialPort("COM17");
        mySerialPort.BaudRate = 9600;
        mySerialPort.Parity = Parity.None;
        mySerialPort.StopBits = StopBits.One;
        mySerialPort.DataBits = 8;
        mySerialPort.Handshake = Handshake.None;
        mySerialPort.NewLine = Environment.NewLine;
        mySerialPort.DataReceived += new SerialDataReceivedEventHandler(p_DataReceived);
        mySerialPort.Open();
        mySerialPort.DiscardInBuffer();
        mySerialPort.DiscardOutBuffer();
        mySerialPort.DtrEnable = true;    //this solved my problem
        mySerialPort.RtsEnable = true;    //this solved my problem

我认为你应该每次丢弃缓冲区,所以你应该得到一个新的传入数据尝试这个代码我在你的事件处理程序修改

public void p_DataReceived(object sender, SerialDataReceivedEventArgs e)
    {
        string s = mySerialPort.ReadExisting();
        buff += s;
        mySerialPort.DiscardInBuffer();
        mySerialPort.DiscardOutBuffer();
        MessageBox.Show(buff);
    }