C# 串口读取结果包含响应,还有我给出的命令,如何解决这个问题?

C# 串口读取结果包含响应,还有我给出的命令,如何解决这个问题?,c#,port,modem,C#,Port,Modem,我正在为调制解调器通信工具编写一个GUI,可以接收AT命令,也可以在调制解调器中执行后从调制解调器返回结果。我使用串口datareceived事件来处理接收到的数据,但它不仅包含来自调制解调器的响应,还包含我发出的AT命令。现在我想是因为: 1) 从我的GUI发送at命令 2) 调制解调器接收数据,然后触发datareceived事件 3) 调制解调器运行命令时,应答也会触发datareceived事件 4) 然后,接收到的数据包含给定的命令和应答 例如: 输入:AT+COPS=0 输出:AT+

我正在为调制解调器通信工具编写一个GUI,可以接收AT命令,也可以在调制解调器中执行后从调制解调器返回结果。我使用串口datareceived事件来处理接收到的数据,但它不仅包含来自调制解调器的响应,还包含我发出的AT命令。现在我想是因为:

1) 从我的GUI发送at命令

2) 调制解调器接收数据,然后触发datareceived事件

3) 调制解调器运行命令时,应答也会触发datareceived事件

4) 然后,接收到的数据包含给定的命令和应答

例如:

输入:AT+COPS=0

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

输入:AT

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

我在MSDN中找不到解决方案。调制解调器中有两个不同的缓冲区吗? 如何解决这个问题

这是我的密码:

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

很好,很有效,我没有看到我重复的命令。非常感谢。