短信格式(sms)以及编码总结

短信格式(sms)以及编码总结
短信开发指通过串⼝ at 命令驱动短信猫进⾏短信发送和接收操作。
AT 命令:AT命令是驱动短信设备的标准⼯业命令,除了业界的标准之外,每个⼚商可能会对其进⾏扩展,不过⼀般来说,标准命令应该够⽤,我在这⾥⽤的AT
是西门⼦ MC39i ,有专门的 AT 命令⽂档。
: Block、Pdu和 Text
⼀、短信猫操作分为三种模式:
1、Block 模式基本已经被 Pdu 模式取代,没有具体研究。
2、Text 模式⽐较简单,但是⽀持的设备不是很全,⽽且不能实现中⽂。
AT+CGMF=1<CR>
AT+CGMS=“136********”,129<CR> >Hello World!<^Z>
3、Pdu 模式
Pdu 编码主要包括两个主要的部分,⼀是 pdu 串的整体数据格式,分别因为发送信息串和接收信息串⽽有区别,⼆是 pdu 中⽂本部分的编码,分别因为字符集⽽不同。
我们也可以这样来理解这个 pdu 编码的格式, sms 相当于⼀个协议栈,最简单的协议栈:
根据 gsm03.40 规范, sms 协议包括以下⼏层:
1、SM-AL :应⽤层。这个部分就是数据部分。
2、SM-TL :传输层。我们可以清楚的看到这⾥描述了主要的短信内容,包括发送号码,接收号码,信息类型,编码,数据报长度等等,这也是我们
编程主要要⾯对的问题。
3、SM-RL :中继层。这个指的是短信在⽹关之间中继需要的协议。
4、SM-LL:链路层。
从上述描述中我们可以清楚的看到,我们编程主要集中于传输层。
: 7 位, 8 位, UniCode
⼆、短信传送有三种编码:
英⽂ 7 位编码
gsm的默认编码⽅式
由于这样的移位,我们可以看到我们能发的最多英⽂字符等于:140*8/7 = 160。
数据 8 位编码
8-bit编码通常⽤于发送数据消息,⽐如图⽚和铃声等;
3、中⽂ pdu 编码
发送中⽂时,必须⽤ UCS2 ( utf-16 )进⾏编码,最多可以发 140/2 = 70 个汉字。
UniCode 编码转换也⽐较简单,以中⽂为例,⼀个中⽂字符是两个字节,直接对⾼位字节和低位字节进⾏⼗六进制转换就可以了。如“欢迎”, UniCode 编码是 6B22 8FCE,这同时也就是转换的结果,如果发送的串中有英⽂字符,那么在前⾯补全00,以保证⼀个字符对应两个字节。
4、PDU 串的⽤户信息 (TP-UD) 段最⼤容量是 140 字节,所以在这三种编码⽅式下,可以发送的短消
息的最⼤字符数分别是 160 、 140 和 70 。这⾥,将⼀个英⽂字母、⼀个汉字和⼀个数据字节都视为⼀个字符。
三、地址编码
短信发送中都会涉及到短信地址的问题,他们的编码规则是⼀致的 , 简单来说就是 BCD8421码编码。
如: 08 91  6808501505F0,
08:地址长度,(号码类型+号码长度)/2的⼗六进制表⽰
91:号码类型
683108501505F0:号码,实际号码应为: +86138********,号码处理⽅法为,如果为+86开始,将+号去掉,然后判断是否为偶数,不是在末尾补F,然后将奇数位和偶数位互换
四、编码⽰例
1、发送信息的 PDU 串:
⽤⼿机写⼀条短信息,发送⼿机号码为136********,信息内容为“Hello World!”。通过执⾏AT+CMGL=
2可以读出此条信息。
AT+CMGL=2 {读未发短信息} +CMGL: 1,2,,24 {1表⽰信息个数,2表⽰未发信息,24表⽰信息总容量} 08 91 683108501505F0 11 00 0B 81 3106656930F1 0000FF 0B E8329BFD06DDDF723619 OK
下⾯分析这条信息:
08短信息中⼼地址长度。(短信息中⼼号码类型 + 短信息中⼼号码长度 /2 的⼗六进制表⽰)
91短信息中⼼号码类型, 91 是 TON/NPI 。 TON/NPI 遵守 International/E.164 标准,指在号码前需加‘+’号 ; 此外还可有其他数值,但 91 最常⽤。
683108501505F0短信息中⼼号码,是所使⽤的服务中⼼地址。由于位置上略有处理,实际号码应为:8613805515500( 字母 F 意指长度减 1), 这是作者所在地 GSM 短信息中⼼的号码。 ( 号码处理⽅法为 , 如果为 +86 开始 , 将 + 号去掉 , 然后判断是否为偶数 ,不是在末尾补 F, 然后将奇数位和偶数位互换 )
11⽂件头字节(header byte,是⼀种bitmask)。这⾥11指正常地息。00信息参考号。(TP-MR)
0D被叫号码长度。被叫号码长度的⼗六进制表⽰。
81被叫号码类型。
3106656930F1被叫号码,也经过了移位处理,实际号码为 136******** 。
00协议标识 (TP-PID),是普通 GSM 类型,点到点⽅式
00⽤户信息编码⽅式 (TP-DCS), 7-bit 编码( 08 : UCS2 编码)
FF有效期 (TP-VP),短信的有效时间
0B短信息长度
E8329BFD06DDDF723619短信息内容“Hello World!”。
2、接收信息的 PDU 串
读取以上发送出来的短信,可以收到如下信息 ,
接受到来⾃ 136******** 的“欢迎”PDU 串为: 08 91 683108503705F0 04 0D 91 683106504562F7 00 08 30507080635400 046B228FCE。
对以上的 PDU 串分析如下表:
段含义说明
08SMSC 地址信息的长度共 8 个⼋位字节 ( 包括 91)
91SMSC 地址格式 (TON/NPI)⽤国际格式号码 ( 在前⾯加 ‘+’) 683108503705F 0SMSC 地址8613800573500 ,补 ‘F’ 凑成偶数个
04基本参数 (TP-MTI/MMS/RP)接收,⽆更多消息,有回复地址,如果为 00 ,就没有以下关于回复地址的三个段
0D回复地址数字个数共 13 个⼗进制数 ( 不包括 91 和 ‘F’)
91回复地址格式 (TON/NPI)⽤国际格式号码 ( 在前⾯加 ‘+’)短址
683106504562F 7回复地址 (TP-RA)8613600554267 ,补 ‘F’ 凑成偶数个
00协议标识 (TP-PID)是普通 GSM 类型,点到点⽅式
08⽤户信息编码⽅式 (TP-DCS)UCS2 编码(即中⽂)
30507080635400时间戳 (TP-SCTS)2003-5-7 08:36:45 +8 时区
04⽤户信息长度 (TP-UDL)实际长度 4 个字节
6B228FCE⽤户信息 (TP-UD)“ 欢迎 !”
五、接收短消息
⼀般有两种接收模式
.
1 .AT+CNMI=2,1,0,0,0 接受并存到SIM串⼝接收到以下信息:+CMTI:"SM",X AT+CMGR=X回车(从X存储区读短消息) AT+CMGD=X回车(从X存储区删除短消息)PDU状态: at+cmgf=0 OK +CMTI: "SM",1 at+cmgr=1 +CMGR: 0,,24 0891683108501705 F0240D91683157805300F50000502082000281000462F11804 OK ⽂本状态: +CMGR: "REC READ","+86 137********",,"05/02/28,0:20:18+00" bbc    OK
2 .
2 .AT+CNMI=2,2,0,0,0 接受并直接到串⼝ 串⼝接受到以下信息: +CMT: "+86135********",,"01/09/13,11:04:09+32" AAA
附录:关于PDU模式:
第⼀,对模块写⼊ AT+CMGF=0<;回车>  的AT命令(<;回车> 要⽤ /r 来实现),之后应该得到⼀个 OK 响应,才能继续进⾏下⼀步;
第⼆,对模块写⼊ AT+CMGS=<length><;回车>  的AT命令(其中 <length> 是⼀个数字,该数字是代表了PDU串中某⼀部分的长度,这⼀部分就是指除了SMSC地址之外的那⼀部分),之后应该得到⼀个 /r/n> /r/n  响应(特别要注意:/r是回车,/n是换⾏,>是⼀个⼤于号,>后⾯还有⼀个空格!),才能继续进⾏下⼀步;
第三,可以开始写⼊要发送的内容了。这⼀部分只是PDU串中的⼀部分,并不是完整的PDU串(如前所述,去掉了SMSC地址那⼀部分),这⼀部分要以Ctrl+Z 结尾,但是我们要知道,在字符串中要带上 Ctrl+Z 的话,必须是⽤ACSII码。Ctrl+Z的ASCII码是16进制的 1A ,所以你可以在你的字符串后⾯⽤strcat函数附加上 "/x1A " 来实现。
这样之后,如果发送成功,你就会收到GSM模块的⼀个发送成功的响应,形如:
+CMGS: 246
OK
如果只有⼀个“OK”响应,没有类似于“+CMGS: 246”的部分,则并不能发送成功!所以,当你只收到⼀个 OK 响应的时候,那肯定是哪⾥出错了。

本文发布于:2024-09-23 12:20:53,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/2/355249.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:号码   短信   信息   发送   地址   编码   长度   偶数
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议