李信洪,劉忠華,廖錦坤
(深圳達實智能股份有限公司,廣東深圳 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