mqh003 发表于 2009-2-17 11:26:01

AT指令发送PDU短信详解(TC35I)

【楼主位】 mqh003 乙玥

积分:36
派别:
等级:------
来自:山东
在坛子里众多好心人的帮助下,
经过一上午&午休的时间,终于用西门子TC35I手机模块成功发送了中文短信!
用串口调试助手发送AT指令到TC35I。本人借鉴网上一篇文章,部分数据更改为自己的真实数据,这样可信度较大,至少本人发送成功了,别人的数据或许也可以,有待验证!希望能给调试TC35I的同好们提供一点帮助。

下面进入正题:
注意将短消息中心号码和目标手机都换成自己的哦^&^
AT指令发送PDU短信详解
本文以一个实例来解说AT指令发送PDU短信的全过程,假如我要发送下面的短信:
接收号码:+8613602433649
短信内容:abc你好!
短信中心号码:+8613800546500
一、短信中心号码处理:用字符串 addr 表示
1、将短信息中心号码去掉+号,看看长度是否为偶数,如果不是,最后添加F
即 addr = "+8613800200500"
=> addr = "8613800546500F"
2、将奇数位和偶数位交换。
=> addr = "683108506405F0"
3、将短信息中心号码前面加上字符91,91是国际化的意思
=> addr = "91683108200005F0"
4、算出 addr 长度,结果除2,格式化成2位的16进制字符串,16 / 2 = 8 => "08"
=> addr = "0891683108200005F0"
二、手机号码处理:用字符串 phone
1、将手机号码去掉+号,看看长度是否为偶数,如果不是,最后添加F
即 phone = "+8613602433649"
=> phone = "8613602433649F"
2、将手机号码奇数位和偶数位交换。
=> phone = "683106423346F9"
三、短信息部分处理:用字符串 msg 表示
1、转字符串转换为Unicode代码,例如“abc你好!”的unicode代码为 0061006200634F60597DFF01,
2、将 msg 长度除2,保留两位16进制数,即 0061006200634F60597DFF01 = 24 / 2 => "0C",再加上 msg
=> msg = "0C0061006200634F60597DFF01"
四、组合
1、手机号码前加上字符串 11000D91(1100:固定,0D:手机号码的长度,不算+号,十六进制表示,91:发送到手机为91,发送到小灵通为81。但是我用81也能往手机上发送成功),
即 phone = "11000D91" + phone
=> 11000D91683106423346F9
2、手机号码后加上 0008A7 和刚才的短信息内容,0008A7也写死就可以了,具体含义我也不太清楚!
即 phone = phone + "0008A7" + msg
即 11000D91683106423346F9 + 0008A7 + 0C0061006200634F60597DFF01
=> phone = 11000B815160066703F10008A70C0061006200634F60597DFF01
3、phone 长度除以2,格式化成2位的十进制数
即 11000B815160066703F10008A70C0061006200634F60597DFF01 => 52位 / 2 => 26
五、所以要发送的内容为
AT+CMGF=0 <回车><换行>
OK
AT+CMGS=26<回车><换行>
> 891683108506405F011000B815160066703F10008A70C0061006200634F60597DFF01 <Ctrl+Z> <回车><换行>(注意:这里的Ctrl+Z的ASCII值是26,用16进制发送时是1A)
六、如果电脑旁有开着的音箱,就会出现熟悉的“吱吱”声了,
如果返回不是ERROR,恭喜你,发送成功了^_^   

欢迎指正错误~
欢迎共同探讨!
__________________________
我不知道风,在那个方向吹...


2009-02-07,15:39:38   资料邮件          本主题状态:等待审核编辑删除   

【1楼】 Appcat

积分:1021
派别:
等级:------
来自:
功德圆满!顶一个!
__________________________
耕田放牧打豺狼,风雨一肩挑
2009-02-07,16:22:52   资料邮件


自己恢复,减少老大工作量!

af00 发表于 2009-2-17 12:00:46

顶了

yangyi 发表于 2009-2-17 19:47:25

好!学习了!

atang 发表于 2009-2-18 16:34:15

顶了!!

roasn 发表于 2009-2-18 17:23:32

前后文都不对应

beihai084 发表于 2009-2-20 14:49:58

