短信 AT 命令参考 
分类: 移动开发 2008-05-21 17:04 4954人阅读 评论(4) 收藏 举报 
第三节 短消息实现方法
目前,主要有三种发送短信的方式:
1、 网关方式:就是向当地的电信部门申请,不需要额外的设备,适用于大型的通信公司,像华为、傲天、中兴、亚信等。
2、 终端方式:就是借助像GSM MODEM之类的设置(支持AT指令的手机也行),通过数据线连接电脑,来发送短信,用这种方法比较适用于小型及个人。要实现这种方式必须理解串口通信、AT指令、短信编码、解码。
3、 利用一些网站来实现,方式简单,不过对网站依赖性太高,对网络的要求也比较高,非常不适于进行项目开发。
实际分析系统需求,我们采用终端方式实现短信的收发。
第四节               短消息编码
在收发短信方面,按时间产生先后,共产生了三种模式:Block Mode、基于AT指令的Text Mode、基于AT指令的PDU Modem。 Text Mode是纯文本方式,可使用不同的字符集,主要用于欧美地区。从技术上说也可用于发送中文短消息,但国内手机基本上不支持。PDU Mode被所有手机支持,可以使用任何字符集,这也是手机默认的编码方式。PDU模式下短信息正文经过十六进制编码后被传送。目前,PDU已取代Block Mode,因此我们主要说明PDU模式的发送。
3.4.1 PDU模式的数据格式 
PDU串表面上是一串ASCII码,由‘0’-‘9’、 ‘A’-‘F’这些数字和字母组成。它们是8位字节的十六进制数,或者BCD码十进制数。PDU串不仅包含可显示的消息本身,还包含很多其它信息,如SMS服务中心号码、目标号码、回复号码、编码方式和服务时间等。发送和接收的PDU串,结构是不完全相同的。我们先用两个实际的例子说明PDU串的结构和编排方式。 
例2.1发送:SMSC号码是+8613800591500,对方号码是13950410716,消息内容是“Hello World!”。 
PDU串是: 08 91 68 31 08 50 19 05 F0 11 00 0D 91 68 31 59 40 01 17 F6 00 00 00 0B E8 32 9B FD 06 DD DF 72 36 19 
分段分析如下: 
分段 含义 说明   
08  SMSC地址信息的长度 共8个八位字节(包括91)    
91  SMSC地址格式(TON/NPI)  用国际格式号码(在前面加‘+’)    
68 31 08 50 19 05 F0  SMSC地址 8613800591500,补‘F’凑成偶数个   
11  基本参数(TP-MTI/VFP)  发送,TP-VP用相对格式   
00  消息基准值(TP-MR)  0    
0D  目标地址数字个数 共13个十进制数(不包括91和‘F’)    
91  目标地址格式(TON/NPI)  用国际格式号码(在前面加‘+’)    
68 31 59 40 01 17 F6  目标地址(TP-DA)  8613950410716,补‘F’凑成偶数个 
00  协议标识(TP-PID)  是普通GSM类型,点到点方式 
00  用户信息编码方式(TP-DCS)  7-bit编码 
00  有效期(TP-VP)  5分钟 
06  用户信息长度(TP-UDL)  实际长度6个字节 
E8329BFD06DDDF723619  用户信息(TP-UD)  “Hello World!”  
 
SMSC地址格式(TON/NPI )说明:91—短信息中心号码类型。91是TON/NPI遵守International/E.164标准,指在号码前需加‘+’号。 
具体格式如表所示:0x91 = 10010001 
BIT No.  7  6  5  4  3  2  1  0  
Name  1  数值类型 号码鉴别  
 
数值类型(Type of Number):000—未知,001—国际,010—国内,111—留作扩展; 
号码鉴别(Numbering plan identification):0000—未知,0001—ISDN/电话号码(E.164/E.163),1111—留作扩展; 
基本参数(TP-MTI/VFP)说明: TP-MTI/VFP是以位图形式表示信息内容。 
具体格式如表所示:0x11=00010001 
BIT No.  7  6  5  4  3  2  1  0  
Name  TP-RP  TP-UDHI  TP-SPR  TP-VFP  TP-RD  TP-MTI  
Value  0  0  0  1  0  0  0  1  
 
应答路径—TP-RP(TP-Reply-Path):
0—不设置; 
1—设置 
用户数据头标识—TP-UDHL(TP-User-Data-Header-Indicator): 
0—不含任何头信息; 
1—含头信息 
状态报告要求—TP-SPR(TP-Status-Report-Request): 
0—需要报告; 
1—不需要报告 
有效期格式—TP-VPF(TP-Validity-Period-Format): 
00—不提供(Not present); 
10—整型(标准); 
01—预留; 
11—提供8位字节的一半(Semi-Octet Represented) 
拒绝复制—TP-RD(TP-Reject-Duplicates): 
0—接受复制; 
1—拒绝复制 
信息类型提示—TP-MTI(TP-Message-Type-Indicator): 
00—读出(Deliver); 
01—提交(Submit) 
协议标识TP-PID(TP-Protocol-Identifier ):
 
