引言
隨著IT技術(shù)、電子技術(shù)、通信技術(shù)、以及自動控制技術(shù)的飛速發(fā)展,對工業(yè)現(xiàn)場數(shù)據(jù)的高速實時采集就成為電子產(chǎn)品和工業(yè)控制技術(shù)發(fā)展不可避免的一個環(huán)節(jié)。
本文針對高速實時多任務(wù)數(shù)據(jù)采集中的多任務(wù)實現(xiàn)算法以及實時性、實效性和高速性的要求,提出了基于ARM9和μC/OSII操作系統(tǒng)的智能化設(shè)計方案,實現(xiàn)了任務(wù)優(yōu)先級動態(tài)調(diào)度、系統(tǒng)工作參數(shù)動態(tài)設(shè)定、系統(tǒng)內(nèi)部軟件智能化設(shè)計,針對低速外圍設(shè)備進行了系統(tǒng)優(yōu)化,并提高了系統(tǒng)可靠性改善了內(nèi)部任務(wù)同步性。
1 整體電路設(shè)計
整個采集系統(tǒng)的硬件電路如圖1所示。首先利用多路調(diào)制電路對12路信號進行調(diào)制,這部分包含相應(yīng)的信號轉(zhuǎn)換、抗干擾、以及初步的信號處理等,使得各路采集信號能夠達到ARM9內(nèi)核對信號采集的要求。經(jīng)多路選擇和ADC采樣后進入ARM9內(nèi)核。為了實現(xiàn)對整個系統(tǒng)工作狀態(tài)的實時監(jiān)視、實時控制和實時調(diào)節(jié),設(shè)置了上位機監(jiān)視器和現(xiàn)場顯示觸摸屏,將用戶所有要求顯示的信息在上位機顯示輸出或者在現(xiàn)場LCD同步顯示輸出。采樣按照采樣頻段分為高頻段(300~200 ksps)、中頻段(200~100 ksps)、和低頻段(小于100 ksps)3個頻段,每個頻段由4個外部采樣通道組成。ARM9內(nèi)核與上位機的通信利用UART和RS232轉(zhuǎn)換電路來實現(xiàn)。系統(tǒng)工作電源由統(tǒng)一的電源供給,在實現(xiàn)電壓轉(zhuǎn)換后對PC機和ARM9內(nèi)核以及相應(yīng)的工作電路提供電源支持。
圖1 數(shù)據(jù)采集系統(tǒng)硬件電路
2 系統(tǒng)總體軟件設(shè)計思路
系統(tǒng)的軟件設(shè)計原理如圖2所示。12路采集信號經(jīng)調(diào)制電路多路選擇和ADC采樣后進入各個采集任務(wù)內(nèi)部通道。每一路采集通道都設(shè)計獨立的數(shù)據(jù)采集、數(shù)據(jù)存儲、數(shù)據(jù)處理以及數(shù)據(jù)提交任務(wù)。也就是說,每一路外部采集通道都對應(yīng)一個獨立的內(nèi)部數(shù)據(jù)通道,而且本通道數(shù)據(jù)只在本通道內(nèi)進行存儲、處理和傳遞。各個內(nèi)部數(shù)據(jù)通道任務(wù)之間只有在系統(tǒng)調(diào)度時執(zhí)行時間上的先后關(guān)系、優(yōu)先級關(guān)系,沒有數(shù)據(jù)耦合關(guān)系。
圖2 系統(tǒng)軟件設(shè)計原理圖
命令掃描部分由獨立的上位機和下位機掃描任務(wù)完成對上位機監(jiān)視器和下位機觸摸屏的實時監(jiān)控,一旦檢測到用戶命令,立即將其發(fā)送給命令解析和處理任務(wù),由該任務(wù)對用戶命令進行分析處理。命令處理完后將提取的結(jié)果發(fā)送給用戶要操作的采樣通道,使之按照用戶要求運行。
各個頻段的各個通道采集任務(wù)均設(shè)置兩個數(shù)據(jù)緩沖區(qū)。雙數(shù)據(jù)緩沖區(qū)為采樣任務(wù)順利存儲提供了雙重保證,使得采樣工作一旦結(jié)束就有可用緩沖區(qū),就可立即將數(shù)據(jù)存儲而后進行下一次采集。也使得后續(xù)的數(shù)據(jù)處理任務(wù)減少數(shù)據(jù)等待時間,能迅速得到當前采樣通道需要處理的數(shù)據(jù),并在最短的時間內(nèi)處理發(fā)送給下一級任務(wù)。
采樣、數(shù)據(jù)顯示、命令掃描都涉及外圍設(shè)備,是整個系統(tǒng)所有任務(wù)里面運行速度最慢的,針對采樣任務(wù)設(shè)置雙數(shù)據(jù)緩沖區(qū)可以很大幅度地改善由于采樣速度慢而造成的系統(tǒng)速率下降問題,顯示和命令掃描部分的優(yōu)化設(shè)計將在下文中詳細說明。
3 內(nèi)部軟件調(diào)度算法
系統(tǒng)內(nèi)部各個頻段命令如圖3所示。命令掃描函數(shù)捕捉到用戶命令后,對用戶命令進行驗證、分析、提取,而后將提取結(jié)果以廣播的方式發(fā)送至各個頻段的命令等待隊列。該隊列如得到新的命令,將用戶命令發(fā)送給本隊列下轄的各個采樣任務(wù)函數(shù),用戶命令將立即得到執(zhí)行,包括通道切換、變換采樣周期、改變當前任務(wù)優(yōu)先級、顯示特定通道數(shù)據(jù)等。如沒有得到新的命令,等待超時后采樣任務(wù)按照原有方式繼續(xù)工作。這也是一種智能化設(shè)計,以很簡單的方式實現(xiàn)了按照用戶命令隨時對任何通道的查看、監(jiān)督、操作、工作狀態(tài)切換、通道切換、由單通道到所有通道并行實時采集切換等所有功能的任意切換。
圖3 各個頻段內(nèi)部命令
3.1 任務(wù)優(yōu)先級設(shè)置及采樣任務(wù)優(yōu)先級動態(tài)調(diào)度
μC/OSII操作系統(tǒng)是基于優(yōu)先級的搶占式操作系統(tǒng),所有任務(wù)必須有各自獨立且唯一的優(yōu)先級[1]。命令掃描和數(shù)據(jù)顯示分別設(shè)置為最高優(yōu)先級和最低優(yōu)先級。掃描函數(shù)的最高優(yōu)先級可以確保隨時對用戶命令進行響應(yīng),而顯示任務(wù)由于其運行速速慢,將其設(shè)置為最低優(yōu)先級。只要系統(tǒng)設(shè)計合理,適當避免低優(yōu)先級任務(wù)的饑餓現(xiàn)象,即可實現(xiàn)將用戶有效信息顯示輸出。
內(nèi)部優(yōu)先級設(shè)置規(guī)則是,低頻段、中頻段、高頻段3個頻段的任務(wù)之間優(yōu)先級依次遞減。低頻段的采樣周期明顯比高頻段長,在低頻段數(shù)據(jù)采集的空閑時間里系統(tǒng)可以順利地將CPU使用權(quán)切換給其他任務(wù),使其他任務(wù)得到CPU使用權(quán)并執(zhí)行。每個頻段內(nèi)部的各個任務(wù)的優(yōu)先級從采樣到數(shù)據(jù)存儲、數(shù)據(jù)處理、數(shù)據(jù)提交依次遞減。
為了使得整個系統(tǒng)實現(xiàn)優(yōu)先級動態(tài)調(diào)度也可以修改其他采樣參數(shù),在軟件設(shè)計時將所有頻段采樣任務(wù)的優(yōu)先級、采樣周期以全局變量的形式在進入操作系統(tǒng)之前進行設(shè)置,并將其定義為volatile格式分配獨立的變量存儲地址。而后設(shè)立獨立的掃描任務(wù),來專門完成這些參數(shù)的判斷、修改、存儲和動態(tài)更新。這樣便使得系統(tǒng)除了可以按照根據(jù)采樣周期設(shè)計的初始化優(yōu)先級和初始化參數(shù)運行外,還可以依據(jù)用戶自身需要對各個頻段、各個通道的采樣任務(wù)優(yōu)先級以及采樣頻率進行設(shè)置和修改。修改完并確認后,修改任務(wù)會保存、更新當前系統(tǒng)工作參數(shù)并退出操作系統(tǒng),而后重新啟動并初始化,整個采集系統(tǒng)將按照全新的狀態(tài)開始工作。當然,在這里用戶優(yōu)先級和采樣周期設(shè)置是受限的,必須符合上文提及的優(yōu)先級規(guī)則及各個頻段對采樣周期的要求。
3.2 任務(wù)時限設(shè)置
為了對整個系統(tǒng)的時間調(diào)度進行優(yōu)化,首先說明幾個內(nèi)部工作時間。i386體系和Linux2.5內(nèi)核中操作系統(tǒng)節(jié)拍率都設(shè)置為1000 Hz[2]。在這里將μC/OSII操作系統(tǒng)調(diào)度時間OS_TICKS_PER_SEC也設(shè)置為1000,也就是說操作系統(tǒng)的任務(wù)調(diào)度以ms為單位。ARM9內(nèi)核CPU工作頻率設(shè)置為400 MHz,即CPU機械周期以ns為單位。外設(shè)包括上位機命令掃描和上位機、下位機顯示部分工作都以s為單位。μC/OSII系統(tǒng)中任務(wù)切換、調(diào)度及延時都以系統(tǒng)節(jié)拍率為單位,而內(nèi)部代碼的運行是以機械周期為單位。內(nèi)部任務(wù)時限可以以節(jié)拍律為單位,也可以以實時時間為基準,獲得一個絕對時間差。
單個采樣任務(wù)通道內(nèi)部只有采樣任務(wù)需要時限設(shè)置。為了達到智能化,用消息隊列的等待延時替代了采樣任務(wù)時限,而該延時便是本通道的采樣周期。其他的后續(xù)任務(wù)包括內(nèi)存開辟、數(shù)據(jù)處理、數(shù)據(jù)發(fā)送,都依次等待上一級任務(wù)消息,受上一級任務(wù)鉗制不設(shè)置任務(wù)時限。顯示任務(wù)時限按ms設(shè)置為絕對時間差。
3.3 針對外設(shè)的時間優(yōu)化
針對命令掃描和解析任務(wù),將其設(shè)置為中斷方式,在檢測到有用戶命令輸入時發(fā)生中斷,在中斷里對用戶命令進行解析、分析、提取和處理。在中斷下半部分對命令進行廣播式發(fā)布,發(fā)布到各個采樣任務(wù)函數(shù)使其立即刷新執(zhí)行。因為用戶工作方式改變,命令刷新頻率并不高而且任務(wù)量不大,所以完全可以利用中斷的快速處理來實現(xiàn)這種功能。
圖4 顯示任務(wù)工作原理圖
在處理完命令掃描和采樣任務(wù)之后,影響整個系統(tǒng)性能的就剩下上位機和下位機顯示部分了。顯示任務(wù)工作原理如圖4所示,利用μC/OSII系統(tǒng)提供的消息隊列對顯示部分進行改善。分別建立兩個長度為16的消息隊列和內(nèi)存塊鏈表,數(shù)據(jù)提交任務(wù)從空閑內(nèi)存池中得到可用內(nèi)存塊之后將本任務(wù)要顯示的數(shù)據(jù)存入該內(nèi)存塊,此時該內(nèi)存就變成了帶有數(shù)據(jù)的待顯示數(shù)據(jù)塊。而后將該內(nèi)存塊的地址以消息的形式注冊在顯示消息隊列上。消息隊列的長度設(shè)置為16,雖然這里只有12個任務(wù)會發(fā)送消息給消息隊列,但在實時多任務(wù)程序中,各個任務(wù)的運行是隨機的,消息隊列在一段時間內(nèi)得到的消息個數(shù)是個不定值,所以留出4個空位作為裕度。而且設(shè)置初始值為16的計數(shù)信號量來保護消息隊列,數(shù)據(jù)提交任務(wù)在提交數(shù)據(jù)之前先檢測該信號量,如該信號量有效就可以發(fā)送信號,如信號量無效則需等待,直到有可用信號位時方可將信號發(fā)出。在外部硬件操作端,由外部發(fā)送任務(wù)將消息隊列中的消息按照固定速率發(fā)送到外部信號線上。
這樣設(shè)計,消息隊列就相當于一個緩沖區(qū),使得所有提交任務(wù)都可以向這個緩沖區(qū)發(fā)送待顯示數(shù)據(jù),有效地避免了多個任務(wù)爭用一個外圍設(shè)備而引起的死鎖、競爭冒險等問題。同時減少了任務(wù)數(shù)量,減少了任務(wù)切換的次數(shù),充分利用了系統(tǒng)時間,提高了系統(tǒng)性能。
3.4 關(guān)鍵區(qū)保護
多任務(wù)設(shè)計中每個任務(wù)在任何時刻都可能被其他任務(wù)打斷,必須充分考慮代碼的安全性、可重入性、可靠性、饑餓、互鎖、死鎖等情況。
為了避免上述情況,任務(wù)間消息發(fā)送和傳遞時以及在數(shù)據(jù)采樣時對相應(yīng)函數(shù)體進行關(guān)鍵區(qū)保護,在這些函數(shù)運行的時候禁止中斷和任務(wù)調(diào)度,以保證數(shù)據(jù)傳遞和數(shù)據(jù)采樣的絕對正確性和系統(tǒng)運行的絕對安全性。
4 極限頻率測定及總結(jié)
上位機超級終端接收到的極限頻率測試結(jié)果如圖5所示。
圖5 極限頻率測量結(jié)果
分別測試了高頻段、中頻段和低頻段的極限頻率,結(jié)果在CPU使用率80%~90%的情況下測定。該系統(tǒng)成功實現(xiàn)了智能化設(shè)計和優(yōu)先級動態(tài)調(diào)度、系統(tǒng)參數(shù)動態(tài)設(shè)置等功能,達到了設(shè)計指標。
評論
查看更多