AT + CMGL =“ ALL”仅返回OK

时间:2019-08-12 05:55:57

标签: c# at-command

我有1个gsm 32端口,名称是xr21v1414 USB UART

我已经在COMMAND上测试了另一个,效果很好

AT USSD

但是如果我使用COMMAND:

  serialPort.WriteLine("AT" + System.Environment.NewLine);
  Thread.Sleep(200);
  serialPort.WriteLine("AT+CMGF=1" + System.Environment.NewLine);
  Thread.Sleep(200);
  serialPort.WriteLine("AT+CMGL=\"ALL\"" + System.Environment.NewLine);
  Thread.Sleep(200);

回复

serialPort.ReadExisting();

为空(仅OK)

AT

OK
AT+CMGF=1

OK
AT+CMGL="ALL"
OK

但是,如果我切换到另一个gsm,则Command可以正常工作。我有短信列表。

这是我的设置:

            SerialPort serialPort = new SerialPort();
            serialPort.PortName = m.ToString();
            serialPort.BaudRate = 115200;
            serialPort.DataBits = 8;
            serialPort.Handshake = Handshake.XOnXOff;
            serialPort.StopBits = StopBits.One;
            serialPort.Parity = Parity.None;
            serialPort.ReadTimeout = 20000;
            serialPort.WriteTimeout = 20000;
            serialPort.WriteBufferSize = 1024;
            serialPort.DtrEnable = true;
            serialPort.RtsEnable = true;

请问我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

我非常确定您收到的OK响应是因为您使用Thread.Sleep(200)而不是aborted拥有reading and parsing的当前命令行调制解调器,等待最终结果代码,然后再发送下一条命令。

上面的第一个链接的答案是一个问题,该问题的代码稍差一点,因为它甚至没有睡眠,但是即使一个人也完全错了。就像您不会编写忽略HTTP服务器发送的响应的HTTP客户端一样,您也不应编写忽略调制解调器发送其响应的AT命令程序。

TL; DR您必须将代码更改为读取解析,调制解调器发送给您的每个响应行都在等待最终发送下一条命令之前的结果代码。有关更多详细信息,请参见链接的答案。