有用的一篇资料:

 PDU格式中文短信的发送与接收

疙瘩
 
 
机型:西门子TC35、MC60
设置短消息模式:
AT+CMGF=0/1(0为PDU模式,1为TEXT模式)
新消息提示
AT+CNMI
设置 AT+CNMI=1,1,2
执行后当模块收到新的短信息时,给出回应
如:+CMTI:“MT“,4   (4表示新短信的地址<Stat>=4)
默认时收到新的短信息不给出提示。是否处于提示状态可以通过查询得知。
OutPut:AT+CNMI?
InPut:+CNMI:0,0,0,0,1
 
读短信息
 
首先确定对哪个存储器进行读操作:
AT+CPMS= ME/ MT/ MC(回车)
ME:表示手机
MC:表示SIM卡
MT:表示所有的存储器
阅读短信息:
AT+CMGR=<Stat>(Stat为短信地址号)
 
例如:返回:+CMGR: 1,,24 
0891 683108301505F0 240D91 683191010878F5 2408 402032904022 0004 4E2D6587 OK
08:SMSC地址长度
91:SMSC地址格式(TON/NPI)
683108301505F0: SMSC 地址(8613800351500太原的短信中心号码)
0D:对方地址长度(683191010878F5不包括F为个数13,十六进制表示为0D)
2408:短信息格式
402032904022:短信息时间戳,表示04年02月23日09时04分22秒
0004:短信息内容长度
4E2D6587:“中文”的Unicode码
 
列短信息
AT+CMGL[=<Stat>]
<Stat> 0:接收到的未读信息(缺省)
    1:接收到的已读信息
    2:存储的未发送信息
    3:所有信息 
返回:+CMGL:<index>,<Stat>,|<alpha>|,<Length><PDU>
… … … … …
… … … … …
发送短信息
 
AT+CMGS=<Length><回车>
>PDU数据包<Ctrl-Z/Esc>
//ctrl-Z 发送;ESC忽略发送
 
SMSC地址:8613800351500
目标地址:13191080875
AT+CMGS=18(回车)
08 91 683108301505F0 1100 0B81 3191010878F5 000810 04 4E2D 6587(Ctrl-z)
18:SMSC与短信内容长度之和(683108301505F0长度为14)
08:SMSC地址信息长度(91683108301505F0共八位字节)
91:SMSC地址格式(TON/NPI)
683108301505F0:SMSC 地址(8613800351500太原的短信中心号码)
11:基本参数(TP-MTI/VFP)
00:MR Message Reference
0B:目标SIM卡号码长度(13191080875按阿拉伯数字个数计,十六进制表示为0B)
81:目标地址格式
3191010878F5:目标手机号码(13191080875)
00:普通GSM类型,点到点方式
08:UCS2编码
10:有效期
04:用户信息长度。
4E2D6587:“中文”的Unicode码
其中短信息内容,英文、数字的Unicode编码为2位,前面补两个0,补足四位。
 
短信中心地址
OutPut: AT+CSCA? (回车)

InPut: +CSCA: ”短信中心地址” OK

 

遇到的问题:

1. 有的教程说在超级终端下输完短信内容,按 ctrl_z 然后按 Enter,但我使用过程中按下 Ctrl_z 后等着就行了,如果按 Enter 就会返回Error,但是在编程中在短信内容后要有Ctrl_z和回车换行

2. 在pdu编码中最后短信长度之前有使用时间戳,有的用有效期。我使用有效期测试通过

3. at+cmgs后跟的长度,计算方法很多,最后测试通过的是 14+短信长度,即后面红色标注的两个值相加,用十进制表示,但短信长度段是用16进制表示的。  08 91 683108301505F0(长度为14) 1100 0B81 3191010878F5 000810 04(即后面的长度除以2即字节数,用16进制表示) 4E2D 6587(Ctrl-z

 

posted on 2009-06-17 10:33  赵保龙  阅读(821)  评论(0)    收藏  举报