关于PDU模式发送短信,千万可别被误导

原创 2007年09月13日 15:36:00

最近在做GSM短信发送模块的软件,走了不少弯路,准备分几次一点点地写出来,仅供参考。

曾被网上的一些文章所误导,尤其是几篇非常流行点击率相当高的文章,可怜的我原来并不了解相关技术,后来才发现自己用GSM模块很多东西都与文中说的不一样,因此走了不少弯路,真是郁闷死

关于PDU模式发送短信:

许多文章说,在PDU模式下,你要按照规范将一系列信息(包括SMSC地址、对方号码、待发内容等等)编码成PDU串,再发送出去,但是你知道吗,有不少芯片(例如我所用的GSM模块中的西门子MC39i芯片)是不支持一次将PDU串发出去的,别以为你将所有信息编码成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 响应的时候,你就要考虑你是哪里出错了!

是不是很麻烦?的确,MC39i芯片就是这样。我看到一篇文章里说,有些芯片是可以通过一次写入完整的PDU串,直接将短信发送出去的。那样的话,我们就只需要写一次串口就可以了,非常方便,不用像西门子的这个芯片一样,需要一次又一次地向串口写AT命令。所以你必须弄清楚你用的模块是用什么方式对它进行操作的。

(未完待续,下一篇文章里继续写)

PDU短信编解码格式说明(找来找去个人认为这一篇还是比较靠谱的)

共有三种方式来发送和接收SMS信息:Block Mode, Text Mode和PDU Mode。其中PDU Mode被所有手机支持,可以使用任何字符集,这也是手机默认的编码方式。 发送短消息常...
  • alan00000
  • alan00000
  • 2013年11月28日 19:20
  • 10141

SMS短信PDU编码详细解析

以一个例子来详细解析: 01 08 91 683110300405F1 60 05 A1 0110F0 00 08 31808061349523 04 4F60597D(1)01-短信状态; [01...
  • hlx156
  • hlx156
  • 2017年01月03日 17:38
  • 1327

SMS短信的PDU编码解码,附java解码源码

发送短消息常用Text和PDU(Protocol Data Unit,协议数据单元)模式。使用Text模式收发短信代码简单,实现起来十分容易,但最大的缺点是不能收发中文短信;而PDU模式不仅支持中文短...
  • xcg8818
  • xcg8818
  • 2017年07月18日 17:10
  • 451

PDU格式短信解析

AT指令收发短信主要有两种模式:Text模式和PDU(Protocol Data Unit,协议数据单元)模式。使用Text模式收发短信代码简单,很容易实现,最大缺点不支持中文短信。PDU模式不仅能发...
  • mochouxiyan
  • mochouxiyan
  • 2013年01月16日 08:32
  • 15920

Text模式和PDU模式的区别

发送短消息常用Text和PDU(Protocol   Data   Unit,协议数据单元)模式。使用Text模式收发短信代码简单,实现起来十分容易,但最大的缺点是不能收发中文短信;而PDU模式不仅支...
  • SpiritedAway
  • SpiritedAway
  • 2011年05月03日 20:17
  • 10650

GSM短消息的pdu和text模式的区别是什么?

     一共有三种方式来发送和接收SMS信息:Block Mode, Text Mode和PDU Mode。Block Mode已是昔日黄花,目前很少用了。Text Mode是纯文本方式,可使用不同...
  • dadalan
  • dadalan
  • 2009年07月27日 18:19
  • 9257

AT指令发送PDU短信详解

 【原文地址】 http://www.01cn.net/cgi-bin/topic_show.cgi?id=345&pg=1&h=1#10321    实用的AT指令   单片机和GSM引擎之间采用A...
  • changemyself
  • changemyself
  • 2006年04月13日 13:57
  • 7500

PDU短信发送之一

AT指令收发短信主要有两种模式:Text模式和PDU(Protocol DataUnit,协议数据单元)模式。使用Text模式收发短信代码简单,很容易实现,最大缺点不支持中文短信。PDU模式不仅能...
  • luoyouren
  • luoyouren
  • 2015年07月25日 11:21
  • 702

GSM模块发PDU格式短信目标手机接收不到,怎么回事?

串口软件上显示OK,但目标地址接收不到,目标地址没写错。 、 我觉得你AT+CMGS=长度有点问题 你看下下面的数据,然后再根据自己的情况来试一试。。。 输入数据0011000D916...
  • weed_hz
  • weed_hz
  • 2014年07月14日 11:36
  • 1029

短信通信的几种情况和CMS错误

短信通信的几种情况和CMS错误(转宋光辉的博客) 1. 如何与GSM MODEM建立通信联系 2. 不能与GSM MODEM进行正常的通信或总是在仿真终端上出现乱码 3. 如何才能知道错误代...
  • J080624
  • J080624
  • 2016年12月08日 12:53
  • 1009
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于PDU模式发送短信,千万可别被误导
举报原因:
原因补充:

(最多只允许输入30个字)