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);
}
完美,它的作品,我沒有看到重複的命令,我給。謝謝! – Aaron