分享一个C#使用AT指令控制语音猫的例子

    阅读全文:http://www.cckan.net/forum.php?mod=viewthread&tid=61

 先来说说


 

   最近公司让开发一个语音猫充值的软件,就是拨打10086(虚拟)进行话费充值操作,虚拟流程如下;

1.先拨通10086

2.按1进行话费充值

3.按2进行卡充值

4.输入充值卡号

5.按#号进行确认

6.充值成功提示,挂机,然后再次拨通。

基本的游戏就是这样

如果我们想用控制语音猫来完成这样的操作。我首先要做的是要解决以下几个问题

1.怎么发送数据到语音猫(短信猫也是一样的)

2.怎么样拨打10086

3.怎么样在拨通后按1,2,#等键

4.怎么查挂机操作

 

开始解决问题


 首先是怎么连接语音猫,这个刚开始困惑了我很久,不知道怎么连接,用什么方式呢?又不是数据库,直接传Sql语句就OK了,最多是个不会写,呵呵,这个无从下手了,

 

不过分析一下就明白了,语音猫是通过Com接口连接到计算机的,那么我们肯定就可以根据访问com的方法去访问他了,这个简单,看下面的代码

 

  ///   <summary>
        
///  SerialPort串口对象
        
///   </summary>
        SerialPort sp  =   null ;

        
///   <summary>
        
///  初始化对象
        
///   </summary>
        
///   <param name="com"> Com号 </param>
        
///   <param name="BaudRate"> 波特 </param>
         public   void  loadSerialPort( string  com,  int  BaudRate)
        {
            
// 假设是COM1口 
            sp  =   new  SerialPort();
            
// 波特
            sp.BaudRate  =   9600 ;
            
// Com名称
            sp.PortName  =  com;
        }

我们可以使用串口操作类

SerialPort 来完成,只要咱们传一个Com的名称和波特就行了。

com名称这个好找,计算机上一般都是两到三个口,如果不知道就测试也能测试出来,我只连接了一个,当是Com1了,如果不对的话在运行时直接就会提示Com不存在,很容易

测试出来,因为不出错时就是对了,呵呵。

那么波特怎么得到呢?其实这个也很简单,在语音猫的说明 上就有,我这边的是9600,一般是9600 和11000,这个和自己的猫有关系。这个也很好测试。如果你com是对的

波特不对会提示你端口未打开,或者是无法访问,测试到不提示错误了就代表没有问题了,呵呵简单吧。

连接上了之后我们要看看怎么发送信息到设备了

方法如下

 

  ///   <summary>
        
///  发送At指令
        
///   </summary>
        
///   <param name="strat"> 指令内容不需要加;\r\n </param>
         public   void  sendat( string  strat)
        {
            sp.Open();
            sp.Write(strat 
+   " ;\r\n " );
            sp.Close();
        }

 

现在重要的是我们应该发什么,呵呵

1.打电话的指令怎么发?

    这个很好找在网上一找就找到了,打电话的是atd10086;\r\n 大家一看应该就明白什么意思了吧,atd是指令,10086就是我们要拨打的电话号码。

2.怎么在通话进行按键呢?

at+vts=1; 就是这样,后面的1就是我们要进行的操作,如果是#的话应该是at+vts=#;

这个在专业术语里面叫:给用户提供应用GSM网络发送DTMF双音频。这个命令允许传送双音频。 还有一个好听点的名字叫拨分机号。

3.怎么进行挂机呢?直接发送指使ath就行了。

下面是个测试的CS代码

 

   // 生成一个AT操作类的对象
        GSM objgsm  =   new  GSM();

        
// 加载窗体时构造At指令类的参数
         private   void  GMSMessage_Load( object  sender, EventArgs e)
        {
            objgsm.loadSerialPort(
" com1 " 9600 );
        }

        
// 发送At指令
         private   void  btnSelect_Click( object  sender, EventArgs e)
        {
            objgsm.sendat(textBox1.Text.Trim());
            richTextBox1.Text 
=   " 发送At: "   +  textBox1.Text.Trim()  +   " \r\n " ;
        }

        
