金笛工业手机论坛  

返回   金笛工业手机论坛 > 开发者乐园 > 短信开发资料

短信开发资料 短信开发技巧,代码分析

回复
 
LinkBack 主题工具 显示模式
旧 2012-08-26   #1 (permalink)
论坛管理员
 
admin 的头像
 
注册日期: 2009-06-30
帖子: 861
admin 的声望功能已被禁用
默认 AT命令参考

短信 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=? 返回所有支持的消息格式:
+CMGFlist 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=? 返回所有支持的服务类型:
+CSMSlist 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可以接收小区广播
__________________

让世界倾听我们的笛声
admin 当前离线   回复时引用此帖
回复

书签


当前查看此主题的会员: 1 (0 位会员和 1 位游客)
 

发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛启用 表情符号
论坛启用 [IMG] 代码
论坛禁用 HTML 代码
Trackbacks are 启用
Pingbacks are 启用
Refbacks are 启用



所有时间均为北京时间。现在的时间是 19:10


Powered by vBulletin® 版本 3.8.3
版权所有 ©2000 - 2024,Jelsoft Enterprises Ltd.