李 好
(唐山學(xué)院計算機科學(xué)與技術(shù)系,河北唐山063000)
基于ARM的電梯遠程監(jiān)控系統(tǒng)服務(wù)器端設(shè)計
李 好
(唐山學(xué)院計算機科學(xué)與技術(shù)系,河北唐山063000)
應(yīng)用網(wǎng)絡(luò)通信技術(shù),開發(fā)了基于ARM的電梯運行狀態(tài)的遠程監(jiān)控系統(tǒng)服務(wù)器端,為電梯在運行過程中故障的發(fā)現(xiàn)、分析和排除提供了設(shè)計依據(jù)。
電梯;遠程監(jiān)控;ARM;服務(wù)器
電梯作為機電一體化的大型機械設(shè)備,在高層建筑運輸中起著非常重要的作用,是樓宇自動化必不可少的部分。但是由于電梯的結(jié)構(gòu)復(fù)雜,運行可靠性要求高,使得遠程監(jiān)控其運行狀態(tài)和故障情況成為電梯管理、維護和安全運行的迫切要求[1]。
目前國內(nèi)外電梯遠程監(jiān)控服務(wù)器端設(shè)計大都基于x86體系結(jié)構(gòu),采用微軟Windows系列操作系統(tǒng),和面向?qū)ο缶幊陶Z言對服務(wù)器端進行軟件設(shè)計,并以傳統(tǒng)電話線作為通信控制線路。本文給出的電梯遠程監(jiān)控系統(tǒng)服務(wù)器端設(shè)計基于ARM體系結(jié)構(gòu),采用開源嵌入式Linux作為操作系統(tǒng),C++設(shè)計通信控制接口,網(wǎng)線作為通信線路。與國內(nèi)外大多數(shù)電梯遠程控制系統(tǒng)相比,具有功耗低、體積小、集成度高、性能穩(wěn)定、執(zhí)行速度快、成本低、實時性強、安全性高、生命周期長、性價比高等優(yōu)勢。本設(shè)計采用TQ2440ARM9開發(fā)板作為服務(wù)器端,采用PC機作為客戶機端,并在客戶機端安裝Ubuntu 10.04操作系統(tǒng),服務(wù)器和客戶機使用網(wǎng)線連接。在服務(wù)器端構(gòu)建電梯模型并完成鍵盤模擬電梯運行,同時用攝像頭采集視頻圖像,進行JPEG壓縮處理,然后通過網(wǎng)絡(luò)傳輸,將視頻圖像和電梯運行數(shù)據(jù)傳輸至監(jiān)控中心(主機)進行實時顯示。
一個嵌入式Linux系統(tǒng)從軟件角度可分為四部分:引導(dǎo)加載程序Bootloader,Linux內(nèi)核,文件系統(tǒng)和應(yīng)用程序[2]。
Bootloader是系統(tǒng)上電后運行的第一段程序。在完成對系統(tǒng)的初始化任務(wù)之后,將非易失性存儲器中的Linux內(nèi)核拷貝到RAM中,然后跳轉(zhuǎn)到內(nèi)核的第一條指令處繼續(xù)執(zhí)行,啟動Linux內(nèi)核。
Linux內(nèi)核有兩種映像:一種是非壓縮內(nèi)核Image,另一種是它的壓縮版本zImage。嵌入式系統(tǒng)的存儲空間一般較小,所以這里采用壓縮內(nèi)核的方式。編譯完成后,會在內(nèi)核目錄arch/ARM/boot/下生成zImage內(nèi)核映像文件。
把TQ2440光盤自帶的Linux-2.6.30內(nèi)核源碼包解壓到/home目錄,即可開始配置。進入Linux-2.6.30內(nèi)核主目錄,通過cp命令,用目錄下自帶的配置文件,生成.config文件,然后開始配置Linux內(nèi)核。使用make menuconfig命令對內(nèi)核進行配置,可在原有的配置單上進行相應(yīng)的修改。在配置時把系統(tǒng)所需要的驅(qū)動(.ko文件)添加進去。
該系統(tǒng)采用C/S結(jié)構(gòu),服務(wù)器端TQ2440ARM9開發(fā)板上連接ZC0301U口攝像頭,用于視頻獲取。由于QT顯示視頻流難度較大,故選擇圖片刷新方法來實現(xiàn)服務(wù)器端圖像的采集,通過網(wǎng)線將圖片從服務(wù)器傳到客戶端實時顯示。此外該系統(tǒng)還利用TQ2440開發(fā)板上的四個用戶按鍵,模擬電梯運行。當按下某個按鍵時,會將相應(yīng)的信息通過網(wǎng)線傳到客戶端,客戶端管理員即可從PC機屏幕上看到當前的電梯運行狀態(tài)。
進程管理采用多進程編程。進程是一個運行實體。每一個進程都有它自己的地址空間,一般情況下包括文本區(qū)域、數(shù)據(jù)區(qū)域和堆棧。文本區(qū)域存儲處理器執(zhí)行的代碼;數(shù)據(jù)區(qū)域存儲變量和進程執(zhí)行期間使用的動態(tài)分配的內(nèi)存;堆棧區(qū)域存儲活動過程調(diào)用的指令和本地變量。
在該系統(tǒng)中,系統(tǒng)的服務(wù)器端需要不斷地發(fā)送攝像頭獲取的圖片,同時還要將按鍵模擬的電梯運行數(shù)據(jù)實時地傳送到客戶端,這樣顯然不可能用同一個進程同時進行這兩項任務(wù)。這時就需要利用多進程依靠時間片輪轉(zhuǎn)調(diào)度策略來實現(xiàn)進程的并發(fā)執(zhí)行。
在該模塊中,首先運行server程序,程序運行后,利用fork函數(shù)創(chuàng)建一個新的進程稱為子進程。該函數(shù)被調(diào)用一次但返回兩次。兩次返回的值不同:在子進程中返回的值是0,而父進程中的返回值則是新創(chuàng)建的子進程的PID。因此可根據(jù)fork函數(shù)的返回值確定當前是處于父進程還是子進程。將子進程PID返回給父進程的原因是:一個進程可有多個子進程,沒有一個函數(shù)可以使一個進程獲得其所有子進程的PID。
fork函數(shù)生成的子進程是父進程的復(fù)制品,子進程獲得父進程的數(shù)據(jù)空間,堆和棧的復(fù)制品。而fork函數(shù)最常用的并不是復(fù)制原函數(shù),而是在創(chuàng)建一個新的進程后,調(diào)用exec函數(shù)。exec函數(shù)啟動一個新程序,替換原有的進程,因此這個新的被exec執(zhí)行的進程的PID是不會改變的。在該進程管理中,首先調(diào)用fork函數(shù)創(chuàng)建一個新的進程,然后在新的進程中調(diào)用exec函數(shù),執(zhí)行按鍵模擬電梯運行程序,而在父進程中則運行服務(wù)器視頻圖像采集模塊。
服務(wù)器視頻采集由ZC0301攝像頭和TQ2440ARM9開發(fā)板共同執(zhí)行。由于Linux-2.6.30內(nèi)核中默認是不添加攝像頭驅(qū)動的,故在使用攝像頭之前需要對內(nèi)核進行配置和移植。
在Linux系統(tǒng)下,首先從TQ2440開發(fā)板自帶光盤中將2.6.30內(nèi)核源碼包解壓縮到/home目錄下,進入解壓出來的目錄。輸入命令make distclean,即可將曾編譯生成的一些文件zImage以及.config文件刪除掉。然后根據(jù)開發(fā)板型號選擇相應(yīng)的配置文件,復(fù)制該文件并重命名為.config,這樣就產(chǎn)生一個默認的配置文件。然后在該目錄下,輸入命令make menuconfig即可看到內(nèi)核配置界面。在這里我們需要添加攝像頭驅(qū)動模塊,直接將該驅(qū)動模塊編譯到內(nèi)核中。在配置完成后按ESC鍵退出并保存。
在對內(nèi)核配置完成后,在該目錄下輸入命令make zImage編譯內(nèi)核。將編譯后的內(nèi)核重新燒到開發(fā)板上,插上攝像頭,在minicom下即可看到攝像頭的提示信息。在開發(fā)板/dev下可以看到VIdeo0設(shè)備,說明攝像頭驅(qū)動安裝正確。
在攝像頭可以正常使用后,使用vidcat程序從攝像頭抓取圖像并保存在當前目錄下,利用網(wǎng)絡(luò)圖像傳輸模塊進行圖像傳輸。
服務(wù)器視頻圖像發(fā)送是將攝像頭截取的視頻圖像從服務(wù)器端通過網(wǎng)絡(luò)數(shù)據(jù)傳輸?shù)娇蛻舳?。這里采用socket套接字網(wǎng)絡(luò)通信。在本系統(tǒng)中由于需要實時地掌握服務(wù)器端的數(shù)據(jù)信息,對網(wǎng)絡(luò)傳輸?shù)馁|(zhì)量和時效性要求比較高,故采用了面向連接和具有重傳策略的TCP套接字,而沒有采用UDP套接字。
服務(wù)器端需要調(diào)用socket函數(shù)生成一個套接字。該函數(shù)如果調(diào)用成功,會返回一個文件描述符。文件描述符與文件的打開模式、文件的位置類型、文件的初始類型等文件對象相關(guān)聯(lián),這些信息被稱作文件的上下文[3]。在使用socket進行網(wǎng)絡(luò)傳輸之前,我們配置該socket。面向連接的TCP套接字的服務(wù)器端需要通過調(diào)用bind函數(shù)來配置本地信息。bind函數(shù)將socket與網(wǎng)絡(luò)上某個IP相關(guān)聯(lián),而且需要和該IP主機上的一個端口相關(guān)聯(lián),隨后就可以在該IP上對該端口進行監(jiān)聽服務(wù)請求。使用面向連接的socket客戶端通信時,服務(wù)器端需要調(diào)用accept函數(shù)在套接字數(shù)據(jù)結(jié)構(gòu)中保存本地和遠端信息。listen函數(shù)使socket處于被動的監(jiān)聽模式,并且為該socket建立一個輸入數(shù)據(jù)隊列,將到達的服務(wù)請求保存在此隊列中,直到程序處理完它們?yōu)橹梗?]。
客戶端調(diào)用connect函數(shù)啟動和遠端主機直接連接。這樣只有面向連接的客戶端程序使用socket時才需要將此socket與遠端主機相連,當然,客戶端需要首先知道服務(wù)器端的IP地址以及端口號,只有這樣,才能保證客戶端能夠找到正確的服務(wù)器端。服務(wù)器端的accept函數(shù)接收到連接請求后,如果接收成功,則會返回一個用于和客戶端通信的套接字,這樣服務(wù)器與客戶端就可以開始通信了。
需要注意的是通信一定要保證數(shù)據(jù)讀寫的交互,尤其是在循環(huán)體內(nèi)還有其他文件操作時,一定要考慮到同步的問題。這里需要利用read和write兩個函數(shù)來進行交互以及同步。因為read函數(shù)是阻塞的,當讀緩沖區(qū)沒有數(shù)據(jù)時,程序會阻塞在read函數(shù),一直到能夠讀到數(shù)據(jù)為止,程序才會向下進行。服務(wù)器端視頻圖像發(fā)送流程為:先將抓取的圖片使用open函數(shù)打開放到設(shè)置的讀寫緩沖區(qū),使用write函數(shù)發(fā)送到客戶端,客戶端使用read函數(shù)接收將數(shù)據(jù)寫入到文件中,再利用write函數(shù)給服務(wù)器端一個消息,說明數(shù)據(jù)已成功接收。服務(wù)器端使用read函數(shù)來獲取這個消息。
該系統(tǒng)中利用TQ2440開發(fā)板自帶的四個用戶按鍵模擬電梯運行,使用K1和K2分別控制電梯的上行和下行,使用K3的交替來控制電梯門的開啟和關(guān)閉,使用K4來控制報警與取消報警。由于TQ2440開發(fā)板自帶的內(nèi)核中沒有加載用戶按鍵驅(qū)動,所以需要將用戶按鍵驅(qū)動直接編譯到內(nèi)核中。將新編譯生成的內(nèi)核燒寫到開發(fā)板上,則在設(shè)備文件中就多了一個名為IRQ_Test的設(shè)備文件。
設(shè)備驅(qū)動安裝完成后,編寫按鍵信息獲取模塊。定義一個存放按鍵信息的數(shù)組,使用open函數(shù)打開IRQ_Test設(shè)備文件,使用read函數(shù)阻塞式讀取設(shè)備信息。當沒有按鍵信息時,就會阻塞在read函數(shù)處,當有按鍵按下時則將信息存儲在上述定義的數(shù)組中。利用循環(huán)判斷數(shù)組的哪個單元有數(shù)據(jù)即可確定哪個按鍵被按下。創(chuàng)建一個網(wǎng)絡(luò)連接和客戶端進行通信。將按鍵信息存于buf[0],這樣在將信息發(fā)送給客戶端時,只需判斷該單元的數(shù)據(jù)值即可進行相應(yīng)的處理。
本文使用TQ2440ARM9嵌入式開發(fā)板作為電梯服務(wù)器端,并在其上構(gòu)建電梯模型,完成鍵盤模擬電梯的運行,同時用攝像頭采集視頻圖像,通過網(wǎng)絡(luò)傳輸,將視頻圖像和電梯運行數(shù)據(jù)傳輸至監(jiān)控中心進行實時顯示。此設(shè)計,具有傳輸可靠、操作方便的特點,可較好地實現(xiàn)對電梯運行情況的實時監(jiān)控,具有較高的商業(yè)價值。
[1] 余輝.嵌入式Linux程序設(shè)計案例與實驗教程[M].北京:機械工業(yè)出版社,2009:238-248.
[2] 三恒星科技.ARM9應(yīng)用實例[M].北京:電子工業(yè)出版社,2008:120-150.
[3] Scaglia Sergio.嵌入式Internet TCP/IP基礎(chǔ)、實現(xiàn)及應(yīng)用[M].北京:北京航空航天大學(xué)出版社,2008:215-250.
[4] 怯肇乾.嵌入式網(wǎng)絡(luò)通信開發(fā)應(yīng)用[M].北京:北京航空航天大學(xué)出版社,2010:64-105.
(責任編校:李秀榮)
Server Design of Elevator Remote Monitor System Based on ARM
LI Hao
(Department of Computer Science and Technology,Tangshan College,Tangshan 063000,China)
Using the network communications technology,the elevator remote monitor system server is developed based on ARM and it provides a basis for the elevator failure discovery,analysis and exclusion during the system running.
elevator;remote monitor;ARM;server
book=5,ebook=5
TP277
A
1672-349X(2012)03-0085-02
2012-03-14
李好(1977-),男,河北灤縣人,講師,碩士,主要從事操作系統(tǒng)研究。