串口读取结果包含响应,但也是我给的命令,如何解决这个问题?
问题描述:
我正在为调制解调器通信工具编写一个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
完美,它的作品,我没有看到重复的命令,我给。谢谢! – Aaron