<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 基于CAN總線的嵌入式設(shè)備狀態(tài)監(jiān)測平臺設(shè)計

          基于CAN總線的嵌入式設(shè)備狀態(tài)監(jiān)測平臺設(shè)計

          作者: 時間:2016-09-12 來源:網(wǎng)絡(luò) 收藏

          2.4 μC/OS嵌入式操作系統(tǒng)

          首先,已經(jīng)將板級支持包編寫完畢,而首先是單板運行,其次是將底層軟件用任務(wù)的方式重新編寫。在單板運行就是移植的過程,主要有:

          ①定義常量的值,聲明數(shù)據(jù)類型、堆棧參數(shù);

          ②編寫堆棧初始化參數(shù);

          ③編寫任務(wù)切換的函數(shù),還有在中斷函數(shù)中提供時鐘中斷,即給操作系統(tǒng)時鐘使用。

          移植完成之后,進行任務(wù)的編寫。分配給7個任務(wù)不同的優(yōu)先級、堆棧資源和運行方式。其中,App_TaskStart是全部任務(wù)的起始點,優(yōu)先級最高,由這個任務(wù)來建立其他任務(wù),并且啟動統(tǒng)計任務(wù)。App_TaskCreate建立了其他所有的任務(wù)。AppTaskUSerIF任務(wù)實現(xiàn)用戶界面,Task_CAN任務(wù)實現(xiàn)CAN報文接收,Task_FatFileWR任務(wù)實現(xiàn)FatFs文件讀寫,AppTaskKbd任務(wù)實現(xiàn)觸摸驅(qū)動,Clock_Update任務(wù)實現(xiàn)秒更新。

          任務(wù)的周期性啟動在建立任務(wù)時確定,例如AppTaskUserIF任務(wù)始終在運行,采用WM_Exec函數(shù)做界面更新。AppTaskKbd是10 ms周期讀取觸摸坐標,實現(xiàn)繪制鼠標箭頭和觸控功能。

          信號量是在所有任務(wù)建立之前建立。CAN_MBOX是采用OSMboxCreate建立的郵箱信號量,能夠傳送CAN接收中斷的消息以啟動CAN任務(wù),F(xiàn)LAGRECORD是OSFlagCreate建立的多值信號量,能置位4位,啟動文件讀寫任務(wù)。ClocK_SEM是OSSemCreate建立的二值信號量,專門用于秒更新中斷的信號量。

          CAN_MBOX=OSMboxCreate((void*)0);

          //建立CAN接收任務(wù)的消息郵箱

          FLAGRECORD=OSFlagCreate(0,err);

          //建立記錄文件的開關(guān)量

          Clock_SEM=OSSemCreate(1);

          //建立秒更新中斷的信號量

          在運行μC/OS之后,還可以在os_cfg.h函數(shù)中關(guān)閉OS不需要的功能模塊,以達到裁減系統(tǒng)、節(jié)約內(nèi)存空間的目的。

          2.5 μC/GUI顯示界面

          需要先移植,再設(shè)計界面。移植過程可以參考其他文獻。設(shè)計界面分成兩步:第一步是寫軟件框架,第二步是設(shè)計具體界面。每一個對話框都是用創(chuàng)建函數(shù)建立,創(chuàng)建函數(shù)會調(diào)用事先定義的資源,包括控件的形式、位置、大小、初始化值等,對話框還指定了相應(yīng)的回調(diào)函數(shù),通過回調(diào)函數(shù)操作對話框的行為,完成初始化、繪制、按鈕響應(yīng)等。代碼如下:

          基于CAN總線的嵌入式設(shè)備狀態(tài)監(jiān)測平臺設(shè)計
          基于CAN總線的嵌入式設(shè)備狀態(tài)監(jiān)測平臺設(shè)計

          值得注意的是,建立對話框有兩種函數(shù),即阻塞型和非阻塞型。采用非阻塞型的對話框才能在多對話框的操作中實現(xiàn)同步更新。不然,當前對話框使能就會阻塞顯示其他對話框。

          GUI_CreateDialogBox(); //非阻塞型

          GUI_ExecDialogBox(); //阻塞型

          界面設(shè)計的細化繪制工作集中在:①初始化時,控件資源決定了界面的布置和美觀;②在回調(diào)函數(shù)中,按鈕響應(yīng)函數(shù)決定了對話框完成任務(wù)的流程。圖8所示是主節(jié)點運行界面的主對話框。

          基于CAN總線的嵌入式設(shè)備狀態(tài)監(jiān)測平臺設(shè)計

          2.6 適配從節(jié)點

          按照主節(jié)點的界面和狀態(tài)機,修改程序以適配從節(jié)點監(jiān)控設(shè)備運行狀態(tài)的任務(wù)需求。目前設(shè)計了3種從節(jié)點:一是采集溫度和濕度;二是采集壓力;三是標準數(shù)據(jù)采集及傳輸。從節(jié)點的程序結(jié)構(gòu)和主節(jié)點是一致的,需要修改的地方有:

          通信協(xié)議采用的是從節(jié)點的應(yīng)答指令和狀態(tài)機;

          ②顯示界面的資源與布置需修改。對不需要的任務(wù)做屏蔽,節(jié)省資源和空間。

          圖9所示為第三個從節(jié)點的界面。

          基于CAN總線的嵌入式設(shè)備狀態(tài)監(jiān)測平臺設(shè)計

          3 系統(tǒng)應(yīng)用

          通過總線方式將一個主節(jié)點和三個從節(jié)點連接。主節(jié)點選擇500 kbps的波特率,收到從節(jié)點發(fā)來的狀態(tài)確認良好的消息,主節(jié)點的當前狀態(tài)顯示塊從黃色變成綠色。從節(jié)點1和節(jié)點2選擇數(shù)據(jù)發(fā)送間隔,按下傳輸按鈕,將溫度、濕度及壓力數(shù)值傳送給主節(jié)點顯示。

          采樣測試中,在需要采集的時刻單擊主節(jié)點按鈕,從節(jié)點開始采樣,進度條運行。點擊“Transfer”按鈕后,從節(jié)點和主節(jié)點的傳輸進度條走動一致,完成傳輸后又恢復

          了初值。說明正常完成數(shù)據(jù)采集、傳輸?shù)倪^程,發(fā)送的數(shù)據(jù)被完整接收。

          接收完數(shù)據(jù),主節(jié)點通過USB線連接電腦,就顯示為一個U盤,其中txt文件是接收的采樣數(shù)據(jù),文件名為記錄的實時日期和時間。

          結(jié)語

          本文設(shè)計的基于總線的嵌入式設(shè)備狀態(tài)監(jiān)控平臺具有主、從節(jié)點的分層次結(jié)構(gòu)??偩€結(jié)構(gòu)可靠性高,使用數(shù)量多。從節(jié)點多種模式能夠適應(yīng)豐富的設(shè)備健康狀態(tài)監(jiān)控,且每個節(jié)點的界面具有交互性。提供了很好的平臺,便于拓展任務(wù),本監(jiān)控平臺具有很強的實用價值。


          上一頁 1 2 下一頁

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();