陳 曦,李 玲,代丙媛
(河北工業大學 控制科學與工程學院,天津 300130)
隨著現代生產科技水平的發展,對監測技術的要求越來越高,形式趨于多樣化。在無人值守的變電站、水文站、氣象站等野外監測或是在交通運輸等行業中,因分布比較分散、環境惡劣,地點不固定,不便于用傳統方法實現集中控制和實時監測并且有線網絡的架設受到種種限制。在這些場合采用基于GPRS的無線網絡通信技術,具有無可比擬的優勢。將嵌入式應用系統與無線通信技術結合在一起是未來嵌入式應用的必然趨勢[1]。
GPRS(General Packet Radio Service),即通用無線分組業務。GPRS技術應用于遠程數據傳輸系統,具有以下幾個特點:1)永遠在線,接入速度快。分組交換接入時間少于1秒,可使遠程數據傳輸的效率大大提高;2)采用數據流量的計費方式,大大降低了用戶的使用費用;3)GPRS網絡覆蓋范圍廣,且支持 TCP/IP協議,從而可實現與Internet的無縫連接[2]。
終端要完成3個任務,數據采集、數據處理和數據的無線傳輸。數據采集部分采用模塊化設計思想將采集模塊分為模擬量采集模塊,數字量采集模塊,開關量采集模塊等,每個
模塊獨立的實現對特定采集信號的整流、調理、隔離等處理再轉換為數字量,各模塊采用統一的結構,選用相同的單片機處理器。各模塊采集的數據通過統一的SPI(serial peripleral interface)總線傳輸給ARM處理器。這樣的結構使終端使用更靈活,應用范圍更廣泛。數據處理部分采用ARM處理器對所采集的數據的類型、長度、有效范圍等進行處理,并通過液晶屏加觸摸屏完成人機交互功能。然后將處理好的數據通過GPRS無線網絡傳輸給上位機。終端的整體結構圖如圖1所示。

圖1 終端的整體結構圖Fig.1 Whole structure of the terminal
終端硬件主要由3部分組成。一是作為主處理器的ARM9處理器及其外圍電路包括電源電路、復位電路、外擴存儲器電路及用于人機互動的液晶屏、觸摸屏連接電路等。二是各個模塊的數據采集電路的設計,這里主要設計的是模擬量采集模塊,以及各個數據采集模塊與主處理器之間SPI連接方式。三是GPRS模塊外圍電路以及與主處理器的連接。端硬件設計示意圖如圖2所示。

圖2 系統硬件結構示意圖Fig.2 Schematic diagram of system hardware
主處理器是系統的核心,要完成數據處理,存儲,傳輸,人機界面顯示等功能。結合工業現場的需求終端處理器采用以ARM9為內核的三星S3C2440處理器,它是一款基于ARM92OT內核的 16/32位 RSIC結構的嵌入式微處理器,主頻400 MHz,最高可達533 MHz,具有2片外接32 M的板載SDRAM,片內外資源豐富,擴展性強。系統存儲擴展了2 MB的NorFlash用于存放bootloader系統引導程序,和64 MB的NandFlash。系統的人機交互平臺采用一個7寸液晶顯示頻和一個觸摸屏來完成。
數據采集模塊可分為模擬量采集模塊,數字量采集模塊,開關量采集模塊等,主要完成對底層數據的采集,這些模塊的單片機處理器統一采用Cygnal公司的C8051F021單片機,它的MCU是高度集成的片上系統。在一個芯片內集成了兩個多通道ADC子系統、電壓基準、SPI總線接口、8個8位的通用數字I/O端口和64 kBFLASH程序存儲器及與8051兼容的高速微控制器內核等,這些很好的滿足了模塊的設計要求。由于模塊設計結構上的相似性,這里主要介紹模擬量采集模塊部分。
工業現場采集的信號大部分是模擬量,如壓力、溫度、液位、流量等信號。這些信號經過現場儀表測量后一般統一輸出為 4~20 mA,0~5 V,0~10 V 范圍的電流電壓信號。 通過模擬量采集模塊將這些模擬量轉換為數字量。單片機的A/D準換的電壓基準定為 2.5 V,要將 4~20 mA,0~5 V,0~10 V 范圍的電流電壓信號統一為0~2.5 V以內的電壓信號,才能進入單片機完成模擬量到數字量的轉換。對于電流信號,在輸入端接一個250 Ω的精密便轉換為1~5 V的電壓信號了,對于電壓信號通過運算放大器按比例縮放到0~2.5 V范圍內即可。轉換電路如圖3所示。

