SMS with the SMS pdu mode

 

SMS with the SMS PDU-mode

版本变动历史

1、绪论

2、缩写词

3、设置指令

3.1 服务中心号码   (+CSCA) 

3.2 选择消息服务   (+CSMS) 

3.3 选择消息格式   (+CMGF) 

4SMS文本模式

5SMS PDU模式

5.1 发送方SMS-Submit (Mobile Originated) 

5.1.1 SIM卡存储区写入一条SMS   (+CMGW) 

5.1.2 发送SIM卡存储区中的一条SMS   (+CMSS) 

5.1.3 直接从终端设置发送SMS   (+CMGS) 

5.2 接收方 SMS-DELIVER (Mobile Terminated) 

5.2.1 列取消息  (+CMGL) 

5.2.2 读取消息  (+CMGR) 

5.2.3 删除消息  (+CMGD) 

6SMS PDU 基本组成元素

6.1 发送方PDU格式SMS-SUBMIT-PDU (Mobile Originated) 

6.2 接受方PDU格式 SMS-DELIVER-PDU (Mobile Terminated) 

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

6.4 PDU Type(第一个八位位组)

6.5 MR 信息参考 (Message Reference) 

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

6.7 PID 协议标识 (Protocol-Identifier) 

6.8 DCS 数据编码方案 (DataCoding-Scheme) 

