在能效監測現場,能效監測終端是主要實現采集物理量(溫度、流量、電量等)的設備,且是用戶交互的唯一硬件設備,傳統的能效監測終端等同于能效采集終端,與用戶的交互很少。在能效需求側管理體系中,作為需求側的主要設備,能效監測終端需要承擔與監控主站的雙向交互,以及與用戶的雙向交互任務。本文研究并實現了一種基于多媒體顯示、具備雙向交互功能的能效監測終端,為能效的需求側管理提供了可靠的實現手段。 1 硬件設計 首先本文從硬件組成上來分析實現能效監測終端的細節。終端由以下幾大核心硬件單元組成:具備多媒體協處理器的中央處理器Freescale i.mx51、LVDS液晶顯示接口、以太網RJ45、433MHz微功率無線、GPRS接口、基于RS485的數字通信接口。硬件組成原理如圖1所示。 圖1 硬件組成 如圖1所示,硬件設計總體包含三部分,即數據通信接口部分、核心處理部分、人機交互部分。其中: 1)數據通信接口包含2個RS485串口,用于連接數字型傳感器;1個R232用于本地維護;1個RJ45以太網接口,用于與后臺主站的遠程連接;1路433MHz的微功率無線通信接口,用于無線數據采集;1路GPRS通信接口,用于遠程連接后臺主站。可以看出,為了增強通信適應性,終端在前端采集上預置了多路獨立串口,后端遠程通信預置了以太網和GPRS接口,而這些接口的基礎均為獨立串口。 2)核心處理部分由i.mx51、NAND FLASH、SDRAM構成最小系統,NAND FLASH存儲系統映像和文件系統,SDRAM為系統程序執行提供內存,在系統啟動階段為程序重定向提供運行空間。 3)人機交互部分由LVDS液晶接口和觸摸控制接口組成,LVDS液晶接口具備很強的抗電磁干擾特性,數據防干擾能力強;觸摸屏接口采用在工業領域應用廣泛的電阻式觸摸屏接口,以適應復雜苛刻的現場環境。 除以上幾部分,終端電源采用線性電源方案設計,如圖2所示。 2 嵌入式軟件設計 能效監測終端的軟件由啟動程序、嵌入式Linux操作系統層、中間件層、應用程序層組成。 2.1 啟動程序bootloader設計 圖2 電源原理圖 啟動程序bootloader是板級嵌入式軟件系統的基礎,終端上電執行的第一部分程序便是bootloader。實現終端主要硬件接口的驅動、系統啟動代碼等。系統啟動代碼完成處理器初始化、內存初始化、堆棧空間準備、程序代碼重定向等系統啟動的準備工作。啟動程序流程如圖3所示: 以上流程較為特殊的地方在于程序重定向的過程:i.mx51冷啟動后,NAND FLASH控制器中有2K 的SRAM會被用作boot RAM,根據硬件設計如果支持從NAND FLASH啟動的話,i.mx51會將NAND FLASH中的前2K的數據自動拷貝到NAND FLASH 控制器中的 RAM中,并且自動跳轉到該2K RAM的開始地址 0xD0000000開始執行。bootloader固件被燒寫到NAND FLASH的0地址處,所以bootloader的前2K代碼被拷貝到0xD0000000。 2.2 特殊的驅動程序設計 能效監測終端的軟件基于Linux系統設計完成,而典型的Linux系統框架具備常用的串口UART驅動、FLASH驅動等。但是對于較為特殊的以太網驅動、433MHz驅動,需要做特殊的驅動程序設計,特征如下: a)本文所研究的能效監測終端在以太網通信上有較特殊的要求,因此需做特殊的移植和修改,使得以太網的驅動支持直接收發以太網數據包。基本思路為保持原有驅動框架不變,(1)加入以太網讀寫接口;(2)修改以太網數據發送接口,截斷原來的發送數據接口;(3)修改以太網數據接收接口,使得數據接收后不直接向上層遞交而是送入自定義內存中。 b)433MHz的驅動實現為字符型驅動,驅動的工作流程為:初始化設備即初始化對應管腳并使能中斷;按照433MHz的通信協議構建數據包并發送給無線基帶芯片Si4432;當Si4432接收到數據與協議包格式不符時,產生中斷,重發數據。 2.3 GUI中間件 為了實現需求側管理,顯示交互是終端必備的功能。本文研究實現了基于framebuffer的輕量型GUI中間件,是下一步編寫圖形應用程序的基礎。本文實現的輕量型GUI中間件,具有如下的幾個組成部分: 1)用戶交互模塊,為應用程序提供API接口函數,屏蔽了GUI的實現細節。 2)對象管理,實現對窗口環境中的邏輯對象的組織管理。包括對象的添加和刪除,GUI窗口顯示的維護,如窗口切換、焦點切換、對象的隱藏和恢復等操作引發的對象屬性的更新,還有對不同控件的各種事件的響應。 3)基本圖形組件,實現了對顯示輸出設備的操作。一般獨立于具體的設備驅動程序,與物理設備之間形成“設備抽象層”。 4)消息驅動機制,負責GUI的消息接收和與其它任務的通訊以及消息隊列的維護。 5)定時器及顯存管理,定時器用于向服務器發送定時器消息,主要用于消息隊列的管理和定時等。顯存管理主要用于消除顯示過程中出現的屏幕閃爍現象。 消息驅動機制是輕量型GUI中間件最大化利用有限資源實現GUI操作的重要手段,硬件設備(比如按鍵)產生動作事件,系統生成消息,消息分發至對應的消息處理任務。在未收到消息時,消息處理任務維持消息隊列循環等待,如圖4所示。 圖3 啟動流程圖 圖4 應用程序流程圖 GUI中間件采用了客戶/服務器的工作模式,為了減輕服務器端的負荷,本文的GUI只是把輸入設備事件處理和顯示輸出任務交給服務器,以此提高執行速度。 應用程序調用GUI中間件的圖形庫、組件庫等,調用機制與windows的消息響應機制類似。如調用圖表繪制組件,應用程序前端顯示刷新組件,應用程序后端進入消息循環,等待數據處理任務的消息,實現數據的響應刷新。 2.4 應用程序及數據傳輸協議 終端具備三大主體功能:數據采集、數據處理和存儲、數據顯示與通信。借助硬件和底層軟件的支持,應用程序實現流程如下圖4。 應用程序由圖形顯示模塊、服務器交互通信模塊、數據采集模塊、數據分析和存儲模塊、異步數據通信模塊等組成。其中,與服務器采用優化的JSON協議作為基礎協議,實現數據的實時同步更新。 JSON是一種輕量級的數據通信協議,一定程度上類似XML協議,但支持的數據格式更加廣泛,通信更加高效。終端實現JSON協議解析,主要依靠兩個解析類實現:JSONObject和JSONArray。其中,JSONObject用于把對象型的JSON數據轉化成JSONObject對象,然后使用get系列方法獲取對象屬性的數據,最常用的方法是getString;JSONArray用于把數組型的JSON數據轉化成JSONArray對象,該類所提供方法和JSONObject類基本相同,只不過其中采用的get系列方法的參數都是整型,代表數組型數據的位置索引。 各功能模塊實現為輕量級線程,線程間采用管道、信號量等進行通信。借組MySQL數據庫實現對能耗數據的存儲。 終端做為需求側管理的終端設備,需要維持與后臺主站的穩定網絡連接,此部分采用獨立的線程負責處理網絡連接,監測連接狀態,斷線重連;采用獨立的數據收發線程,避免數據的擁塞,提高響應的實時性。 數據的變化,均在界面定時器的統一調度下,進行顯示的同步以及按鍵操作的響應。 3 終端軟件優化 對能效監測終端而言,因為其數據集中度高,且頻繁進行數據通信,因此優化軟件實現,提高性能是十分重要的工作。結合實際研發過程,對所涉及到的軟件優化技術進行介紹: 1)異步通信優化:在能效監測終端的數據流向中,采集數據通過網絡傳輸至服務器,通常比較耗時,同時本地顯示的響應卻很快。正確的做法是在新的線程中準備好數據,然后再通知主線程異步的獲取數據并顯示。 2)避免內存泄露:內存泄露指的是由于某些原因導致系統內存過度消耗的問題。在內存資源有限的能效監測終端中,內存泄露尤其重要。避免內存泄露的方法在本文所研究的能效監測終端軟件中包括:程序邏輯的內存泄露,即注意新創建對象在使用完后一定要銷毀,即使設置為NULL,也不能保證系統垃圾回收器能夠回收這些對象的資源;在存儲數據時使用到了數據庫,在使用數據庫時如果沒有關閉游標,將會造成系統運行速度變慢;位圖資源在不使用時,應該先調用recycle方法釋放內存,然后再將其設置NULL。 4 結語 本文對需求側管理型能效監測終端的設計進行了深入研究。通過對終端的軟硬件進行方案設計,并最終實現了的軟硬件設計。在實際應用中,需求側管理型能效監測終端,不僅具備能效數據采集基礎功能,同時還具備能效數據圖形化顯示,遠程監控,需求側響應功能,可用于實現依據能效情況安排生產調度,實現能效預警等功能。 |