大家好,我想问一个关于发送TCP消息指令,我用的是GTM900,发送TCP消息指令是:AT%IPSEND,
回复,%IPSEND:15 //注意:这个返回的buffer序号,每发送一包数据不管大小,都占用一个buffer空间。总计16个。如果返回的buffer序号在减小,表示当前的网络传送受阻,当返回的buffer序号为0时模块回复ERROR:20,这时我应该做什仏处理,是要重新建立连接吗?

chujingbo521 发表于 2009-3-9 21:50:20

顶下~~~

liuzhijun 发表于 2009-3-9 22:22:10

正需要谢谢!

n0831 发表于 2009-3-10 09:16:33

解释的够详细.

lhb0709 发表于 2009-3-10 09:27:21

美女你太帅了。

aguiddd 发表于 2009-3-19 10:33:22

呵呵,学习了

wsl16805 发表于 2009-3-20 15:58:33

记号"TC35I"

lysoft 发表于 2009-3-20 16:12:19

太旧了~N年前就搞定PDU的~复杂的是WAP PUSH

xyq4513 发表于 2009-3-20 21:48:35

记号"TC35I"

Gvinnar 发表于 2009-4-13 21:01:55

美女,你的这串指令用的是串口助手发送,我用超级终端,有区别么?

zc3909 发表于 2009-4-13 21:12:43

To:【12楼】
WAP PUSH 目前应用有限制,移动已经取消了点对点的wap push的权限

Gvinnar 发表于 2009-4-13 21:50:48

我也试了很多遍,难道缺少什么设置
AT+CMGF=0
OK
AT+CMGS=27
> 0891683108506105F011000D9168317776xxxxF50004000C0061006200634F60597DFF01
+CMGS: 194

OK
发送正常
却收到的是乱码,无语了

Gvinnar 发表于 2009-4-13 21:56:59

改了一下终于可以了,谢天谢地啊
不是乱码了
AT+CMGF=0
OK
AT+CMGS=26
> 0891683108506105F011000B813177767xxxF50008A70C0061006200634F60597DFF01
+CMGS: 195

OK
小小解放
有人能知道原因就告诉小菜一声,多谢

Gvinnar 发表于 2009-4-13 22:01:06

手机号码后加上 0008A7 和刚才的短信息内容,0008A7也写死就可以了,具体含义我也不太清楚!   
即 phone = phone + "0008A7" + msg   
即 11000D91683106423346F9 + 0008A7 + 0C0061006200634F60597DFF01   
=> phone = 11000B815160066703F10008A70C0061006200634F60597DFF01
前后怎么不一样呢上面是11000D91
下面却是            11000B81

Appcat 发表于 2009-4-13 22:02:00

0891683108506105F011000D9168317776xxxxF50004000C0061006200634F60597DFF01
改为
0891683108506105F011000D9168317776xxxxF50008000C0061006200634F60597DFF01               
                                           ^这里改成8
试试

// 用户信息编码方式
#define GSM_7BIT                0
#define GSM_8BIT                4
#define GSM_UCS2                8

PDU模式里边编码的是unicode,编码方式是GSM_UCS2,就是8,而不是4

Gvinnar 发表于 2009-4-13 22:17:47

试了几次终于明白,原来0D91后面要带上86以后的号码转换
而OB81则是不需要带,可以直接输入号码的转换
今天的任务完成

lysoft 发表于 2009-4-13 22:18:12

最近无疑中来了一条PDU信息
0891683108200005F04410A1212510430544990021009040010120152314050003F10101F2E976DA7DD685C5E3986C06
偶看来看去都没能正确解码~谁能正确解码短信内容呢?其中含有"abc123"内容的
虽然是多短信格式,带头内容,但其实际内容确实还没摸清楚
这不是常见的那种类型,故来求助

slipknot_ns 发表于 2009-4-27 09:23:23

我用MTK平台的发模块
移动号码加不加+86都可以正常发送中文短信
联通卡+86无法发送,串口假死很长一段时间后返回ERROR

PDU编码没问题。。

求解释。。。谢谢~

wwk1996 发表于 2009-4-29 23:48:24

mark

youlingfeng11 发表于 2009-5-9 16:01:07

