Giotto軟件在實(shí)時(shí)嵌入式控制中的應用
隨著(zhù)計算機技術(shù)、控制技術(shù)、信息技術(shù)的快速發(fā)展,工業(yè)的生產(chǎn)和管理方式進(jìn)入了生產(chǎn)自動(dòng)化、控制智能化時(shí)代,特別是分布嵌入式系統的應用,更加需要標準化、實(shí)時(shí)的控制模塊和I/O功能模塊,以便系統集成,構建適應于惡劣環(huán)境的復雜分布式系統。實(shí)時(shí)嵌入式軟件模塊適合于沒(méi)計復雜的分布式系統,它支持分布的、異構設備的系統建摸和構造。嵌入式模塊的作用是提供使復雜性容易處理的結構和技術(shù),基于Giorio的嵌入式控制設汁更適合具有硬實(shí)時(shí)控制約束的應用。本文中,平臺指硬件結構、操作系統和通信協(xié)議,由CPU、傳感器、執行器和網(wǎng)絡(luò )組成。與平臺無(wú)關(guān)的事件包括應用功能和時(shí)限,與平臺相關(guān)的事件包括時(shí)序安排、通信和物理特性。
1 Giotto編程特點(diǎn)
傳統的實(shí)時(shí)嵌入式軟件設計是在抽象的數學(xué)模型基礎上,控制工程師根據對象行為和環(huán)境影響,利用求解模型的軟件工具,得到模型的功能和性能,然后交給軟件工程師針對給定的平臺寫(xiě)出代碼,并在給定的平臺上檢驗和優(yōu)化代碼,直到得出滿(mǎn)意的時(shí)間行為。在這個(gè)過(guò)程中,常常丟失了模型和代碼之間緊密的對應關(guān)系,放棄了軟件的復硝性,增加了軟件設計的復雜度,因而產(chǎn)生的軟件是弱化的,難于在不同的平臺上應用。
基于Giotto的嵌入式控制軟件設計將功能程序從特定平臺分離,將時(shí)限從功能中分離,其與平臺無(wú)關(guān)性使得它具有更好的實(shí)時(shí)性、可靠性及可復用性,更適合嵌入式實(shí)時(shí)分布系統。圖l為基于Giotto的嵌入式控制系統的設計流程圖。首先,控制工程師和軟件工程師就控制設計的功能和時(shí)限達成一致,設計一個(gè)Giotto程序;然后,軟件工程師使用Giotto編譯器產(chǎn)生一個(gè)可執行代碼,該代碼能連接Giotto運行時(shí)間庫,將程序映射到給定的平臺。Giotto運行時(shí)間庫提供一個(gè)時(shí)序安排和通信的中間層,這一層定義了Giotto可執行程序與平臺之間的接口。目前已經(jīng)建立了一個(gè)Giotto運行時(shí)間庫,用于Intel x86機上Wind River的VxWorks實(shí)時(shí)操作系統。
2 Giotto編程技術(shù)
Giotto是一種與平臺無(wú)關(guān),且在特定控制領(lǐng)域應用中具有高水平的編程語(yǔ)言。Giotto的設計用于高要求的控制應用, 這些應用要求周期性地瀆取傳感器,調用任務(wù),更新執行和模式轉換。Giotto基于時(shí)間觸發(fā)編程,從傳感器到CPU以及CPU到執行器之問(wèn)的通信由全局時(shí)鐘觸發(fā),使其具有可預報性。Giotto程序不指定與平臺相關(guān)的部分,如優(yōu)先權、通信等。其優(yōu)點(diǎn)是與具體的執行平臺無(wú)關(guān),能與任何實(shí)時(shí)操作系統、調度運算法則以及實(shí)時(shí)通信協(xié)議兼容。
Giotto的兩個(gè)核心組成部分是:周期性的任務(wù)調用和模式轉換。一個(gè)Giotto程序指定一系列的模式,每一種模式又包含一系列的任務(wù)和模式轉換。每一時(shí)刻,程序都執行在特定的模式P下,每個(gè)P模式轉換包含1個(gè)評估函數和1個(gè)目標模式Q,只有評估函數為真時(shí)系統才轉換為新模式Q。
Giotto任務(wù)是一項劇期性的工作,其輸入和輸出端幾分別在任務(wù)周期的啟動(dòng)和結束時(shí)更新,但Giotto任務(wù)不一定要在周期開(kāi)始時(shí)啟動(dòng),只需在周期內啟動(dòng)和完成。圖2(a)顯示了運行在同一個(gè)CPU上的1個(gè)40ms任務(wù)M和1個(gè)10ms任務(wù)N的時(shí)序,虛線(xiàn)為目前任務(wù)占用CPU的可能情況。在第Oms,M和N都讀取它們輸入端口的值;在第10 ms,任務(wù)N的計算結果寫(xiě)入它的輸出端口,但是N早已結束執行(如圖中虛線(xiàn)所示);在第40 ms,任務(wù)M的計算結果寫(xiě)入它的輸出端口,但任務(wù)M在第40ms之前已經(jīng)完成執行。無(wú)論任務(wù)M在0~40 ms的任何時(shí)間完成計算,任務(wù)N都只會(huì )在第40 ms讀其結果。
在Giotto中一個(gè)任務(wù)可以看作是一個(gè)工作單元,一旦開(kāi)始,就必須要完成。任務(wù)周期沒(méi)結束時(shí),模式轉換不能終止任何任務(wù)。給定一個(gè)Giotto模式P(包括分別由40 ms和10 ms調用的Giotto任務(wù)M和N)和一個(gè)Giotto模式Q(包括分別由40ms和5ms調用的Giotto任務(wù)M和R)。圖2(b)顯示了在P模式中的第10ms模式轉換被激活的時(shí)序,此時(shí)模式P轉換為模式Q。由于P和Q都包含任務(wù)M,所以任務(wù)M不會(huì )終止,但任務(wù)N被周期為5ms的任務(wù)R代替。
3 物流系統自主小車(chē)設計
2一自主小車(chē)系統包括2個(gè)自主小車(chē),每個(gè)自主小車(chē)包含一個(gè)微處理器、馬達和觸摸式傳感器。設定在任何時(shí)候只有一個(gè)自主小車(chē)是領(lǐng)導者,而其他自主小車(chē)是跟隨者。其中,處于領(lǐng)導或避開(kāi)狀態(tài)的自主小車(chē)稱(chēng)為“領(lǐng)導者”,處于跟隨或停止狀態(tài)的自主小車(chē)稱(chēng)為“跟隨者”。當領(lǐng)導者被阻礙時(shí),領(lǐng)導者進(jìn)入避開(kāi)狀態(tài),跟隨者進(jìn)入停止狀態(tài)。進(jìn)入避開(kāi)狀態(tài)的自主小車(chē)執行一段避開(kāi)程序,以避開(kāi)障礙物,此時(shí)處于停止狀態(tài)的自主小車(chē)仍停止;當領(lǐng)導者完成避開(kāi)程序返回到領(lǐng)導狀態(tài)時(shí),跟隨者返回跟隨狀態(tài)。當跟隨者之一被阻礙時(shí),該自主小車(chē)進(jìn)入避開(kāi)狀態(tài),其他所有的自主小車(chē)進(jìn)入停止狀態(tài),被阻礙的這個(gè)自主小車(chē)成為新的領(lǐng)導者。圖3顯示了2一自主小車(chē)系統的狀態(tài)行為。
由于自主小車(chē)處于領(lǐng)導或避開(kāi)狀態(tài)時(shí)其他自主小車(chē)處于跟隨或停止狀態(tài),因此對每一個(gè)領(lǐng)導者X使用1個(gè)LeildXFollow模式和1個(gè)EvadeXStop模式。其中,處于LeadlFollow模式時(shí),自主小車(chē)l是領(lǐng)導者;處于Evadelstop模式時(shí),自主小車(chē)l執行避開(kāi)程序。另外,為每個(gè)自主小車(chē)X引入一個(gè)stopX模式,它允許自主小車(chē)快速停止。runCom1任務(wù)每40 ms運行一次存儲于輸出端口 command中的命令。兩個(gè)Giotto任務(wù)rrailerCtrl和trailerCtr2具有lOms的周期,它們根據command中的命令控制兩個(gè)自主小車(chē)的馬達;command中的數據由任務(wù)驅動(dòng)trailerDrv傳送到任務(wù)trailerCtrl和trailerCtr2的輸入端口。
系統分別對自主小車(chē)l和2的傳感器不斷地進(jìn)行檢測。當自主小車(chē)1被阻礙時(shí),系統轉換到stopl模式。兩個(gè)自主小車(chē)都停止移動(dòng);完成stopl模式之后系統轉換為EvadelStop模式.此時(shí)自主小車(chē)l執行 避開(kāi)程序而自主小車(chē)2停止不動(dòng)。類(lèi)似地,當自主小車(chē)2被阻礙時(shí),自主小車(chē)2經(jīng)過(guò)stop2模式后轉換到Evade2Stop模式。在EvadelStop模式下,Evadel任務(wù)每一周期計算一次避開(kāi)動(dòng)作是否完成以及避開(kāi)的下一步動(dòng)作;具有10ms周期的任務(wù)trailerCtrl根據command中避開(kāi)的步驟去控制自主小車(chē)1的馬達,一旦完成避開(kāi)動(dòng)作,就轉換為L(cháng)eadlFollow模式。
圖4為系統從LeadlFollow模式到stopl模式,EvadelStop模式和LeadlFollow模式的模式轉換時(shí)序圖。到stopl模式的轉換發(fā)生在LeadlFollow模式下的第60 ms,自主小車(chē)l的傳感器檢測到障礙,系統由LeadlFollow模式轉換為stopl模式.兩個(gè)自主小車(chē)執行停止程序;完成stopl模式后,在第80 ms系統轉換為另外一個(gè)模式EvadelStop,自主小車(chē)1的控任務(wù)立刻被調用,自主小車(chē)l執行避開(kāi)程序,此時(shí)自主小車(chē)2仍停止;當自主小車(chē)1完成避開(kāi)動(dòng)作后,在第110ms,兩個(gè)自主小車(chē)的控制任務(wù)立刻被調用,系統轉換為L(cháng)eadlFollow模式。當自主小車(chē)2是領(lǐng)導者時(shí),其模式轉換類(lèi)似。
4 結論
在基于Giotto的嵌入式控制設計中,時(shí)序程序與功能程序的分離,使Giotto程序與具體的運行平臺無(wú)關(guān),從而提高了程序的健壯性、穩定性及代碼的復用性。Giotto系統中任務(wù)的調用和環(huán)境變量的檢測由全局時(shí)鐘觸發(fā),其時(shí)間行為具有高度可預報性,使得Giotto非常適合具有硬實(shí)時(shí)約束的嵌入式控制系統。
評論