張 營, 李駒光, 唐東明
(西南科技大學 信息工程學院,四川 綿陽 621010)
隨著計算機與微電子技術的飛速發展及后PC時代的到來,嵌入式芯片被廣泛的運用到消費、電子、微控制、無線通信、網絡設備等各個領域。嵌入式產品在全球范圍內得到了突飛猛進的發展,并且嵌入式產品越來趨向于智能化,功能及應用環境多樣化,小型化。嵌入式產品正在以越來越快的速度改變著人們的生活、工作和娛樂[1]。智能控制領域當然少不了她的身影,該智能控制臺系統比其他控制系統更加智能化,功能更加多樣化,且具有一些獨特的功能。
本智能控制臺系統是應用于危險惡劣環境下環境監測,數據采集,遠程控制等智能感知控制系統,主要由前端設備、ARM控制臺組成,后臺PC可輔助控制前端設備。前端主要有采集模塊、報警模塊、通信模塊、控制器模塊構成,負責數據采集與環境探測、信號傳輸、聲光告警、無線傳輸。ARM控制臺主要由ARM核心處理器模塊、數據通信模塊、液晶顯示模塊、按鍵處理模塊等組成。現主要研究與設計ARM控制臺部分,系統總體結構示意圖如圖1所示。

ARM 控制臺設計上采用較新的配置方案:ARM9+Linux2.6內核,采用MiniGui實現系統需要的顯示功能及按鍵處理,實現接收前端數據、處理數據、界面顯示、向后臺 PC上傳數據、向下轉發PC的數據及向前端下發控制指令等。
具體所實現的基本功能是根據無線通信節點之間的無線通信協議,封裝接收數據的特定函數,并分析前端采集的現場信息;封裝向前端發送控制信息的函數模塊,根據通信協議,調用該函數模塊,向前端發送諸如:前端溫濕度采集、前端壓力采集等控制指令;通過大屏幕液晶顯示屏和自定義鍵盤實現簡潔的控制菜單;同步進行聲光報警,且保存所有前端設備的報警記錄;實現跟后臺 PC端的數據通信,網絡數據的組包與解包[2]等。
ARM 控制臺所實現的功能完全滿足了實際的需求,其核心工作是及時響應前端的信號并在控制臺顯示界面上作出正確的響應;滿足用戶對前端的參數設置及相關數據的管理功能,并滿足后臺 PC端對控制臺數據的讀取要求。
采用 Atmel的工業環保級 ARM9處理器AT91SAM9263,它整合了 ARM926EJ-S? 高性能內核,處理器的最高時鐘頻率為240 MHz,32位高速ARM926EJ-S處理器,支持DSP指令擴展及JAVA加速、10/100M以太網MAC、USB2.0、SSC、USART以及其它豐富的片內外圍部件[3],是一款高性能、低功耗、低成本的嵌入式 ARM 微處理器,同時也是最適合于工業控制ARM9處理器之一。
該系統中的AT91SAM9263處理器配有64 MB的SDRAM 存儲器,8 MB的NOR Flash,128 MB的NAND Flash,完全滿足系統硬件要求。對 WSN(Wireless Sensor Network)網絡端提供1路485接口,1路232接口[4],1個USB接口,1個10 M/100 Mb/s以太網接口以方便進行網絡功能擴展或其他功能擴展。
2.2.1 多進程間通信設計
本控制臺系統在Linux2.6+MiniGui上完成系統的應用軟件開發。其軟件中的關鍵問題之一是多進程間數據通信問題。使用多個進程,進程間通信的方式采用共享內存方式[5],共享內存通信的一個顯而易見的好處是效率高,因為進程可以直接讀寫內存,而不需要任何數據的拷貝。對于像管道和消息隊列等通信方式,則需要在內核和用戶空間進行四次數據拷貝,而共享內存只拷貝兩次數據: 一次從輸入文件到共享內存區,另一次從共享內存區到輸出文件[5]。因此,采用共享內存的通信方式效率是非常高的。但共享內存創建后,由于多個進程共享同一塊內存區域,必然需要某種同步機制,比如System V的信號燈或Posix的互斥鎖來同步對于共享內存區域的訪問[6]。
軟件整體結構上擬采用3個進程來實現:GuiMg進程(顯示界面進程),Serialdata進程 (串口數據處理進程),Netdata進程 (網絡數據處理進程),根據系統實現需要創建了3個共享內存表:①前端信息表:共享于Serialdata進程、Netdata進程和GuiMg進程,其數據來源:前端節點串口信息;設置前端設備的一些指令;控制臺界面上對前端的控制指令;②串口數據發送表:共享于Serialdata進程、Netdata進程和GuiMg進程。根據控制臺跟前端的串行通信協議設定,用于發送控制臺和后臺 PC端到前端的前端設備控制指令,GuiMg進程和 Netdata進程完成寫,Serialdata進程完成取數并發送;③網絡數據發送表:共享于Netdata進程和Serialdata進程。根據控制臺和后臺 PC端的網絡通信協議設定,用于發送后臺 PC端需要的數據信息,具體數據來源于串口收到的前端數據。Serialdata進程完成寫,Netdata進程完成取數并發送。
2.2.2 系統Gui進程的具體實現
MiniGUI是面向實時嵌入式系統的輕量級圖形用戶界面支持系統,提供了完備的多窗口機制,實現了類win32的消息事件傳遞及驅動機制;能夠支持多字符集和多字體;可以支持常見的圖像文件;還支持Windows的資源文件,如位圖、圖標、光標等,MiniGUI還具有小巧、可配置、移植性好等優點[7]。
MiniGUI是基于事件驅動的,程序的流程不再是只有一個入口和若干個出口的串行執行線路;相反,程序會一直處于一個循環狀態,在這個循環當中,程序不斷從外部或內部獲取某些事件[8],該系統中的按鍵消息循環流程圖如圖2所示,當有相應的按鍵被按下時,從消息循環就會捕獲到按鍵消息,進而進行按鍵事件部分的處理。