BIT No.  7  6  5  4  3  2  1  0  
 
Bit No.7与Bit No.6:(一般将这两位置为00) 
00—如下面定义的分配,参见GSM03.40协议标识完全定义; 
01—10—预留; 
11—为服务中心(SC)特殊用途分配Bit No.0—Bit No.5。 
Bit No.5:           0—不使用远程网络,只是短消息设备之间的协议;
1—使用远程网络。 
Bit No.0—Bits No.4: 00000—隐含; 
00001—电传; 
00010—group 3 telefax; 
00100—语音; 
00101—欧洲无线信息系统(ERMES); 
00110—国内系统; 
10001—任何基于X.400的公用信息处理系统; 
10010—Email。 
数据编码方案TP-DCS(TP-Data-Coding-Scheme): 
 
BIT No.  7  6  5  4  3  2  1  0  
 
Bit No.7与Bit No.6 :   一般设置为00; 
Bit No.5:           0—文本未压缩
1—文本用GSM标准压缩算法压缩; 
Bit No.4:                  0—表示Bit No.1、Bit No.0为保留位,不含信息类型信息, 
1—表示Bit No.1、Bit No.0含有信息类型信息; 
Bit No.3与Bit No.2:   00—默认的字母表(7bit编码) 
01—8bit, 
10—USC2(16bit)编码 
11—预留; 
Bit No.1与Bit No.0:    00—Class 0, 
01—Class 1, 
10—Class 2(SIM卡特定信息), 
11—Class 3。 
 
例2.2 接收: SMSC号码是+8613800591500,对方号码是13950410716,消息内容是“你好!”。 
手机接收到的PDU串是: 08 91 68 31 08 50 19 05 F0 84 0D 91 68 31 59 40 01 17 F6 00 08 30 10 10 11 62 42 23 06 4F 60 59 7D 00 21 
分段分析如下: 
分段 含义 说明   
08  地址信息的长度 个八位字节(包括91)    
91  SMSC地址格式(TON/NPI)  用国际格式号码(在前面加‘+’)    
68 31 08 50 19 05 F0  SMSC地址 8613800591500,补‘F’凑成偶数个   
84  基本参数(TP-MTI/MMS/RP)  接收,无更多消息,有回复地址   
0D  回复地址数字个数 共13个十进制数(不包括91和‘F’)    
91  回复地址格式(TON/NPI)  用国际格式号码(在前面加‘+’)    
68 31 59 40 01 17 F6  回复地址(TP-RA)  8613950410716,补‘F’凑成偶数个 
00  协议标识(TP-PID)  是普通GSM类型,点到点方式 
08  用户信息编码方式(TP-DCS)  UCS2编码 
30 10 10 11 62 42 23  时间戳(TP-SCTS)  2003-01-01 11:26:24 23时区 
06  用户信息长度(TP-UDL)  实际长度6个字节 
4F 60 59 7D 00 21  用户信息(TP-UD)  “你好!”  
 
3.4.2 PDU模式的信息编码格式 
    在上述说明中提到了在PDU Mode中,可以采用三种编码方式来对发送的内容进行编码,它们是7-bit、8-bit和UCS2编码。7-bit编码用于发送普通的ASCII字符,它将一串7-bit的字符(最高位为0)编码成8-bit的数据,每8个字符可“压缩”成7个;8-bit编码通常用于发送数据消息,比如图片和铃声等;而UCS2编码用于发送Unicode字符。PDU串的用户信息(TP-UD)段最大容量是140字节,所以在这三种编码方式下,可以发送的短消息的最大字符数分别是160、140和70。这里,将一个英文字母、一个汉字和一个数据字节都视为一个字符。 