// 在关闭窗体时如果有没有关闭的通道关闭
         private   void  GMSMessage_FormClosing( object  sender, FormClosingEventArgs e)
        {
            objgsm.sendat(
" ath " );
        }

        
// 定时刷新一下设备中的信息
         private   void  timeAT_Tick( object  sender, EventArgs e)
        {
            
try
            {
                richTextBox1.Text 
+=   " \r\n "   +  objgsm.returnSerialPort().ReadExisting();
            }
            
catch  (Exception)
            {

            }
        }

 

总结一下


 

   其实这个问题做完了之后才感觉哎,就这,太简单了,但是在没有做之前呢,感觉无从下手,程序中的技术点就是这样,过了就过了,很简单,有时候可能只是一个想法,但要是想不通也是无能为了,并不是因为代码不会写,像这些情况 只要细心分析一下应该都不是太大的问题。 另外

at+vts=1;这个指令每次只能发一条,如果要输入 一个11位的电话号码的话就要发送11次,感觉不太友好,暂时没有找到更好的方式。还希望知道的朋友帮下忙

下在我把收集的一些指令集给大家分享一下

 

View Code
AT指令

一、一般命令 
AT
+ CGMI 给出模块厂商的标识。 SONY ERICSSON 
AT
+ CGMM 获得模块标识。这个命令用来得到支持的频带(GSM900,DCS1800或PCS1900)。当模块有多频带时,回应可能是不同频带的结合。 AAB - 1021011 - CN 
AT
+ CGMR 获得改订的软件版本。 R6C005      CXC125582CHINA 1  
AT
+ CGSN 获得GSM模块的IMEI(国际移动设备标识)序列号。 351254004238596  
AT
+ CSCS 选择TE特征设定。这个命令报告TE用的是哪个状态设定上的ME。ME于是可以转换每一个输入的或显示的字母。这个是用来发送、读取或者撰写短信。
AT
+ CSCS ?
+ CSCS:  " GSM "  
AT
+ WPCS 设定电话簿状态。这个特殊的命令报告通过TE电话簿所用的状态的ME。ME于是可以转换每一个输入的或者显示的字符串字母。这个用来读或者写电话簿的入口。
NONE 
AT
+ CIMI 获得IMSI。这命令用来读取或者识别SIM卡的IMSI(国际移动签署者标识)。在读取IMSI之前应该先输入PIN(如果需要PIN的话)。
460001711603161  
AT
+ CCID 获得SIM卡的标识。这个命令使模块读取SIM卡上的EF - CCID文件。
NONE 
AT
+ GCAP 获得能力表。(支持的功能) + GCAP:  + FCLASS,  + CGSM,  + DS 
A
/   重复上次命令。只有A / 命令不能重复。这命令重复前一个执行的命令。 
AT
+ CPOF 关机。这个特殊的命令停止GSM软件堆栈和硬件层。命令AT + CFUN = 0的功能与 + CPOF相同。 
AT
+ CFUN 设定电话机能。这个命令选择移动站点的机能水平。 
AT
+ CPAS 返回移动设备号的活动状态。 
AT
+ CMEE 报告移动设备的错误。这个命令决定允许或不允许用结果码“ + CMEERROR:”或者“ + CMSERROR:”代替简单的“ERROR”。 
AT
+ CKPD 小键盘控制。仿真ME小键盘执行命令。 
AT
+ CCLK 时钟管理。这个命令用来设置或者获得ME真实时钟的当前日期和时间。
AT
+ CCLK ?
+ CCLK:  " 04/08/12,17:00:42+32 "  
AT
+ CALA 警报管理。这个命令用来设定在ME中的警报日期 / 时间。(闹铃)
AT
+ CALA =?
+ CALA: ( 1 - 2 ),(),(),( 13 ),() 
AT
+ CRMP 铃声旋律播放。这个命令在模块的蜂鸣器上播放一段旋律。有两种旋律可用:到来语音、数据或传真呼叫旋律和到来短信声音。 
AT
+ CRSL 设定或获得到来的电话铃声的声音级别。NONE 


二、呼叫控制命令

