原文:http://scj2002.blog.163.com/blog/static/55264793200812794611802/


 4.3.2.4 短消息部分

在GPRS数字传输模块中,短消息部分有两个作用:一是数字传输模块工作在短信状态下,此时模块作为短信传输模块,二是模块在其它工作状态下的错误处理和模块参数设置。以下分两个部分讨论短信部分,首先讨论短信部分的设计,其次讨论该模块与程序其它部分的交互过程。

1.短消息部分设计

(1)短消息格式[45,46]短消息是目前非常受欢迎的一种移动增值业务,它利用移动系统 的控制信道传输数字信息,每条短信息的长度不能超过140个字节。短消息的发送有三种模式,分别是块模式(Block Mode)、文本模式(Text Mode)以及PDU模式。块模式和文本模式现在已经很少使用了,多数情况下使用PDU模式。PDU模式的短消息格式为:

 

 

以下分别解释PDU中各个域的意义:

  •         短信中心地址

短信中心地址包括3个部分,分别为:

短信中心长度:1个字节,表示短信中心的长度,短信中心号码采用BCD码编码,所以此处的长度值是实际号码长度的一半,即如果号码为8613901234567,那么需要将号码后增加一个F补足为偶数(这是为了进行BCD编码,因为半个字节无法使用),此时的长度为8。

号码类型:1字节,表示该号码的类型,它也是号码的一部分,短信中心的长度包括该字节。该字节各位的意义如下:

位7:固定为1

位6-4:数值类型;000:未知;001:国际号码;010:国内;111:扩展

位3-0:号码鉴别;0000:未知;0001:ISDN/电话号码;1111:扩展

常用值为:91,表示国际号码

中心号码:变长,短信中心号码;如上文所述,中心号码使用BCD编码,即将正常的2个字节合 并为一个字节,同时要将后面的字节放到高位。比如,中心号码为13800731500,则编码后为3108701305F0,在电话号码长度为奇数时后面 补F然后编码。使用国际号码时前面应该加上国家号码,我国为86。

  •         文件头

文件头:1字节,字节的各位意义为:

位7:应答路径; 0:不使用设置;1:使用设置

位6:用户数据头标识;0:不含任何头信息;1:含头信息

位5:是否需要状态报告要求;0:需要报告;1:不需要报告

位4-3:有效期格式;00:不提供;10:整型;01:预留;11:提供8位字节的一半

位2:拒绝复制标志;0:接受复制;1:拒绝复制

位1-0:信息类型提示;00:读出;01:提交

常用值为11,即表示有效期(后面有该域表示有效期)为整型;并且该信息为提交类型(发送短信)。

  •         信息类型

设置为00

  •         目标地址

与短消息中心类似,目标地址也包括目标地址长度、号码类型和目标号码。目标号码为接收方的号码,存储格式和存储方法与中心地址格式完全相同。

  •         协议标识符

位7-6:设置下面的位0到5的意义。00:按以下定义分配位0到5;01:同GSM03.40协议标识完全定义;10:预留;11:为服务中心特殊用途分配位0到5

当位7-6为00时,0到5的意义如下:

位5:0:不使用远程网络,只是短消息设备之间的协议;1:使用远程网络

位0到4:00000:隐含;00001:电传;00010:电话传真;00100:语音;00101:欧洲无线信息系统;00110:国内系统;10001:任何基于X.400的公用信息处理系统;10010:EMAIL

一般使用值为00。

  •         数据编码方案

表示信息的编码方案。

位7-6:00

位5:0:文本未压缩;1:文本用GSM标准压缩算法压缩

位4:0:表示位1和位0为保留位,不含信息类型;1:表示位1和位0包含信息类型

位3-2:表示信息使用的字符集。00:默认字母表;01:8位字符;10:USC2(16位);11:预留;

位1-0:00:Class 0; 01:Class 1; 10: Class 2 11:Class 3

  •         数据有效期

表示该信息的有效时间。设该值为VP,则该值与有效期的关系为:

VP在00到8F之间:(VP+1)*5分钟;

VP在90到A7之间:12小时+(VP-143)*30分钟

VP在A8到C4之间:(VP-166)*1天;

VP在C5到FF之间:(VP-192)*1周

  •         用户数据长度

用户数据编码以前的长度,因为在采用7位字符集发送时经过编码信息长度会发生改变,所以要注意。

  •         用户数据

用户数据根据数据编码方案中的选择,可以有两种方式:其一是7位编码的字符集,即只包括 ASCII码表中的字符;另一个是16位编码的UCS2字符,其中可以发送世界各国文字。在采用7位编码时,经过移位编码,可以把160个字符编码为 140个字符,从而使一条短信可以携带更多的信息,使用16为编码只能发送70个字符。

7位字符适合用来发送英文或数字信息,因此,作为数传终端发送数字时采用这种编码方案可以节 约费用。编码的具体规则位:将第二个字节的最后一位移动到第一个字节的高位,将第一个字节补足8位,然后再用第三个字节最后两位将第二个字节补足为8为, 依次类推,最后一个字节如果不足8位则在高位补0。比如,如果要发送信息“0123”,那么它们的ASCII码为0110000 0110001 0110010 0110011,各个字符都是7位,经过编码为:10110000 10011000 01101100 00000110。

(2)短消息部分程序

使用MC35i发送短信,首先要进行必要的设置。发送短信时首先要设置短信使用的模式,使用 AT+CMGF=0设置发送短信的模式为PDU模式。在4.3.2.1中已经讨论过,系统中短信接收方式为直接接收,即有短信到达后,只要MC35i没有 处于数据状态,则MC35i将直接从串行口发送信息。这样我们无需读取和删除短信。但是此时在接收到短信后,必须发送AT命令AT+CNMA=0来通知 MC35i短信已经接收到。综上所述,短消息的发送流程为:初始化短信发送的模式和接收的方式,然后生成PDU帧头,设置编码方案等值;接着将要发送信息 进行编码,并求出此时整个信息的长度,然后使用AT+CMGS发送短信。AT+CMGS=<Length>,其中Length为要发送的信息 的长度,字符格式,发送该指令后,等待接收字符’>’,如果没有接收到该符号,则发送出现错误,进行相应的处理,否则将设置好的PDU发送出去,注 意发送的PDU都是字符格式的,PDU的最后以ASCII码26结束(即Ctrl+Z),若最后发送ESC则放弃本次发送。在接收短信时,消息循环检测到 数据后,将调用sms_input()分析接收到的MC35i的通知信息,然后发送AT指令AT+CNMA=0来确认接收到的短信。接着将接收到的信息进 行解码,得到短信的发送方和信息内容,并将相应的信息传送给用户。

posted on 2011-01-18 13:53  hotty  阅读(638)  评论(0)    收藏  举报