(1) 7-bit编码 
缺省的GSM 字符集为7位编码,可以简单地理解为ASCII码(ASCII值小于80Hex,因此,Bit8被忽略),依次将下一7位编码的后几位逐次移至前面,形成新的8位编码, GSM并非支持所有的ASCII字符显示。 
(2) 8-bit编码 
8-bit编码通常用于发送数据消息,比如图片和铃声等;8-bit编码其实没有规定什么具体的算法。 
(3) UCS2编码 
UCS2编码是将每个字符(1-2个字节)按照ISO/IEC10646的规定,转变为16位的Unicode宽字符。在Windows系统中,特别是在2000/XP中,可以简单地调用API 函数实现编码和解码。如果没有系统的支持,比如用单片机控制手机模块收发短消息,只好用查表法解决了。 
需要注意的是,PDU串的用户信息长度(TP-UDL),在各种编码方式下意义有所不同。7-bit编码时,指原始短消息的字符个数,而不是编码后的字节数。8-bit编码时,就是字节数。UCS2编码时,也是字节数,等于原始短消息的字符数的两倍。如果用户信息(TP-UD)中存在一个头(基本参数的TP-UDHI为1),在所有编码方式下,用户信息长度(TP-UDL)都等于头长度与编码后字节数之和。如果采用GSM 03.42所建议的压缩算法(TP-DCS的高3位为001),则该长度也是压缩编码后字节数或头长度与压缩编码后字节数之和
第四章 AT指令
AT指令在当代手机通讯中起着重要的作用,能够通过AT指令控制手机的许多行为,包括拨叫号码、按键控制、传真、GPRS等。
第一节 AT命令概述 
因为AT命令是作为一个接口标准,所以它的命令和返回的值和格式都是固定的,总体上说AT命令有四种形式: 
1. 无参数命令。它是一种单纯的命令,格式是AT[+|&]<command>,如开机、显示当前设置列表等: AT+ON、AT&V … 
2. 查询命令。它用来查询该命令当前设置的值,格式是AT[+|&]<command>?,如: AT+CSCA? 
3. 帮助命令。它是用来列出该命令的可能参数,格式是AT[+|&]<command>=?,如: AT+CMGL=? 
4. 带参数命令。它是应用最广的一种格式,它为命令提供了强大的灵活性,格式是
AT[+|&]<command>=<par1>,<par2>,<par3>… 
作为返回值,其情况就比较多样,这在后面的命令详解中将具体给出。但是返回值还是遵循一个大的框架格式: 
<CR><LF><回应字串><CR><LF><OK/ERROR>[: ERROR信息] 
4.1.1AT命令详细说明 
以下给出了ZTE MZ28支持的AT命令和返回说明,其中: 
1 默认参数值以下划线标识。 
2 []内的参数表示可选项。 
3 如果需要设置后面[]参数值,则前面[]参数值以,分隔。 
4 所有引号之外的空格被忽略。 
5 数字字符串前面的0被忽略。 
6 对于本版本模块不支持的AT命令,将返回ERROR。 
第二节 常用基本AT命令
(1) AT   测试连接是否正确
(2) ATE         Trigger Command Echo 回显开关 
ATE  OK  
ATE<n>  触发回显,正确设置后,
返回: OK  
参数说明 <n> 0 关闭回显 
1 打开回显 
参考V.25ter  
(3) AT+CGMI    Read manufacture identification读取厂商信息 
AT+CGMI=?  OK  
AT+CGMI  返回厂商信息: 
ZTE 
OK 
如错误返回: +CME ERROR:<err>  
  (4)  AT+CGMM Request model identification读取Model识别 
AT+CGMM=?  OK  
AT+CGMM  返回产品信息: 
MZ28 
OK 
如错误返回: +CME ERROR:<err>  
参考07.07  
 
(5)         AT+CGMR  Request revision identification 读取版本信息 
 
AT+CGMR=?  OK  
AT+CGMR  返回版本信息: 
<revision> 
OK 
如错误返回: +CME ERROR:<err>  
  参数说明 <revision> MZ28Vx.yy.zz 比如MZ28V1.00.00  
参考07.07  
(6)   AT+CSCS Set TE character set 选择TE字符集
 
AT+CSCS=?  返回ME支持的字符集 
+CSCS: (list of supported <chset>s) 
OK  
AT+CSCS?  返回当前TE选择的字符集 
+CSCS: <chset> 
OK  
AT+CSCS=<chset>  设置TE字符集,正确返回 
OK 
如错误返回: +CME ERROR:<err>  
  参数说明 
< chset >: “GSM” GSM默认字符GSM Default Alphabet 
“UCS2” 16bit Unicode 
注意:该参数必须是大写字母。 
参考07.07  备注: 
电话号码的传输将不按照CSCS设置的字符集,因为电话号码足以用7bit来表示,这就是说即使chset=USC2,号码还是按照IRA传输。其它文本(比如短消息内容,电话本姓名等)一律按照协议要求。  
 
(7)       AT+CNUM Subscriber number 本机号码 
AT+CNUM=?  OK  
AT+CNUM  返回本机号码: 
+CNUM:[<alpha1>],<number1>,<type1>[,<speed>,<service>[,<itc>]][<CR><LF>+CNUM:[<alpha2>],<number2>,<type2>[,<speed>,<service>[,<itc>]][………]] 
OK 
如错误返回: 
+CME ERROR:<err>  
  参数说明 