ATD 拨号命令。这个命令用来设置通话、数据或传真呼叫。 
ATH 挂机命令。 
ATA 接电话。 
AT
+ CEER 扩展错误报告。这个命令给出当上一次通话设置失败后中断通话的原因。 
AT
+ VTD 给用户提供应用GSM网络发送DTMF(双音多频)双音频。这个命令用来定义双音频的长度(默认值是300毫秒)。 
AT
+ VTS 给用户提供应用GSM网络发送DTMF双音频。这个命令允许传送双音频。 
ATDL 重拨上次电话号码。 
AT
% Dn 数据终端就绪(DTR)时自动拨号。 
ATS0 自动应答。 
AT
+ CICB 来电信差。 
AT
+ CSNS 单一编号方案。 
AT
+ VGR
AT
+ VGT 增益控制。这个命令应用于调节喇叭的接收增益和麦克风的传输增益。 
AT
+ CMUT 麦克风静音控制。 
AT
+ SPEAKER 喇叭 / 麦克风选择。这个特殊命令用来选择喇叭和麦克风。 
AT
+ ECHO 回音取消。 
AT
+ SIDET 侧音修正。 
AT
+ VIP 初始化声音参数。 
AT
+ DUI 用附加的用户信息拨号。 
AT
+ HUI 用附加的用户信息挂机。 
AT
+ RUI 接收附加用户信息。 

三、网络服务命令
AT
+ CSQ 信号质量。 + CSQ:  17 , 99  
AT
+ COPS 服务商选择。
AT
+ COPS ?
+ COPS:  0 , 0 , " China Mobile "  
AT
+ CREG 网络注册。获得手机的注册状态。
AT
+ CREG ?
+ CREG:  0 , 1  
AT
+ WOPN 读取操作员名字。NONE 
AT
+ CPOL 优先操作员列表。NONE 


四、安全命令
AT
+ CPIN 输入PIN。 
AT
+ CPIN2 输入PIN2。 
AT
+ CPINC PIN的剩余的尝试号码。 
AT
+ CLCK 设备锁。 
AT
+ CPWD 改变密码。 


五、电话簿命令
AT
+ CPBS 选择电话簿记忆存储。
AT
+ CPBS ?
+ CPBS:  " SM "  
AT
+ CPBR 读取电话簿表目。
  
AT
+ CPBF 查找电话簿表目。 
AT
+ CPBW 写电话簿表目。 
AT
+ CPBP 电话簿电话查询。 
AT
+ CPBN 电话簿移动动作。这个特殊命令使电话簿中的条目前移或后移(按字母顺序) 
AT
+ CNUM 签署者号码。 
AT
+ WAIP 防止在下一次重起时初始化所有的电话簿。 
AT
+ WDCP 删除呼叫电话号码。NONE 
AT
+ CSVM 设置语音邮件号码。 


六、短消息命令
AT
+ CSMS 选择消息服务。支持的服务有GSM - MO、SMS - MT、SMS - CB。 
AT
+ CNMA 新信息确认应答。 
AT
+ CPMS 优先信息存储。这个命令定义用来读写信息的存储区域。 
AT
+ CMGF 优先信息格式。执行格式有TEXT方式和PDU方式。 
AT
+ CSAS 保存设置。保存 + CSAS和 + CSMP的参数。 
AT
+ CRES 恢复设置。 
AT
+ CSDH 显示文本方式的参数。 
AT
+ CNMI 新信息指示。这个命令选择如何从网络上接收短信息。 
AT
+ CMGR 读短信。信息从 + CPMS命令设定的存储器读取。 
AT
+ CMGL 列出存储的信息。 
AT
+ CMGS 发送信息。 
AT
+ CMGW 写短信息并存储。 
AT
+ CMSS 从存储器中发送信息。 
AT
+ CSMP 设置文本模式的参数。 
AT
+ CMGD 删除短信息。删除一个或多个短信息。 
AT
+ CSCA 短信服务中心地址。 
AT
+ CSCB 选择单元广播信息类型。 
AT
+ WCBM 单元广播信息标识。 
AT
+ WMSC 信息状态(是否读过、是否发送等等)修正。 
AT
+ WMGO 信息覆盖写入。 
AT
+ WUSS 不改变SMS状态。在执行 + CMGR或 + CMGL后仍保持UNREAD。 