圖3 電壓信號轉換電路圖Fig.3 Voltage signal conversion circuit
各個數據采集模塊與主處理器通過SPI總線進行通信。SPI總線是Motorola公司提出的一種高速全雙工串行通信總線,它容許CPU與各種外圍接口器件以串行方式進行通信[3]。SPI接口只有 MISO(主入從出)、MOSI(主出從入)、SCLK(時鐘)和CS(片選)4個信號組成,在芯片上只占用4條線,大大節省了芯片資源。主處理器與各采集模塊的SPI通信方式為一主多從的方式,即ARM主處理器的作為主設備,各數據采集模塊作為從設備,主設備驅動串行時鐘發起通信。主設備使用片選信號CS指明與哪個模塊采集模塊傳送數據。通信時,主設備的MISO為輸入,MOSI為輸出,從設備的MISO為輸出,MOSI為輸入,在主設備時鐘的控制下,主設備與從設備的雙向移位寄存器同時進行數據交換,完成一次數據的傳輸。主處理器與各模塊的通信結構圖如圖4所示。

圖4 SPI通信結構圖Fig.4 SPI communication diagram
GPRS模塊選用華為GTM900C模塊,它是一款三頻段GSM/GPRS無線模塊。模塊接口簡單、使用方便且功能強大。它支持標準的AT命令及增強AT命令。GTM900C的GPRS數據業務的最高速率可達85.6 kbit/s。GTM900C提供40腳的ZIF接口,主要有電源接口、UART接口(最大串口速率可達115200bit/s)、標準SIM卡接口和模擬語音接口。
本系統中,GTM900C主要是實現GPRS上網功能。該模塊的主要特點如下:
l)單電源供電,供電范圍為3.3~4.8 V,典型供電電壓為4.2 V;
2)可工作于三頻EGSM90O和/GSM1800/GT800單頻;最大發射功率 EGSM900/GT800 Class(2W)和 GSM1800 Class1(1W);
3)支持 GSM標準AT命令、V.25 AT命令和華為擴展AT命令;
4) GPRS傳輸速率最高可達 85.6 kbps, 支持 CS-1,CS-2,CS-3,CS-4 4種編碼方式。內嵌了 TCP/IP協議;支持多連接,提供ACK應答,提供大容量緩存。
GPRS模塊與主處理器的連接很簡單,由于兩者是通過串口接口進行通信的,所以將兩者用串口線連接即可。GPRS的網絡功能都已集成在模塊中,只需要在主處理器這一端將串口參數設置好,然后發送相應的AT指令對模塊進行操作即可。
終端軟件設計包括兩個任務,一是搭建開發環境,如Linux操作系統內核移植,編寫設備驅動等,二是在開發環境準備好的基礎上進行應用程序的編寫,包括完成SPI總線數據輸入輸出功能,GPRS無線數據傳輸功能,和界面顯示功能。
軟件平臺采用嵌入式Linux操作系統,嵌入式Linux操作系統是一個源代碼公開的實時多任務操作系統,可應用于多種硬件平臺,可根據需要定制內核,有良好的網絡支持,Linux系統內核精簡、高效并且穩定,能夠充分發揮硬件的功能,它非常適合在嵌入式領域中應用[4]。嵌入式Linux操作系統搭建的步驟為:在宿主機上建立交叉編譯的環境;編譯生成Linux的內核,用的內核是Linux-2.6.29;編譯生成根文件系統,用的根文件系統為yaffs;向目標機下載 Bootloader的映像,用的 Bootloader為 Supervivi;燒寫Linux內核和文件系統的映像;復位啟動。為了使終端可以使用觸摸屏,液晶屏和SPI總線,將編寫的對應的驅動編譯、添加到Linux內核中。系統使用的宿主機系統為在虛擬機下運行的RedHat9.0。
終端應用程序用Qt來編寫,Qt是一個跨平臺的C++圖形用戶界面應用程序框架。它具有優良的跨平臺特性、面向對象、豐富的API支持等優點。Qt-Embedded是Qt的嵌入式版本,因此終端應用程序的開發使用Qt/E作為開發工具。Qt運行環境的搭建步驟為:首先在宿主機上分別建立Qt-x86編譯環境和Qt-ARM編譯調試環境,采用Qt4.5.0版本;其次,將宿主機生成的Lib下的庫文件下載到目標板的某個目錄下,并在目標板上設置好環境變量,這樣在目標機上的Qt程序運行環境就建好了。在宿主機上交叉編譯好的Qt/E程序就可以下載到目標機上運行了[5]。
監測終端需要采集監測儀表的現場測量數據,終端設計的數據采集模塊分別對不同的現場數據進行采集并做相應的處理,數據采集模塊與CPU之間通過SPI總線進行數據傳輸,對與采集數據需按上端通信協議、PPP、TCP/IP協議進行二次成幀;利用GPRS網絡接入Internet網絡,將處理后的數據信息通過GPRS無線網絡上傳至監控中心。
GPRS模塊附著GPRS網絡并與上位機建立TCP數傳鏈路是通過向模塊發送一串AT指令實現。撥號動作完成,并成功建立數傳鏈路以后,GPRS模塊在終端串行口和上位機之間變得透明。另外,終端的重要狀態要能即時顯示在LCD上。
綜上分析,監控終端應用程序要完成的任務有:串口參數設置,GPRS網絡連接,讀取串口返回信息,SPI數據傳輸,GPRS數據傳輸,界面顯示。由于任務不止一個,而且有的任務需要同時運行,所以采用多線程編程。
在Qt編程中主界面UI一般為主線程,子線程通過繼承Qt中的QThread線程類來完成。這些任務和功能可以通過3個線程來實現。3個線程的作用分別為:1)主線程:負責界面顯示,串口參數設置,GPRS網絡連接,GPRS數據傳輸;2)SPI數據傳輸子線程:負責與數據采集模塊通信,將采集數據存入緩沖區;3)串口數據讀取子線程:CPU通過串口操作GPRS模塊,GPRS模塊的返回信息可以通過串口數據讀取子線程隨時讀取。程序模塊圖如圖5所示。

