最近笔者有个项目需要做自动发短信的模块,不过本来想简单行事,让客户购买移动的服务,即调用移动的Web Service来实现,结果客户考虑到移动的服务资费太高,所以没办法只好改用短信猫的方式了。采用硬件来实现自动发短信的功能就涉及到AT指令这个东西。
一、AT指令的概述
AT 即Attention,AT指令集是从终端设备(Terminal Equipment,TE)或数据终端设备(Data Terminal Equipment,DTE)向终端适配器(Terminal Adapter, TA)或数据电路终端设备(Data Circuit Terminal Equipment,DCE)发送的。通过TA,TE发送AT指令来控制移动台(Mobile Station,MS)的功能,与GSM 网络业务进行交互。用户可以通过AT指令进行呼叫、短信、电话本、数据业务、传真等方面的控制。90年代初,AT指令仅被用于Modem操作。没有控制移动电话文本消息的先例,只开发了一种叫SMS BlockMode的协议,通过终端设备(TE)或电脑来完全控制
SMS。几年后,主要的移动电话生产厂商诺基亚、爱立信、摩托罗拉和HP共同为GSM研制了一整套AT指令,其中就包括对SMS的控制。AT指令在此基础上演化并被加入GSM07.05标准以及现在的GSM07.07标准,完全标准化和比较健全的标准。如:对SMS的控制共有3种实现途径:最初的BlockMode;基于AT指令的TextMode;基于AT指令的PDUMode。到现在PDUMode已经取代BlockMode,后者逐渐淡出。GSM模块与计算机之间的通信协议是一些AT指令集,AT指令是以AT作首,字符结束的字符串,AT指令的响应数据包在中。每个指令执行成功与否都有相应的返回。其他的一些非预期的信息(如有人拨号进来、线路无信号等),模块将有对应的一些信息提示,接收端可做相应的处理。
二、常见的AT指令
呼叫控制命令
1、 ATD 拨号命令。这个命令用来设置通话、数据或传真呼叫。
2、 ATH 挂机命令。
3、 ATA 接电话。
4、 AT+CEER 扩展错误报告。这个命令给出当上一次通话设置失败后中断通话的原
因。
5、 AT+VTD 给用户提供应用GSM网络发送DTMF(双音多频)双音频。这个命令用来
定义双音频的长度(默认值是300毫秒)。
6、 AT+VTS 给用户提供应用GSM网络发送DTMF双音频。这个命令允许传送双音频。
7、 ATDL 重拨上次电话号码。
8、 AT%Dn 数据终端就绪(DTR)时自动拨号。
9、 ATS0 自动应答。
10、 AT+CICB 来电信差。
11、 AT+CSNS 单一编号方案。
12、 AT+VGR,AT+VGT 增益控制。这个命令应用于调节喇叭的接收增益和麦克风的传
输增益。
13、 AT+CMUT 麦克风静音控制。
14、 AT+SPEAKER 喇叭/麦克风选择。这个特殊命令用来选择喇叭和麦克风。
15、 AT+ECHO 回音取消。
16、 AT+SIDET 侧音修正。
17、 AT+VIP 初始化声音参数。
18、 AT+DUI 用附加的用户信息拨号。
19、 AT+HUI 用附加的用户信息挂机。
20、 AT+RUI 接收附加用户信息。
网络服务命令
1、 AT+CSQ 信号质量。
2、 AT+COPS 服务商选择。
3、 AT+CREG 网络注册。获得手机的注册状态。
4、 AT+WOPN 读取操作员名字。
5、 AT+CPOL 优先操作员列表。
安全命令
1、 AT+CPIN 输入PIN。
2、 AT+CPIN2 输入PIN2。
3、 AT+CPINC PIN的剩余的尝试号码。
4、 AT+CLCK 设备锁。
5、 AT+CPWD 改变密码。
电话簿命令
1、 AT+CPBS 选择电话簿记忆存储。
2、 AT+CPBR 读取电话簿表目。
3、 AT+CPBF 查找电话簿表目。
4、 AT+CPBW 写电话簿表目。
5、 AT+CPBP 电话簿电话查询。
6、 AT+CPBN 电话簿移动动作。这个特殊命令使电话簿中的条目前移或后移(按字
母顺序)
7、 AT+CNUM 签署者号码。
8、 AT+WAIP 防止在下一次重起时初始化所有的电话簿。
9、 AT+WDCP 删除呼叫电话号码。
10、 AT+CSVM 设置语音邮件号码。
短消息命令
1、 AT+CSMS 选择消息服务。支持的服务有GSM-MO、SMS-MT、SMS-CB。
2、 AT+CNMA 新信息确认应答。
3、 AT+CPMS 优先信息存储。这个命令定义用来读写信息的存储区域。
4、 AT+CMGF 优先信息格式。执行格式有TEXT方式和PDU方式。
5、 AT+CSAS 保存设置。保存+CSAS和+CSMP的参数。
6、 AT+CRES 恢复设置。
7、 AT+CSDH 显示文本方式的参数。
8、 AT+CNMI 新信息指示。这个命令选择如何从网络上接收短信息。
9、 AT+CMGR 读短信。信息从+CPMS命令设定的存储器读取。
10、 AT+CMGL 列出存储的信息。
11、 AT+CMGS 发送信息。
12、 AT+CMGW 写短信息并存储。
13、 AT+CMSS 从存储器中发送信息。
14、 AT+CSMP 设置文本模式的参数。
15、 AT+CMGD 删除短信息。删除一个或多个短信息。
16、 AT+CSCA 短信服务中心地址。
17、 AT+CSCB 选择单元广播信息类型。
18、 AT+WCBM 单元广播信息标识。
19、 AT+WMSC 信息状态(是否读过、是否发送等等)修正。
20、 AT+WMGO 信息覆盖写入。
21、 AT+WUSS 不改变SMS状态。在执行+CMGR或+CMGL后仍保持UNREAD。
追加服务命令
1、 AT+CCFC 呼叫继续。
2、 AT+CLCK 呼叫禁止。
3、 AT+CPWD 改变追加服务密码。
4、 AT+CCWA 呼叫等待。
5、 AT+CLIR 呼叫线确认限制。
6、 AT+CLIP 呼叫线确认陈述。
7、 AT+COLP 联络线确认陈述。
8、 AT+CAOC 费用报告。
9、 AT+CACM 累计呼叫计量。
10、 AT+CAMM 累计呼叫计量最大值。
11、 AT+CPUC 单价和货币表。
12、 AT+CHLD 呼叫相关的追加服务。
13、 AT+CLCC 列出当前的呼叫。
14、 AT+CSSN 追加服务通知。
15、 AT+CUSD 无组织的追加服务数据。
16、 AT+CCUG 关闭的用户组。
数据命令
1、 AT+CBST 信差类型选择。
2、 AT+FCLASS 选择模式。这个命令把模块设置成数据或传真操作的特殊模式。
3、 AT+CR 服务报告控制。这个命令允许更为详细的服务报告。
4、 AT+CRC 划分的结果代码。这个命令在呼叫到来时允许更为详细的铃声指示。
5、 AT+ILRR 本地DTE-DCE速率报告。
6、 AT+CRLP 无线电通信线路协议参数。
7、 AT+DOPT 其他无线电通信线路参数。
8、 AT%C 数据压缩选择。
9、 AT+DS 是否允许V42二度数据压缩。
10、 AT+DR 是否报告V42二度数据压缩。
11、 AT/N 数据纠错选择。
传真命令
1、 AT+FTM 传送速率。
2、 AT+FRM 接收速率
3、 AT+FTH 用HDLC协议设置传真传送速率。
4、 AT+FRH 用HDLC协议设置传真接收速率。
5、 AT+FTS 停止特定时期的传送并等待。
6、 AT+FRS 接收沉默。
第二类传真命令
1、 AT+FDT 传送数据。
2、 AT+FDR 接收数据。
3、 AT+FET 传送页标点。
4、 AT+FPTS 页转换状态参数。
5、 AT+FK 终止会议。
6、 AT+FBOR 页转换字节顺序。
7、 AT+FBUF 缓冲大小报告。
8、 AT+FCQ 控制拷贝质量检验。
9、 AT+FCR 控制接收传真的能力。
10、 AT+FDIS 当前会议参数。
11、 AT+FDCC 设置DCE功能参数。
12、 AT+FLID 定义本地ID串。
13、 AT+FPHCTO 页转换超时参数。
V24-V25命令
1、 AT+IPR 确定DTE速率。
2、 AT+ICF 确定DTE-DCE特征结构。
3、 AT+IFC 控制DTE-DCE本地流量。
4、 AT&C 设置DCD(数据携带检测)信号。
5、 AT&D 设置DTR(数据终端就绪)信号。
6、 AT&S 设置DST(数据设置就绪)信号。
7、 ATO 回到联机模式。
8、 ATQ 决定手机是否发送结果代码。
9、 ATV 决定DCE响应格式。
10、 ATZ 恢复为缺省设置。
11、 AT&W 保存设置。
12、 AT&T 自动测试。
13、 ATE 决定是否回显字符。
14、 AT&F 回到出厂时的设定。
15、 AT&V 显示模块设置情况。
16、 ATI 要求确认信息。这命令使GSM模块传送一行或多行特定的信息文字。
17、 AT+WMUX 数据/命令多路复用。
特殊AT命令
1、 AT+CCED 电池环境描述。
2、 AT+CCED 自动RxLev指示。
3、 AT+WIND 一般指示。
4、 AT+ALEA 在ME和MSC之间的数据密码模式。
5、 AT+CRYPT 数据密码模式。
6、 AT+EXPKEY 键管理。
7、 AT+CPLMN 在PLMN上的信息。
8、 AT+ADC 模拟数字转换度量。
9、 AT+CMER 移动设备事件报告。这个命令决定是否允许在键按下时是否主动发送
结果代码。
10、 AT+WLPR 读取语言偏好。
11、 AT+WLPW 写语言偏好。
12、 AT+WIOR 读取GPIO值。
13、 AT+WIOW 写GPIO值。
14、 AT+WIOM 输入/输出管理。
15、 AT+WAC 忽略命令。这个特殊命令允许忽略SMS、SS和可用的PLMN。
16、 AT+WTONE 播放旋律。
17、 AT+WDTMF 播放DTMF旋律。
18、 AT+WDWL 下载模式。
19、 AT+WVR 配置信差的声音速率。
20、 AT+WDR 配置数据速率。
21、 AT+WHWV 显示硬件的版本。
22、 AT+WDOP 显示产品的出厂日期。
23、 AT+WSVG 声音增益选择。
24、 AT+WSTR 返回指定状态的状态。
25、 AT+WSCAN 扫描。
26、 AT+WRIM 设置或返回铃声指示模式。
27、 AT+W32K 是否允许32kHz掉电方式。
28、 AT+WCDM 改变缺省旋律。
29、 AT+WSSW 显示内部软件版本。
30、 AT+WCCS 编辑或显示订制性质设置表。
31、 AT+WLCK 允许在特定的操作符上个性化ME。
32、 AT+CPHS 设置CPHS命令。
33、 AT+WBCM 电池充电管理。
34、 AT+WFM 特性管理。是否允许模块的某些特性,如带宽模式、SIM卡电压等。
35、 AT+WCFM 商业特性管理。是否允许Wavecom特殊特性。
36、 AT+WMIR 允许从当前存储的参数值创建定制的存储镜像。
37、 AT+WCDP 改变旋律的缺省播放器。
38、 AT+WMBN 设置SIM卡中的不同邮箱号码。
SIM卡工具箱命令
1、 AT+STSF 配置工具箱实用程序。
2、 AT+STIN 工具箱指示。
3、 AT+STGI 获得从SIM卡发来的预期命令的信息。
4、 AT+STCR 主动提供的结果:工具箱控制反应。
5、 AT+STGR 给出响应。允许程序或用户从主菜单上选择项目,或响应某些命令。
三、发短信模块的AT指令
发短信相关的指令到前面的常用指令中找找,在这阐述一下发短信的原理:我们是采用COM端口发送短信的,所以一开始就需要初始化一个串口COM,接着在这个窗口中设置短信中心号(如果是硬件中已经设置了短信中心号,就可以不用设置),设置短信的模式(TEXT、PDU,如果硬件为手机的话,经测试不需要该设置),接下来就是发送编码号的短信内容。
1.初始化串口:
SerialPort sp = new SerialPort("COM19", 9600, Parity.None, 8, StopBits.One);
sp.Open();
sp.Handshake = Handshake.None;
sp.Encoding = Encoding.ASCII;
sp.DtrEnable = true;
sp.RtsEnable = true;
2.发送TEXT短信,不支持中文
//设置命令模式,1表示TEXT模式
AT+CMGF=1
编码编码方式采用ASCII
3.发送PDU短信,支持中文
接收手机号:136354393xx (注意换成实际手机号)
短信内容:江津是个好地方
PDU内容为:11000D916831364593x3Fx0008000E6C5F6D25662F4E2A597D573065B9
1100:固定值
0D:接收手机号长度
91:表示接收方为手机
6831364593x3Fx:接收手机号的反8位
000800:固定值
0E :短信内容的十六进制编码长度/2,保留2位十六进制数。
6C5F6D25662F4E2A597D573065B9:短信内容“江津是个好地方”的unicode十六进制编码。
4.通过PDU,发送WAP PUSH短信
发送内容:0051000BA131364593x3Fx00F5A7460B05040B8423F0000303010129060603AE81EA8DCA02056A0045C6080C037761702E62616964752E636F6D000103E6B19FE6B4A5E698AFE4B8AAE5A5BDE59CB0E696B9000101
/**
*00 SMSC 地址信息的长度 00表示用手机上设置短信中心号码,PDU 串的“SMSC 址格式”段和“SMSC 地址”段将省去
*51 基本参数(TP-MTI/VFP) 不要求发送回复
*00 消息基准值(TP-MR)
*0B 对方电话的长度
*A1 目标地址格式 A1表示为国内格式
*31364593x3Fx 目标地址,补‘F’凑成偶数位后奇偶位互换(注意改成实际号码)
*00 协议标识(TP-PID) 是普通GSM 类型,点到点方式
*F5 用户信息编码方式 (TP-DCS)
*A7 有效期(TP-VP)
*85 用户信息长度(TP-UDL) (此处是从下面的0B开始所有的字节数/2对应的十六进制数)
*0B WAP PUSH头部的总长度
*05040B8423F0 表示接下来是一个WAP PUSH
*00 表示是Concatenated Short Messages
*03 长度
*03 reference number
*01 表示分成1个短信发送
*01 当前包的序号
*29060603AE81EA8DCA WSP
*02 标记位
*05 -//WAPFORUM//DTD SI 1.0//EN
*6A UTF-8
*00 标记开始
*45
*C6 < />
*08
*0C href="http://
*03 字符串开始
*7761702e62616964752e636f6d URL: wap.baidu.com
*00 URL 字符串结束
*01 >
*03 内容描述字符串开始
*e6b19fe6b4a5e698afe4b8aae5a5bde59cb0e696b9 内容:江津是个好地方
*00 内容描述字符串结束
*01 /P>
*01 /P>
*/
例如,我们要将字符“Hi”字符发送到目的地“13678099”
PDU字符串为:
08 91 683108701305F0 11 00 0D 91 3176378290F9 00 00 00 02 C834
⑴08—短信息中心地址长度。指(91)+(683108701305F0)的长度。
⑵91—短信息中心号码类型。91是TON/NPI遵守International/E.164标准,指在号码前需加‘+’号;此外还有其它数值,但91最常用。
91—10010001
BIT No.
7
6
5
4
3
2
1
0
Name
1
数值类型
号码鉴别
数值类型(Type of Number):000—未知,001—国际,010—国内,111—留作扩展;
号码鉴别(Numbering plan identification):0000—未知,0001—ISDN/电话号码(E.164/E.163),1111—留作扩展;
⑶683108701305F0—短信息中心号码。由于位置上略有处理,实际号码应为:8613800 731500(字母F是指长度减1)。这需要根据不同的地域作相应的修改。
⑴、⑵、⑶通称短消息中心地址(Address of the SMSC)。
⑷11—文件头字节。
11&h=00010001&b
BIT No.
7
6
5
4
3
2
1
0
Name
TP-RP
TP-UDHI
TP-SPR
TP-VFP
TP-RD
TP-MTI
value
0
0
0
1
0
0
0
1
应答路径—TP-RP(TP-Reply-Path):0—不设置; 1—设置
用户数据头标识—TP-UDHL(TP-User-Data-Header-Indicator):0—不含任何头信息; 1—含头信息
状态报告要求—TP-SPR(TP-Status-Report-Request):0—需要报告; 1—不需要报告
有效期格式—TP-VPF(TP-Validity-Period-Format):00—不提供(Not present); 10—整型(标准);01—预留; 11—提供8位字节的一半(Semi-Octet Represented)
拒绝复制—TP-RD(TP-Reject-Duplicates):0—接受复制; 1—拒绝复制
信息类型提示—TP-MTI(TP-Message-Type-Indicator):00—读出(Deliver); 01—提交(Submit)
⑸00—信息类型(TP-Message-Reference)
⑹0B—被叫号码长度。
⑺91—被叫号码类型(同⑵)。
⑻3176378290F9—被叫号码,经过了位移处理,实际号码为“1368099”。
⑹、⑺、⑻通称目的地址(TP-Destination-Address)。
⑼00—协议标识TP-PID(TP-Protocol-Identifier)
BIT No.
7
6
5
4
3
2
1
0
Bit No.7与Bit No.6: 00—如下面定义的分配Bit No.0—Bit No.5;01—参见GSM03.40协议标识完全定义;10—预留;11—为服务中心(SC)特殊用途分配Bit No.0—Bit No.5。
一般将这两位置为00。
Bit No.5:0—不使用远程网络,只是短消息设备之间的协议;1—使用远程网络。
Bit No.0—Bits No.4:00000—隐含;00001—电传;00010—group 3 telefax;00100—语音;00101—欧洲无线信息系统(ERMES);00110—国内系统;10001—任何基于X.400的公用信息处理 系统;10010—Email。
⑽00—数据编码方案TP-DCS(TP-Data-Coding-Scheme)
BIT No.
7
6
5
4
3
2
1
0
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—默认的字母表,01—8bit,10—USC2(16bit),11—预留;Bit No.1与Bit No.0:00—Class 0,01—Class 1,10—Class 2(SIM卡特定信息),11—Class 3。
⑾00—有效期TP-VP(TP-Valid-Period)
VP value(&h)
相应的有效期
00 to 8F
(VP+1)*5 分钟
90 to A7
12小时+(VP-143)*30分钟
A8 to C4
(VP-166)*1天
C5 to FF
(VP-192)*1 周
⑿02—用户数据长度TP-UDL(TP-User-Data-Length)
⒀C834—用户数据TP-UD(TP-User-Data)“Hi”
开发心得:
在开发类似于AT指令方面的项目时,特别需要编码成16进制或8进制或者2进制的信号时,最好找一个监视软件,看看发送的数据到底符不符合要求。在开发该模块时采用了Device Monitoring Studio监视软件。