解决了cnmi=2,2即时模式下收不到短信的问题

解决了cnmi=2,2即时模式下收不到短信的问题
2011-03-21 10:04

如果AT+CSMS=1,接收到短信时,TE需在一定的时间内发送反馈消息至模块,也就是一收到+CMT,即一收到短信必须立刻回一个AT+CNMA \r,若超时,<mode>和<mt>的值会强制复位到0,即cnmi=2,2的设置会变成cnmi=2,0。那么,再有新的短信将不能被正确处理,需要用“at+cnmi”指令重新设置参数才行。这增加了程序处理的复杂性。AT+CSMS=0不需要回确认,省去了这些麻烦。

附:

消息接收和读出命令
5.4.1 给TE 指示新消息:AT+CNMI
当TE 处于在用状态时(如:DTR 信号处于“ON”状态),使用设置命令,可设置新消
息如何从网络侧发送到TE。若TE 处于待用状态(如:DTR 信号处于“OFF”状态),
消息接收流程应该按照GSM 03.38 的规定。
若 DTR 信号不可用或信号状态被忽略(V.25ter 命令:&D0),可使用+CNMA 确认流程
确保短消息的可靠传输。
“选择消息服务”命令+CSMS 应该用来检测ME 是否支持接收SM 和CBM,并决定直
接发送到TE 的消息是否需要确认(请参考+CNMA 命令)。

新消息确认:AT+CNMA
使用执行命令,可确认是否正确接收新消息(SMS-DELIVER 或
SMS-STATUS-REPORT),该新短消息是由MT 直接发送到TE 的。

通过 AT+CNMA 给出短信确认需要满足2 个条件:通过AT+CSMS=1,将<service>设为1;通过
AT+CNMI=,2,将<mt>设为2 或者AT+CNMI=,,1,将<ds>设为1。
在满足上述 2 个条件后,如果在收到短信后没有通过AT+CNMA 给出确认,CNMI 的参数<mt>
和<ds>会被重至为0,同时短信收发会受影响。

posted @ 2011-03-25 22:49  babykick  阅读(1312)  评论(1编辑  收藏  举报