李信洪,刘忠华,廖锦坤
(深圳达实智能股份有限公司,广东深圳 518057)
基于VB的短消息实现及在监控系统中的应用
李信洪,刘忠华,廖锦坤
(深圳达实智能股份有限公司,广东深圳 518057)
介绍了GSM无线模块短消息发送的相关AT命令和模式,利用VB语言实现短消息发送的核心程序,以及监控系统的报警配置,实现了监控系统报警信息的短消息发送。
短消息;AT指令;VB语言;监控系统
随着计算机和控制技术的发展,过程监控系统的可靠性和自动化程度有了大幅的提高,并得到了广泛的应用。同时随着移动技术的发展和手机的普及,基于GSM的短信息服务以其通讯费用低廉、双向传输、通讯质量可靠、速度快等显著优点已经得到了越来越多用户的认可和使用,同时为监控系统的少人或无人值守创造了条件,过程监控对象的异常状态或运行参数等信息可以通过移动运营商提供的SMS短消息服务及时发送到一个或多个生产管理人员的手机上,从而可以对生产过程异常迅速作出判断和处理。
1.1 GSM模块
本次应用中GSM调制解调器采用深圳倚天科技开发有限公司生产的ETPRO-101AI,它由电源管理、接口电路和GSM模块三部分组成[1],其中GSM模块采用德国SIEMENS(西门子)公司的一款双频900/1 800 MHz高度集成的TC35i。计算机与GSM调制解调器之间通过RS-232串口连接,并通过AT命令进行交互。
1.2 AT指令
AT即Attention,AT指令集是从终端设备(Ter⁃minal Equipment,TE)或数据终端设备(Data Termi⁃nal Equipment,DTE)向终端适配器(Terminal Adapter,TA)或数据电路终端设备(Data Circuit Terminal Equipment,DCE)发送的。通过TA,TE发送AT指令来控制移动台(Mobile Station,MS)的功能,与GSM网络业务进行交互,通过AT指令进行呼叫、短信、电话本、数据业务、传真等方面的控制。发送短消息常用的AT命令如表1[2]。
表1 发送短消息常用的AT命令
1.3 短消息模式
接收和发送短消息的模式有三种:BLOCK模式、TEXT模式和PDU模式。BLOCK模式已基本淡出使用;TEXT模式则只能发送ASCII码,国内手机在此模式下基本上不支持收发中文短消息;而PDU模式被所有手机支持,可收发中英文短消息,用PDU模式收发短消息可采用三种编码方式: 7-bit编码、8-bit编码和UCS2编码,分别用于发送普通的ASCII字符、数据消息和Unicode字符。
按照GSM07.05协议的规定,短消息中的汉字均采用Unicode码的形式发送,因此本应用的短消息模式采用PDU模式,并选择UCS2编码方式。整个PDU串除了包含所发送的消息本身外,还包含服务中心号码、目标号码和编码方式等信息,其结构具体说明见参考文献[3]。
图1 程序流程图
通过VB程序实现监控系统报警信息发送的流程如图1所示。
2.1 通讯串口设置
从VB工程菜单的部件选项中添加Microsoft Comm Control 6.0控件到工具栏,并在程序窗体里添加MSComm控件,在程序中对其作如下初始化:
MSComm1.CommPort=1'选择串口COM1
MSComm1.Settings="9600,n,8,1"'设置通讯属性
MSComm1.RThreshold=1
MSComm1.SThreshold=0
MSComm1.InputLen=0'读入输入整个缓冲区
MSComm1.RTSEnable=True'设置RTS有效
MSComm1.PortOpen=True'打开通讯口。
2.2 UCS2编码实现
VB中通过AscW函数()和Hex()函数可实现GB2321编码到UCS2编码的转换,AscW()函数用于返回输入字符的Unicode码位,如AscW("您")= 24 744,而Hex()函数用于返回表示十六进制数字值的字符串,如Hex(24744)=60A8,即字符“您”的UCS2编码为:60A8。
在VB中实现发送短消息内容字符的UCS2编码如下:
For i=1 To Len(sSendStr)'sSendStr为待发送的短消息内容,string型变量
sUCS2=sUCS2&Right("0000"&Hex(As⁃cW(Mid(sSendStr,i,1))),4)'sUCS2为字符编码,string型变量
Next
2.3 短消息发送程序
svarūpavirahasthitivyatikaraikarūpās tu na || 1 [47v6-7] (Pthvī)
MSComm1.Output="AT+CMGF=0"&vbCr'设置为PDU模式
fTimeDelay(1000) '自定义延时函数
nStrLength=Len(sUCS2)/2'计算发送长度
MSComm1.Output="AT+CMGS="&Str(15+ nStrLength)&vbCr
fTimeDelay(1000) '自定义延时函数
sPDU="089168"&sSMSCA&"11000D9168" &sSMID&"0008C2"&nLength&sUCS2'sSMSCA为信息中心地址,sSMID为目标手机地址,均为不足12位号码补F后的奇偶位对调结果,nLength为用16进制(两位数)表示的sUCS2信息长度
MSComm1.Output=sPDU&Chr$(26)
sInputStr=""'sInputStr为读入输入缓冲区变量,string型变量
Do
DoEvents'转让控制权,以便让操作系统处理其它的事件
sInputStr=sInputStr&MSComm1.Input'读入输入缓冲区内容
Loop Until InStr(sInputStr,"OK")Or InStr(sIn⁃putStr,"ERROR")Or(timeGetTime>lTimer+3000) '满足返回发送成功,或返回发送失败,或延时时间条件之一时结束循环
If InStr(sInputStr,"OK")<>0 Then
PubStatus("发送成功!") '发送成功(Pub⁃Status为自定义的系统消息显示函数)
ElseIf InStr(sInputStr,"ERROR")<>0 Then
PubStatus("发送失败!") '发送失败(Pub⁃Status为自定义的系统消息显示函数)
Endif
伴随着生产信息化的需求,组态软件因其支持各种工控设备的通信协议、提供分布式数据管理和网络功能、使用灵活等特点,已作为HMI人机界面监控软件在各行业广泛应用于监视和控制自动化设备和生产过程,是过程监控系统的重要组成部分[4]。
目前国内外主流的组态软件都支持将报警信息记录到与ODBC兼容的数据库中,如Microsoft Access。因此可以利用短消息发送程序定时查询数据库中的报警信息,并将其发送给指定的目标手机号码。
本应用采用国内知名的监控组态软件组态王作为报警信息源,数据库为Microsoft Access,下面简要介绍其配置过程。
3.1 报警数据库和表字段
建立一个Microsoft Access报警数据库文件(本应用数据库文件命名为InDasSms.mdb),在数据库文件中创建一个名称为“Alarm”的表(注意表名称不能更改),并按表2设置字段(注意字段名要一致)。
表2 “Alarm”表字段
在实际应用中可以根据需要组织表中各字段的内容作为短信息发送内容。
3.2 创建ODBC数据源
在计算机的控制面板中的“ODBC数据源管理器”中创建基于“Microsoft Access Driver(*. mdb)”驱动程序的用户数据源(本应用数据源名设为InDas SMS),数据库选择上一步建立的报警数据库,如图2所示。
图2 ODBC数据源创建
3.3 监控系统报警配置
在组态王的开发环境下在“报警配置”中对其属性进行配置,钩选“记录报警事件到数据库”,并选取上一步配置好的数据源,如图3所示,同时对报警格式进行配置,如图4所示。
图3 报警配置属性页
图4的报警格式是本应用中采用的格式,可根据不同应用进行调整。需要注意的是,在报警格式配置中变量名等长度的设置一定不能小于实际的长度,并且每个中文字符占用2个长度,否则存入报警数据库表中的数据将按设置的长度截断。
Implementation of Short Message and Its Application in Control System Based on VB Language
LI Xin-hong,LIU Zhong-hua,LIAO Jin-kun
(Shenzhen DAS Intellitech Co.,Ltd,Shenzhen518057,China)
This paper introduces AT command and patterns of GSM wireless module,the transmit code of Short Message based on VB language,and the alarm configuration of control system,this method has been used to the Short Message transmission of alarm information in control system.
short message;AT command;VB language;control system
TP29
A
1009-9492(2014)03-0060-03
10.3969/j.issn.1009-9492.2014.03.018
2013-09-03