AT指令方面的研究

最近笔者有个项目需要做自动发短信的模块,不过本来想简单行事,让客户购买移动的服务,即调用移动的Web Service来实现,结果客户考虑到移动的服务资费太高,所以没办法只好改用短信猫的方式了。采用硬件来实现自动发短信的功能就涉及到AT指令这个东西。

一、AT指令的概述

AT AttentionAT指令集是从终端设备(Terminal EquipmentTE)或数据终端设备(Data Terminal EquipmentDTE)向终端适配器(Terminal Adapter TA)或数据电路终端设备(Data Circuit Terminal EquipmentDCE)发送的。通过TATE发送AT指令来控制移动台(Mobile StationMS)的功能,与GSM 网络业务进行交互。用户可以通过AT指令进行呼叫、短信、电话本、数据业务、传真等方面的控制。90年代初,AT指令仅被用于Modem操作。没有控制移动电话文本消息的先例,只开发了一种叫SMS BlockMode的协议,通过终端设备(TE)或电脑来完全控制

  SMS。几年后,主要的移动电话生产厂商诺基亚、爱立信、摩托罗拉和HP共同为GSM研制了一整套AT指令,其中就包括对SMS的控制。AT指令在此基础上演化并被加入GSM0705标准以及现在的GSM0707标准,完全标准化和比较健全的标准。如:对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+VGRAT+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-MOSMS-MTSMS-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 MEMSC之间的数据密码模式。

  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 忽略命令。这个特殊命令允许忽略SMSSS和可用的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>
                  */

PDU数据格式分析

本部分的PDU数据格式分析属于通用性质的,在具体的硬件上还稍有不同,本人也是根据本数据格式分析后,重写出自己的PDU数据编码模块的。不过本人是在手机上测试的,稍有不同的地方是:下面提到的11 00 0D 中的0D改成了0B,以及后面的目的地(手机号)也没有加所为的91(+)86部分。通过上述部分的调整本人能够通过电脑操作手机发送短信了。

  例如,我们要将字符“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监视软件。

你可能感兴趣的:(通信栏目)