七、追加服务命令
AT
+ CCFC 呼叫继续。 
AT
+ CLCK 呼叫禁止。 
AT
+ CPWD 改变追加服务密码。 
AT
+ CCWA 呼叫等待。 
AT
+ CLIR 呼叫线确认限制。 
AT
+ CLIP 呼叫线确认陈述。 
AT
+ COLP 联络线确认陈述。 
AT
+ CAOC 费用报告。 
AT
+ CACM 累计呼叫计量。 
AT
+ CAMM 累计呼叫计量最大值。 
AT
+ CPUC 单价和货币表。 
AT
+ CHLD 呼叫相关的追加服务。 
AT
+ CLCC 列出当前的呼叫。 
AT
+ CSSN 追加服务通知。 
AT
+ CUSD 无组织的追加服务数据。 
AT
+ CCUG 关闭的用户组。 


八、数据命令
AT
+ CBST 信差类型选择。 
AT
+ FCLASS 选择模式。这个命令把模块设置成数据或传真操作的特殊模式。 
AT
+ CR 服务报告控制。这个命令允许更为详细的服务报告。 
AT
+ CRC 划分的结果代码。这个命令在呼叫到来时允许更为详细的铃声指示。 
AT
+ ILRR 本地DTE - DCE速率报告。 
AT
+ CRLP 无线电通信线路协议参数。 
AT
+ DOPT 其他无线电通信线路参数。 
AT
% C 数据压缩选择。 
AT
+ DS 是否允许V42二度数据压缩。 
AT
+ DR 是否报告V42二度数据压缩。 
AT\N 数据纠错选择。 


九、传真命令
AT
+ FTM 传送速率。 
AT
+ FRM 接收速率 
AT
+ FTH 用HDLC协议设置传真传送速率。 
AT
+ FRH 用HDLC协议设置传真接收速率。 
AT
+ FTS 停止特定时期的传送并等待。 
AT
+ FRS 接收沉默。 


十、第二类传真命令
AT
+ FDT 传送数据。 
AT
+ FDR 接收数据。 
AT
+ FET 传送页标点。 
AT
+ FPTS 页转换状态参数。 
AT
+ FK 终止会议。 
AT
+ FBOR 页转换字节顺序。 
AT
+ FBUF 缓冲大小报告。 
AT
+ FCQ 控制拷贝质量检验。 
AT
+ FCR 控制接收传真的能力。 
AT
+ FDIS 当前会议参数。 
AT
+ FDCC 设置DCE功能参数。 
AT
+ FLID 定义本地ID串。 
AT
+ FPHCTO 页转换超时参数。 


十一、V24
- V25命令
AT
+ IPR 确定DTE速率。 
AT
+ ICF 确定DTE - DCE特征结构。 
AT
+ IFC 控制DTE - DCE本地流量。 
AT
& C 设置DCD(数据携带检测)信号。 
AT
& D 设置DTR(数据终端就绪)信号。 
AT
& S 设置DST(数据设置就绪)信号。 
ATO 回到联机模式。 
ATQ 决定手机是否发送结果代码。 
ATV 决定DCE响应格式。 
ATZ 恢复为缺省设置。 
AT
& W 保存设置。 
AT
& T 自动测试。 
ATE 决定是否回显字符。 
AT
& F 回到出厂时的设定。 
AT
& V 显示模块设置情况。 
ATI 要求确认信息。这命令使GSM模块传送一行或多行特定的信息文字。 
AT
+ WMUX 数据 / 命令多路复用。 