6.9 VP 信息有效期(Validity Period

6.10 SCTS 服务中心时间戳(Service Center TimeStamp

6.11 UDL 用户数据长度 (User-Data-Length (Amount of Characters)) 

7、常用 AT 指令

8PDU操作实例

8.1 准备工作

8.2 连接手机

8.3 发送PDU SMS

9SMS 编码方案与编程实现

Message service error 

error codes: 

默认的字符表

 

 

 历史版本修订

2003-08-20     第一版

2004-10-18     修订第二版
                     修正6.6 DA/OA 接收方地址与发送方地址 协议格式翻译错误
                     增加AT指令介绍
                     增加8PDU操作实例



 

绪论

SMS提供了在GSM移动站台(MS)与一个短消息实体(SME)之间通过服务中心(SC)传送短消息的方法。SC提供了在MSSME之间消息传送的相互联系和转播的功能。

SMS采用存储转发模式,短消息被发送出去之后,不是直接地发送给接收方,而是先存储在SMS(短消息服务中心),然后再由SMC将其转发给接收方。如果接收方当时关机或不在服务区内,SMC会自动保存该短消息,排队并尝试再次发送给接收方。

点到点短消息服务包含两个基本服务:
              Þ SM MT(点到点短消息移动接收)
              Þ SM MO(点到点短消息移动发送)

通过 SM MT 或 SM MO 方法传送的文本消息包含 140 个八位位组(最大 160 个拉丁字母字符、70个双字节字符)。

本文仅仅给出了简单地一些AT指令及SMS PDU模式的描述。更多的详细资料,请参看下列标准:

GSM 03.04

GSM 03.38

GSM 03.41

GSM 07.05

GSM 07.07

2、缩写词

缩写

全称

说明

MS

Mobile-Station

移动站台
负责系统交换管理,控制来自或发往其他电话或数据系统的通信

SME

Short-Message-Entity

短消息实体
负责接收和发送短消息。可以位于固话系统、移动基站或其他服务中心内

SMSC

Short Message Service Center

短消息服务中心
负责在移动基站和SME之间中继、存储或转发短消息

PDUs

Protocol Data Units

协议数据单元

PDU Type

Protocol Data Unit Type

协议数据单元类型

MR

Message Reference

消息参考

OA

Originator Adress

发送方地址

DA

Destination Adress

接收方地址

PID

Protocol Identifier

协议标识

DCS

Data Coding Scheme

数据编码方案

SCTS

Service Center Time Stamp

服务中心的时间戳

VP

Validity Period

消息有效期

UDL

User Data Length

用户数据长度

UD

User Data

用户数据

RP

Reply Path

应答路径

UDHI

User Data Header Indicator

用户数据头标识

SRI

Status Report Indication

状态报告指示

SRR

Status Report Request

请示状态报告

VPF

Validity Period Format

有效期格式

MMS

More Messages to Send

有更多的信息需要发送

RD

Reject Duplicate

拒绝复本

MTI

Message Type Indicator

消息类型指示

ME

Mobile Equipment

移动设备

TE

Terminal Equipment

终端设备

SIM

Subscriber Identity Modul

 

SC

Service-Center

服务中心

SCA

Service Center Address

服务中心地址

SM MT

Short Message Mobile Terminated Point-to-Point

点到点短消息移动接收

SM MO

Short Message Mobile Originaed Point-to-Point

点到点短消息移动发送

3、设置指令

3.1服务中心号码       (+CSCA)

服务中心(SC)负责转播和存储转发SMEMS之间的短消息。如果MS支持SMS-MO(短消息服务移动发送),为了使用SMS,必须在MS中设置SMSC(短消息服务中心,SCA)。

使用指令 AT+CSCA?” 可以查看存储在SIM卡中的当前服务中心地址。

使用AT指令 AT+CSCA=<SCA>[,<TOSCA>]” 加入短消息服务号码。

句法:

输入

执行

注释

AT+CSCA?

<CR>

查询当前服务中心地址(SCA)设置(从SIM卡中读取)

响应

+CSCA:  <SCA>

OK

 

 

参数:

AT+CSCA=<SCA>

<CR>

定义服务中心地址(SCA) (存储到SIM卡)

示例:

<SCA>

服务中心地址(字符型)

<TOSCA>

服务中心地址的类型设置(编码方式)

注意:

Þ 为了避免漫游时出现问题,推荐国际号码格式存储所有地址(以+和国家代码开头)。

Þ 向你本地的网络提供商询问正确的短消息服务中心号码

Þ SC地址是SMS的一部分!当任何一个SMS被存储到SIM卡上时,SC地址也同时该SMS中。

3.2选择消息服务       (+CSMS)

这个指令用于选择消息服务。

句法:

AT+CSCA=+8613800250500

<CR>

以国际号格式定义服务中心地址(SCA)

AT+CSCA=+13800250500

<CR>

以国内号格式定义服务中心地址(SCA)

 

输入

执行

注释

AT+CSMS?

<CR>

返回当前的服务类型及ME支持的信息

 

AT+CSMS=?

<CR>

返回所有支持的服务类型

参数:

AT+CSMS=<SERVICE>

<CR>

选择消息服务

响应

+ CSMS:  <SERVICE>,<MT>,<MO>,<BM>

OK

 

示例:

读取指令

<SERVICE>

消息服务

<MT>

接收短消息

<MO>

发送短消息

<BM>

接收小区广播消息

设置指令

输入

执行

注释

AT+CSMS?

<CR>

返回当前的服务类型及ME支持的信息

响应

+ CSMS:  0,1,1,1

OK

指令返回当前的消息服务和移动设备支持的服务选项

参数:

输入

执行

注释

AT+CSMS=1

<CR>

设置支持的消息类型

响应

+ CSMS:  0,1,1,1

OK

返回移动设备支持的服务选项

3.3选择消息格式       (+CMGF)

这个指令用于选择短消息格式。它的参数指示发送、列取、读取和写入的消息所使用的格式。

句法:

参数

描述

<SERVICE>

0

SMS AT 指令的句法兼容 GSM Phase 2

1

SMS AT 指令的句法兼容 GSM Phase 2+

2...127

保留

128

厂商自定义

<MT>,<MO>,<BM>

0

不支持

1

支持

 

 

支持的值:

示例:

读取指令

输入

执行

注释

AT+CMGF?

<CR>

返回当前的SMS格式

AT+CMGF =?

<CR>

返回所有支持的SMS格式

设置指令

AT+CMGF=<MODE>

<CR>

选择SMS格式

响应

OK

4SMS文本模式

5SMS PDU模式

一个完整的SMS消息所包含的所有报头信息被以二进制字符串格式传送。这个二进制串由十六进制格式的IA5 字符组合而成。

使用AT指令AT+CMGF=0切换到协议数据模式,之后所有的SMS输入与显示将以PDU格式执行。

5.1发送方SMS-Submit (Mobile Originated)

SMS-SUBMIT的意思就是GSM-Molbile传送一条SMS到服务中心。

5.1.1 SIM卡存储区写入一条SMS  (+CMGW)

执行指令AT+CMGW用于存储一条消息在SIM卡的存储区中。命令返回消息被存储的索引号。

句法:

<MODE>

含义

0

PDU模式(默认的)

1

Text模式

参数:

输入

执行

注释

AT+CMGF?

<CR>

返回当前的SMS格式

响应

+ CMGF: 0

OK

返回当前的SMS格式

支持的值:

输入

执行

注释

AT+CMGF=1

<CR>

设置SMS类型为Text

输入

执行

注释

AT+CMGW=<LENGTH>[,<STAT>]

<CR>

 

> <PDU>

*)

<CTRL-Z>/<ESC>

**)

 

