PDU格式短信编码的原理,实现短信设备收发中文短信

分享

本文接上一文章《GSMMODEM.cs源代码,串口调试程序》学习下text模式短信和PDU格式短信是怎么解析的,因为text比较简单所以本文主要介绍的是PDU格式的短信解析方法后,我们就可以自己去实现PDU格式编码的实现了。下篇文章将给大家用C#例子来实现的。

AT指令收发短信主要有两种模式:Text模式和PDU(Protocol Data Unit,协议数据单元)模式。使用Text模式收发短信代码简单,很容易实现,最大缺点不支持中文短信。PDU模式不仅能发送中文短信,也能发送英文短信。PDU收发短信有三种编码可用:7-bit、8-bit和UCS2编码。7-bit编码用于发送普通的ASCII字符,即英文短信,最多可发送160字符。8- bit编码通常用于发送数据消息。UCS2编码用于发送Unicode字符,可发送中文字符,最多发送70字符。

短信发送实例:

Text模式(向号码为15118131494的手机发送“TEST”):

1:  AT                        //发送AT 返回OK 连接成功2:  
3:  OK
4:  
5:  AT+CMGF=1                //设置为Text模式
6:  
7:  AT+CMGS="15118131494"    //发送指令,双引号内改为对用手机号码
8:  
9:  > TEST(+^z,十六进制的1A)//返回字符串中有OK 发送成功 >号为设备返回字符

PDU模式(向号码为15118131494的手机发送“你好”):

1:  AT                        //发送AT 返回OK 连接成功
2:  
3:  OK
4:  
5:  AT+CMGF=0                //设置为PDU模式
6:  
7:  AT+CMGS=19                //发送指令,更改为对应PDU编码的长度计算方法在后面
8:  
9:  > 0011000D91685111181394F40008C4044F60597D(+^z,十六进制的1A)//返回字符串中有OK 发送成功

有的“猫”用“串口调试器”发送总是失败:Text模式接收到的是乱码,PDU模式发送不出去。我用的这个就是这个样子,给我郁闷了很多天,后来发现在串口调试器中我们摁下的“回车”被解析为”
\n”,而我用的这个modem只有在只发送AT指令+”
”时才能正确的发送短信。发现后发送短信都能成功,高兴了好一会儿。不说废话了,开始PDU短信编码的解析。这是我的理解,更多详细资料参考下列标准:

GSM 03.04    着重介绍短信发送中对字符集的控制部分
GSM 03.08
GSM 03.41
GSM 07.05    介绍 at 的一些控制命令
GSM 07.07    着重介绍 at 的短信相关命令,可以说是at的sms 规范


元素名称长度描述
SCAService Center Address1-12短消息服务中心号码
PDU-TypeProtocol Data Unit1协议数据单元类型
MRMessage Reference1所有成功的短信发送参考数目(0..255)
OAOriginator Address2-12发送方地址(手机号码)
DADestination Address2-12接收方地址(手机号码)
PIDProtocol Identifer1参数显示消息中心以何种方式处理消息内容(比如FAX,Voice)
DCSData Coding Scheme1参数显示用户数据编码方案
SCTSService Center Time Stamp7消息中心收到消息时的时间戳
VPValidity Period0,1,7参数显示消息有效期
UDLUser Data Lenghth1用户数据长度
UDUser Data0-140用户数据

发送方PDU格式:

SCAPDU-TypeMRDAPIDDCSVPUDLUD
1-12112-12110,1,710-140

示例:

向15118131494发送一条短信,内容“Test”

0011000D91685111181394F40000C404D4F29C0E

向15118131494发送一条短信,内容“你好”

0011000B815111181394F40008C4044F60597D

SCAPDU-TypeMRDAPIDDCSVPUDLUD
1-12112-12110,1,710-140
0011000D91685111181394F40000C404D4F29C0E
0011000B815111181394F40008C4044F60597D

接收方PDU格式:

SCAPDU-TypeOAPIDDCSSCTSUDLUD
1-1212-1211710-140

示例:

从15118131494接收一条短信,内容“Test”

0891683110402505F0240BA15111181394F400000111208160302304D4F2
9C0E

从15118131494接收一条短信,内容“你好”

0891683110402505F0240BA15111181394F4000801112081600423044F60
597D

SCAPDUTypeOAPIDDCSSCTSUDLUD
1-1212-1211710-140
0891683110402505F0240BA15111181394F400000111208160302304D4F29C0E
0891683110402505F0240BA15111181394F4000801112081600423044F60597D

SCA:短消息服务中心地址格式

服务中心地址包含三个部分:1-12个8位位组 第一个位组指示服务中心地址长度,第二个位组指示服务中心类型,第三个位组为服务中心地址。

示例:0891683110402505F0

LenghthTypeAddress
0891683110402505F0

Lenghth:服务中心地址长度 指示Type+Address部分位组长度(例中:91683110402505F0中位组8个:08)
如果Lenghth部分为“00”则不提供后面部分,发送时终端将自动从SIM卡中读取并填充SCA

Type:短信中心地址的类型(81:指国内的号码 91:指国际的号码  91最常用(资料里都说是这样,但根据后面的表格:国内应该是A1,81是未知!!))91H=10010001B 具体意义如下表:

BIT No.76543210

1类型类型类型号码鉴别同3同3同3

类型:000-未知  001-国际  010-国内  111-留作扩展

号码鉴别:0000-未知  0001-ISDN/电话号码(E.164/E.163)  1111-留作扩展

SCA示例:

短信中心PDU编码
+86130104525000891683110402505F0
1301045250007813110402505F0
1234560481214365

注:AT指令中 AT+CMGS=<Len> Len不包含此段位组的长度