圖5 終端應用程序結構圖Fig.5 Application structure of the terminal
3.2.1 顯示界面模塊
界面顯示模塊:界面顯示由兩部分組成。一是實時顯示各模塊的采集數據及一定時間以內的歷史數據數據;二是顯示GPRS模塊設置界面,通過這個界面設置串口參數、設置數據采集時間間隔、設置主機IP地址及端口號、發送AT指令、回顯模塊返回信息等。編寫界面設計文件mainwindow.h和mainwindow.cpp,其中串口參數設置、網絡連接和GPRS數據傳輸封裝成相應的子函數,利用Qt的信號槽機制,當捕捉到相應的信號便執行對應的函數。通過繼承 Qt中的QThread線程類來完成GPRS數據讀取模塊和SPI模塊的功能。SPI模塊接收底層數據采集模塊的各種數據,顯示到界面并編碼通過GPRS通道傳輸到上位機,GPRS返回的一些重要信息業需顯示到LCD界面上。
3.2.2 GPRS網絡連接任務
GPRS網絡連接任務主要完成通過GPRS網絡建立與上位機的數據傳輸鏈路的過程。啟動GTM900C后,首先,需對PPP連接所使用的物理串口進行初始化,包括確定用于PPP連接的串行端口號以及通信波特率。然后,直接使用AT指令,撥號到中國移動的GPRS節點服務器(GGSN)。使用以下幾條燈指令使GTM900C進入數據通訊狀態[6]:
“AT+CGATT?”用于查詢GTM900C是否已附著在中國移動的GPRS網絡,GTM900C將返回當前狀態;
“AT+CGATT=1”用于設置GTM900C附著于中國移動的GPRS網絡,操作成功GTM900C將返回OK;
“Al,+CGDCONT=l,"IP","CMNET"” 用于設置中國移動的GPRS節點服務器的名稱和屬性,操作成功則返回OK;
“AT%ETCPIP”用于實現PDP激活和TCP/IP的初始化,使模塊進入TCP/IP功能,操作成功返回OK;
“AT%IOMODE=0,2,0”設置數據傳輸模式,操作成功返回OK;
“AT%IPOPEN=1,"TCP","115.24.116.19",5000,,1026”打開一條TCP/IP鏈接,選擇TCP傳輸,115.24.116.19為上位機IP地址,5000為上位機接受程序端口號,成功與上位機連接返回CONNECT。另外模塊還具有數據透傳功能,數據透明傳輸功能將實現TCP/IP上直接數據傳輸,進入透傳模式的AT 指令是:“AT%TPS=1,1,3000,1024”, 進入透傳模式后模塊將不會相應其它AT指令,直接通過串口寫入數據便可實現與上位機之間的數據傳輸。以上使模塊附著在GPRS網絡的過程封裝在gprsConnect()函數中。
PPP配置、認證通過以后,即應用程序就已經通過GTM900C成功進入了Internet網絡。最后,通過變量GPRSOK=1指示GPRS撥號成功并建立數傳狀態。在run()程序中隔一段時間判斷當前網絡連接狀態,若網絡斷開則變量GPRSOK=0,并調用gprsConnect()函數開始撥號任務重新建立數傳鏈路。
3.2.3 SPI數據通信模塊
SPI通信程序包括兩部分,一是用于數據采集的單片機這邊需要通過SPI發送現場數據,接收控制指令,二是ARM主控制器需要讀取數據,發送控制指令。數據采集模塊使用是帶有SPI接口的C8051f020單片機,SPI的數據寄存器是SPI0DAT。單片機和主控制器的SPI通信參數設置要一致。
在主設備ARM這邊,SPI驅動已經配置好,直接使用read(),write()等函數便可進行數據的讀取與接收。在單片機這邊采用中斷的方式進行SPI數據的發送與接收。對于從設備C8051f021單片機來說,只有將片選線線接低電平才會啟動數據傳輸,可利用這一點進行多字節數據傳輸,拉低一次便傳輸一個字節,這可用作與主設備之間的同步信號。主設備選一根I/O口線作為片選線,將其拉低,執行一次SPI讀操作,再拉高,延時一定時間,這時從設備退出從模式,重新往SPI0DAT里寫新數據及其他一些處理,主設備再將片選線拉低,執行一次SPI讀操作。這樣便可進行多字節傳輸了。SPI主從設備通信流程圖如圖6所示。