响应

+CMGW: <INDEX>

OK

如果命令正确执行,返回消息存储位置的索引号

注:

*)    符号>是的移动终端设置返回而产生的

**)  <CTRL>+<Z>执行命令;<ESC>不保存/发送、直接退出执行

5.1.2 发送SIM卡存储区中的一条SMS     (+CMSS)

AT指令AT+CMSS=<INDEX>[,<DA>[,<TODA>]]SIM卡消息存储区中<INDEX>索引位置的消息发送到网络中(SMS-SUBMIT)。如果指定新的接收地址<DA>,它将代替原消息中存储的接收地址。

如果消息传送成功,消息参考值<MR>将返回到终端设备(TE)。通常(当+CSMS<SERVICE>值为1,并且网络支持时),同时返回服务中心时间戳<SCTS>

句法:

参数:

示例:

<LENGTH>

给定的TP层数据单元的八位位组代码数目(不包含服务中心地址的八位位组数目)

<STAT>

除存储未发送的状态之外的状态值

PDU模式下该值为整型(默认值为0

在文本模式下该值为字符型(默认值为REC UNREAD

<PDU>

PDU数据

<INDEX>

存储位置

5.1.3 直接从终端设置发送SMS    (+CMGS)

这个指令用于从一个终端向网络中发送消息(SMS-SUBMIT),而不会在SIM卡中保存所发送的SMS消息。

如果消息传送成功,消息参考值<MR>将返回到终端设备(TE)。通常(当+CSMS<SERVICE>值为1,并且网络支持时),同时返回服务中心时间戳<SCTS>

句法:

<STAT>

含义

REC UNREAD

已接收未读的消息(例如新消息)

REC READ

已接收已读的消息

STO UNSENT

已存储未发送的消息

STO SENT

已存储已发送的消息

ALL

所有的消息(仅适用于 +CMGL命令)

输入

执行

注释

AT+CMSS=<INDEX>

<CR>

 

响应

+CMSS: <MR>[,<SCTS>]

OK

 

参数:

注:

*)    符号>是的移动终端设备返回而产生的

**)  <CTRL>+<Z>执行命令;<ESC>不保存/发送、直接退出执行

5.2接收方 SMS-DELIVER (Mobile Terminated)

SMS-DELIVER意味着终端设置从服务中心接收到一条SMS消息。

5.2.1 列取消息       (+CMGL)

句法:

<INDEX>

SIM卡内存位置索引

<MR>

消息参考

<SCTS>

服务中心时间戳

 

输入

执行

注释

AT+CMSS=1

<CR>

SIM卡中存储位置1的消息将被发送到服务中心

响应

+CMSS: 255

OK