MiniGUI中定時器消息的處理比較特殊,在實現上和Linux 的信號機制類似。當一次定時器消息尚未處理而又出現一次新的定時器消息時,系統將忽略這個新的定時器消息,而且定時器消息是優先級最低的消息類型,只有消息隊列中不存在其它類型的消息時,系統才會去檢查是否有定時器到期[9]。當設定的定時器頻率很高時,就有可能出現定時器消息丟失或者間隔不均勻的情況,為避免出現上述問題該系統使用的定時器經過了多次測試,合理的設置了定時器時間。
本系統 MiniGUI中的定時器定時器消息事件流程圖如圖3所示,當定時時間到時不斷地讀取前端共享內存表數據,并及時的更新主工作界面上的信息。

系統的Gui進程采用MiniGui實現了系統需要的顯示功能及按鍵和數據處理等功能,提供了友好的人機交互接口。
2.2.3 串口數據處理進程及網絡數據處理進程
串口數據處理進程及網絡數據處理進程使得本控制臺具有解析處理通信數據包功能,以提供 Gui進程所需的數據及此兩個進程本身進行數據處理,另外,其重新組織數據,轉發數據的網關功能,使得數據在不同的平臺上方便數據處理與共享,并使得系統能夠具有處理更復雜問題的功能。
Serialdata進程的功能:完成和前端的串行數據收發;接收前端采集的現場信息,向前端發送控制指令;保存所有前端設備的報警記錄。
Netdata的功能:完成和后臺PC間的網絡數據收發,使用UDP方式完成。
串口數據處理及網絡數據處理部分也是主要通過相關的通信協議來設計,具體代碼不再詳述。其串口處理流程圖如圖4所示。

其中,UDP網絡通信中為了保證通信的穩定可靠性,加入了命令操作確認部分[10],控制臺給前端設備發生指令時,要求前端設備正常收到后,回復一個確認信號。
隨著眾多帶有危險環境的行業的發展,如電力,核工業等,生產及工作安全問題顯得越來越重要,安全監控設備也越來越顯得迫切需要。這里設計的智能控制臺系統配合前端感知設備滿足了上述行業的需要,緩解了生產及工作中的安全問題。采用的較新的ARM9 + Linux2.6內核 + MiniGui方案,實現了系統需要的功能,設計較為人性化,符合在實際作業中的應用,另外,該控制臺創新點是具有解析處理數據,重新組織數據,轉發數據的網關功能,使得該控制臺具有很強的實用性,是安全與監控行業的發展方向之一,該系統主要應用在帶有危險環境的眾多行業中也可用于一般的非危險作業環境的智能監控安防場合,將具有廣闊的應用前景和市場。
[1] 陳文智,王總輝. 嵌入式系統原理與設計[M].北京:清華大學出版社,2011.
[2] 甘剛. Linux/UNIX網絡編程[M].北京:中國水利水電出版社,2006.
[3] 李廣軍. 微處理器系統結構與嵌入式系統設計[M].北京:電子工業出版社,2009.
[4] 蔡祥,江冰. 基于 485的耐壓絕緣測試系統設計[J].通信技術,2011,44(03):23-34.
[5] KURT W. GNU/Linux編程指南[M].第2版.北京:清華大學出版社,2002.
[6] 史蒂文斯,拉戈. UNIX環境高級編程[M].北京:人民郵電出版社,2006.
[7] 韓超.嵌入式GUI開發設計——基于MiniGUI[M].北京:電子工業出版社,2009.
[8] 鄒瑛.基于多級鏈表實現MinGUI屬性頁控件設計[J].通信技術,2011,44(07):135-137.
[9] 魏永明.嵌入式軟件開發及C語言實--MiniGUI剖析[M].北京:電子工業出版社,2008.
[10] 史蒂文斯.TCP/IP詳解卷1:協議[M].北京:機械工業出版社,2000.