張 營, 李駒光, 唐東明
(西南科技大學(xué) 信息工程學(xué)院,四川 綿陽 621010)
隨著計算機(jī)與微電子技術(shù)的飛速發(fā)展及后PC時代的到來,嵌入式芯片被廣泛的運(yùn)用到消費(fèi)、電子、微控制、無線通信、網(wǎng)絡(luò)設(shè)備等各個領(lǐng)域。嵌入式產(chǎn)品在全球范圍內(nèi)得到了突飛猛進(jìn)的發(fā)展,并且嵌入式產(chǎn)品越來趨向于智能化,功能及應(yīng)用環(huán)境多樣化,小型化。嵌入式產(chǎn)品正在以越來越快的速度改變著人們的生活、工作和娛樂[1]。智能控制領(lǐng)域當(dāng)然少不了她的身影,該智能控制臺系統(tǒng)比其他控制系統(tǒng)更加智能化,功能更加多樣化,且具有一些獨(dú)特的功能。
本智能控制臺系統(tǒng)是應(yīng)用于危險惡劣環(huán)境下環(huán)境監(jiān)測,數(shù)據(jù)采集,遠(yuǎn)程控制等智能感知控制系統(tǒng),主要由前端設(shè)備、ARM控制臺組成,后臺PC可輔助控制前端設(shè)備。前端主要有采集模塊、報警模塊、通信模塊、控制器模塊構(gòu)成,負(fù)責(zé)數(shù)據(jù)采集與環(huán)境探測、信號傳輸、聲光告警、無線傳輸。ARM控制臺主要由ARM核心處理器模塊、數(shù)據(jù)通信模塊、液晶顯示模塊、按鍵處理模塊等組成?,F(xiàn)主要研究與設(shè)計ARM控制臺部分,系統(tǒng)總體結(jié)構(gòu)示意圖如圖1所示。
ARM 控制臺設(shè)計上采用較新的配置方案:ARM9+Linux2.6內(nèi)核,采用MiniGui實現(xiàn)系統(tǒng)需要的顯示功能及按鍵處理,實現(xiàn)接收前端數(shù)據(jù)、處理數(shù)據(jù)、界面顯示、向后臺 PC上傳數(shù)據(jù)、向下轉(zhuǎn)發(fā)PC的數(shù)據(jù)及向前端下發(fā)控制指令等。
具體所實現(xiàn)的基本功能是根據(jù)無線通信節(jié)點(diǎn)之間的無線通信協(xié)議,封裝接收數(shù)據(jù)的特定函數(shù),并分析前端采集的現(xiàn)場信息;封裝向前端發(fā)送控制信息的函數(shù)模塊,根據(jù)通信協(xié)議,調(diào)用該函數(shù)模塊,向前端發(fā)送諸如:前端溫濕度采集、前端壓力采集等控制指令;通過大屏幕液晶顯示屏和自定義鍵盤實現(xiàn)簡潔的控制菜單;同步進(jìn)行聲光報警,且保存所有前端設(shè)備的報警記錄;實現(xiàn)跟后臺 PC端的數(shù)據(jù)通信,網(wǎng)絡(luò)數(shù)據(jù)的組包與解包[2]等。
ARM 控制臺所實現(xiàn)的功能完全滿足了實際的需求,其核心工作是及時響應(yīng)前端的信號并在控制臺顯示界面上作出正確的響應(yīng);滿足用戶對前端的參數(shù)設(shè)置及相關(guān)數(shù)據(jù)的管理功能,并滿足后臺 PC端對控制臺數(shù)據(jù)的讀取要求。
采用 Atmel的工業(yè)環(huán)保級 ARM9處理器AT91SAM9263,它整合了 ARM926EJ-S? 高性能內(nèi)核,處理器的最高時鐘頻率為240 MHz,32位高速ARM926EJ-S處理器,支持DSP指令擴(kuò)展及JAVA加速、10/100M以太網(wǎng)MAC、USB2.0、SSC、USART以及其它豐富的片內(nèi)外圍部件[3],是一款高性能、低功耗、低成本的嵌入式 ARM 微處理器,同時也是最適合于工業(yè)控制ARM9處理器之一。
該系統(tǒng)中的AT91SAM9263處理器配有64 MB的SDRAM 存儲器,8 MB的NOR Flash,128 MB的NAND Flash,完全滿足系統(tǒng)硬件要求。對 WSN(Wireless Sensor Network)網(wǎng)絡(luò)端提供1路485接口,1路232接口[4],1個USB接口,1個10 M/100 Mb/s以太網(wǎng)接口以方便進(jìn)行網(wǎng)絡(luò)功能擴(kuò)展或其他功能擴(kuò)展。
2.2.1 多進(jìn)程間通信設(shè)計
本控制臺系統(tǒng)在Linux2.6+MiniGui上完成系統(tǒng)的應(yīng)用軟件開發(fā)。其軟件中的關(guān)鍵問題之一是多進(jìn)程間數(shù)據(jù)通信問題。使用多個進(jìn)程,進(jìn)程間通信的方式采用共享內(nèi)存方式[5],共享內(nèi)存通信的一個顯而易見的好處是效率高,因為進(jìn)程可以直接讀寫內(nèi)存,而不需要任何數(shù)據(jù)的拷貝。對于像管道和消息隊列等通信方式,則需要在內(nèi)核和用戶空間進(jìn)行四次數(shù)據(jù)拷貝,而共享內(nèi)存只拷貝兩次數(shù)據(jù): 一次從輸入文件到共享內(nèi)存區(qū),另一次從共享內(nèi)存區(qū)到輸出文件[5]。因此,采用共享內(nèi)存的通信方式效率是非常高的。但共享內(nèi)存創(chuàng)建后,由于多個進(jìn)程共享同一塊內(nèi)存區(qū)域,必然需要某種同步機(jī)制,比如System V的信號燈或Posix的互斥鎖來同步對于共享內(nèi)存區(qū)域的訪問[6]。
軟件整體結(jié)構(gòu)上擬采用3個進(jìn)程來實現(xiàn):GuiMg進(jìn)程(顯示界面進(jìn)程),Serialdata進(jìn)程 (串口數(shù)據(jù)處理進(jìn)程),Netdata進(jìn)程 (網(wǎng)絡(luò)數(shù)據(jù)處理進(jìn)程),根據(jù)系統(tǒng)實現(xiàn)需要創(chuàng)建了3個共享內(nèi)存表:①前端信息表:共享于Serialdata進(jìn)程、Netdata進(jìn)程和GuiMg進(jìn)程,其數(shù)據(jù)來源:前端節(jié)點(diǎn)串口信息;設(shè)置前端設(shè)備的一些指令;控制臺界面上對前端的控制指令;②串口數(shù)據(jù)發(fā)送表:共享于Serialdata進(jìn)程、Netdata進(jìn)程和GuiMg進(jìn)程。根據(jù)控制臺跟前端的串行通信協(xié)議設(shè)定,用于發(fā)送控制臺和后臺 PC端到前端的前端設(shè)備控制指令,GuiMg進(jìn)程和 Netdata進(jìn)程完成寫,Serialdata進(jìn)程完成取數(shù)并發(fā)送;③網(wǎng)絡(luò)數(shù)據(jù)發(fā)送表:共享于Netdata進(jìn)程和Serialdata進(jìn)程。根據(jù)控制臺和后臺 PC端的網(wǎng)絡(luò)通信協(xié)議設(shè)定,用于發(fā)送后臺 PC端需要的數(shù)據(jù)信息,具體數(shù)據(jù)來源于串口收到的前端數(shù)據(jù)。Serialdata進(jìn)程完成寫,Netdata進(jìn)程完成取數(shù)并發(fā)送。
2.2.2 系統(tǒng)Gui進(jìn)程的具體實現(xiàn)
MiniGUI是面向?qū)崟r嵌入式系統(tǒng)的輕量級圖形用戶界面支持系統(tǒng),提供了完備的多窗口機(jī)制,實現(xiàn)了類win32的消息事件傳遞及驅(qū)動機(jī)制;能夠支持多字符集和多字體;可以支持常見的圖像文件;還支持Windows的資源文件,如位圖、圖標(biāo)、光標(biāo)等,MiniGUI還具有小巧、可配置、移植性好等優(yōu)點(diǎn)[7]。
MiniGUI是基于事件驅(qū)動的,程序的流程不再是只有一個入口和若干個出口的串行執(zhí)行線路;相反,程序會一直處于一個循環(huán)狀態(tài),在這個循環(huán)當(dāng)中,程序不斷從外部或內(nèi)部獲取某些事件[8],該系統(tǒng)中的按鍵消息循環(huán)流程圖如圖2所示,當(dāng)有相應(yīng)的按鍵被按下時,從消息循環(huán)就會捕獲到按鍵消息,進(jìn)而進(jìn)行按鍵事件部分的處理。
MiniGUI中定時器消息的處理比較特殊,在實現(xiàn)上和Linux 的信號機(jī)制類似。當(dāng)一次定時器消息尚未處理而又出現(xiàn)一次新的定時器消息時,系統(tǒng)將忽略這個新的定時器消息,而且定時器消息是優(yōu)先級最低的消息類型,只有消息隊列中不存在其它類型的消息時,系統(tǒng)才會去檢查是否有定時器到期[9]。當(dāng)設(shè)定的定時器頻率很高時,就有可能出現(xiàn)定時器消息丟失或者間隔不均勻的情況,為避免出現(xiàn)上述問題該系統(tǒng)使用的定時器經(jīng)過了多次測試,合理的設(shè)置了定時器時間。
本系統(tǒng) MiniGUI中的定時器定時器消息事件流程圖如圖3所示,當(dāng)定時時間到時不斷地讀取前端共享內(nèi)存表數(shù)據(jù),并及時的更新主工作界面上的信息。
系統(tǒng)的Gui進(jìn)程采用MiniGui實現(xiàn)了系統(tǒng)需要的顯示功能及按鍵和數(shù)據(jù)處理等功能,提供了友好的人機(jī)交互接口。
2.2.3 串口數(shù)據(jù)處理進(jìn)程及網(wǎng)絡(luò)數(shù)據(jù)處理進(jìn)程
串口數(shù)據(jù)處理進(jìn)程及網(wǎng)絡(luò)數(shù)據(jù)處理進(jìn)程使得本控制臺具有解析處理通信數(shù)據(jù)包功能,以提供 Gui進(jìn)程所需的數(shù)據(jù)及此兩個進(jìn)程本身進(jìn)行數(shù)據(jù)處理,另外,其重新組織數(shù)據(jù),轉(zhuǎn)發(fā)數(shù)據(jù)的網(wǎng)關(guān)功能,使得數(shù)據(jù)在不同的平臺上方便數(shù)據(jù)處理與共享,并使得系統(tǒng)能夠具有處理更復(fù)雜問題的功能。
Serialdata進(jìn)程的功能:完成和前端的串行數(shù)據(jù)收發(fā);接收前端采集的現(xiàn)場信息,向前端發(fā)送控制指令;保存所有前端設(shè)備的報警記錄。
Netdata的功能:完成和后臺PC間的網(wǎng)絡(luò)數(shù)據(jù)收發(fā),使用UDP方式完成。
串口數(shù)據(jù)處理及網(wǎng)絡(luò)數(shù)據(jù)處理部分也是主要通過相關(guān)的通信協(xié)議來設(shè)計,具體代碼不再詳述。其串口處理流程圖如圖4所示。
其中,UDP網(wǎng)絡(luò)通信中為了保證通信的穩(wěn)定可靠性,加入了命令操作確認(rèn)部分[10],控制臺給前端設(shè)備發(fā)生指令時,要求前端設(shè)備正常收到后,回復(fù)一個確認(rèn)信號。
隨著眾多帶有危險環(huán)境的行業(yè)的發(fā)展,如電力,核工業(yè)等,生產(chǎn)及工作安全問題顯得越來越重要,安全監(jiān)控設(shè)備也越來越顯得迫切需要。這里設(shè)計的智能控制臺系統(tǒng)配合前端感知設(shè)備滿足了上述行業(yè)的需要,緩解了生產(chǎn)及工作中的安全問題。采用的較新的ARM9 + Linux2.6內(nèi)核 + MiniGui方案,實現(xiàn)了系統(tǒng)需要的功能,設(shè)計較為人性化,符合在實際作業(yè)中的應(yīng)用,另外,該控制臺創(chuàng)新點(diǎn)是具有解析處理數(shù)據(jù),重新組織數(shù)據(jù),轉(zhuǎn)發(fā)數(shù)據(jù)的網(wǎng)關(guān)功能,使得該控制臺具有很強(qiáng)的實用性,是安全與監(jiān)控行業(yè)的發(fā)展方向之一,該系統(tǒng)主要應(yīng)用在帶有危險環(huán)境的眾多行業(yè)中也可用于一般的非危險作業(yè)環(huán)境的智能監(jiān)控安防場合,將具有廣闊的應(yīng)用前景和市場。
[1] 陳文智,王總輝. 嵌入式系統(tǒng)原理與設(shè)計[M].北京:清華大學(xué)出版社,2011.
[2] 甘剛. Linux/UNIX網(wǎng)絡(luò)編程[M].北京:中國水利水電出版社,2006.
[3] 李廣軍. 微處理器系統(tǒng)結(jié)構(gòu)與嵌入式系統(tǒng)設(shè)計[M].北京:電子工業(yè)出版社,2009.
[4] 蔡祥,江冰. 基于 485的耐壓絕緣測試系統(tǒng)設(shè)計[J].通信技術(shù),2011,44(03):23-34.
[5] KURT W. GNU/Linux編程指南[M].第2版.北京:清華大學(xué)出版社,2002.
[6] 史蒂文斯,拉戈. UNIX環(huán)境高級編程[M].北京:人民郵電出版社,2006.
[7] 韓超.嵌入式GUI開發(fā)設(shè)計——基于MiniGUI[M].北京:電子工業(yè)出版社,2009.
[8] 鄒瑛.基于多級鏈表實現(xiàn)MinGUI屬性頁控件設(shè)計[J].通信技術(shù),2011,44(07):135-137.
[9] 魏永明.嵌入式軟件開發(fā)及C語言實--MiniGUI剖析[M].北京:電子工業(yè)出版社,2008.
[10] 史蒂文斯.TCP/IP詳解卷1:協(xié)議[M].北京:機(jī)械工業(yè)出版社,2000.