<alphax> 和number相关的字符 
<numberx> 本机号码 
<typex> 号码类型 
<service> 4 Voice 
<itc> 不支持 
<speed> 不支持 
(8)  AT+COPN Read operator names读取运营商名字
AT+COPN=?  OK  
AT+COPN  返回ME中存贮的运营商名字 
+COPN:<numericl>,<alpha1>[<CR><LF>+COPN:<numeric2>,<alpha2>[...]] 
OK 
如错误返回: 
+CME ERROR:<err>  
  参数说明 
同+COPS  
以上这些指令都用于与手机连接的时候初始化用。取得手机IMEI及IMSI可以给使程序支持更多的手机连接并且保持数据独立。
第三节 短消息命令
(1) AT+CSCA Service Center Address设置短消息服务中心地址 
AT+CSCA=?  OK  
AT+CSCA?  返回当前的服务中心地址: 
+CSCA:<sca>,<tosca> 
OK 
如错误返回: +CMS ERROR:<err> 
AT+CSCA=<sca>[,<tosca>]  选择SM服务中心地址,如执行正确则返回: OK 
如错误返回: +CMS ERROR:<err>  
(2) AT+CMGF Message Format选择短消息格式 
AT+CMGF=?  返回所有支持的消息格式: 
+CMGF

list of supported <mode>s) 
OK 
如错误返回: +CMS ERROR:<err>  
AT+CMGF?  返回当前的消息格式: 
+CMGF:<mode> 
OK 
如错误返回: +CMS ERROR:<err>  
AT+CMGF=[<mode>]  选择消息格式,如执行正确则返回: OK 
如错误返回: +CMS ERROR:<err>  
  参数说明: <mode> 0 PDU模式 
1 TEXT模式 
(3) AT+CMGR Read Message读取短消息
AT+CMGR=?  OK  
AT+CMGR=<index>  读取存储器中指定位置的消息(存储器由+CPMS指定),返回格式: 
TEXT模式下(+CMGF=1)且执行正确: 
SMS-DELIVER: 
+CMGR:<stat>,<oa>,[<alpha>],<scts>[,<tooa>,<fo>,<pid>,<dcs>,<sca>,<tosca>,<length>]<CR><LF><data> 
OK 
SMS-SUBMIT: 
+CMGR:<stat>,<da>,[<alpha>][,<toda>,<fo>,<pid>,<dcs>,[<vp>],<sca>,<tosca>,<length>]<CR><LF><data> 
OK 
PDU模式下(+CMGF=0)且执行正确: 
+CMGR: <stat>,[<alpha>],<length><CR><LF><pdu> 
OK 
如错误返回: +CMS ERROR:<err> 
(4) AT+CMGS Send Message 发送短消息
AT+CMGS=?  OK  
TEXT模式下(+CMGF=1) 
AT+CMGS=<da>[,<toda>]<CR> 
Text is entered <ctrl-Z/ESC> 
PDU模式下(+CMGF=0) 
AT+CMGS=<length><CR> 
pdu is given <ctrl-Z/ESC>  ME向网络发送短消息,成功时返回<mr>,当命令正确执行并成功发送时返回: 
+CMGS:<mr> 
OK 
如错误返回: +CMS ERROR:<err>  
参考GSM07.05  备注: 
1 ctrl-Z表示输入消息体的结束。 
2 ESC表示放弃输入消息体,重回command状态,此时将返回ERROR。 
3 PDU模式下TP-MTI支持SMS-DELIVER,SMS-SUBMIT和SMS-STATUS-REPORT,但不支持SMS-DELIVER-REPORT,SMS-SUBMIT-REPORT 和SMS-COMMAND。  
(5) AT+CMGD Delete Message 删除短消息 
AT+CMGD=?  OK  
AT+CMGD=<index>  删除存储器中<index>指定位置的消息(存储器由+CPMS设置的<mem1>参数选指定)。如果index=0,将删除全部短
消息。如命令执行正确返回: 
OK 
如错误返回: 
+CMS ERROR:<err>   
(6) AT+CSMS Select Message Service 选择短消息服务 
AT+CSMS=?  返回所有支持的服务类型: 
+CSMS

list of supported <service>s) 
OK 
如错误返回: 
+CMS ERROR:<err>  
AT+CSMS?  返回当前的服务类型及ME支持的信息: 
+CSMS:<service>,<mt>,<mo>,<bm> 
OK 
如错误返回: +CMS ERROR:<err> 
AT+CSMS=<service>  选择SMS类型,如执行正确则返回: 
+CSMS:<mt>,<mo>,<bm> 
OK 
如错误返回: +CMS ERROR:<err>  
  参数说明: 
<service> 0 Phase 2 
128 厂商自己定义 
<mt>    0 ME不能接收短消息 
1 ME可以接收短消息 
<mo>   0 ME不能发送短消息 
1 ME可以发送短消息 
<bm>   0 ME不能接收小区广播 
1 ME可以接收小区广播