AT+CMGL="ALL" return OK
AT+CMGL="ALL" return OK only
我有 1 个 gsm 32 端口,名称是 xr21v1414 USB UART
我已经测试了另一个 AT COMMAND,它工作正常
在
USSD
但是如果我使用命令:
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();
为空(仅确定)
AT
OK
AT+CMGF=1
OK
AT+CMGL="ALL"
OK
但是如果我切换到另一个 gsm,命令工作正常。我有列表短信。
这是我的设置:
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;
请问我该如何解决这个问题?
我很确定您得到的 OK
响应是因为您有 aborted the current command line by using Thread.Sleep(200)
instead of reading and parsing 从调制解调器返回的响应,等待 最终结果代码 在发送下一个命令之前。
上面第一个链接的答案是一个问题,它的代码稍微差一点,因为它甚至没有睡眠,但即使有一个也是完全错误的。正如您不会编写忽略 HTTP 服务器发送给它的响应的 HTTP 客户端一样,您也不应该编写忽略调制解调器发送给它的响应的 AT 命令程序。
TL;DR 您 必须 将代码更改为 read 和 parse 每个响应调制解调器发送给您的行,在发送下一个命令之前等待最终结果代码。有关详细信息,请参阅链接的答案。
我有 1 个 gsm 32 端口,名称是 xr21v1414 USB UART
我已经测试了另一个 AT COMMAND,它工作正常
在 USSD
但是如果我使用命令:
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();
为空(仅确定)
AT
OK
AT+CMGF=1
OK
AT+CMGL="ALL"
OK
但是如果我切换到另一个 gsm,命令工作正常。我有列表短信。
这是我的设置:
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;
请问我该如何解决这个问题?
我很确定您得到的 OK
响应是因为您有 aborted the current command line by using Thread.Sleep(200)
instead of reading and parsing 从调制解调器返回的响应,等待 最终结果代码 在发送下一个命令之前。
上面第一个链接的答案是一个问题,它的代码稍微差一点,因为它甚至没有睡眠,但即使有一个也是完全错误的。正如您不会编写忽略 HTTP 服务器发送给它的响应的 HTTP 客户端一样,您也不应该编写忽略调制解调器发送给它的响应的 AT 命令程序。
TL;DR 您 必须 将代码更改为 read 和 parse 每个响应调制解调器发送给您的行,在发送下一个命令之前等待最终结果代码。有关详细信息,请参阅链接的答案。