圖6 SPI主從設備通信流程圖Fig.6 SPI communication flow between master and slave devices
將編譯好的界面應用程序下載到終端處理器中并運行,主線程為顯示界面,隨時可與用戶進行信息,兩個子線程為讀SPI總線線程和串口讀寫線程,這3個線程同時并行運行。其中GPRS傳輸部分的界面如圖7所示,通過這個顯示界面設置串口、上位機IP地址、TCP端口和數據定時發送的時間間隔,發送文本框會顯示SPI總線讀取的數據值,接收文本框回顯GPRS模塊返回的信息。上位機用自己的PC機,通過軟件sockettool監聽終端發送給上位機數據,實驗證明終端界面應用程序工作良好,數據傳輸也很準確。

圖7 GPRS數據傳輸界面Fig.7 GPRS data transmission interface
系統的上位機接受界面可用VB編寫,并建立數據庫,方便分析、處理監測現場數據,這部分程序正在完善中。監測終端的數據采集部分采用模塊化設計,可以靈活增減,終端軟件可以根據不同現場用戶自行設計計算公式處理數據,把終端設置好,在上位機通過GPRS網絡便可實時監測現場。該檢測終端結構靈活,實時性好,適用范圍廣,具有廣泛的應用前景。
[1]文志成.通用分組無線業務GPRS[M].北京:電子工業出版社,2003.
[2]呂捷.GPRS技術[M].北京:北京郵電大學出版社,2001.
[3]蔣偉,文昱.SPI總線及其在單片機系統中的應用[J].科技廣場,2008(10):201-102.JIANG Wei,WEN Yu.SPI bus and its application in single chip microcomputer system[J].Science Mosaic,2008(10):201-102.
[4]華清遠見嵌入式培訓中心.嵌入式Linux應用程序開發標準教程[M].2版.北京:人民郵電出版社,2009.
[5]趙瑩,徐大平,呂躍剛.基于Qt/Embedded的嵌入式控制界面開發[J].微計算機信息,2009,25(4):36-38.ZHAO Ying, XU Da-ping, LV Yue-gang.The development of embedded control interface based on Qt/Embedded[J].Microcomputer Information,2009,25(4):36-38.
[6]劉寧,馮偉,陸林生.基于GPRS的無線數據傳輸終端的設計[J].現代電子技術,2008,264(1):25-27.LIU Ning, FENG Wei, LU Lin-sheng.Design of wireless data transmission terminal based on GPRS [J].Modern Electronics Technique,2008,264(1):25-27.