SMS被发送到服务中心,消息参考为255

参数:

5.2.2 读取消息       (+CMGR)

句法:

输入

执行

注释

AT+CMGS=<LENGTH>

<CR>

转换SMS输入模式,SMS将会被以未发送状态保存。命令后所跟的PDU字串的长度必须在这个命令中指定。

> <PDU>

*)

<CTRL-Z>/<ESC>

**)

直接从终端中发送一条SMS,而不将其保存到SIM卡。

响应

+CMGS: <MR>[,<SCTS>]

OK

 

如果发送成功将返回消息参考

参数:

<LENGTH>

给定的TP层数据单元的八位位组代码数目(不包含服务中心地址的八位位组数目)

<PDU>

PDU数据

<MR>

消息参考

<SCTS>

服务中心时间戳

注意:

Þ 切不可直接提交一个DELIVER-SMS!因为它的PDU数据中头信息是与用于提交的PDU不一样的!

Þ在内存(SIM)中至少有最后一个空闲空间,以保证能接收到新的SMS

5.2.3 删除消息       (+CMGD)

句法:

输入

执行

注释

AT+CMGL=<INDEX>

<CR>

列取内存中指定类型的SMS

响应

+CMGL: <index><stat>[,<alpha>],<length>

<pdu>

[+CMGL: <index><stat>[,<alpha>],<length>

<pdu>

[...]

]

 

6SMS PDU 基本组成元素

下列元素是用于SMS-SUBMITSMS-DELIVER中的部分。

AT+CMGL=?

<CR>

查看设备支持的<stat>类型

参数

描述

<STAT>

