串口读取结果包含响应,但也是我给的命令,如何解决这个问题?

串口读取结果包含响应,但也是我给的命令,如何解决这个问题?

问题描述:

我正在为调制解调器通信工具编写一个GUI,能够接收AT命令,并在调制解调器中执行后也从调制解调器返回结果。我使用串口数据接收事件来处理接收到的数据,但它不仅包含来自调制解调器的响应,还包含我给出的AT命令。现在,我想这是因为:串口读取结果包含响应,但也是我给的命令,如何解决这个问题?

1)从我的GUI

2)调制解调器发送的命令接受它,然后触发datareceived事件

3)调制解调器运行命令,得到的答复也引发datareceived事件。

4)然后将所接收的数据同时包含我的给定命令,并且还答复

例如:

输入:AT + COPS = 0

输出:AT + COPS = 0OK (OK是调制解调器响应)

输入:AT

输出:ATOK(OK是调制解调器响应)

我在MSDN中找不到解决方案。 Modem中是否有两种不同的缓冲区? 如何解决这个问题?

这里是我的代码:

void serialPort_DataReceived(object s, SerialDataReceivedEventArgs e) 
{ 

    if (e.EventType != SerialData.Chars) 
    { 
     return; 
    } 
    try 
    { 
     System.Threading.Thread.Sleep(1000); 
     string indata = atPort.ReadExisting(); 
     string status = timeStamp.ToShortDateString() + " " + timeStamp.ToUniversalTime() + " " + "Read from Modem: " + indata; 
     this.Invoke(new MethodInvoker(delegate() { this.listBox_CommandOutput.Items.Add(status); })); 
    } 
    catch (Exception ex) 
    { 

    } 
} 


private void executeCommandLine() 
{ 
    if (this.textBox_CommandLine.Text != "") 
    { 
     try 
     { 
      atPort.DiscardInBuffer(); 
      atPort.DiscardOutBuffer(); 
      this.atPort.Write(this.textBox_CommandLine.Text.ToString()+"\\r"); 
      this.listBox_CommandOutput.Items.Add(timeStamp.ToShortDateString() + " " + timeStamp.ToUniversalTime() + " " + "Write to Modem: " + this.textBox_CommandLine.Text.ToString()); 

     } 
     catch (Exception exc) 
     { 
      this.listBox_CommandOutput.Items.Add(exc.ToString()); 
     } 
    } 
    else MessageBox.Show("Command can't be void.", "COM talk", MessageBoxButtons.OK); 

}

的问题是不是在你的代码。某些调制解调器在默认情况下默认使用回显模式:它们会将发送给它们的每个字符都回送给发件人(因此您可以像使用终端一样使用它们)。

您可以禁用使用AT命令回声模式:

ATE0 
+1

完美,它的作品,我没有看到重复的命令,我给。谢谢! – Aaron