获取+ CMS错误:96尝试通过AT命令发送短信

时间:2016-02-22 04:01:56

标签: shell at-command modem

echo -ne "ATZ\r\n" > /dev/ttyUSB0
echo -ne "AT+CMGF=1\r\n" > /dev/ttyUSB0
echo -ne "AT+CMGS=\"888XXXXXXX\"\rhello\x1a\n" > /dev/ttyUSB0

由于CMS ERROR-96缺少必填信息。

1 个答案:

答案 0 :(得分:0)

不,你不能用这种方式发送AT命令。首先阅读V.250(所有第5章)和27.005规范(AT + CMGS命令),链接在tag info page。这些文档将教你很多有关AT命令处理,语法和行为的知识。

最糟糕的错误是发送AT命令行而不等待最终结果代码。以同样的方式,您不会编写完全忽略来自HTTP服务器的响应的HTTP客户端,您不应该发送AT命令并完全忽略来自调制解调器的响应。

对于AT+CMGS命令,您必须等待发送sms有效负载数据,直到收到"\r\n> "前缀为止(详见this answer的第一部分)。< / p>

其他事项,AT命令行应仅以\r而不是\r\n终止。像多个shell命令重定向一样反复打开和关闭调制解调器设备可能会导致问题。这完全取决于特定的调制解调器,并且无法保证这将可靠地工作。

为了解决这些最后几点,我编写了atinout程序,使命令行发送AT命令简单可靠。前两个AT命令可以作为

发送
$ echo ATZ | atinout - /dev/ttyUSB0 -
ATZ
OK
$ echo AT+CMGF=1 | atinout - /dev/ttyUSB0 -
AT+CMGF=1
OK
$

或者

$ echo ATZ > commands.txt
$ echo AT+CMGF=1 >> commands.txt
$ atinout commands.txt /dev/ttyUSB0 output.txt

但对于AT + CMGS,我猜你暂时不得不use expect(将来atinout会有一个专门用于发送AT + CMGS的配套程序)。