惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
爱范儿
爱范儿
H
Help Net Security
V
Visual Studio Blog
J
Java Code Geeks
Stack Overflow Blog
Stack Overflow Blog
Microsoft Security Blog
Microsoft Security Blog
Apple Machine Learning Research
Apple Machine Learning Research
MyScale Blog
MyScale Blog
The Cloudflare Blog
Martin Fowler
Martin Fowler
D
Docker
腾讯CDC
F
Fortinet All Blogs
雷峰网
雷峰网
GbyAI
GbyAI
G
Google Developers Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Recent Announcements
Recent Announcements
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Blog — PlanetScale
Blog — PlanetScale
Engineering at Meta
Engineering at Meta
博客园 - 聂微东
博客园 - 叶小钗

博客园 - qevan

QCanvasTextWriter 把字体保存到注册表或流中 structures显示的模块的bpl - qevan - 博客园 delphi跟踪调试vcl代码的方法 QTrayIcon v1.0B 根据delphi版本进行编译 在气泡式提示窗口中显示关闭按钮 zz 中国共享软件注册提供商的比较 Delphi中资源文件使用详解 zz ShowBalloonTips @ TrayIcon 如何在DELPHI程序中顯示Balloon工具提示﹖ zz 分割人名的代码 电话薄的AT指令 zz 读取中文电话簿 AT+CPMS指令的意义以及AT+CNMI自动接收短信时的方法 短信相关文章的连接 16进制字符转换为10进制 delphi c#的PDU-SMS编程代码 zz Delphi 2005纯WIN32开发环境
一篇短信at指令介绍的文章, 摘过来
qevan · 2005-03-17 · via 博客园 - qevan

(十二) 短信部分——通过RS232发送和接收短信

通常,发送和接收短信的终端都是通过串行接口连接电脑,这类设备用得比较多的是GSM Modem和手机。这类设备通常都支持PDU模式,但仍有少数设备只支持Text模式。

设备硬件连接好以后可以通过发送AT指令测试设备是否连接正确能否正常通讯。在这里我使用Windows自带的“超级终端”工具进行通讯。此工具可以在程序——附件——通讯里面找到,如果没有请确认是否安装了此组件。或者在运行里面输入“hypertrm”也可以快速启动“超级终端”。

以下所有范例均以Siemens M55手机作为终端,有可能跟你设备返回的不同。具体参数清参阅设备相关AT指令集。本手机AT指令集在我主页上有下载。

准备工作:

1、 测试连接:“AT8 ”测试终端是否连接正确。成功后返回“OK”。

2、 设置回显:(此步骤为了测试方便)ATE18

3、 查阅及设置字符集:
AT+CSCS=?
8
+CSCS: ("GSM","UCS2")
说明该终端支持GSMUCS2两种字符集。一般对于中文环境设置为UCS2
AT+CSCS="UCS2"
8

4、 取得短信中心号码:
AT+CSCA? 8
+CSCA: "+8613800280500",145

5、 查询并设置SMS格式:
查询AT+CMGF= 8
返回+CMGF: (0)
0
代表PDU模式。你的设备可能有其他的选项,请参考设备的AT指令集。
设置:AT+CMGF=08

6、 查询并设置短信储存位置:
查询AT+CPMS=?8
返回+CPMS: ("MT","SM","ME"),("MT","SM","ME"),("MT","SM","ME")
其中MT表示设备所有可用储存位置。SM代表SIMME代表机身
一般设置为:AT+CPMS= "MT","MT","MT"8

查询短信:

1、 查询具有相同状态的所有短信
指令AT+CMGL=n
其中n代表0-4的数字。
0
——未读得短信。执行命令以后自行变为已读取。
1
——已读短信。
2
——草稿。
3
——已发送短信。
4
——全部
返回(例):
+CMGL: 76,3,,20

0891683108200805F011620D91683194041338F50000FF0530972D8603
76
——序号

3——状态:发送

20——PDU串长度

2、 查询特定序号的短信
指令AT+CMGR=n8
其中n代表序号
返回(例):
+CMGR: 3,,20
0891683108200805F011620D91683195041338F50000FF0530972D8603
3
——状态:发送
20
——PDU串长度

注意:PDU串长度表示PDU中除去短信中心部分剩下的代码的长度的1/2。例如上述PDUPDU长度部分为11620D91683195041338F50000FF0530972D860340个字符,表示20个字节。

储存PDU
指令
AT+CMGW=[PDU
长度] 8
>[PDU
]
例如
AT+CMGW=20
8

> 0891683108200805F011620D91683195041338F50000FF0530972D8603
注意,输入PDU后按“CTRL+Z”终止。程序中使用0x1A0x1D作为终止。

返回+CMGW: 85
85
——序号

发送PDU

1、 发送输入的PDU
指令:
AT+CMGS=[PDU
长度] 8
>[PDU
代码]

2、 发送指定序号的PDU
指令:
AT+CMSS=[序号] 8

接收短信

接收刚收到的短信有两种方法:轮询终端;使用事件

轮询终端可以定期的使用AT+CMGL=0指令读取未读取得指令。方法简单,但许多时候都在做无用功,效率低下,一般不建议采用。下面主要讲解事件法:

指令:
AT+CNMI=,,,,

参数:
mode

0——缓存在终端

1——直接发送到TE

mt

0——接收到新的SMS不返回事件

1——如果接收到的SMS存储在ME,则返回
+CMTI:,

2——除了Class2 SMS,新的SMS直接发送到终端,返回:
+CMT:

3——Class3 SMS使用mt=2的方法返回,其他类型的使用mt=1的方法返回。

bm

0——小区广播不通知

2——新的小区广播通知,返回
+CBM:

3——Class3格式的小区广播通知,使用bm=2格式

ds

0——状态报告不通知

1——新的状态报告通知,返回:
+CDS:

2——如果新的状态报告存储到ME,则返回:

+CDSI:,

brf

1——始终为1

例:

一般我们使用AT+CNMI=1,1,0,2,1

当收到新的短信时终端返回:

+CMTI:ME,5

新的状态报告:

+CDSI:ME,6

程序可以通过判断返回值并使用AT+CMGR指令返回新到短信。