2016-11-07 44 views
0

我试图通过打开串口连接发送AT命令,我的目标是发送一条短信。我能够实现这一点,并且发送了消息,这是WriteLine()方法成功完成的标志。但是,我似乎无法得到我的接收缓冲区中的任何响应。我已经打开回声通过查看一些在这里stackoverflow上的答案。AT Command Works,但没有回应

但仍然没有回应。我尝试使用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) 
    { ........} 
+0

您的活动正在开火吗?和messagebox显示为空? –

+0

没有事件触发,responseSTR为空,即responseSTR =“”。 –

+0

另一个问题:你可以尝试不同的“mySerialPort.NewLine =”设置?因为“Environment.NewLine”在Windows(CR + LF)上是“\ r \ n”。也许你的调制解调器只有“CR”。值得一试:mySerialPort.NewLine =“\ r”,或者任何在C#中的正确代码。 –

回答

0

我想你应该放弃每一个时间缓冲,所以你应该得到一个新的输入数据试试这个代码我在事件处理已经修改

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

谢谢你zain,将使用它来清除缓冲区,我的主要问题是buffersize是0,即BytestoRead是0.我刚刚发现启用DTR和RTS是解决方案。 –

1

启用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