基于CAN總線(xiàn)的嵌入式設備狀態(tài)監測平臺設計
2.4 μC/OS嵌入式操作系統
首先,已經(jīng)將板級支持包編寫(xiě)完畢,而嵌入式系統首先是單板運行,其次是將底層軟件用任務(wù)的方式重新編寫(xiě)。在單板運行嵌入式系統就是移植的過(guò)程,主要有:
①定義常量的值,聲明數據類(lèi)型、堆棧參數;
②編寫(xiě)堆棧初始化參數;
③編寫(xiě)任務(wù)切換的函數,還有在中斷函數中提供時(shí)鐘中斷,即給操作系統時(shí)鐘使用。
移植完成之后,進(jìn)行任務(wù)的編寫(xiě)。分配給7個(gè)任務(wù)不同的優(yōu)先級、堆棧資源和運行方式。其中,App_TaskStart是全部任務(wù)的起始點(diǎn),優(yōu)先級最高,由這個(gè)任務(wù)來(lái)建立其他任務(wù),并且啟動(dòng)統計任務(wù)。App_TaskCreate建立了其他所有的任務(wù)。AppTaskUSerIF任務(wù)實(shí)現用戶(hù)界面,Task_CAN任務(wù)實(shí)現CAN報文接收,Task_FatFileWR任務(wù)實(shí)現FatFs文件讀寫(xiě),AppTaskKbd任務(wù)實(shí)現觸摸驅動(dòng),Clock_Update任務(wù)實(shí)現秒更新。
任務(wù)的周期性啟動(dòng)在建立任務(wù)時(shí)確定,例如AppTaskUserIF任務(wù)始終在運行,采用WM_Exec函數做界面更新。AppTaskKbd是10 ms周期讀取觸摸坐標,實(shí)現繪制鼠標箭頭和觸控功能。
信號量是在所有任務(wù)建立之前建立。CAN_MBOX是采用OSMboxCreate建立的郵箱信號量,能夠傳送CAN接收中斷的消息以啟動(dòng)CAN任務(wù),FLAGRECORD是OSFlagCreate建立的多值信號量,能置位4位,啟動(dòng)文件讀寫(xiě)任務(wù)。ClocK_SEM是OSSemCreate建立的二值信號量,專(zhuān)門(mén)用于秒更新中斷的信號量。
CAN_MBOX=OSMboxCreate((void*)0);
//建立CAN接收任務(wù)的消息郵箱
FLAGRECORD=OSFlagCreate(0,err);
//建立記錄文件的開(kāi)關(guān)量
Clock_SEM=OSSemCreate(1);
//建立秒更新中斷的信號量
在運行μC/OS之后,還可以在os_cfg.h函數中關(guān)閉OS不需要的功能模塊,以達到裁減系統、節約內存空間的目的。
2.5 μC/GUI顯示界面
需要先移植,再設計界面。移植過(guò)程可以參考其他文獻。設計界面分成兩步:第一步是寫(xiě)軟件框架,第二步是設計具體界面。每一個(gè)對話(huà)框都是用創(chuàng )建函數建立,創(chuàng )建函數會(huì )調用事先定義的資源,包括控件的形式、位置、大小、初始化值等,對話(huà)框還指定了相應的回調函數,通過(guò)回調函數操作對話(huà)框的行為,完成初始化、繪制、按鈕響應等。代碼如下:


值得注意的是,建立對話(huà)框有兩種函數,即阻塞型和非阻塞型。采用非阻塞型的對話(huà)框才能在多對話(huà)框的操作中實(shí)現同步更新。不然,當前對話(huà)框使能就會(huì )阻塞顯示其他對話(huà)框。
GUI_CreateDialogBox(); //非阻塞型
GUI_ExecDialogBox(); //阻塞型
界面設計的細化繪制工作集中在:①初始化時(shí),控件資源決定了界面的布置和美觀(guān);②在回調函數中,按鈕響應函數決定了對話(huà)框完成任務(wù)的流程。圖8所示是主節點(diǎn)運行界面的主對話(huà)框。

2.6 適配從節點(diǎn)
按照主節點(diǎn)的界面和狀態(tài)機,修改程序以適配從節點(diǎn)監控設備運行狀態(tài)的任務(wù)需求。目前設計了3種從節點(diǎn):一是采集溫度和濕度;二是采集壓力;三是標準數據采集及傳輸。從節點(diǎn)的程序結構和主節點(diǎn)是一致的,需要修改的地方有:
①CAN總線(xiàn)通信協(xié)議采用的是從節點(diǎn)的應答指令和狀態(tài)機;
②顯示界面的資源與布置需修改。對不需要的任務(wù)做屏蔽,節省資源和空間。
圖9所示為第三個(gè)從節點(diǎn)的界面。

3 系統應用
通過(guò)總線(xiàn)方式將一個(gè)主節點(diǎn)和三個(gè)從節點(diǎn)連接。主節點(diǎn)選擇500 kbps的波特率,收到從節點(diǎn)發(fā)來(lái)的狀態(tài)確認良好的消息,主節點(diǎn)的當前狀態(tài)顯示塊從黃色變成綠色。從節點(diǎn)1和節點(diǎn)2選擇數據發(fā)送間隔,按下傳輸按鈕,將溫度、濕度及壓力數值傳送給主節點(diǎn)顯示。
采樣測試中,在需要采集的時(shí)刻單擊主節點(diǎn)按鈕,從節點(diǎn)開(kāi)始采樣,進(jìn)度條運行。點(diǎn)擊“Transfer”按鈕后,從節點(diǎn)和主節點(diǎn)的傳輸進(jìn)度條走動(dòng)一致,完成傳輸后又恢復
了初值。說(shuō)明正常完成數據采集、傳輸的過(guò)程,發(fā)送的數據被完整接收。
接收完數據,主節點(diǎn)通過(guò)USB線(xiàn)連接電腦,就顯示為一個(gè)U盤(pán),其中txt文件是接收的采樣數據,文件名為記錄的實(shí)時(shí)日期和時(shí)間。
結語(yǔ)
本文設計的基于總線(xiàn)的嵌入式設備狀態(tài)監控平臺具有主、從節點(diǎn)的分層次結構??偩€(xiàn)結構可靠性高,使用數量多。從節點(diǎn)多種模式能夠適應豐富的設備健康狀態(tài)監控,且每個(gè)節點(diǎn)的界面具有交互性。嵌入式系統提供了很好的平臺,便于拓展任務(wù),本監控平臺具有很強的實(shí)用價(jià)值。
評論