金笛工业手机论坛  

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

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

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

短信发送

3.1.3 短信发送
格式为: AA 02 +11Bytes手机号+数据。需要说明的是数据长度不超过140Byte,为了手机能够正确显示需经UNICODE 编码,因此每帧最多70个字符。手机号码采用ASCII编码,例如,”1”的ASCII编码为31,13595313404的ASCII编码为31 33 35 39 35 33 31 33 34 30 34。
以向手机13595313404发送“你好”为例,UNICODE编码为:4F60(你)597D(好)发送的信息为:AA 02 31 33 35 39 35 33 31 33 34 30 34 4F 60 59 7D 。在Windows 系统中可调用MultiByteToWideChar() 将字符串转换成UNICODE编码的格式。
采用这种设备发送短信实现起来比较简单,需要注意的一点就是,发送短信不能太频繁,成功发送一条短信后需要等待2-3秒在发下一条,否则可能造成设备的死机。一旦设备死机,需要将设备断电重启一下。
3.2 采用AT命令进行短信发送
更为常见的一类设备,提供了GSM Modem,直接利用AT命令进行短信发送。九十年代初,AT命令仅被用于modem操作。由于没有控制移动电话文本消息的先例,因此开发了一种叫SMS Block Mode的协议,通过终端设备(TE)或电脑来完全控制SMS(Short Message Service 短信服务)。几年后,主要的移动电话生产厂商诺基亚、爱立信、摩托罗拉和HP共同为GSM研制了一整套AT命令,其中包含对短信的控制。AT命令在此基础上演化并被加入GSM 07.05[9]标准,以及之后的GSM 07.07[10]标准。目前对短信的控制共有三种实现途径:最初的Block Mode;基于AT命令的Text Mode;基于AT命令的PDU Mode。到现在,PDU已取代Block Mode,采用text模式比较简单,但是只能发送ASCII码,不能发送中文,而PDU模式开发起来相对复杂一些,但功能比较强大,对于中文采用UNICODE编码进行发送。
3.2.1 AT 命令简介
AT 即Attention,AT 命令是一组是从TE (Terminal Equipment 终端设备) 或DTE (Data Terminal Equipment 数据终端设备) 向TA (Terminal Adapter 终端适配器)或DCE (Data Circuit Terminating Equipment 数据电路终端设备)发送的控制MS (Mobile Station 移动基站)的功能与GSM 网络业务进行交互的一组命令集合。用户可以通过AT 命令来完成呼叫短信、电话本、数据业务、补充业务、传真等方面的控制[6]。
AT 标准是一个面向行的命令语言。在我们的这个应用中TE (终端设备状态),可以是任何大小的计算机, TA(终端适配器),指的是GSM调制解调器。该命令行由一串字母数字的字符组成,它发送到调制解调器来指示执行由字符指定的命令。与SMS有关的GSM AT指令[9]如表1所示:

  表 1:相关的GSM AT指令
AT 指令 功 能
AT+CMGC Send an SMS command(发出一条短信命令)
AT+CMGD Delete SMS message(删除SIM卡内存的短信)
AT+CMGF Select SMS message format(选择短信信息格式:0-PDU;1-文本)
AT+CMGL List SMS message from preferred store(列出SIM卡中的短信PDU/text: 0/"REC UNREAD"-未读,1/"REC READ"-已读,2/"STO UNSENT"-待发,3/"STO SENT"-已发,4/"ALL"-全部的)
AT+CMGR Read SMS message(读短信)
AT+CMGS Send SMS message(发送短信)
AT+CMGW Write SMS message to memory(向SIM内存中写入待发的短信)
AT+CMSS Send SMS message from storage(从SIN|M内存中发送短信)
AT+CNMI New SMS message indications(显示新收到的短信)
AT+CPMS Preferred SMS message storage(选择短信内存)
AT+CSCA SMS service center address(短信中心地址)
AT+CSCB Select cell broadcast messages(选择蜂窝广播消息)
AT+CSMP Set SMS text mode parameters(设置短信文本模式参数)
AT+CSMS Select Message Service(选择短信服务)

 
  
设备之间通信的波特率默认的是 9.6 kbit/s,可以由AT+IPR 命令来设置波特率,一般支持的通信速率包括:1200、2400、4800、9600、19200、38400、57600、115200、230400、46800。
以实例来说明这些指令的使用方法:
  用手机数据线将手机连接到电脑串口,并将串口的波特率设置为9600。
(1) 首先测试你的连接及手机是否支持AT指令,请在你的串口调试程序中输入:
AT<回车>
 屏幕上返回"OK"表明计算机与手机连接正常,那样我们就可以进行其它的AT指令测试了
(2)设置短信中心(以13800531500为例)
AT+CSCA=+8613800531500<回车>
(3)关闭回显
ATE0<回车>
3.2.2 TEXT 模式发送短信
(1)使用命令将短信模式设置为TEXT模式
AT+CMGF=1 <回车>
(2) 发送短信,以向手机13595313404发送“HELLO”为例
AT+CMGS=13595313404<回车>
如果返回">",输入“HELLO”,并以CTRL+Z结尾,稍等一下,你就可以看到返回OK啦。短信就发出去了。
3.2.3 PDU 简介
PDU(Protocol Data Unit),协议数据单位。用PDU 模式发送短信可以使用三种编码: 7-bit 编码、8-bit 编码和UCS2 编码[7][ 8]。7-bit 编码用于发送普通的ASCII 字符,8-bit 编码通常用于发送数据消息,UCS2 编码用于发送Unicode 字符。由于要实现中文短信的发送,所以选择用UCS2 编码,即中文Unicode 码。例如向手机13595313404发送“你好”PDU编码为:08 91 68 31 08 50 13 05 F0 11 00 0D 91 68 31 95 35 31 04 F4 00 08 00 04 4F 60 59 7D
具体的解释为:
(1) 08短信中心长度
(2) 91短信中心有国家编码
(3) 68 31 08 50 13 05 F0短信中心+8613800531500(将短信息中心号码去掉+号,看看长度是否为偶数,如果不是,最后添加F,将奇数位和偶数位交换,86我国的国家编码)
(1)(2)(3)合称SMSC(短信中心地址)。 如果地址信息的长度 00表示采用手机上设置短信中心号码,PDU 串的“SMSC 址格式”段和“SMSC 地址”段将省去。
(4)11文件头字节
(5)00消息基准值(TP-MR)
(6)0D目标号码的长度14位
(7)91目标号码有国家编码
(8)68 31 36 32 64 49 F0 目标号码 +8613595313404
(6)(7)(8)构成了整个短信的第二部分,目的地址(TP-Destination-Address)
(9)00 协议标识(TP-PID) 是普通GSM 类型,点到点方式
(10) 08数据编码方案TP-DCS ( TP-Data-Coding -Scheme ), 采用前面说的USC2(16bit)数据编码
(11)00有效期(TP-VP)
(12)04 正文4字节
(13)4F 60 59 7D 你好 短信内容
3.2.3 PDU 模式发送短信
(1)使用命令将短信模式设置为PDU模式
AT+CMGF=0 <回车>
(2) 发送短信,以向手机13595313404发送“你好”为例
AT+CMGS=019<回车>
  如果返回">",输入08 91 68 31 08 50 13 05 F0 11 00 0D 91 68 31 95 35 31 04 F4 00 08 00 04 4F 60 59 7D,并以CTRL+Z结尾,稍等一下,你就可以看到返回OK啦。短信就发出去了。
019短信长度,除去短信中心后PDU的字节数。
__________________

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

书签


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

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

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



所有时间均为北京时间。现在的时间是 18:59


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