PDU模式下该值为整型(默认值为0

在文本模式下该值为字符型(默认值为REC UNREAD

指示内存中消息的状态

定义的值:

REC UNREAD

已接收未读的消息(例如新消息)

REC READ

已接收已读的消息

STO UNSENT

已存储未发送的消息

STO SENT

已存储已发送的消息

ALL

所有类型的消息

 

输入

执行

注释

AT+CMGR=<INDEX>

<CR>

读取内存中指定索引位置的SMS

响应

+CMGR: <STAT>[,<ALPHA>],<LENGTH>

<PDU>

OK

 

6.1发送方PDU格式SMS-SUBMIT-PDU (Mobile Originated)

参数

描述

<STAT>

PDU模式下该值为整型(默认值为0

在文本模式下该值为字符型(默认值为REC UNREAD

指示内存中消息的状态

定义的值

REC UNREAD

已接收未读的消息(例如新消息)

REC READ

已接收已读的消息

STO UNSENT

已存储未发送的消息

STO SENT

已存储已发送的消息

 

<ALPHA>

以字符型的数字文字表示的,在SIM电话薄中找到的相应<OA>条目

<LENGTH>

给定的TP层数据单元的八位位组代码数目(不包含服务中心地址的八位位组)

<PDU>

PDU数据

示例:

       13851724908发送一条SMS,消息内容为:Test

0031000D91683158714209F80000A704D4F29C0E

       13851724908发送一条SMS,消息内容为:测试

0031000B813158714209F80008A7046D4B8BD5

输入

执行

注释

AT+CMGD=<INDEX>

<CR>

删除在SIM卡中索引<INDEX>位置的SMS

响应

OK

 

6.2接受方PDU格式 SMS-DELIVER-PDU (Mobile Terminated)

元素

名称

长度

描述

SCA

Service Center Adress

1-12

服务中心的电话号码

PDU-Type

Protocol Data Unit Type

1

协议数据单元类型

MR

Message Reference

1

所有成功的SMS-SUBMIT参考数目(0..255)

OA

Originator Adress

2-12

发送方SME的地址

DA

Destination Adress

2-12

接收方SME的地址

PID

Protocol Identifier

1

参数显示SMSC以何种方式处理SM (比如FAX,Voice)

DCS

Data Coding Scheme

1

参数表示用户数据(UD)采用什么编码方案

SCTS

Service Center Time Stamp

7

参数表示SMSC接收到消息时的时间戳

VP

Validity Period

0,1,7

参数表示消息在SMSC中不再有效的时长

UDL

User Data Length

1

用户数据段长度

UD

User Data

0-140

SM数据

示例:

       13851724908接收到一条SMS,消息内容为:Test

0891683108200505F0240D91683158714209F800004001528035350004D4F29C0E

       13851724908接收到一条SMS,消息内容为:测试

0891683108200505F0240D91683158714209F8000840015280452400046D4B8BD5


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

服务中心地址包含三个部分:

SCA组成:1-12个八位位组

例:0891683108200505F0

SCA

PDUType

MR

DA

PID

DCS

VP

UDL

UD

1-12

1

1

2-12

1

1

0,1,7

1

0-140

Len:短消息中心地址长度。指(91+68 31 08 20 05 05 F0)的八位位组数目。如果Len被设置为00&h,并不提供后面的部分,那么终端设备将读取SIM中设置的SCA填充到SMS-PUD中,通过AT+CSCA=xxxxx指令可以设置SIM卡中存储的SCA值。

Type:短消息中心地址的类型,是国际的号码还是国内的号码(81&h表示国内,91&h表示国际的)。91&hTON/NPI遵守International/E.164标准,指在号码前需加+号;此外还有其它数值,但91&h最常用。

                     例:91 &h = 1001 0001 &b

                     7位永远置为1

                     数值类型(Type of Number):

000未知,001国际(以 开始的地址),010国内,111留作扩展;

号码鉴别(Numbering plan identification):

0000未知,0001ISDN/电话号码(E.164/E.163)1111留作扩展;

Add:依照ISDN编号方式的短消息中心地址。

示例:

SCA

PDUType

MR

DA

PID

DCS

VP

UDL

UD

1-12

1

1

2-12

1

1

0,1,7

1

0-140

00

31

00

0D91683158714209F8

00

00

A7

04

D4F29C0E

00

31

00

0B813158714209F8

00

18

A7

04

6D4B8BD5

注:

指令AT+CMGWAT+CMGS的参数<length>是从PDUType部分开始计算PDU的长度,不包括SCA的长度。所以:

SCA = 0891863108200505F0

SCA = 00

<cr> = 0D&h

<lf> = 0A&h

<ctrl+z> = 1A&h

6.4 PDU Type(第一个八位位组)

PDUTypeSMS-SUBMITSMS-DELIVER的第一个八位位组。它分别由下面几个部分组成:

PDUType组成:1个八位位组

       发送方:SMS-SUBMIT

例:31&h = 0011 0001&b

SCA

PDUType

OA

PID

DCS

SCTS

UDL

UD

1-12

1

2-12

1

1

7

1

0-140

接收方:SMS-DELIVER

例:04&h = 0000 0100&b

SCA

PDUType

OA

PID

DCS

SCTS

UDL

UD

1-12

1

2-12

1

1

7

1

0-140

0891683108200505F0

24

0D91683158714209F8

00

00

40015280353500

04

D4F29C0E

0891683108200505F0

24

0D91683158714209F8

00

08

40015280452400

04

6D4B8BD5

       RP      应答路径(Reply Paht),

– 未设置;

– 设置

       UDHI  用户数据头标识(User Data Header Indicator),

– 用户数据(UD)部分不包含头信息;

– 用户数据(UD)开始部分包含用户头信息

       SRR:    请求状态报告(Status Report Request),

– 不需要报告;

– 需要报告

       SRI:     状态报告指示(Status Report Indication),此值仅被短消息服务中心(SMSC)设置

                     0 – 状态报告将不会返回给短消息实体(SME

                     1 – 状态报告将返回给短消息实体(SME

       VPF:    有效期格式(Validity Period Format),

                     00 – VP 段没有提供(长度为 ),

                     01 – 保留,

                     10 – VP 段以整型形式提供(相对的),

                     11 – VP 段以8位组的一半(semi-octet)形式提供(绝对的)

       RD:      拒绝复本(Reject Duplicate),

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

                     1 – 通知 SMSC 拒绝一个重复的 SMS

       MMS:   有更多的信息需要发送(More Messages to Send),此值仅被 SMSC 设置

                     0 – 在 SMSC 中有更多的信息等待 MS

                     1 – 在 SMSC 中没有更多的信息等待 MS

       MTI:    信息类型指示(Message Type Indicator

                     00 – SMS-DELIVERSMSCèMS

                     00 – SMS-DELIVER REPORTMS è SMSC

当手机接收到 SMS-DELIVER 时自动产生

                     01 – SMS-SUBMITMS è SMSC

                     01 – SMS- SUBMIT REPORTSMSC è MS

                     10 – SMS-STATUS REPORT SMSC è MS

                     10 – SMS-COMMANDMS è SMSC

                     11 – 保留

              注:(粗体代表手机支持的类型,并不是所有的 PDU 类型均被服务中心支持)

注意:

PDUTypePDU的第一个八位位组,而并不是服务中心号码后的第一个字节!

6.5 MR 信息参考 (Message Reference)

       设为 00 即可

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

OADA格式是一样的,如下所示:

DA组成:2-12个八位位组

例:0D91683158714209F8

1 Octet

0-1 Octet

0-10 Octets

Len

Type

Addr

SCA长度

SCA类型

SCA地址

08

91

683108200505F0

Len:地址长度。指8613851724908 的长度。这与SCA中的定义不一样!

Type:短消息中心地址的类型,是国际的号码还是国内的号码(81&h表示国内,91&h表示国际的)。

Add:依照ISDN编号方式的短消息中心地址。

示例:

Bit No.

7

6

5

4

3

2

1

0

 

1

数据类型

号码鉴别

       *) 小灵通号码

6.7 PID 协议标识 (Protocol-Identifier)

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

6.8 DCS 数据编码方案 (DataCoding-Scheme)

服务中心号码

PDU格式编码

+8613800250500

08 91 86 31 08 20 05 05 F0

13800512500

07 81 31 08 50 21 05 F0

123456

04 81 21 43 65

输入:
AT+CMGS=19<cr>

输出:
AT+CMGS=19<cr><cr><lf>>

输入:
0891863108200505F031000D91683158714209F80000A704D4F29C0E<ctrl+z>

输出:
0891863108200505F031000D91683158714209F80000A704D4F29C0E<ctrl+z><cr><lf>+CMGS: 111<cr><lf><cr><lf>OK<cr><lf>

输入:
AT+CMGS=19<cr>

输出:
AT+CMGS=19<cr><cr><lf>>

输入:
0031000D91683158714209F80008A7046D4B8BD5<ctrl+z>

输出:
0031000D91683158714209F80008A7046D4B8BD5<ctrl+z><cr><lf>+CMGS: 112<cr><lf><cr><lf>OK<cr><lf>

       Bit No.7Bit No.6

一般设置为00

       Bit No.5

– 文本未压缩,– 文本用GSM标准压缩算法压缩;

       Bit No.4

– 表示Bit No.1Bit No.0 为保留位,不含信息类型信息,

              1 – 表示Bit No.1Bit No.0 含有信息类型信息;

       Bit No.3Bit No.2

00 – 默认的字母表,每个字符占用 7 比特位,此时最大可以传送 160 字符

01 – 8bit,此时最大只能传送 140 个字符

10 – USC216bit), 传送双字节字符集

11 – 预留;

       Bit No.1Bit No.0

00 – Class 0,短消息直接显示在屏幕上

01 – Class 1

10 – Class 2SIM卡特定信息),

11 – Class 3

       示例:

Bit No.

7

6

5

4

3

2

1

0

 

RP

UDHI

SRR

VPF

RD

MTI

 

0

0

1

1

0

0

0

1

Bit No.

7

6

5

4

3

2

1

0

 

RP

UDHI

SRI

 

 

MMS

MTI

 

0

0

0

0

0

1

0

0

 

 

 

 

 

 

 

 

 

 

6.9 VP 信息有效期(Validity Period

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

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

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

       VP 段以整型或半个8位组(semi-octet)形式提供。

第一种情况,VP为一个8位组,给定有效期的长度,

从 SMS-SUBMIT 被 SMSC 接受开始计算。

第二种情况,VP为七个8位组,给定有效期终止的绝对时间。

       在第一种情况下,有效期表示格式如下所示:

1 Octet

0-1 Octet

0-10 Octets

Len

Type

Addr

长度

类型

地址

0D

91

683158714209F8

第二种情况下的时间形式与 SCTSService Center TimeStamp)形式一致。

6.10 SCTS 服务中心时间戳(Service Center TimeStamp

       占用七个8位组,格式如 VP 的第二种情况所示

6.11 UDL 用户数据长度 (User-Data-Length (Amount of Characters))

UDL 以整型形式提供,表示后面用户数据段的数据长度。

数据格式有3种: 7bit8bit16bit

其中7bit采用GSM字符集,8bit采用ASCII字符集,16bit采用Unicode字符集。

如:7bit数据 "Test"

        UDL = 04, UD = D4 F2 9C 0E

    又如:16bit数据 "Test"

        UDL = 08, UD = 00 54 00 65 00 73 00 74

用户数据(UD)的编码方式请参考9SMS编码方案与编程实现

7、常用 AT 指令

电话号码

PDU格式编码

+8613851724908

0D 91 86 31 58 71 42 09 F8

13851724908

0B 81 31 58 71 42 09 F8

106051268812345 *)

0F A1 01 06 15 62 88 21 43 F5

123456

06 81 21 43 65

Bit No.

7

6

5

4

3

2

1

0

描述

示例:

0

0

0

0

0

0

0

0

= 00&h  7 bit 数据编码 默认字符集

 

1

1

1

1

0

1

1

0

= F6&h  8 bit 数据编码 Class 1

 

0

0

0

0

1

0

0

0

= 08&h  USC2(16bit)双字节字符集

8PDU操作实例

8.1准备工作

一台支持AT操作的手机或手机模块,建议使用SIEMENS的,我使用的是西门子2118

一根串口数据线。

串口调试软件:

       串口调试助手V2.2
              RoaringWindStudio 啸峰工作室
              http://www.gjwtech.com/

              用于通过串口发送和接收数据。

       Portmon
              Mark Russinovich
              http://www.sysinternals.com

              用于监听系统中正在使用中的串口或并口当前传送的数据。

       西门子手机工作室

              通过上面的监听程序分析它的动作,你可以学到很多。

8.2连接手机

将数据线插在主机的COM1上,然后运行串口调试助手V2.2,设置串口为COM1,波特率为19200,校验位为NONE,数据位为8,停止位为1。然后输入AT再加一个回车,之后点发送按钮,如果手机应答 AT<cr><cr><cl>OK<cr><cl>,则说明电脑已与手机正常连接!如下图所示:

 

8.3发送PDU SMS

如前面所述,向号码为 +8613851724908手机发送一条内容为TestSMSPDU串是0031000D91683158714209F80000A704D4F29C0E,它的长度是20个八位位组,而最左方的 00 位组是PDU串中的短消息服务中心字段,AT+CMGS=<length>指令的<length>不将其计算在内,所以首先应该发送AT+CMGS=19<cr>

 

如上图所示,手机返回了

这是要尽快输入PDU串:0031000D91683158714209F80000A704D4F29C0E

 

正确输入了PDU串后,还需要输入一个控制字符<ctrl+z> 1A &h通过手机立即将它发送出去,或输入<esc> 1B &h通过终端设备放弃。

 

手机返回

说明短消息发送成功!返回的消息参考是111,表示这是发送成功的第111条消息(服务中心不保证该值绝对准确)。

9SMS 编码方案与编程实现

a. 英文编码

参见表,设短信息内容为Hello World!。缺省的GSM 字符集为7位编码,可以简单地理解为ASCII码(ASCII值小于80Hex,因此,Bit8被忽略),依次将下一7位编码的后几位逐次移至前面,形成新的8位编码,参见表2箭头指示。GSM并非支持所有的ASCII字符显示。

 

下面是实现英文编码的部分Delphi 5代码:

function Encode1(var s: String): String;

var

  i, j, len: Integer;

  cur: Integer;

  t: String;

begin

  Result := '';

  len := Length(s);

  //j用于移位计数

  i := 1;

  j := 0;

  while i <= len do

  begin

    if i < len then

      //数据变换

      cur := (Ord(s[i]) shr j) or ((Ord(s[i1]) shl (7j)) and $ff)

    else

      cur := (Ord(s[i]) shr j) and $7f;

    FmtStr(t, '%2.2X', [cur]);

    Result := Resultt;

    inc(i);

    //移位计数达到7位的特别处理

    j := (j1) mod 7;

    if j = 0 then

      inc(i);

  end;

end;

       b. 中文编码

通过DelphiWideString类型转换,可以巧妙地实现GB2312Unicode的编码转换(注意代码页和操作系统相关联)。下面是实现中文编码的部分

DSC

字符集

信息 Class

00

default (7-bit)

No Class

F0

default (7-bit)

Class 0 (immediate display)

F1

default (7-bit)

Class 1 (Mobile Equipment- specific)

F2

default (7-bit)

Class 2 (SIM specific message)

F3

default (7-bit)

Class 3 (Class3 Terminate Equipment- specific)

F4

8-bit

Class 0 (immediate display)

F5

8-bit

Class 1 (Mobile Equipment- specific)

F6

8-bit

Class 2 (SIM specific message)

F7

8-bit

Class 3 (Class3 Terminate Equipment- specific)

08

16-bit

No Class

18

16-bit

Class 0 (immediate display)

Delphi 5代码:

function Encode2(var s: WideString): String;

var

  i, len: Integer;

  cur: Integer;

  t: String;

begin

  Result := '';

  len := Length(s);

  i := 1;

  while i <= len do

  begin

    cur := Ord(s[i]);

    //BCD转换

    FmtStr(t, '%4.4X', [cur]);

    Result := Resultt;

    inc(i);

  end;

end;

Message service error

These are the error codes for +CMS ERROR.

0-127      GSM 04.11 Annex E-2 values
128-255 GSM 03.40 section 9.2.3.22 values
300         Phone failure
301        SMS service of phone reserved
302        Operation not allowed
303        Operation not supported
304        Invalid PDU mode parameter
305        Invalid text mode parameter
310        SIM not inserted
311        SIM PIN necessary
312        PH-SIM PIN necessary
313        SIM failure
314        SIM busy
315        SIM wrong
320        Memory failure
321        Invalid memory index
322        Memory full
330        SMSC (message service center) address unknown
331        No network service
332        Network timeout
500        Unknown error
512        Manufacturer specific

error codes:

0           phone failure

1           no connection to phone

2           Phone-adaptor link reserved

3           operation not allowed

4           operation not supported

5           PH-SIM PIN necessary

10         SIM not inserted

11         SIM PIN required

12         SIM PUK required

13         SIM failure

14         SIM busy

15         SIM wrong

16         incorrect password

20         memory full

21         invalid index

22         not found

23         memory failure

24         text string too long (+CPBW)

25         invalid characters in text string

26         dial string to long

27         invalid characters in dial string

30         no network service

31         network timeout

100       unknown

265       PUK for theft protection necessary

266       PUK2 for SIM necessary

267        PIN2 for SIM necessary

 <图片>

http://borland.mblogger.cn/shuixin13/posts/10087.aspx

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值