PDU Type:是发送和接受短信的PDU中的第一个8位位组

发送方:例 11h=00010001b

Bit No.76543210

RPUDHISRRVPFVPFRDMTIMTI

00010001

接收方:例 24h=00100100b

Bit No.76543210

RPUDHISRI

MMSMTIMTI

00100100

RP:应答路径,
0-未设置  
1-设置

UDHI:用户数据头标识(User Data Header Indicator),
0-用户数据(UD)部分不包含头信息  
1-用户数据(UD)开始部分包含用户头信息

SRR:请求状态报告(Status Report Request),
0-不需要报告  
1-需要报告

SRI:状态报告指示(Status Report Indication),此值仅被短消息服务中心设置,
0-状态报告将不会返回给短消息实体(SME)
1-状态报告将返回给短消息实体(SME)

VPF:有效期格式(Validity Period Format),
00-VP段没有提供(长度为0)
01-保留
10-VP段以整型形式提供(相对的)
11-VP段以8位位组的一半形式提供(绝对的)

RD:拒绝复本(Reject Duplicate)
0-通知短消息服务中心(SMSC)接受一个消息(SMS-SUBMIT),即该消息是先前已提交过的,并还存在与SMSC中未发送出去。MS重复的条件是:消息参考(MR)、接收方地址(DA)及发送方地址(OA)相同
1-通知SMSC拒绝一个重复的SMS

MMS:有更多的消息需要发送(More Message to Send),此值仅被SMSC设置
0-在SMSC中有更多的信息等待MS
1-在SMSC中没有更多的信息等待MS

MTI:信息类型指示(Message Type Indicator)
不太理解 有待于再查资料

MR:信息参考 不太理解 置为00即可

DA/OA:接收方与发送方地址

DA与OA编码方式是一样的 2-12个8位位组

例:0D91685111181394f4

LenghthTypeAddress
0D91685111181394F4

Lenghth:地址长度 指8615118131494的长度。与SCA中不一样!
Type:地址类型  指示国内(81) 还是国际(91)

示例:

号码PDU编码
+86151181314940D91685111181394F4
151181314940B815111181394F4
1234560681214365

PID:协议标识(Protocol Identifier)

对于标准情况下的MS-to-SC短消息传送,只需设置PID为00

DCS:数据编码方案(DataCoding Scheme)

Bit No.76543210描述
示例:0000000000h 7bit数据编码 默认字符集

11110110F6h 8bit数据编码 Class1

0000100008h USC2(16bit)双字节字符集

Bit No.7与Bit No.6:
一般设置为00

Bit No.5:
0-文本未压缩
1-文本用GSM标准压缩算法压缩

Bit No.4:
0-指示Bit No.1 Bit No.0为保留位,不含信息类型信息
1-指示Bit No.1 Bit No.0含信息类型信息

Bit No.3与Bit No.2:
00-默认的字符集,每字符占7bit,此时最大可发送160字符
01-8bit,此时最大可发送140字符
10-USC2(16bit),发送双字节字符集
11-预留

Bit N0.1与Bit No.0:
00-Class 0,短消息直接显示在屏幕上
01-Class 1,
10-Class 2(SIM卡特定信息),
11-Class 3

示例:

DCS字符集信息Class
007-bitNo Class
F07-bitClass 0(Immediate Display)
F17-bitClass 1(Mobile Equipment-specific)
F27-bitClass 2(SIM specific Message)
F37-bitClass 3(Terminate Equipment-specific)
F48-bitClass 0(Immediate Display)
F58-bitClass 1(Mobile Equipment-specific)
F68-bitClass 2(SIM specific Message)
F78-bitClass 3(Terminate Equipment-specific)
0816-bitNo Class
1816-bitClass 0(Immediate Display)

VP:信息有效期(Validity Period)

第一种情况(相对的):VPF=10  VP=AAH(四天)

第二种情况(绝对的):VPF=11

时区
30800290543320

           表示:03-08-20 09:45:33

VP段以整形或半个8位位组形式提供

第一种情况,VP为一个8位组,给定有效期的长度
从消息被SMSC接收开始计算

VP相应的有效期
00-8F(VP+1)*5分钟  从5分钟间隔到12小时
90-A712小时+(VF-143)*30分钟
A8-C4(VP-166)*1天
C5-FF(VP-192)*1周

第二种情况,VP为七个8位组,给定有效期终止的绝对时间  时间形式与SCTS形式一致

SCTS:服务中心时间戳(Service Center Time Stamp)

占用7个8位组,格式和VP第二种情况一致,请参考其中的表格

UDL:用户数据长度(User Data Lenghth)

UDL以整形形式提供,指示后面用户数据段的长度(UD的8位组的个数)

UD:用户数据(User Data)

英文编码:7bit编码,依次将下一位的后几位移至前面形成新的8位编码
示例:Test
             T:01010100  e:01100101  s:01110011  t:01110100
      去最高位0,变为7位
             T:1010100  e:1100101  s:1110011  t:1110100
      后面低位移至前面形成8位编码
             Test:11010100111100101001110000001110
             UD:04F29C0E   UDL:04

中文编码:取USC2编码  高低字节交换即可

注意:7bit编码的UDL部分计算的是编码前的字符串长度,而不是编码后的8位组个数!

注:AT+CMGS=<Len><cr>中Len为出SCA外8位组的个数


PDU格式短信编码的原理详细介绍到这里了,大家可以关注下一篇文章《C#实现PUD编码》


短信设备二次开发 2022-04-04 0 0

admin

  • 注册时间 : 2022-03-30 04:08:47
  • 邮箱地址 : admin@tenghengkeji.com
  • 此页面用于展示用户的基本上资料信息

回帖 ( 0 )