"0D:手机号码的长度"
是怎样算出来的
而短信中心码和他长度都是16
确为08
高手解答

youlingfeng11 发表于 2009-5-11 14:36:31

0D:只指手机号码的长度13位
    861**********

ajoe 发表于 2009-7-15 09:46:24

记下,待用

xole1111 发表于 2009-7-23 16:40:53

请求下LZ手机号码为短信特服号码(比如:10654040),然后还有个 目的应用端口地址号:16998。

这个时候目标应该怎么写呢??????????

flytudou 发表于 2009-8-5 09:54:39

同18楼问题:
手机号码后加上 0008A7 和刚才的短信息内容,0008A7也写死就可以了,具体含义我也不太清楚!   
即 phone = phone + "0008A7" + msg   
即 11000D91683106423346F9 + 0008A7 + 0C0061006200634F60597DFF01   
=> phone = 11000B815160066703F10008A70C0061006200634F60597DFF01
前后怎么不一样呢上面是11000D91683106423346F9+0008A7
下面却是            11000B815160066703F1+0008A7
这个变化时什么意思呢?哪位高人指点一下啊???

hyz_avr 发表于 2009-8-5 10:08:38

顶顶..

clever0725 发表于 2009-8-5 10:58:01

记号"TC35I"

snwfnfhv 发表于 2009-9-28 21:07:24

要玩玩

ls81250 发表于 2009-9-30 10:22:49

记号

jerryzheng 发表于 2009-10-2 15:42:18

至于PDU的编码,7BIT ,8BIT,UCS2,或是手机号加不加86,这都无谓,只需了解其中的一种即可成功发送短信。
但对于接收的短信就不这么回事了,得了解各种解码规则,有没有大侠可以介绍一下

hejiangzai 发表于 2009-10-6 20:17:48

mark

lerysun 发表于 2010-4-26 17:12:13

mark

phil 发表于 2010-4-27 17:50:57

记下了,谢谢

eduhf_123 发表于 2010-4-27 19:36:18

MARK AT指令

my2009 发表于 2010-4-27 20:41:15

mark

dong7758 发表于 2010-5-1 01:58:27

用TC35I发送超过42个字符PDU短信不能成功,
AT+CMGF=0
AT+CMGS=145
0011000D91683178777777F70008008200310032003300340035003600370038003900300031003200330034003500360037003800390030003100320033003400350036003700380039003000310032003300340035003600370038003900300031003200330034003500360037003800390030003100320033003400350036003700380039003000310032003300340035

是不是PDU码没对?求解,谢谢

comway 发表于 2010-5-1 06:22:43

回复【24楼】slipknot_ns活结
我用mtk平台的发模块
移动号码加不加+86都可以正常发送中文短信
联通卡+86无法发送,串口假死很长一段时间后返回error
pdu编码没问题。。
求解释。。。谢谢~
-----------------------------------------------------------------------

应该是号码问题,和pdu无关,能复打开debug看看

comway 发表于 2010-5-1 06:34:07

回复【12楼】lysoft
太旧了~n年前就搞定pdu的~复杂的是wap push
-----------------------------------------------------------------------

说到点上了,再搞什么PDU没意思了,发发彩信吧

blueliuyun 发表于 2010-7-10 17:15:34

不输入Ctrl+Z也可以的吧?
如果是用超级终端,那怎么输入Ctrl+Z呢?
O(∩_∩)O先谢谢朋友回答啊……

MHLizzy 发表于 2010-7-15 10:03:05

phone 长度除以2,格式化成2位的十进制数
什么意思,怎么转换??

cqwshll 发表于 2010-8-23 00:58:26

马克

bbandpp 发表于 2010-11-14 21:07:20

回复【楼主位】mqh003小乙
-----------------------------------------------------------------------
81表示国内不用加86,91是国际需加86,并不是指小灵通。小灵通是A1.

canking 发表于 2011-5-5 12:23:12

好啊,学习了

我的名字叫洪辉 发表于 2012-5-13 10:31:43

您好。您能去帮我看下我的是怎么回事不。忙了很久。着急了。。不胜感激
页: [1]
查看完整版本: AT指令发送PDU短信详解(TC35I)