十二、特殊AT命令
AT
+ CCED 电池环境描述。 
AT
+ CCED 自动RxLev指示。 
AT
+ WIND 一般指示。 
AT
+ ALEA 在ME和MSC之间的数据密码模式。 
AT
+ CRYPT 数据密码模式。 
AT
+ EXPKEY 键管理。 
AT
+ CPLMN 在PLMN上的信息。 
AT
+ ADC 模拟数字转换度量。 
AT
+ CMER 移动设备事件报告。这个命令决定是否允许在键按下时是否主动发送结果代码。 
AT
+ WLPR 读取语言偏好。 
AT
+ WLPW 写语言偏好。 
AT
+ WIOR 读取GPIO值。 
AT
+ WIOW 写GPIO值。 
AT
+ WIOM 输入 / 输出管理。 
AT
+ WAC 忽略命令。这个特殊命令允许忽略SMS、SS和可用的PLMN。 
AT
+ WTONE 播放旋律。 
AT
+ WDTMF 播放DTMF旋律。 
AT
+ WDWL 下载模式。 
AT
+ WVR 配置信差的声音速率。 
AT
+ WDR 配置数据速率。 
AT
+ WHWV 显示硬件的版本。 
AT
+ WDOP 显示产品的出厂日期。 
AT
+ WSVG 声音增益选择。 
AT
+ WSTR 返回指定状态的状态。 
AT
+ WSCAN 扫描。 
AT
+ WRIM 设置或返回铃声指示模式。 
AT
+ W32K 是否允许32kHz掉电方式。 
AT
+ WCDM 改变缺省旋律。 
AT
+ WSSW 显示内部软件版本。 
AT
+ WCCS 编辑或显示订制性质设置表。 
AT
+ WLCK 允许在特定的操作符上个性化ME。 
AT
+ CPHS 设置CPHS命令。 
AT
+ WBCM 电池充电管理。 
AT
+ WFM 特性管理。是否允许模块的某些特性,如带宽模式、SIM卡电压等。 
AT
+ WCFM 商业特性管理。是否允许Wavecom特殊特性。 
AT
+ WMIR 允许从当前存储的参数值创建定制的存储镜像。 
AT
+ WCDP 改变旋律的缺省播放器。 
AT
+ WMBN 设置SIM卡中的不同邮箱号码。 


十三、SIM卡工具箱命令
AT
+ STSF 配置工具箱实用程序。 
AT
+ STIN 工具箱指示。 
AT
+ STGI 获得从SIM卡发来的预期命令的信息。 
AT
+ STCR 主动提供的结果:工具箱控制反应。 
AT
+ STGR 给出响应。允许程序或用户从主菜单上选择项目,或响应某些命令。 


ASCI码指令 功能 手机回答 
AT回车 握手 OK 
ATE 简化显示 OK 
AT
+ CLCC 来电显示 OK      来电话时串口输出:RING 
AT
+ CLCC    + CLCC:  1 , 1 , 4 , 0 , 0 , " 05133082087 " , 129  
AT
+ CNMI = 1 , 1 , 2  设置收到短消息提示 OK
+ CMTI:“SM”, 4  
4表示手机内短消息数量 
ATD05133082087; 拨打05133082087电话 
AT
+ CMGL = 0  读取电话上全部未读过的SMS消息 
AT
+ CMGL = 2  列出已有的短信息 
AT
+ CMGL = 4  读取全部SMS消息 
AT
+ CMGR = X回车 读取第X条短消息 
AT
+ CMGF = 0回车 用PDU格式   
AT
+ CMGD = X回车 删除第X条短消息 
    
AT
+ CLIP = 1 , 1  来电自动显示的指令 ERROR 
来电话!   RING   
+ CLIP:  13306285091 , 129  
AT
+ CMGS = 6   发送短消息的字节数  >   
0891683108503105F011000B8131032
65890F10008A90C665A4E0A597D00
3100320033  1A   结束符号
十六进制大写 
+ CMGS:  45  
OK
第45条短信发送成功!!!!!! 
AT
+ CMGR = 1  读取第1条短信  0 :未读过,新的短信息
1 :已读过
第二个1表示已读
150  表示PDU数据的长度 
1  表示读取第几条短信   + CMGR:  1 , 1 ,, 150  


GSM07.
05  Function(功能) 
ATE0 RESET 
AT
+ CSMS 选择短信息服务 
AT
+ CPMS 选择短信息内存 
AT
+ CMGF 选择短信息格式 
AT
+ CSCA 短信息中心地址 
AT
+ CNMI 显示新收到的短信息 
AT
+ CMGR 读短信息 
AT
+ CMGS 发送短信息 
AT
+ CMGL 列出SIM卡中短信息 
AT
+ CMSS 从SIM内存中发短信息 
AT
+ CMGW 向SIM内存中写入待发短信息 
AT
+ CMGD 删除SIM内存中的短信息 
AT
+ CSCB 选择蜂窝广播信息 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值