吳幫明,伍川輝
(西南交通大學機械工程學院,四川 成都 610031)
利用GPRS覆蓋廣、高效、經濟的突出特點,該文介紹了一種采用GPRS通信模塊進行遠程數據傳輸,可供多用戶對車輛狀態進行遠程實時監控的系統,著重介紹了基于GPRS的組網方式和以C++Builder為開發平臺快速組建服務器、監控端的軟件編程方法。
GPRS的理論帶寬171.2 Kb/s,實際帶寬約40~100 Kb/s,分組交換接入時間少于1 s,能夠提供快速即時的TCP/IP連接,它具有網絡覆蓋廣、計價按流量計算、實時在線的優點,特別適用于間斷的、突發性的或頻繁的、少量的數據傳輸,也適用于偶爾的大量數據傳輸,完全滿足數據采集及監控的雙向數據信息傳輸。GPRS傳輸系統示意圖如圖1所示。
根據數據中心服務器接入Internet的不同方式,基于GPRS的傳輸系統有以下4種應用組網方案:
圖1 GPRS傳輸系統示意圖
(1)數據中心服務器直接使用固定的IP地址;
(2)數據中心服務器沒有合法的IP地址,但連接的路由器有固定合法的IP地址;
(3)數據中心服務器采用動態IP地址;
(4)數據中心服務器通過專線方式直接連接到GPRS網絡。
該文應用的是第3種組網方式。這種組網方式的服務器端沒有固定的IP址,它通過ADSL等調制解調器連接到Internet獲得動態IP地址,這時服務器端就需要安裝動態域名解析服務程序,GPRS模塊上的服務端IP和端口號設置為數據中心服務器的域名和偵聽端口號。
采用這種方案,首先要聯系DNS服務商申請一個域名,服務器端接入Internet后,與DNS服務器進行連接,將當前獲得的動態IP報告給DNS服務器。GPRS模塊上電后,首先采用域名尋址方式連接DNS服務器,再由DNS服務器找到服務器公網動態IP,這樣就可以在兩者之間建立通信。
對于一些應用相對簡單、終端數量的容量和實時性要求不高或者運行經費有限的應用,可采用動態IP的簡單網絡模式。
系統由數據采集端、服務器端和用戶監控端3個單元組成。數據采集端的微處理器通過串口和GPRS模塊連接,將經過AD轉換的數據(如振動加速度、位移、應力等)按規定的協議組合為報文,通過GPRS模塊經由GPRS網絡發送到Internet上具有IP地址的服務器上。服務器端通過網絡編程接收從Internet上發送過來的數據,經過處理后轉發給用戶監控端。用戶監控端也是通過網絡編程接收從服務器端發來的數據,經過處理后將數據直觀地顯示在界面上,完成實時監控。
對于開發無線數據傳輸系統,監控軟件只能自主開發,沒有現成的軟件可以使用。另外,該軟件自主開發后,對于系統后期優化和調整以及升級換代較為有利。
服務器端軟件的主要功能是從網絡上接收來自GPRS模塊或監控端傳來的數據報文,并解析報文得到原始數據,再根據使用需要對數據進行相應處理;監控端軟件的主要功能是接受來自服務器端傳來的數據報文并進行分析處理實現遠程監控。
編寫軟件使用的是C++Builder自帶的SrverSocket控件和ClientSocket控件,它們使用Socket(套接字)來實現信息的傳輸,利用這兩個控件就能實現網絡編程。
添加一個服務端Socket控件ServerSocket到Form就使應用成為一個TCP/IP服務器。服務端ServerSocket的重要屬性、事件和方法使用如下:
(1)ServerSocket和ClientSocket都有Port(端口)屬性,需要一致才能互相通信;
(2)OnClientRead事件,當 ServerSocket受到沖擊消息時,在OnClientRead事件中可以獲得Client發送過來消息;
(3)ServerSocket使用 SocketServer->Socket->Connection[0]->ReceiveBuf(byte 類型的數組,信息長度)來接受數據;使用SocketServer->Socket->Connection[0]->SendBuf(byte類型的數組,信息長度)來發送數據。
為了運行可靠,可以在服務器端使用多個ServerSocket控件,并根據功能分為兩類。一類負責處理和GPRS模塊的通信,一類負責與監控端的通信。該設計使用了兩個控件,ServerSocket1負責與GPRS通信,ServerSocket2負責與監控端通信,要將GPRS傳來的數據轉發給監控端,主程序片段如下:
添加一個客戶端Socket控件 ClientSocket到Form就使應用成為一個TCP/IP客戶。客戶端ClientSocket的重要屬性、事件和方法使用如下:
(1)ClientSocket有 Port和 Address屬性,必須與指定服務器的端口和所在IP地址一致;
(2)OnRead事件,當ClientSocket受到沖擊消息時,在OnRead事件中可以獲得Server發送過來消息;
(3)ClientSocket使用 SocketClient->Socket->ReceiveBuf(byte類型的數組,信息長度)來接收信息;使用 SocketClient->Socket->SendBuf(byte類型的數組,信息長度)來發送信息。
監控端主要是接受來自服務器端從GPRS傳來的數據來進行遠程實時監控,主程序片段如下:
在數據傳輸中必須制定數據報文協議,數據傳輸系統中的報文協議如表1所示。
表1 系統中的報文協議
此外,還要設定數據傳輸類型,該系統中數據采集端采集的振動加速度、位移、應力信號經過AD轉換后是電壓值,最后是將電壓值轉換為十六進制的編碼進行傳送。因此,在接收到數據后,要將其還原為原來的電壓值,再根據每個通道的傳感器靈敏度值,經過進一步處理,得到最原始的物理量值。
C++Builder中的套接字以字節格式來發送和接收數據,所以通常先定義一個字節數組來存放接收到的數據,而數據處理就是將這個字節數組轉換成原始的物理量值。字節數組處理步驟如下:
(1)從數據流中取出兩字節,判斷是否為起始位標識;
(2)從起始位后取出規定長度的數據,計算校驗和是否與最后一位的校驗碼相等;
(3)把各通道位的兩個字節還原為原來的數字,再進一步處理得到具有物理意義的數值。
該設計方法為遠程實時監控中服務器端和監控端軟件的設計提供了一般性方案,與數據采集端軟硬件相結合,可移植于各種應用無線數據傳輸服務的遠程監控系統中。利用該思想構建的應用平臺已在廣州地鐵直線電機車輛振動追蹤試驗中測試通過,運行半年多來,總體上情況良好,運行穩定,故障率低,數據可信度高,達到了實時監控列車運行狀態的目的。
[1]鐘章隊,蔣文怡,李紅君.GPRS通用分組無線業務[M].北京:人民郵電出版社,2001.
[2]栗玉霞,徐建政,劉愛兵.GPRS技術在自動抄表系統中的應用[J].電力自動化設備,2003,23(12):52-54.
[3]溫 泉,李炳煜,焦 毅.基于GPRS的無線數據傳輸系統解決方案[J].現代電子技術,2006,29(23):15-17,20.
[4]楊興裕,吳海濱,許松清.GPRS無線傳輸在遠程圖像監控系統中的應用[J].微計算機信息,2005,21(3):64-65.
[5]程 展,蔣 鵬.基于GPRS的城市污水排放監控系統子站設計[J].機電工程,2008,25(2):41-43.
[6]李平江,周倫彬,張寶峰.基于ARM和GPRS的路燈遠程監控系統[J].中國測試,2009,35(2):53-56.
[7]嚴雪萍,成 立,韓慶福,等.基于GPRS的遠程數據采集系統設計[J].單片機開發與應用,2008,24(1-2):115-116.
[8]王 磊,許小琳.GPRS無線數據傳輸中服務器端軟件的設計和實現[J].測控技術,2007,26(11):55-56,63.
[9]何 瑛,王航宇.基于GPRS的分布式灌區監控系統設計與實現[J].電子設計工程,2009,17(3):19-21.