• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      基于ARM的電梯遠(yuǎn)程監(jiān)控系統(tǒng)服務(wù)器端設(shè)計(jì)

      2012-08-15 00:47:30
      唐山學(xué)院學(xué)報(bào) 2012年3期
      關(guān)鍵詞:開發(fā)板服務(wù)器端內(nèi)核

      李 好

      (唐山學(xué)院計(jì)算機(jī)科學(xué)與技術(shù)系,河北唐山063000)

      基于ARM的電梯遠(yuǎn)程監(jiān)控系統(tǒng)服務(wù)器端設(shè)計(jì)

      李 好

      (唐山學(xué)院計(jì)算機(jī)科學(xué)與技術(shù)系,河北唐山063000)

      應(yīng)用網(wǎng)絡(luò)通信技術(shù),開發(fā)了基于ARM的電梯運(yùn)行狀態(tài)的遠(yuǎn)程監(jiān)控系統(tǒng)服務(wù)器端,為電梯在運(yùn)行過程中故障的發(fā)現(xiàn)、分析和排除提供了設(shè)計(jì)依據(jù)。

      電梯;遠(yuǎn)程監(jiān)控;ARM;服務(wù)器

      0 引言

      電梯作為機(jī)電一體化的大型機(jī)械設(shè)備,在高層建筑運(yùn)輸中起著非常重要的作用,是樓宇自動化必不可少的部分。但是由于電梯的結(jié)構(gòu)復(fù)雜,運(yùn)行可靠性要求高,使得遠(yuǎn)程監(jiān)控其運(yùn)行狀態(tài)和故障情況成為電梯管理、維護(hù)和安全運(yùn)行的迫切要求[1]。

      目前國內(nèi)外電梯遠(yuǎn)程監(jiān)控服務(wù)器端設(shè)計(jì)大都基于x86體系結(jié)構(gòu),采用微軟Windows系列操作系統(tǒng),和面向?qū)ο缶幊陶Z言對服務(wù)器端進(jìn)行軟件設(shè)計(jì),并以傳統(tǒng)電話線作為通信控制線路。本文給出的電梯遠(yuǎn)程監(jiān)控系統(tǒng)服務(wù)器端設(shè)計(jì)基于ARM體系結(jié)構(gòu),采用開源嵌入式Linux作為操作系統(tǒng),C++設(shè)計(jì)通信控制接口,網(wǎng)線作為通信線路。與國內(nèi)外大多數(shù)電梯遠(yuǎn)程控制系統(tǒng)相比,具有功耗低、體積小、集成度高、性能穩(wěn)定、執(zhí)行速度快、成本低、實(shí)時(shí)性強(qiáng)、安全性高、生命周期長、性價(jià)比高等優(yōu)勢。本設(shè)計(jì)采用TQ2440ARM9開發(fā)板作為服務(wù)器端,采用PC機(jī)作為客戶機(jī)端,并在客戶機(jī)端安裝Ubuntu 10.04操作系統(tǒng),服務(wù)器和客戶機(jī)使用網(wǎng)線連接。在服務(wù)器端構(gòu)建電梯模型并完成鍵盤模擬電梯運(yùn)行,同時(shí)用攝像頭采集視頻圖像,進(jìn)行JPEG壓縮處理,然后通過網(wǎng)絡(luò)傳輸,將視頻圖像和電梯運(yùn)行數(shù)據(jù)傳輸至監(jiān)控中心(主機(jī))進(jìn)行實(shí)時(shí)顯示。

      1 服務(wù)器環(huán)境搭建

      一個(gè)嵌入式Linux系統(tǒng)從軟件角度可分為四部分:引導(dǎo)加載程序Bootloader,Linux內(nèi)核,文件系統(tǒng)和應(yīng)用程序[2]。

      Bootloader是系統(tǒng)上電后運(yùn)行的第一段程序。在完成對系統(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目錄,即可開始配置。進(jìn)入Linux-2.6.30內(nèi)核主目錄,通過cp命令,用目錄下自帶的配置文件,生成.config文件,然后開始配置Linux內(nèi)核。使用make menuconfig命令對內(nèi)核進(jìn)行配置,可在原有的配置單上進(jìn)行相應(yīng)的修改。在配置時(shí)把系統(tǒng)所需要的驅(qū)動(.ko文件)添加進(jìn)去。

      2 服務(wù)器運(yùn)行流程

      該系統(tǒng)采用C/S結(jié)構(gòu),服務(wù)器端TQ2440ARM9開發(fā)板上連接ZC0301U口攝像頭,用于視頻獲取。由于QT顯示視頻流難度較大,故選擇圖片刷新方法來實(shí)現(xiàn)服務(wù)器端圖像的采集,通過網(wǎng)線將圖片從服務(wù)器傳到客戶端實(shí)時(shí)顯示。此外該系統(tǒng)還利用TQ2440開發(fā)板上的四個(gè)用戶按鍵,模擬電梯運(yùn)行。當(dāng)按下某個(gè)按鍵時(shí),會將相應(yīng)的信息通過網(wǎng)線傳到客戶端,客戶端管理員即可從PC機(jī)屏幕上看到當(dāng)前的電梯運(yùn)行狀態(tài)。

      3 服務(wù)器功能設(shè)計(jì)

      3.1 進(jìn)程管理

      進(jìn)程管理采用多進(jìn)程編程。進(jìn)程是一個(gè)運(yùn)行實(shí)體。每一個(gè)進(jìn)程都有它自己的地址空間,一般情況下包括文本區(qū)域、數(shù)據(jù)區(qū)域和堆棧。文本區(qū)域存儲處理器執(zhí)行的代碼;數(shù)據(jù)區(qū)域存儲變量和進(jìn)程執(zhí)行期間使用的動態(tài)分配的內(nèi)存;堆棧區(qū)域存儲活動過程調(diào)用的指令和本地變量。

      在該系統(tǒng)中,系統(tǒng)的服務(wù)器端需要不斷地發(fā)送攝像頭獲取的圖片,同時(shí)還要將按鍵模擬的電梯運(yùn)行數(shù)據(jù)實(shí)時(shí)地傳送到客戶端,這樣顯然不可能用同一個(gè)進(jìn)程同時(shí)進(jìn)行這兩項(xiàng)任務(wù)。這時(shí)就需要利用多進(jìn)程依靠時(shí)間片輪轉(zhuǎn)調(diào)度策略來實(shí)現(xiàn)進(jìn)程的并發(fā)執(zhí)行。

      在該模塊中,首先運(yùn)行server程序,程序運(yùn)行后,利用fork函數(shù)創(chuàng)建一個(gè)新的進(jìn)程稱為子進(jìn)程。該函數(shù)被調(diào)用一次但返回兩次。兩次返回的值不同:在子進(jìn)程中返回的值是0,而父進(jìn)程中的返回值則是新創(chuàng)建的子進(jìn)程的PID。因此可根據(jù)fork函數(shù)的返回值確定當(dāng)前是處于父進(jìn)程還是子進(jìn)程。將子進(jìn)程PID返回給父進(jìn)程的原因是:一個(gè)進(jìn)程可有多個(gè)子進(jìn)程,沒有一個(gè)函數(shù)可以使一個(gè)進(jìn)程獲得其所有子進(jìn)程的PID。

      fork函數(shù)生成的子進(jìn)程是父進(jìn)程的復(fù)制品,子進(jìn)程獲得父進(jìn)程的數(shù)據(jù)空間,堆和棧的復(fù)制品。而fork函數(shù)最常用的并不是復(fù)制原函數(shù),而是在創(chuàng)建一個(gè)新的進(jìn)程后,調(diào)用exec函數(shù)。exec函數(shù)啟動一個(gè)新程序,替換原有的進(jìn)程,因此這個(gè)新的被exec執(zhí)行的進(jìn)程的PID是不會改變的。在該進(jìn)程管理中,首先調(diào)用fork函數(shù)創(chuàng)建一個(gè)新的進(jìn)程,然后在新的進(jìn)程中調(diào)用exec函數(shù),執(zhí)行按鍵模擬電梯運(yùn)行程序,而在父進(jìn)程中則運(yùn)行服務(wù)器視頻圖像采集模塊。

      3.2 視頻圖像采集

      服務(wù)器視頻采集由ZC0301攝像頭和TQ2440ARM9開發(fā)板共同執(zhí)行。由于Linux-2.6.30內(nèi)核中默認(rèn)是不添加攝像頭驅(qū)動的,故在使用攝像頭之前需要對內(nèi)核進(jìn)行配置和移植。

      在Linux系統(tǒng)下,首先從TQ2440開發(fā)板自帶光盤中將2.6.30內(nèi)核源碼包解壓縮到/home目錄下,進(jìn)入解壓出來的目錄。輸入命令make distclean,即可將曾編譯生成的一些文件zImage以及.config文件刪除掉。然后根據(jù)開發(fā)板型號選擇相應(yīng)的配置文件,復(fù)制該文件并重命名為.config,這樣就產(chǎn)生一個(gè)默認(rè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程序從攝像頭抓取圖像并保存在當(dāng)前目錄下,利用網(wǎng)絡(luò)圖像傳輸模塊進(jìn)行圖像傳輸。

      3.3 視頻圖像發(fā)送

      服務(wù)器視頻圖像發(fā)送是將攝像頭截取的視頻圖像從服務(wù)器端通過網(wǎng)絡(luò)數(shù)據(jù)傳輸?shù)娇蛻舳?。這里采用socket套接字網(wǎng)絡(luò)通信。在本系統(tǒng)中由于需要實(shí)時(shí)地掌握服務(wù)器端的數(shù)據(jù)信息,對網(wǎng)絡(luò)傳輸?shù)馁|(zhì)量和時(shí)效性要求比較高,故采用了面向連接和具有重傳策略的TCP套接字,而沒有采用UDP套接字。

      服務(wù)器端需要調(diào)用socket函數(shù)生成一個(gè)套接字。該函數(shù)如果調(diào)用成功,會返回一個(gè)文件描述符。文件描述符與文件的打開模式、文件的位置類型、文件的初始類型等文件對象相關(guān)聯(lián),這些信息被稱作文件的上下文[3]。在使用socket進(jìn)行網(wǎng)絡(luò)傳輸之前,我們配置該socket。面向連接的TCP套接字的服務(wù)器端需要通過調(diào)用bind函數(shù)來配置本地信息。bind函數(shù)將socket與網(wǎng)絡(luò)上某個(gè)IP相關(guān)聯(lián),而且需要和該IP主機(jī)上的一個(gè)端口相關(guān)聯(lián),隨后就可以在該IP上對該端口進(jìn)行監(jiān)聽服務(wù)請求。使用面向連接的socket客戶端通信時(shí),服務(wù)器端需要調(diào)用accept函數(shù)在套接字?jǐn)?shù)據(jù)結(jié)構(gòu)中保存本地和遠(yuǎn)端信息。listen函數(shù)使socket處于被動的監(jiān)聽模式,并且為該socket建立一個(gè)輸入數(shù)據(jù)隊(duì)列,將到達(dá)的服務(wù)請求保存在此隊(duì)列中,直到程序處理完它們?yōu)橹梗?]。

      客戶端調(diào)用connect函數(shù)啟動和遠(yuǎn)端主機(jī)直接連接。這樣只有面向連接的客戶端程序使用socket時(shí)才需要將此socket與遠(yuǎn)端主機(jī)相連,當(dāng)然,客戶端需要首先知道服務(wù)器端的IP地址以及端口號,只有這樣,才能保證客戶端能夠找到正確的服務(wù)器端。服務(wù)器端的accept函數(shù)接收到連接請求后,如果接收成功,則會返回一個(gè)用于和客戶端通信的套接字,這樣服務(wù)器與客戶端就可以開始通信了。

      需要注意的是通信一定要保證數(shù)據(jù)讀寫的交互,尤其是在循環(huán)體內(nèi)還有其他文件操作時(shí),一定要考慮到同步的問題。這里需要利用read和write兩個(gè)函數(shù)來進(jìn)行交互以及同步。因?yàn)閞ead函數(shù)是阻塞的,當(dāng)讀緩沖區(qū)沒有數(shù)據(jù)時(shí),程序會阻塞在read函數(shù),一直到能夠讀到數(shù)據(jù)為止,程序才會向下進(jìn)行。服務(wù)器端視頻圖像發(fā)送流程為:先將抓取的圖片使用open函數(shù)打開放到設(shè)置的讀寫緩沖區(qū),使用write函數(shù)發(fā)送到客戶端,客戶端使用read函數(shù)接收將數(shù)據(jù)寫入到文件中,再利用write函數(shù)給服務(wù)器端一個(gè)消息,說明數(shù)據(jù)已成功接收。服務(wù)器端使用read函數(shù)來獲取這個(gè)消息。

      3.4 按鍵電梯模擬

      該系統(tǒng)中利用TQ2440開發(fā)板自帶的四個(gè)用戶按鍵模擬電梯運(yùn)行,使用K1和K2分別控制電梯的上行和下行,使用K3的交替來控制電梯門的開啟和關(guān)閉,使用K4來控制報(bào)警與取消報(bào)警。由于TQ2440開發(fā)板自帶的內(nèi)核中沒有加載用戶按鍵驅(qū)動,所以需要將用戶按鍵驅(qū)動直接編譯到內(nèi)核中。將新編譯生成的內(nèi)核燒寫到開發(fā)板上,則在設(shè)備文件中就多了一個(gè)名為IRQ_Test的設(shè)備文件。

      設(shè)備驅(qū)動安裝完成后,編寫按鍵信息獲取模塊。定義一個(gè)存放按鍵信息的數(shù)組,使用open函數(shù)打開IRQ_Test設(shè)備文件,使用read函數(shù)阻塞式讀取設(shè)備信息。當(dāng)沒有按鍵信息時(shí),就會阻塞在read函數(shù)處,當(dāng)有按鍵按下時(shí)則將信息存儲在上述定義的數(shù)組中。利用循環(huán)判斷數(shù)組的哪個(gè)單元有數(shù)據(jù)即可確定哪個(gè)按鍵被按下。創(chuàng)建一個(gè)網(wǎng)絡(luò)連接和客戶端進(jìn)行通信。將按鍵信息存于buf[0],這樣在將信息發(fā)送給客戶端時(shí),只需判斷該單元的數(shù)據(jù)值即可進(jìn)行相應(yīng)的處理。

      4 結(jié)論

      本文使用TQ2440ARM9嵌入式開發(fā)板作為電梯服務(wù)器端,并在其上構(gòu)建電梯模型,完成鍵盤模擬電梯的運(yùn)行,同時(shí)用攝像頭采集視頻圖像,通過網(wǎng)絡(luò)傳輸,將視頻圖像和電梯運(yùn)行數(shù)據(jù)傳輸至監(jiān)控中心進(jìn)行實(shí)時(shí)顯示。此設(shè)計(jì),具有傳輸可靠、操作方便的特點(diǎn),可較好地實(shí)現(xiàn)對電梯運(yùn)行情況的實(shí)時(shí)監(jiān)控,具有較高的商業(yè)價(jià)值。

      [1] 余輝.嵌入式Linux程序設(shè)計(jì)案例與實(shí)驗(yàn)教程[M].北京:機(jī)械工業(yè)出版社,2009:238-248.

      [2] 三恒星科技.ARM9應(yīng)用實(shí)例[M].北京:電子工業(yè)出版社,2008:120-150.

      [3] Scaglia Sergio.嵌入式Internet TCP/IP基礎(chǔ)、實(shí)現(xiàn)及應(yīng)用[M].北京:北京航空航天大學(xué)出版社,2008:215-250.

      [4] 怯肇乾.嵌入式網(wǎng)絡(luò)通信開發(fā)應(yīng)用[M].北京:北京航空航天大學(xué)出版社,2010:64-105.

      (責(zé)任編校:李秀榮)

      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)研究。

      猜你喜歡
      開發(fā)板服務(wù)器端內(nèi)核
      萬物皆可IP的時(shí)代,我們當(dāng)夯實(shí)的IP內(nèi)核是什么?
      強(qiáng)化『高新』內(nèi)核 打造農(nóng)業(yè)『硅谷』
      基于嵌入式Linux內(nèi)核的自恢復(fù)設(shè)計(jì)
      Linux內(nèi)核mmap保護(hù)機(jī)制研究
      淺析異步通信層的架構(gòu)在ASP.NET 程序中的應(yīng)用
      成功(2018年10期)2018-03-26 02:56:14
      Microchip最新推出兩款PIC32 Curiosity開發(fā)板
      淺析單片機(jī)開發(fā)板的設(shè)計(jì)與制作
      電子制作(2017年22期)2017-02-02 07:10:14
      在Windows中安裝OpenVPN
      Mouser為您呈上開發(fā)關(guān)鍵之STMicroelectronics Nucleo開發(fā)板
      Arduino和Atmel發(fā)布Arduino Zero開發(fā)板
      马鞍山市| 修水县| 天门市| 会昌县| 张北县| 南陵县| 彰武县| 咸丰县| 大名县| 金塔县| 台江县| 米泉市| 台北市| 新闻| 汉沽区| 凌源市| 朝阳市| 满城县| 德州市| 长沙县| 浪卡子县| 清原| 永靖县| 丰都县| 若尔盖县| 江安县| 铜梁县| 泌阳县| 东至县| 金溪县| 偏关县| 墨脱县| 营口市| 涟源市| 钟山县| 那坡县| 香格里拉县| 桐梓县| 杨浦区| 龙陵县| 望都县|