【问题标题】:Getting +CMS ERROR: 96 While try to send sms through AT commands获取 +CMS ERROR: 96 尝试通过 AT 命令发送短信时
【发布时间】:2016-02-22 04:01:56
【问题描述】:
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 是因为缺少必填信息。

【问题讨论】:

  • 我强烈反对以“不清楚你在问什么”来结束这个问题。这个问题在散文文本上可能有点短,但存在所需的信息。事实上,对于新用户来说,这个问题实际上是很好的。它的格式很好,Venkat 查找了错误值 96 并包含了描述。

标签: shell at-command modem


【解决方案1】:

不,您不能以这种方式发送 AT 命令。首先阅读 V.250(第 5 章的全部内容)和 27.005 规范(AT+CMGS 命令),链接位于tag info page。这些文档会教你很多关于 AT 命令处理、语法和行为的知识。

最严重的错误是在没有等待最终结果代码的情况下发送 AT 命令行。同样,您不会编写一个完全忽略来自 HTTP 服务器的响应的 HTTP 客户端,您也不应该发送 AT 命令并完全忽略来自调制解调器的响应。

对于AT+CMGS 命令,您必须等待发送短信有效负载数据,直到收到"\r\n> " 前缀(有关详细信息,请参阅this answer 的第一部分)。

其他的,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的配套程序)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多