2 回答
TA贡献1803条经验 获得超3个赞
关于您处理AT命令的一般说明。
不不不!这种做法永远不会可靠。在发送“要发送的文本”之前,您必须 等待>
收到该字符。或者实际上它不仅仅是>
角色,而是四个角色。引自3GPP规范27.005:
<CR><LF><greater_than><space>
在命令行终止后,TA应发送一个四字符序列 (IRA 13,10,62,32)<CR>
; 之后,可以从TE输入文本到ME / TA。
(TA(终端适配器)这里指调制解调器和TE(终端设备)AT命令的发送者)
对于任何可中止的AT命令(以及27.005明确指出AT + CMGS This command should be abortable.
),任何字符的发送都将中止命令的操作。引用ITU V.250:
5.6.1中止命令
...
通过从DTE到任何角色的DCE的传输来完成命令的中止。
(DCE(数据通信设备)这里指调制解调器和DTE(数据终端设备)AT命令的发送者)
这意味着当您在调制解调器发送“\ r \ n>”之前发送“要发送的文本”时,命令将被中止。没有办法等待“足够长”以期望发送响应。您必须阅读并解析从调制解调器返回的响应文本。
这同样适用于在每个命令之后的最终结果代码(例如OK
, ERROR
,CME ERROR
和几个)。例如,发送“AT + CMGF = 1”然后在没有先等待OK的情况下发送下一个命令就是要求解决问题。所以总是在发送AT命令时,你必须在发送下一个命令之前等待最终的结果代码。
请永远不要delay
等待任何AT命令响应。它就像踢狗一样有用,可以阻挡它们移动。是的它可能实际上有效,但在某些时候你会抱歉采取这种方法......
回答你的问题。
根据你得到的反应,我可以看到你的问题不是命令堕胎(虽然你的解析有严重的问题,如上所述,你应该修复),CME ERROR是你最好的线索。从27.007的“9.2.1一般错误”一节中,它给出operation not supported
了值4的描述。
27.005指出:
如果在网络中发送失败或ME错误,则返回最终结果代码+ CMS ERROR :.
请注意,这是+ CMS ERROR而不是+ CME ERROR,但它适用,请参阅下文。
我想这一系列动作如下:
SM100B GSM调制解调器的AT命令处理部分接受短信数据并以适当的格式对其进行格式化,并将其发送到与GSM网络通信的调制解调器部分。它成功地将短信数据发送到网络并将其报告回AT命令处理部分,然后打印+CMGS: 25
和最终结果代码OK
。但是,在短时间后,网络会发回短信的拒绝消息,然后将其作为+ CME ERROR响应给出。
如果我的猜测是正确的,那么响应是否应该以+ CMS ERROR的形式发送?不,因为已经给出了AT + CMGS命令的最终响应(OK),并且永远不应该为命令返回多个最终结果代码(错误除外(注释1))。虽然+ CME ERROR可以替换ERROR最终结果代码,但它不仅是最终结果代码。从AT + CMEE命令描述:
设置命令禁用或启用结果代码+ CME ERROR的使用:作为与MT功能相关的错误的指示。启用时,MT相关错误会导致+ CME ERROR:最终结果代码而不是常规ERROR最终结果代码。当错误与语法,无效参数或TA功能相关时,ERROR会正常返回。
因此,+ CME ERROR既可以是最终结果代码,也可以是未经请求的结果代码(也可能是中间结果代码)。
但AT + CMGS命令是否等待接收网络拒绝并返回+ CMS ERROR?可能不是。在不太了解短信发送的网络细节的情况下,今天的拒绝可能会在比以前更晚的时间发生。这种变化有时是GSM相关AT命令的问题,其具有最初与GSM行为紧密相关的旧遗产,随着技术转向GPRS,UMTS,LTE等,有时变得越来越不真实。
注1:
我之前的一位同事曾经抱怨标准指定语音呼叫处理的方式,因为在ATD1234之后; 命令你首先得到最终结果代码OK,然后在调用结束后你得到一个新的最终结果代码NO CARRIER。这个非常糟糕的设计,呼叫结束指示应该是一个特定的未经请求的响应,而不是最终的响应。
总结一下
您的短信似乎被网络拒绝了。试着找出原因。您还应该解决AT命令处理方面的一些严重问题; 没有读取和解析调制解调器的响应文本就无法处理AT命令。
TA贡献1890条经验 获得超9个赞
cell.println("AT+CNMI=3,3,0,0"); // set module to send SMS data to serial out upon receipt
对于那些正在寻找同样问题答案的人我:
我试图通过发送短信来唤醒gsm模块从睡眠模式,它不会马上工作。电话直接转到UART,但对于短信,你必须使用此命令设置模块在收到时将SMS数据发送到串口。
AT + CNMI = 3,3,0,0
添加回答
举报