用CMSS指令提高串口群发短信的效率

54powerman
一 指令介绍:
1 +CMGW 将消息写入内存(Write Message to Memory)。
描述:该指令将一条消息存储到内存中(SMS-SUBMIT 或 SMSDELIVERS),并返回保存在内存中的位置。输入的“消息文本”或 PDU 可以被发送消息的指令 +CMSS 使用。
语法格式:
文本模式: (<index> is returned in both cases)
AT+CMGW= <oa/da> [,<tooa/toda> [,<stat> ] ] <CR> enter text <ctrl-Z / ESC>
PDU模式:
AT+CMGW= <length> [,<stat>] <CR> give PDU <ctrl-Z / ESC>
返回消息格式:
+CMGW: <index>
或(如果发生错误)
+CMS ERROR: <err>

2 +CMSS 发送存储的消息(Send Message From Storage)
描述:该指令发送存储在<index>指定位置的消息。
语法格式:
AT+CMSS=<index>[,<da> [,<toda>] ]
返回消息格式:
+CMSS : <mr>
或(如果发生错误)
+CMS ERROR: <err>
如果通过<da>传递了一个新的收件人地址,将会取代已保存消息的收件人。

3 参数说明:
<oa/da> : 字符串,源/终消息地址。
<tooa/toda> : 源/终地址类型。129表示普通号码类型,145表示国际号码类型(自动在号码前加“+”)。
<stat>: PDU模式为整型(在+CMGW指令中缺省为2),文本模式为字符串(在+CMGW指令中缺省为"STO UNSENT"),标记消息在内存中的状态,如果 <stat> 被忽略, 被存储的消息被认为是要发送的消息。
<stat> 的取值:
--0: "REC UNREAD"
--1: "REC READ"
--2: "STO UNSENT"
--3: "STO SENT"
<length> : 实际数据的字节长度。

二 实现原理:
基于上面的指令,我们发现可以如下方式提高发送效率——通过+CMGW将要群发的消息保存到内存中,然后一次调用+CMSS将消息发送出去,而无须每次发送重复的PDU信息,减少了通信数据。

三 示例:(以下采用java注释风格进行注释)
AT               //测试连接状态
OK               //连接正常
AT+CMGF?  //查看当前工作模式
+CMGF: 1         //文本模式

OK               //消息返回结束
at+cmgf=0;       //设置工作模式为PDU模式
OK
AT+CMGF?  //查看当前工作模式
+CMGF: 0  //PDU模式

OK
AT+CPMS=?  //查看当前首选存储器
+CPMS: ("SM"),("SM"),("MT")

OK
AT+CPMS?  //查看当前存储器中的消息
+CPMS: "SM",0,70,"SM",0,70,"MT",0,70  //当前三个存储器中消息数均为0

OK
AT+CMGW=21  //向内存中写入一条消息
> 0891683108100005F011000D916831xxxxxxxxFx00000006C8329BFD0E01^Z
+CMGW: 1  //消息保存成功,其索引<index>为1,记住这个数字,后面要用。

OK
AT+CPMS?
+CPMS: "SM",1,70,"SM",1,70,"MT",1,70  //当前SM 0存储器中有一条消息

OK
at+cmss=1,"13xxxxxxxx1",145  //将消息转发给13xxxxxxxx1
+CMSS: 232    //发送成功,并保存在存储器中,索引是232

OK
at+cmss=1,"13xxxxxxxx2",129  //将消息转发给13xxxxxxxx2
+CMSS: 233

OK                                      //结束

如果有不清楚的地方,可以加入QQ群9040323讨论。 

你可能感兴趣的:(用CMSS指令提高串口群发短信的效率)