2017-02-23 14 views
1

我正在爲調制解調器通信工具編寫一個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); 

}

回答

3

的問題是不是在你的代碼。某些調制解調器在默認情況下默認使用回顯模式:它們會將發送給它們的每個字符都回送給發件人(因此您可以像使用終端一樣使用它們)。

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

ATE0 
+1

完美,它的作品,我沒有看到重複的命令,我給。謝謝! – Aaron