鍩轰簬鎸囦护鐨勬ā鍧楁潵鐢垫樉绀虹殑瀹炵幇鏂规硶(基于指令的模块来电显示的实现)

中国论文网 发表于2022-11-15 01:30:50 归属于通信学论文 本文已影响486 我要投稿 手机版

       中国论文网为大家解读本文的相关内容:          

摘 要:通过基于AT指令的M22 GPRS模块,在VB6.0下利用MSComm控件实现GPRS模块与计算机的串行通信,对电话呼入时串口的数据进行分析、提取,开发设计了来电显示功能,从而实现对来电号码的追踪。

关键词:AT指令;GPRS模块;MSComm控件;来电显示

1.引言
  GPRS(General Packet Radio Service)是“通用分组无线业务”英文的缩写,是在现有的GSM网络基础上叠加了一个新的网络。它充分利用了现有移动通信网的设备,在GSM网路上增加一些硬件设备和软件升级,形成一个新的网络逻辑实体。它以分组交换技术为基础,采用数据网络协议。随着移动通信技术的发展,采用GPRS通信方式的移动数据通信网络已经覆盖了各地,而且网络运行稳定,因此给行业应用带来了广阔的市场前景。
  将计算机通过串行通信技术与GPRS无线通信网络建立连接,可以实现手机与计算机的通信。计算机与GPRS网络的连接可以采用GPRS模块,也可以采用GPRS Modem,笔者采用基于AT指令的M22 GPRS模块使计算机与GPRS网络进行连接,其组成原理如图1所示。本文在Windows环境下,采用VB6.0中的MSComm控件实现M22 GPRS模块与计算机的串行通信,开发设计了来电显示功能,从而实现对来电号码的追踪。


图1 基于GPRS网络的M22模块应用系统组成原理
  2. AT指令
  最初AT指令仅被用于Modem操作,随后一些主要的移动电话生产厂商共同为GSM制订了一套比较完善的AT指令。在此基础上,AT指令又逐渐演化并被加入到了GSM 07.05标准以及GSM 07.07标准。GSM07.07标准是手机、Modem等设备与计算机进行通信的标准,不同的厂家对AT指令都进行了相应的扩充和修改,因而不同设备的指令格式并不完全相同,但都遵循GSM07.07标准。AT指令的格式通常有如下几种:
  (1)AT
  (2)AT+XXXX=XX
  (3)AT+XXXX=″XX″
  3. 串行通信配置方案
  在Windows环境下,串口与外部设备的通信可以利用VB提供的MSComm控件来完成。MSComm是一种串行通信控件,它提供了两种处理通信的方式:事件驱动方式和查询方式。事件驱动通讯是处理串行端口交互作用的一种非常有效的方法,可以利用 MSComm 控件的 OnComm 事件捕获并处理通讯事件,OnComm 事件还可以检查和处理通讯错误。所有通讯事件和通讯错误的列表,通过检查 CommEvent 属性的值事件和错误来查询。每个MSComm 控件对应着一个串行端口,如果应用程序需要访问多个串行端口,必须使用多个 MSComm 控件。由于每个MSComm控件均对应着唯一的一个串行端口号,因此在设备连接好后,需要根据系统的具体配置设置相应的参数,主要设置的参数有设备的端口号、数据传输速率、数据位、奇偶校验位、停止位等。假设连接端口为COM1,数据传输速率为9600bit/s、数据位为n、奇偶校验位为8、停止位为1,则可设置VB的MSComm控件的属性如下:
  rt = 1
  gs = "9600,n,8,1"
  en = 0
  erSize = 1024
  en = True
  hold = 64
  当参数设置好后,需要通过下列的AT指令来进行测试连接是否成功。
  AT
  AT+CMGF=1
  在MSComm的OnComm事件里,当检测到返回的响应指令为“OK”时,表示串口已经连接成功。
  4.来电显示的实现
  笔者应用基于AT指令的M22 GPRS模块,采用VB6.0设计开发了来电显示功能,实现方法如下:
  GPRS模块有电话呼入时串口收到如下数据:
  RING
  +CLIP:"13514303856",129,,,,0
  +CLIP:"13514303856",129,,,,0
  RING
  +CLIP:"13514303856",129,,,,0
  RING
  +CLIP:"13514303856",129,,,,0
  当对方挂机时收到NO CARRIER。从收到的数据可以看出,要想得到来电号码,必须对收到的数据进行处理,即提取有用信息,过滤无用信息。当有来电时,在缓存中寻找“+CLIP:”,用Val命令在连续的15个字符中取连续的数字,可将来电号码提取出来。代码如下:
  Dim StrBuffer As String
  Dim Point As Integer
  StrBuffer =
  If IsOff = False And <> "" Then
   Exit Sub
  End If
  Point = InStr(1,StrBuffer,"+CLIP:")
  If Point = 0 Then
   Exit Sub
  End If
  If Len(Mid(StrBuffer,Point + 8,15)) <> 15 Then
   Exit Sub
  End If
   = Val(Mid(StrBuffer,Point + 8,15))
  如果前一次来电挂断后的数据不足64字节,未能触发事件,则前次的数据会驻留缓存中,本次来电后凑满64字节触发事件,如:
  RING
  +CLIP:"13514303856",129,,,,0
  NO CARRIER
  
  RING
  +CLIP:"13180809999",129,,,,0
  +CLIP:"13180809999",129,,,,0
  则用寻找“+CLIP:”的方法读出的号码为:13514303856,而本次来电的号码为:13180809999。
  为避免出现这个问题需要采用新的判断条件,即寻找NO CARRIER。在NO CARRIER后寻找22个字符,读出其中的连续数字。代码如下:
  Dim StrBuffer As String
  StrBuffer =
  If InStr(1,StrBuffer,"ER") <> 0 Then
    = ""
   If Mid(StrBuffer,InStr(1,StrBuffer,"ER") + 6,1) <> "R" Then
     = ""
    IsOff = True
    Exit Sub
   Else
    If Len(Mid(StrBuffer,InStr(1,StrBuffer,"ER") + 22,15)) = 15 Then
      = Val(Mid(StrBuffer,InStr(1,StrBuffer,"ER") + 22,15))
    End If
   End If
  End If
  5.结论
  通过上述的程序设计,实现了来电显示的功能。本程序在设计过程中,通过对电话呼入时串口收到的数据进行分析,提取了其中的电话号码,摒弃了无效信息,同时考虑了可能出现的特殊情况,从而确保来电显示的号码无误。
  参考文献
黄晴.基于VB的网络管理系统的设计与实现.华东师范大学硕士学位论文,2007.

作者简介:王洪革(1968—),男,吉林警察学院信息工程系副教授,工学硕士,主要研究方向:信息处理及计算机通信。


  中国论文网(www.lunwen.net.cn)免费学术期刊论文发表,目录,论文查重入口,本科毕业论文怎么写,职称论文范文,论文摘要,论文文献资料,毕业论文格式,论文检测降重服务。

返回通信学论文列表
展开剩余(