《基于VxWorks嵌入式系統(tǒng)的數(shù)據(jù)通信》課件第9章_第1頁
《基于VxWorks嵌入式系統(tǒng)的數(shù)據(jù)通信》課件第9章_第2頁
《基于VxWorks嵌入式系統(tǒng)的數(shù)據(jù)通信》課件第9章_第3頁
《基于VxWorks嵌入式系統(tǒng)的數(shù)據(jù)通信》課件第9章_第4頁
《基于VxWorks嵌入式系統(tǒng)的數(shù)據(jù)通信》課件第9章_第5頁
已閱讀5頁,還剩85頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

第9章VxWorks操作系統(tǒng)應(yīng)用實(shí)例9.1系統(tǒng)整體構(gòu)架9.2系統(tǒng)關(guān)鍵技術(shù)的實(shí)現(xiàn)9.3數(shù)據(jù)通信與控制系統(tǒng)的軟件設(shè)計(jì)方案9.4本章小結(jié)本章介紹了一種基于VxWorks的數(shù)據(jù)通信與控制系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn),以指導(dǎo)讀者熟悉VxWorks操作系統(tǒng)的開發(fā)流程并能夠進(jìn)行相應(yīng)的系統(tǒng)設(shè)計(jì)。9.1系統(tǒng)整體構(gòu)架本系統(tǒng)主要完成大型設(shè)備電氣負(fù)載的供電控制和保護(hù),稱之為ELMC,即電氣負(fù)載管理中心。ELMC根據(jù)上位機(jī)指令控制固態(tài)功率控制器(SSPC)接通或斷開負(fù)載供電,同時具有負(fù)載保護(hù)功能。系統(tǒng)通過ARINC-429總線與上位機(jī)(PSP)通信,完成自身與各SSPC配置、控制和狀態(tài)信息的傳遞,同時對臨近供電設(shè)備狀態(tài)進(jìn)行監(jiān)控,對各路負(fù)載及交直流匯流條進(jìn)行控制。另外,ELMC采集各種模擬量及離散量以進(jìn)行相應(yīng)的處理,系統(tǒng)原理框圖如圖9.1所示。圖9.1系統(tǒng)原理框圖

ELMC的基本功能分析如下。

1.?ELMC通過ARINC-429總線與PSP通信

(1)?ELMC從PSP接收指令,包括SSPC的供電請求指令、SSPC的狀態(tài)請求指令、SSPC的控制指令、SSPC的超控控制指令、向ELMC發(fā)送各路模擬量和離散量的請求指令、向ELMC發(fā)送故障信息請求的指令和額定電流請求指令。

(2)?ELMC發(fā)送狀態(tài)信息給PSP,包括匯流條電壓(AC、DC)、SSPC的輸出電流及狀態(tài)數(shù)據(jù)、各通道額定電流值、各路模擬量和離散量數(shù)據(jù)、負(fù)載額定電流、SSPC故障信息(包括故障時刻、故障時刻電流值等)。

2.?ELMC對SSPC的控制

(1)?ELMC向各個SSPC陣列板發(fā)送電流和狀態(tài)數(shù)據(jù)請求命令,并根據(jù)SSPC所上傳的信息進(jìn)行判斷與濾波處理,以達(dá)到系統(tǒng)所規(guī)定的精度要求。

(2)?ELMC根據(jù)PSP的指令向各個SSPC陣列板發(fā)送控制負(fù)載的命令,同時按照指令系統(tǒng)要求和負(fù)載方程分析后,控制相應(yīng)SSPC動作,檢測SSPC的動作效果,并及時將相關(guān)信息反饋給PSP,以做進(jìn)一步的判斷和控制。

3.?ELMC對分布式電力匯流條的檢測與控制

(1)?ELMC根據(jù)PSP的指令控制繼電器。

(2)ELMC向模擬量模塊發(fā)送取狀態(tài)數(shù)據(jù)命令:2路直流匯流條和1路三相交流匯流條的狀態(tài)數(shù)據(jù)。

(3)ELMC接收并處理來自模擬量模塊的狀態(tài)數(shù)據(jù):2路直流匯流條和1路三相交流匯流條的狀態(tài)數(shù)據(jù)。

4.?ELMC的自檢測功能(BIT)

BIT功能主要完成對ELMC硬件的功能測試,主要檢測內(nèi)容包括CPU測試、RAM讀/寫測試、ROM代碼和測試、定時器測試、中斷控制器測試、內(nèi)部電源測試、模擬量輸入電路測試、離散量輸入/輸出測試、串行數(shù)字通信接口回繞測試。BIT測試的形式主要有以下三種:

(1)上電BIT,要求ELMC系統(tǒng)上電后,在完成硬件初始化后進(jìn)行系統(tǒng)硬件BIT測試。在系統(tǒng)硬件BIT支持電路的配合下,完成對系統(tǒng)硬件電路功能的測試。由于兩種方式下要求的測試時間不同,故測試內(nèi)容也不同。

(2)周期BIT,是系統(tǒng)在正常方式下,以后臺任務(wù)方式運(yùn)行的周期性測試。周期BIT的運(yùn)行不影響系統(tǒng)的正常工作。

(3)維護(hù)BIT,當(dāng)ELMC從上位機(jī)接收到維護(hù)自檢測命令時,進(jìn)行ELMC自身的檢測工作。

5.?ELMC的故障存儲功能要求ELMC應(yīng)同時自動存儲至少10個SSPC故障跳閘點(diǎn)及復(fù)位點(diǎn)時刻前10秒至后1分鐘內(nèi)的所有數(shù)據(jù),包括故障時刻、故障時刻電流值、SSPC控制命令、SSPC開關(guān)狀態(tài)等。

6.?ELMC系統(tǒng)的啟動要求要求ELMC具有兩種啟動功能,即熱啟動和冷啟動。熱啟動要求能保持熱啟動前一時刻的原狀態(tài)供電控制,啟動時間小于50ms,熱啟動不進(jìn)行上電BIT檢測。冷啟動要求進(jìn)行上電BIT檢測,SSPC初始狀態(tài)為全部斷開,接收控制命令后按命令要求控制接通SSPC。9.1.1系統(tǒng)的工作原理

ELMC數(shù)據(jù)通信及控制系統(tǒng)中,供電系統(tǒng)處理機(jī)由工控機(jī)來模擬其功能,它也是該系統(tǒng)的上位機(jī),整個系統(tǒng)的原理框圖如圖9.2所示。從圖9.2中可以看出,ELMC系統(tǒng)與上位機(jī)通過ARINC-429總線進(jìn)行通信,與各SSPC陣列板的通信采用RS-422串口通信標(biāo)準(zhǔn)。ELMC系統(tǒng)負(fù)責(zé)管理5個SSPC板卡,包括4塊直流SSPC板卡和1塊交流SSPC板卡。其中,4塊直流SSPC板卡分別管理9、8、8、8路負(fù)載,交流SSPC板卡管理7路負(fù)載,總共包括40路負(fù)載,同時采用離散量信號對每塊SSPC板上的兩路關(guān)鍵負(fù)載進(jìn)行超控。系統(tǒng)內(nèi)部通過I/O采集卡與I/O基板進(jìn)行通信,包括采集8路28VDC模擬量、8路28V/開離散量和8路地/開離散量。圖9.2系統(tǒng)原理框圖9.1.2系統(tǒng)的方案設(shè)計(jì)根據(jù)本系統(tǒng)的原理,硬件平臺搭建分為以下五個模塊:CPU模塊、電源模塊、通信單元、模擬量/離散量采集單元和SSPC控制部分,如圖9.3所示。

CPU模塊主要包括了系統(tǒng)電源、數(shù)據(jù)存儲區(qū)、微處理器、時鐘電路、軟硬件復(fù)位電路、上電復(fù)位電路和下載調(diào)試電路等。模擬量/離散量采集單元:由I/O基板提供8路28VDC模擬量和8路28V/開、8路地/開離散量,其中模擬量輸入信號通過AD574ASE轉(zhuǎn)換成數(shù)字信號后再送入微處理器進(jìn)行相應(yīng)處理。圖9.3硬件平臺構(gòu)成框圖通信單元包括1個以太網(wǎng)接口、1個RS-232接口、2個ARINC-429接口和8個RS-422接口。其中以太網(wǎng)接口用于ELMC通信軟件的下載和調(diào)試,RS-232接口用于將ELMC軟件固化于Flash中。2個ARINC-429接口中,一個為主接口,處于工作狀態(tài);一個為備份接口,處于監(jiān)控狀態(tài)。5個RS-422接口則用于5個SSPC的通信與控制。

SSPC控制部分是ELMC中僅次于CPU模塊的智能控制模塊,它包括對4個直流SSPC和1個交流SSPC的所有狀態(tài)量的檢測和控制,且每塊SSPC板上有一塊CCB(通信控制板)控制子板,與CPU的通信由每塊SSPC板上的CCB控制子板完成,CCB板同時還完成電流檢測數(shù)據(jù)采集。為實(shí)現(xiàn)系統(tǒng)的功能,針對本系統(tǒng)在配電系統(tǒng)的重要性以及對實(shí)時性和可靠性的要求,系統(tǒng)設(shè)計(jì)采用I/O基板+(PowerPC8245)PMC子卡的形式。這種設(shè)計(jì)是基于對系統(tǒng)進(jìn)行余度處理的考慮,能夠有效地提高系統(tǒng)的可靠性。PMC和上位機(jī)之間的通信采用主從備份的雙通信通道,通過對通信信息的比對保證通信的可靠性。通信總線協(xié)議采用ARINC-429,包含2路(2發(fā)4收)ARINC-429接口。

PMC子卡有兩個ARINC-429通信通道接口,一路為主通道,另一路為備份通道。兩個通道都負(fù)責(zé)接收上位機(jī)的控制命令信息,但是其中一個接收通道設(shè)置為自檢通道。自檢通道主要檢測接收信息的正確性,系統(tǒng)啟動時,其中一個接口為主工作狀態(tài),接收上位機(jī)命令,并向上位機(jī)反饋SSPC陣列板的各種狀態(tài)信息;另一個接口為備份接口,處于監(jiān)控狀態(tài),只接收上位機(jī)命令,并不向上位機(jī)反饋SSPC陣列板的各種狀態(tài)信息,實(shí)時對上位機(jī)的控制命令進(jìn)行比對,在主通信接口自檢出錯的情況下,實(shí)時接管控制權(quán),由備份通道轉(zhuǎn)為主通道,使通信的余度處理得以保證,時刻都有一個通信通道暢通,且通信信息準(zhǔn)確無誤,從而保證了上位機(jī)與PMC子卡間的通信可靠性。9.2系統(tǒng)關(guān)鍵技術(shù)的實(shí)現(xiàn)9.2.1通信協(xié)議的設(shè)計(jì)

1.系統(tǒng)與上位機(jī)(PSP)間的通信協(xié)議按照ELMC系統(tǒng)的要求,系統(tǒng)與上位機(jī)間通過ARINC-429總線進(jìn)行通信。ARINC-429總線速率為100kb/s,每次傳輸?shù)臄?shù)據(jù)字為32位,傳輸時間為0.32ms。由于429芯片接收緩沖區(qū)只有32位,數(shù)據(jù)到達(dá)后不及時取走,則下次數(shù)據(jù)到達(dá)后會自動替代前一次數(shù)據(jù),造成數(shù)據(jù)丟失。因此429數(shù)據(jù)發(fā)送/接收每兩個數(shù)據(jù)字之間應(yīng)有一定間隔(由429芯片設(shè)定,默認(rèn)為不小于8個比特),以保證數(shù)據(jù)傳輸?shù)目煽啃浴?/p>

ELMC采取應(yīng)答方式與PSP通信,每個數(shù)據(jù)幀ELMC響應(yīng)時間不超過10ms,PSP在50ms內(nèi)未收到對應(yīng)ELMC數(shù)據(jù),則跳過此ELMC數(shù)據(jù),在下一個數(shù)據(jù)循環(huán)中再次讀取,若3個循環(huán)連續(xù)沒有收到ELMC數(shù)據(jù),則認(rèn)為通信故障。下面將對該串行口通信鏈路的有關(guān)協(xié)議內(nèi)容進(jìn)行詳細(xì)說明。

1)信息傳輸內(nèi)容系統(tǒng)與上位機(jī)之間需要傳輸?shù)男畔ǎ?/p>

(1)控制信息:SSPC板的關(guān)/斷、CPU的超控控制。

(2)狀態(tài)信息:SSPC板的狀態(tài)。

(3)數(shù)據(jù)采集信息:SSPC電流采集、SSPC當(dāng)前額定電流采集、模擬量輸入數(shù)據(jù)采集、離散量輸入數(shù)據(jù)采集、BIT結(jié)果。

2)鏈路消息

ARINC-429總線上的鏈路消息分為兩類,即應(yīng)用消息和管理消息。其中,應(yīng)用消息又包括PSP的請求信息和ELMC的上傳信息。管理消息均為應(yīng)答信息。具體定義如圖9.4所示。從圖9.4可以看出,上位機(jī)向系統(tǒng)發(fā)送的請求信息主要有6種,分別為獲取SSPC電流請求信息、獲取模擬量及離散量請求信息、控制電源關(guān)斷信息、獲取ELMC的BIT結(jié)果信息、在線修改額定電流請求信息和SSPC接通請求信息。上傳信息為系統(tǒng)對上位機(jī)請求信息的回應(yīng),共3種,分別為SSPC電流上傳信息、模擬量和離散量上傳信息以及ELMC的BIT結(jié)果上傳信息。圖9.4ARINC-429總線上的鏈路消息劃分圖有關(guān)請求信息和上傳信息的具體協(xié)議內(nèi)容如下:

(1)請求信息(PSP發(fā)送給系統(tǒng)的指令)。PSP的所有請求信息每幀均包括6個429數(shù)據(jù)字,包括起始字、控制碼、系統(tǒng)狀態(tài)數(shù)據(jù)、備份字和校驗(yàn)字。起始字均為統(tǒng)一規(guī)定,控制碼用于區(qū)分指令類型,備份字當(dāng)無具體應(yīng)用時用0x00填充,校驗(yàn)字采用CRC校驗(yàn)。由于ARINC-429總線的傳輸速率為100kb/s,且兩個相鄰的429之間應(yīng)至少留有8ms的時間間隔,因此一個PSP數(shù)據(jù)幀在鏈路上的傳輸時間為2.4ms。PSP數(shù)據(jù)幀格式定義如表9.1所示,當(dāng)命令字有效長度小于6時,用0x00填充空余字。表中1個字表示429標(biāo)準(zhǔn)格式中第14~29位,長度為16位。表9.1PSP數(shù)據(jù)幀格式每個PSP數(shù)據(jù)字為一個429數(shù)據(jù)字,共32位。每個數(shù)據(jù)字的第1~8位為標(biāo)志位,取0x20表示ELMC系統(tǒng)。第9~13位取0x00~0011用于區(qū)分ELMC系統(tǒng)的4個設(shè)備號。第14~21位為控制碼1,第22~29位為控制碼2??刂拼a1用于區(qū)分請求信息的具體類型,控制碼2則用于請求信息類型的進(jìn)一步劃分。第30、31位為狀態(tài)位,第32位表示校驗(yàn)位,本系統(tǒng)設(shè)計(jì)中采用奇校驗(yàn)。PSP數(shù)據(jù)字格式如表9.2所示。表9.2PSP數(shù)據(jù)字格式

(2)上傳信息(系統(tǒng)響應(yīng)PSP的信息)。系統(tǒng)所有響應(yīng)PSP的信息每幀包括26個429數(shù)據(jù)字,包括起始字、接收的控制碼、SSPC狀態(tài)字、周期bit的結(jié)果、數(shù)據(jù)字、備用字和校驗(yàn)字。起始字為統(tǒng)一規(guī)定,接收的控制碼表示此數(shù)據(jù)幀所對應(yīng)的PSP指令類型,SSPC狀態(tài)字則表示所有SSPC陣列板上各路負(fù)載的狀態(tài)值,每路狀態(tài)用4位表示,總共40路。周期bit結(jié)果需實(shí)時上傳,因此在ELMC響應(yīng)PSP的每一幀里均應(yīng)填寫進(jìn)去。數(shù)據(jù)字則表示對應(yīng)于該控制類型的信息碼,若某些控制類型的信息碼較少,填不滿10個429數(shù)據(jù)字,則用零填充空白字。備用字用于信息碼較多時的情況,校驗(yàn)字采用CRC校驗(yàn)。每個ELMC數(shù)據(jù)幀在鏈路上傳輸時間約為26?×?0.4?=?10.4ms。ELMC發(fā)送一幀完整的數(shù)據(jù)幀格式如表9.3所示,當(dāng)數(shù)據(jù)幀有效長度小于26時,用0x00填充空余字。表中1個字表示429標(biāo)準(zhǔn)格式中的第14~29位,長度為16位。表9.3ELMC數(shù)據(jù)幀格式每個ELMC數(shù)據(jù)字為一個429數(shù)據(jù)字,共32位。每個數(shù)據(jù)字的第1~8位為標(biāo)志位,取0x10代表ELMC系統(tǒng)。第9~13位取0x00代表ELMC系統(tǒng)的1個設(shè)備號。第14~29位為信息碼,用于各種ELMC需上傳給PSP的數(shù)據(jù)。第30、31位為狀態(tài)位,第32位為校驗(yàn)位,本系統(tǒng)中采用奇校驗(yàn)。ELMC數(shù)據(jù)字格式如表9.4所示。表9.4ELMC數(shù)據(jù)字格式

(3)信息傳輸機(jī)制。為了保證信息在鏈路上的正確、可靠傳輸,對鏈路上信息的傳輸機(jī)制進(jìn)行以下約定:①系統(tǒng)對任何消息正確接收和識別后,按照規(guī)定的信息傳輸機(jī)制進(jìn)行應(yīng)答,即對通信測試消息以測試應(yīng)答消息應(yīng)答,對其他消息以應(yīng)答確認(rèn)消息應(yīng)答。②系統(tǒng)對任何消息不能正確接收或識別時,均以不確認(rèn)消息進(jìn)行應(yīng)答。③開機(jī)后上位機(jī)執(zhí)行鏈路建立操作,即進(jìn)行通信測試,通信測試正確后即確認(rèn)為鏈路建立。④對于任何指令消息,上位機(jī)必須保證ELMC正確地接收到了,如果ELMC不回應(yīng)或者回應(yīng)以不確認(rèn)消息,則上位機(jī)必須重新進(jìn)行指令傳送,除非確認(rèn)鏈路故障。

2.系統(tǒng)與SSPC間的通信協(xié)議根據(jù)ELMC系統(tǒng)的要求,系統(tǒng)與5個SSPC陣列板間設(shè)有5條串行口通信鏈路,采用RS-422串行通信標(biāo)準(zhǔn),用以傳輸相關(guān)命令信息,通信速率為38400Hz。采用全雙工通信方式,ELMC系統(tǒng)為主方,SSPC為從方。SSPC板接收來自CPU的命令信息并根據(jù)命令信息控制某路的開通或斷開,或者是上傳SSPC板所有路數(shù)的電流和狀態(tài)信息。字節(jié)是該鏈路上信息傳輸?shù)幕締挝唬總€傳送的字節(jié)都包括11個位,按傳輸先后順序依次為:1個起始位、8個數(shù)據(jù)位(低位在前)、1個校驗(yàn)位、1個停止位。其中起始位為邏輯0,停止位為邏輯1,它們僅用于字節(jié)傳輸?shù)目刂?;校?yàn)位用于字節(jié)內(nèi)的位校驗(yàn),采用奇校驗(yàn);8個數(shù)據(jù)位為字節(jié)內(nèi)的有效信息,如表9.5所示。表9.5鏈路上字節(jié)定義圖

1)信息傳輸內(nèi)容串行口上需要傳輸?shù)男畔⒅饕ǎ篠SPC板的關(guān)/斷;狀態(tài)及電流值采集信息;修改額定電流信息。

2)鏈路消息

RS-422串行口上的鏈路消息分為應(yīng)用消息和管理消息。應(yīng)用消息主要有3種,分別為SSPC電流值和狀態(tài)請求信息、SSPC電流值和狀態(tài)上傳信息以及額定電流值修改信息,如圖9.5所示。圖9.5RS-422鏈路消息劃分有關(guān)應(yīng)用消息的具體協(xié)議內(nèi)容如下:

(1)電流值和狀態(tài)請求信息,為系統(tǒng)發(fā)送給SSPC板的請求命令,它包括2個字節(jié),第1個字節(jié)為信息頭,內(nèi)容為B1H;第2個字節(jié)表示狀態(tài)電流的請求類型。

(2)電流值和狀態(tài)上傳信息,為SSPC反饋給系統(tǒng)的上傳信息,它包括24個字節(jié)。第1個字節(jié)為信息頭,內(nèi)容為C0H;第2個字節(jié)表示上傳的路數(shù);第3~22字節(jié)表示要上傳的狀態(tài)和電流值;第23個字節(jié)表示校驗(yàn)字,采用CRC校驗(yàn);第24個字節(jié)表示信息尾,內(nèi)容為C1H。

(3)額定電流值修改信息,為SSPC反饋給系統(tǒng)的上傳信息,它包括93個字節(jié)。第1個字節(jié)為信息頭,內(nèi)容為FFH;第2~91字節(jié)表示額定電流值,每路包括5個電壓值,分別為額定電壓的1、2、4、8倍,每個額定值用兩個字節(jié)表示,高4位填充為1;第92個字節(jié)表示校驗(yàn)字,采用CRC校驗(yàn)。管理消息的具體協(xié)議內(nèi)容如下:

(1)SSPC板控制信息,為系統(tǒng)對SSPC的開通/關(guān)斷控制命令,它包括3個字節(jié)。第1個字節(jié)為信息頭,內(nèi)容為B0H;第2個字節(jié)中的高四位表示控制的具體路數(shù),低四位表示輸入的控制信號類型(開通/關(guān)斷);第3個字節(jié)為校驗(yàn)字。

(2)控制信息應(yīng)答確認(rèn)/不確認(rèn)信息,都只包括1個字節(jié)。其中應(yīng)答確認(rèn)內(nèi)容為58H,應(yīng)答不確認(rèn)內(nèi)容為59H。

(3)額定電流應(yīng)答確認(rèn)/不確認(rèn)信息,都只包括1個字節(jié)。其中應(yīng)答確認(rèn)內(nèi)容為A8H,應(yīng)答不確認(rèn)內(nèi)容為A9H。

3)信息傳輸機(jī)制為保證信息在鏈路上的可靠傳輸,對該鏈路上信息的傳輸機(jī)制進(jìn)行以下規(guī)定:

(1)?SSPC對任何消息正確地接收和識別后,以應(yīng)答確認(rèn)消息應(yīng)答。

(2)?SSPC對任何消息不能正確接收或識別時,均以應(yīng)答不確認(rèn)消息應(yīng)答。

(3)對于任何指令消息,系統(tǒng)必須保證SSPC正確地接收到了,如果SSPC不回應(yīng)或者以應(yīng)答不確認(rèn)消息回應(yīng),則系統(tǒng)必須重新發(fā)送指令,除非確認(rèn)鏈路故障。

(4)系統(tǒng)啟動后需執(zhí)行鏈路建立操作,即進(jìn)行通信測試,測試正確后即認(rèn)為鏈路建立。在正常的信息通信過程中,若SSPC對系統(tǒng)的同一消息連續(xù)三次發(fā)送嘗試均不能正確應(yīng)答,則認(rèn)為鏈路故障。

(5)任何一次通信都是以SSPC的應(yīng)答方式結(jié)束,除非SSPC不能進(jìn)行應(yīng)答(例如鏈路故障)。9.2.2系統(tǒng)健壯性設(shè)計(jì)為了提高系統(tǒng)的可靠性,必須進(jìn)行相應(yīng)的系統(tǒng)健壯性設(shè)計(jì),以提高系統(tǒng)應(yīng)對和處理異常情況的能力。本系統(tǒng)設(shè)計(jì)中主要從以下兩個方面進(jìn)行系統(tǒng)健壯性設(shè)計(jì)。

1)看門狗復(fù)位技術(shù)系統(tǒng)在工作時會受到外界電磁場的干擾而造成程序“跑飛”現(xiàn)象,陷入死循環(huán),程序的正常運(yùn)行被打斷,系統(tǒng)無法正常工作,這樣會造成整個系統(tǒng)陷入停滯狀態(tài),發(fā)生不可預(yù)料的后果。因此通常采用軟件監(jiān)視技術(shù),俗稱“看門狗”技術(shù)進(jìn)行防范??撮T狗技術(shù)就是不斷監(jiān)視程序循環(huán)運(yùn)行時間,若發(fā)現(xiàn)時間超過已知的循環(huán)設(shè)定時間,則認(rèn)為系統(tǒng)陷入了“死循環(huán)”,隨后強(qiáng)迫程序返回至入口處,執(zhí)行看門狗中斷服務(wù)程序,使程序運(yùn)行納入正軌。在本系統(tǒng)中,有關(guān)看門狗的程序主要包括看門狗的初始化及中斷掛接、使能看門狗、看門狗中斷服務(wù)程序、禁止看門狗這四個方面。系統(tǒng)上電后,先進(jìn)行看門狗的初始化操作并掛接定時中斷,當(dāng)周期任務(wù)啟動后,使能看門狗,定時器開始計(jì)數(shù),每一次周期任務(wù)完畢后,復(fù)位看門狗定時器,若發(fā)現(xiàn)定時器溢出,表明該任務(wù)可能陷入死循環(huán),此時將啟動看門狗中斷服務(wù)程序,程序復(fù)位,系統(tǒng)恢復(fù)正常運(yùn)行。看門狗的程序流程如圖9.6所示。圖9.6看門狗程序流程圖

2)故障存儲技術(shù)在系統(tǒng)運(yùn)行過程中,可能出現(xiàn)電源失效、通信故障、電路跳閘等問題,針對此問題軟件的主要解決方法為:CPU將定期保存重要關(guān)鍵信息于非易失存儲器ROM中,當(dāng)出現(xiàn)突發(fā)問題時,操作員可在系統(tǒng)恢復(fù)正常后調(diào)出ROM中的關(guān)鍵數(shù)據(jù)進(jìn)行分析以判定故障所在。具體解決方案為:在隨機(jī)存儲器RAM中先實(shí)時存儲10s內(nèi)的系統(tǒng)數(shù)據(jù),當(dāng)確定故障跳閘點(diǎn)及復(fù)位點(diǎn)后,將RAM中的數(shù)據(jù)全部移入非易失存儲器ROM中,并在接下來的任務(wù)中持續(xù)記錄1min的系統(tǒng)數(shù)據(jù),按時間順序存儲于ROM中。在具體的程序中,將分別為5塊SSPC板共40路劃分40塊環(huán)形存儲區(qū)用于存儲10s數(shù)據(jù),并且數(shù)據(jù)實(shí)時更新。在確認(rèn)故障點(diǎn)后,將在ROM中依時間順序存放系統(tǒng)數(shù)據(jù)。ROM存滿后,將在下次存放之前擦除最早存入的一部分?jǐn)?shù)據(jù)。9.3數(shù)據(jù)通信與控制系統(tǒng)的軟件設(shè)計(jì)方案嵌入式實(shí)時多任務(wù)操作系統(tǒng)軟件的開發(fā)流程如圖9.7所示。與一般的基于通用操作系統(tǒng)的軟件開發(fā)相比,嵌入式操作系統(tǒng)軟件開發(fā)的特殊點(diǎn)在于有關(guān)系統(tǒng)任務(wù)劃分、多任務(wù)調(diào)度和任務(wù)間通信的設(shè)計(jì)等方面,這是嵌入式多任務(wù)操作系統(tǒng)的優(yōu)勢以及關(guān)鍵所在。

VxWorks是一種功能強(qiáng)大的實(shí)時多任務(wù)操作系統(tǒng)(RTOS),它為用戶提供了大量的系統(tǒng)調(diào)用以及豐富的接口。在本系統(tǒng)的軟件設(shè)計(jì)中首先應(yīng)該考慮解決和處理下面幾個問題。圖9.7嵌入式多任務(wù)系統(tǒng)軟件開發(fā)流程9.3.1軟件設(shè)計(jì)需注意的問題

1.任務(wù)劃分合理任務(wù)的劃分應(yīng)遵循以下幾點(diǎn):

(1)功能集中。對于功能聯(lián)系較緊密的工作可以作為一個任務(wù)來運(yùn)行,但如果都以一個任務(wù)來進(jìn)行相互間的消息通信,會影響系統(tǒng)效率,所以可在任務(wù)中安排一個個獨(dú)立的模塊來完成。

(2)時間緊迫性。對于實(shí)時性要求較高的任務(wù),應(yīng)分配較高優(yōu)先級,這樣可以確保事件的實(shí)時響應(yīng)。

(3)周期執(zhí)行原則。對于一個需周期性執(zhí)行的工作,應(yīng)作為一個任務(wù)來運(yùn)行,通過定時器以一定時間間隔激活任務(wù)。

2.防死鎖、饑餓和優(yōu)先級翻轉(zhuǎn)在進(jìn)行實(shí)時應(yīng)用軟件設(shè)計(jì)時,必須注意防止死鎖和饑餓。死鎖指的是兩個或兩個以上的進(jìn)程在執(zhí)行過程中,因爭奪資源而造成的一種互相等待的現(xiàn)象。若無外力作用,它們都將無法推進(jìn)下去。在軟件設(shè)計(jì)時應(yīng)盡量使互斥資源在相同優(yōu)先級的任務(wù)中使用,若必須在不同優(yōu)先級的任務(wù)中使用,則要注意對死鎖的解鎖處理。饑餓則是指優(yōu)先級較低的任務(wù)因長期得不到系統(tǒng)資源而無法運(yùn)行。產(chǎn)生饑餓的主要原因是優(yōu)先級較高的任務(wù)調(diào)度過于頻繁。合理地分配任務(wù)優(yōu)先級和進(jìn)行任務(wù)調(diào)度是解決饑餓的最好途徑。任務(wù)的優(yōu)先級翻轉(zhuǎn)是許多實(shí)時多任務(wù)操作系統(tǒng)的棘手問題,它是指高優(yōu)先級任務(wù)因等待低優(yōu)先級任務(wù)占用的互斥資源而被較低優(yōu)先級的任務(wù)不斷搶占的情況。在操作系統(tǒng)未提供保護(hù)的情況下,往往需要編程人員在編程時注意避免優(yōu)先級翻轉(zhuǎn)的情況發(fā)生(如在同一優(yōu)先級內(nèi)使用互斥資源),或采取相應(yīng)的手段進(jìn)行處理(如動態(tài)地進(jìn)行優(yōu)先級提升)。

VxWorks提供了一種防止優(yōu)先級翻轉(zhuǎn)的保護(hù)機(jī)制:使用優(yōu)先級繼承算法。

3.函數(shù)的可重入性函數(shù)的可重入性在一個多任務(wù)環(huán)境下是很重要的??芍厝牒瘮?shù)可以由多個任務(wù)并發(fā)使用,而不必?fù)?dān)心數(shù)據(jù)錯誤??芍厝牒瘮?shù)可以在任意時刻被中斷,稍后再繼續(xù)運(yùn)行,不會丟失數(shù)據(jù)。所以在編寫函數(shù)時應(yīng)盡量使用局部變量,或是在使用全局變量時通過關(guān)中斷、信號量(即PV操作)等手段對其加以保護(hù)。在VxWorks中,多個任務(wù)可調(diào)用同一子函數(shù)或函數(shù)庫。VxWorks系統(tǒng)動態(tài)連接工具使這一方案的實(shí)現(xiàn)相當(dāng)容易,這種共享代碼可讓系統(tǒng)更加高效,易于維護(hù)。

VxWorks中采取可重入的技術(shù)有:

(1)動態(tài)堆棧變量。許多函數(shù)只是純代碼,除了動態(tài)堆棧變量外無其他數(shù)據(jù)。調(diào)用程序的參數(shù)作為子函數(shù)的數(shù)據(jù),這種子函數(shù)是完全可重入的,多個任務(wù)同時使用這種子函數(shù)時將不會互相影響,因?yàn)樗鼈兏饔凶约旱亩褩?臻g。

(2)受保護(hù)的全局和靜態(tài)變量。一些函數(shù)庫包含公有數(shù)據(jù),多任務(wù)同時調(diào)用很可能會導(dǎo)致對公有數(shù)據(jù)的破壞,使用起來需格外小心。系統(tǒng)采用信號量互斥機(jī)制可防止任務(wù)同時運(yùn)行代碼的臨界區(qū)。

(3)任務(wù)變量。一些公有函數(shù)要求對每一個調(diào)用程序都有明確的全局或靜態(tài)變量值。為了滿足這一點(diǎn),VxWorks提供的任務(wù)變量允許四字節(jié)變量加入到任務(wù)上下文中,當(dāng)任務(wù)切換時變量的值也切換。

4.使用名稱訪問資源通過任務(wù)名、消息隊(duì)列名、信號量名來調(diào)用這些資源,能保證應(yīng)用系統(tǒng)運(yùn)行的可靠性,同時也便于程序的閱讀。例如系統(tǒng)調(diào)用taskName()、taskNameToId()、taskIsSelf()等,都方便了用戶對資源的管理,更加直觀化。

5.用戶任務(wù)優(yōu)先級確定

VxWorks系統(tǒng)中的優(yōu)先級分為256級,從0到255。其中0為最高優(yōu)先級,255為最低優(yōu)先級。任務(wù)的優(yōu)先級在任務(wù)創(chuàng)建時被分配,但在任務(wù)運(yùn)行時可通過系統(tǒng)調(diào)用taskPrioritySet()動態(tài)地改變其優(yōu)先級。當(dāng)操作系統(tǒng)在目標(biāo)板上啟動成功后,系統(tǒng)級任務(wù)已在運(yùn)行,對主機(jī)與目標(biāo)機(jī)之間的通信進(jìn)行管理,因此用戶任務(wù)優(yōu)先級要低于系統(tǒng)級任務(wù),一般最高為150。同時,對于用戶各任務(wù)優(yōu)先級的確定,如何讓各任務(wù)間良好地協(xié)同工作,有待于用戶根據(jù)任務(wù)的緊急程度以及實(shí)際情況進(jìn)行給定,調(diào)測過程中的摸索總結(jié)也很重要。9.3.2軟件總體設(shè)計(jì)在進(jìn)行軟件開發(fā)時,一般過程是:首先根據(jù)系統(tǒng)設(shè)計(jì)方案明確應(yīng)用軟件的功能,然后結(jié)合實(shí)時操作系統(tǒng)的開發(fā)特性(或標(biāo)準(zhǔn)并發(fā)特性),對應(yīng)用軟件要實(shí)現(xiàn)的功能進(jìn)行大小適當(dāng)?shù)膭澐?,也就是把?yīng)用軟件的功能按照一定的原則劃分為若干個任務(wù)模塊,并對各個任務(wù)間的通信和時延進(jìn)行仔細(xì)的確認(rèn)。

VxWorks操作系統(tǒng)底層平臺為系統(tǒng)實(shí)現(xiàn)提供了底層軟件支持,ELMC數(shù)據(jù)通信與控制系統(tǒng)的功能需要應(yīng)用程序來實(shí)現(xiàn),而應(yīng)用軟件開發(fā)的首要目標(biāo)就是明確應(yīng)用軟件需要實(shí)現(xiàn)的功能。ELMC系統(tǒng)的主要任務(wù)是通過ARINC-429總線接收來自上位機(jī)(PSP)的控制信息,同時對二次配電中心的分布式電力匯流條和固態(tài)功率控制器(SSPC)進(jìn)行監(jiān)測與控制,并負(fù)責(zé)把檢測及處理完的信息通過ARINC-429總線送到PSP中。

1)軟件結(jié)構(gòu)根據(jù)軟件的功能要求,軟件可分為10個相對獨(dú)立的功能單元:CPU預(yù)處理、SSPC控制、電流值采集、狀態(tài)值采集、SSPC超控、周期采集、離散/模擬量采集、BIT檢測、故障信息存儲、I2T保護(hù)和SSPC處理單元。ELMC應(yīng)用軟件的功能結(jié)構(gòu)如圖9.8所示。圖9.8ELMC軟件功能結(jié)構(gòu)圖

ELMC軟件各模塊之間的相互關(guān)系可以概括為:PSP發(fā)送命令給CPU,CPU進(jìn)行處理后進(jìn)行相應(yīng)的操作,包括周期采集、SSPC超控、電流值采集、狀態(tài)值采集以及SSPC控制。其中SSPC超控和SSPC控制是單向操作,主要體現(xiàn)了對SSPC的控制作用,電流值以及狀態(tài)值采集是雙向操作,當(dāng)CPU把這兩種命令發(fā)送給SSPC后,SSPC根據(jù)命令回傳相應(yīng)數(shù)據(jù)。CPU需要同時采集離散量和模擬量,并周期進(jìn)行BIT檢測,所有檢測的錯誤信息以及在系統(tǒng)運(yùn)行時發(fā)現(xiàn)的故障,SSPC的電流狀態(tài)信息都將其存儲于故障信息庫中。當(dāng)PSP給出命令時進(jìn)行故障信息上傳操作。

2)多任務(wù)建立及優(yōu)先級分配在基于嵌入式操作系統(tǒng)的應(yīng)用軟件設(shè)計(jì)中,任務(wù)是一個很重要的概念。所謂任務(wù),就是能夠完成一個或者一組相關(guān)功能的一個或者一組程序的組合,它的概念與操作系統(tǒng)的進(jìn)程概念相同,一個任務(wù)是獨(dú)立的執(zhí)行進(jìn)程,可以與其他的并發(fā)任務(wù)競爭CPU的時間。每個獨(dú)立的任務(wù)可能會調(diào)用若干系統(tǒng)的標(biāo)準(zhǔn)函數(shù)或用戶編寫的應(yīng)用函數(shù)和系統(tǒng)資源等,所以各個任務(wù)之間在調(diào)用的函數(shù)或資源上可能會有重疊現(xiàn)象。在開發(fā)過程中,任務(wù)是一個無限循環(huán)的程序。任務(wù)不能有返回,不能有退出出口,但是任務(wù)可以被銷毀,包括被別的任務(wù)銷毀或自銷毀。對系統(tǒng)進(jìn)行任務(wù)的劃分、多任務(wù)的建立以及優(yōu)先級分配是軟件設(shè)計(jì)的關(guān)鍵步驟。任務(wù)劃分一方面是為了突出系統(tǒng)對所要處理問題的輕重緩急的對應(yīng)策略,另一方面則是提高系統(tǒng)性能。合理的任務(wù)劃分會使系統(tǒng)大大優(yōu)化,性能得到改善,不合理的任務(wù)劃分不僅不利于系統(tǒng)的進(jìn)一步設(shè)計(jì),也會大大降低系統(tǒng)性能,甚至達(dá)不到系統(tǒng)要求。任務(wù)劃分的矛盾在于:對任務(wù)劃分過細(xì)會引起頻繁的任務(wù)切換,導(dǎo)致任務(wù)開銷增加,而對任務(wù)劃分不徹底又會造成原本可并行的操作只能按順序串行完成,使系統(tǒng)的運(yùn)行效率降低。所以,在進(jìn)行任務(wù)劃分之前,需要考慮以下幾點(diǎn)規(guī)則:

(1)周期相同的任務(wù)應(yīng)分配于同一個任務(wù)中。

(2)每一種類型的算法過程應(yīng)盡量建立單獨(dú)的任務(wù),這樣可以避免程序代碼重復(fù),提高軟件執(zhí)行效率。

(3)系統(tǒng)中各緊密相關(guān)的功能應(yīng)合成于一個任務(wù)中,這樣可以減少任務(wù)間的通信開銷,降低系統(tǒng)設(shè)計(jì)的難度。根據(jù)上述的任務(wù)原則,應(yīng)用軟件可進(jìn)行如下任務(wù)劃分:

(1)串口輪詢?nèi)蝿?wù)(tCom_Query):依次讀取各個串口的緩沖區(qū),包括ARINC-429和5個RS-422緩沖區(qū)。若在輪詢?nèi)蝿?wù)中發(fā)現(xiàn)某個串口緩沖區(qū)有數(shù)據(jù)到來,則觸發(fā)相應(yīng)任務(wù)并執(zhí)行。若發(fā)現(xiàn)緩沖區(qū)為空,則繼續(xù)判斷下一個串口緩沖區(qū)。如此反復(fù),周期執(zhí)行。

(2)供電請求任務(wù)(tSend_TSSPC):周期性地向各個SSPC陣列板發(fā)送供電請求命令,以獲得某路負(fù)載的電流和狀態(tài)值,保證各負(fù)載得到實(shí)時監(jiān)控。

(3)鏈路檢測任務(wù)(tSend_TPSP):在系統(tǒng)運(yùn)行中,需實(shí)時檢測2條429通信鏈路,以確保通信道路暢通。若檢測發(fā)現(xiàn)主通道通信有問題并且備份通道通信正常,則切換為備份通道并檢測錯誤原因。在用備份通道進(jìn)行通信時,不斷檢測主通道是否恢復(fù)正常,當(dāng)主通道恢復(fù)正常時,將再次切回主通道運(yùn)行。

(4)?CPU處理任務(wù)(tDeal_CPU):將從429緩沖區(qū)收到的上位機(jī)發(fā)送來的信息取出,首先判斷校驗(yàn)和是否正確,若正確則判斷信息類型,根據(jù)判斷結(jié)果執(zhí)行相應(yīng)操作。任務(wù)完成后釋放相應(yīng)信號量使輪詢?nèi)蝿?wù)運(yùn)行,并等待信號量觸發(fā)再次運(yùn)行。

(5)?SSPC處理任務(wù)(tDeal_SSPC):將從422緩沖區(qū)收到的SSPC陣列板發(fā)送來的數(shù)據(jù)一一取出,首先判斷校驗(yàn)和是否正確,若正確則判斷屬于何種信息,并執(zhí)行相應(yīng)操作。任務(wù)完成后釋放相應(yīng)信號量使輪詢?nèi)蝿?wù)繼續(xù)運(yùn)行,并等待信號再次觸發(fā)該任務(wù)運(yùn)行。

(6)自檢測任務(wù)(tBIT_Test):按照系統(tǒng)要求將對ELMC進(jìn)行周期自檢測,包括CPU測試、RAM讀/寫測試、ROM代碼和測試、定時器測試、中斷控制器測試、內(nèi)部電源測試、模擬量輸入電路測試、離散量輸入/輸出測試、串口回繞測試等。在任務(wù)劃分完畢后,需要規(guī)定各個任務(wù)的優(yōu)先級。任務(wù)的優(yōu)先級應(yīng)按任務(wù)重要性劃分,保證重要任務(wù)執(zhí)行時不會被其他次重要任務(wù)搶占,如表9.6所示。表9.6任務(wù)優(yōu)先級分配表

Wind內(nèi)核提供了256個任務(wù)的優(yōu)先級,優(yōu)先級0最高,255最低。由于操作系統(tǒng)啟動后,系統(tǒng)任務(wù)已在運(yùn)行,為使用戶任務(wù)不與系統(tǒng)任務(wù)發(fā)生沖突,用戶任務(wù)的優(yōu)先級一般最高為150。

3)軟件流程在ELMC系統(tǒng)中,包含有四個周期任務(wù)和兩個非周期任務(wù)。在軟件中,周期任務(wù)和非周期任務(wù)的不同點(diǎn)在于:周期任務(wù)都有定時等待機(jī)制,非周期任務(wù)在任務(wù)開始時都設(shè)有等待信號量的操作,由于信號量在開始的時候設(shè)置為空,所以非周期任務(wù)在系統(tǒng)啟動時為掛起狀態(tài),等待相關(guān)任務(wù)釋放所需信號量后,非周期任務(wù)才會運(yùn)行。在系統(tǒng)的所有任務(wù)中,上位機(jī)處理任務(wù)(tDeal_CPU)和SSPC處理任務(wù)(tDeal_SSPC)是兩個非周期任務(wù),自檢測任務(wù)、供電請求任務(wù)、鏈路檢測任務(wù)和串口輪詢?nèi)蝿?wù)是四個周期任務(wù)。任務(wù)之間按其優(yōu)先級和調(diào)度策略來運(yùn)行。任務(wù)有五種狀態(tài):休眠、就緒、運(yùn)行、掛起和堵塞。在任何時候,只有一個任務(wù)處于運(yùn)行態(tài)。軟件主要流程如圖9.9所示。圖9.9軟件主要流程圖如圖9.9所示,系統(tǒng)啟動后,先進(jìn)行一系列初始化操作,初始化完畢后,將創(chuàng)建任務(wù)及信號量,并設(shè)置它們的屬性。多任務(wù)程序啟動后,系統(tǒng)將首先判斷tDeal_CPU和tDeal_SSPC兩個任務(wù)是否獲得其相應(yīng)的信號量,如果tDeal_CPU獲得了信號量semId[1],則執(zhí)行tDeal_PSP。tDeal_PSP執(zhí)行完畢后釋放信號量semId[3],同理,tDeal_SSPC也執(zhí)行類似的任務(wù)處理過程。隨后系統(tǒng)將遍歷所有已準(zhǔn)備好的任務(wù)隊(duì)列,找出其中優(yōu)先級最高的任務(wù),若當(dāng)前優(yōu)先級最高的任務(wù)是自檢測任務(wù)、供電請求任務(wù)和鏈路檢測任務(wù)中的一個,則執(zhí)行該任務(wù),等待任務(wù)執(zhí)行完畢后繼續(xù)遍歷Ready任務(wù)隊(duì)列;若當(dāng)前優(yōu)先級最高的任務(wù)是串口輪詢?nèi)蝿?wù),系統(tǒng)將執(zhí)行該任務(wù)并判斷429串口緩沖區(qū)是否有數(shù)據(jù)到來,是則釋放信號量semId[1]喚醒任務(wù)tDeal_CPU;否則繼續(xù)判斷422串口緩沖區(qū)是否有數(shù)據(jù)到來,若有則釋放信號量喚醒任務(wù)tDeal_SSPC,沒有則繼續(xù)遍歷任務(wù)隊(duì)列。9.3.3任務(wù)模塊設(shè)計(jì)系統(tǒng)軟件主要包括主程序、各個任務(wù)模塊和中斷服務(wù)子程序。主程序主要完成初始化串口、開辟數(shù)據(jù)表內(nèi)存、創(chuàng)建變量、信號量及激活任務(wù)等操作。在主程序運(yùn)行完后,將開始多任務(wù)程序的運(yùn)行。各個任務(wù)模塊基于制定的系統(tǒng)與上位機(jī)和下位機(jī)間的通信協(xié)議來完成系統(tǒng)的各種功能要求。每個任務(wù)都由若干個子程序組成,任務(wù)模塊的代碼占整個軟件的絕大部分。中斷服務(wù)子程序完成突發(fā)事件的處理,在軟件中主要是串口數(shù)據(jù)的收中斷和故障記錄中斷。串口數(shù)據(jù)的收中斷是當(dāng)上位機(jī)和下位機(jī)與本系統(tǒng)通信時,串口有數(shù)據(jù)到達(dá)時產(chǎn)生中斷通知CPU接收數(shù)據(jù)信息,中斷服務(wù)程序把接收到的數(shù)據(jù)放入環(huán)形緩沖區(qū)中。故障記錄中斷是當(dāng)系統(tǒng)發(fā)現(xiàn)故障時,掛接故障記錄中斷子程序,使用輔助時鐘記錄故障發(fā)生后系統(tǒng)的運(yùn)行狀態(tài)。以下將具體介紹軟件的主要模塊設(shè)計(jì)與實(shí)現(xiàn)。

1)主程序模塊在ELMC系統(tǒng)啟動后,程序?qū)闹鞒绦蜷_始運(yùn)行。主程序流程如圖9.10所示。圖9.10主程序流程圖如圖所示,VxWorks系統(tǒng)啟動后,首先進(jìn)行系統(tǒng)的各種初始化操作,包括設(shè)置系統(tǒng)時鐘的頻率、初始化PCI、兩個429端口初始化和5個422端口的初始化;而后將創(chuàng)建信號量、消息隊(duì)列及各種變量并賦初值,清空緩沖區(qū)并開啟中斷,最后將創(chuàng)建任務(wù)并配置任務(wù)屬性。

2)串口輪詢模塊本模塊的目的是定期查看各個串口的環(huán)形緩沖區(qū)是否有數(shù)據(jù)到來。當(dāng)有數(shù)據(jù)到來時,采用信號量機(jī)制喚醒相應(yīng)任務(wù)。本模塊包含一個任務(wù)tCom_Query。串口輪詢模塊的流程如圖9.11所示。圖9.11串口輪詢模塊流程圖任務(wù)啟動時,首先查看與上位機(jī)通信的429端口的環(huán)形緩沖區(qū)中是否有數(shù)據(jù)到來。若有則釋放信號量semId[1]通知任務(wù)tDeal_PSP處理信息;沒有則釋放信號量semId[3]使任務(wù)繼續(xù)運(yùn)行,并將依次訪問5個與SSPC通信的422端口是否有數(shù)據(jù)到來。若有則釋放信號量semId[2]通知任務(wù)tDeal_SSPC處理信息;沒有則釋放信號量semId[3]使任務(wù)繼續(xù)運(yùn)行直至結(jié)束。

3)請求發(fā)送模塊請求發(fā)送模塊主要實(shí)現(xiàn)周期性請求SSPC電流狀態(tài)數(shù)據(jù)以及檢測系統(tǒng)與上位機(jī)和下位機(jī)間的鏈路通信的工作,包括tSend_TPSP和tSend_TSSPC兩個任務(wù)。這兩個任務(wù)共用一個消息隊(duì)列myMsgQId,并通過該消息隊(duì)列把必要消息發(fā)送給任務(wù)tDeal_CPU和任務(wù)tDeal_SSPC。消息隊(duì)列的創(chuàng)建如下:myMsgQId=msgQCreate(MAX_MSGS,MAX_MSG_LEN,MSG_Q_PRIORITY)。其中,第一個參數(shù)表示消息隊(duì)列的長度,第二個參數(shù)表示消息隊(duì)列中消息的最大長度,第三個參數(shù)表示阻塞在消息隊(duì)列上所有任務(wù)的排隊(duì)規(guī)則是基于任務(wù)優(yōu)先級高低的。模塊通過消息隊(duì)列的實(shí)現(xiàn)如圖9.12所示。圖9.12消息隊(duì)列實(shí)現(xiàn)圖9.12中,tSend_TPSP為鏈路檢測任務(wù),該任務(wù)將周期性檢測系統(tǒng)各個鏈路的通信是否正常,若正常則發(fā)送相應(yīng)的確認(rèn)消息告知tDeal_CPU任務(wù),tDeal_CPU從消息隊(duì)列中接收到該消息后繼續(xù)正常運(yùn)行;若檢測出某個鏈路的通信有故障時則發(fā)送相應(yīng)的故障消息告訴tDeal_CPU,tDeal_CPU接收到該故障消息后將進(jìn)行相應(yīng)的故障處理和記錄工作。

tSend_SSPC為供電請求任務(wù),該任務(wù)將周期性地按順序發(fā)送供電請求的相關(guān)命令給各塊SSPC陣列板,要求其上傳相應(yīng)的狀態(tài)數(shù)據(jù)。命令成功發(fā)送后,將釋放對應(yīng)消息告知任務(wù)tDeal_SSPC,tDeal_SSPC從消息隊(duì)列中獲得該消息后即準(zhǔn)備接收并處理SSPC陣列板的各種信息。

4)?PSP處理模塊

PSP處理模塊主要完成系統(tǒng)與上位機(jī)間的通信工作,通過任務(wù)tDeal_CPU和多個功能子函數(shù)實(shí)現(xiàn)。該任務(wù)主要包括兩個方面:一是通過外部ARINC-429總線接收來自上位機(jī)的命令,并把有關(guān)SSPC監(jiān)測與控制的要求進(jìn)行處理后,按照與下位機(jī)的協(xié)議發(fā)送給SSPC陣列板;二是通過功能子函數(shù)的操作將處理后的數(shù)據(jù)按照與上位機(jī)間的協(xié)議上傳給上位機(jī)。該模塊的具體實(shí)現(xiàn)如圖9.13所示。圖9.13PSP處理模塊任務(wù)執(zhí)行時,首先將創(chuàng)建各種局部變量并為其賦初值,隨后讀429的環(huán)形緩沖區(qū)里的數(shù)據(jù),判斷是否信息頭,如果不是則繼續(xù)讀緩沖區(qū);如果是則讀指定長度的信息并判斷校驗(yàn)和是否正確,正確的話將判定數(shù)據(jù)的信息類型并根據(jù)判定結(jié)果跳轉(zhuǎn)到相應(yīng)功能的子函數(shù),子函數(shù)運(yùn)行完畢后釋放信號量,至此該模塊運(yùn)行結(jié)束。

5)?SSPC處理模塊該模塊的功能是接收來自5個SSPC陣列板的信息,并根據(jù)系統(tǒng)與下位機(jī)間的通信協(xié)議對信息內(nèi)容進(jìn)行一系列判斷與處理操作。處理的信息內(nèi)容主要包括電流及狀態(tài)值、故障處理、I2T運(yùn)算、濾波運(yùn)算等,該模塊只包括任務(wù)tDeal_SSPC。SSPC的處理模塊流程如圖9.14所示。圖9.14SSPC處理模塊流程從圖中可以看出,模塊啟動后將首先按照通信協(xié)議從422的環(huán)形緩沖區(qū)中讀取指定長度的數(shù)據(jù),并把數(shù)據(jù)存放于預(yù)先申明的存儲區(qū)中。接著判斷該幀內(nèi)容的信息頭和信息尾是否正確,若不正確將繼續(xù)讀緩沖區(qū)中的數(shù)據(jù);若正確則進(jìn)行信息類型的判定,判定結(jié)果主要為三種:電流值類型、狀態(tài)類型或者其他。若判定為電流值類型,則進(jìn)行電流濾波,濾波完成后將進(jìn)入相應(yīng)的應(yīng)用程序;若是狀態(tài)類型,則繼續(xù)分析該路的狀態(tài)是否正常,當(dāng)發(fā)現(xiàn)狀態(tài)不正常時,將分析具體的狀態(tài)異常內(nèi)容,如果是跳閘位異常將開啟中斷、掛接故障處理中斷子程序,如果是控制位異常則系統(tǒng)進(jìn)入I2T運(yùn)算中(I2T運(yùn)算是一種實(shí)現(xiàn)負(fù)載保護(hù)的算法機(jī)制),當(dāng)處理完異常的狀態(tài)信息后將進(jìn)行具體的應(yīng)用程序處理過程;若判定結(jié)果為其他類型,如控制命令的確認(rèn)/不確認(rèn)應(yīng)答、額定電流的確認(rèn)/不確認(rèn)應(yīng)答等,則執(zhí)行對應(yīng)的子函數(shù)。

6)自檢測模塊該模塊的設(shè)計(jì)是為了保證系統(tǒng)的安全性與可靠性。系統(tǒng)總共包括三種檢測:上電檢測、周期檢測和維護(hù)檢測。其中上電檢測在主程序中完成,維護(hù)檢測是當(dāng)系統(tǒng)需要維護(hù)時進(jìn)行的全面檢測工作。本模塊則進(jìn)行的是周期檢測工作,即任務(wù)tBIT_Test。自檢測模塊的流程如圖9.15所示。當(dāng)任務(wù)啟動后,首先休眠Tbit個tick數(shù)時長,系統(tǒng)每秒的tick數(shù)通過sysClkRateSet()函數(shù)設(shè)定。當(dāng)任務(wù)重新被喚醒時,將進(jìn)行CPU自檢測、AD采集卡測試、內(nèi)部電源測試以及429、422串口回繞測試,測試完畢后將結(jié)果匯總并放入指定存儲區(qū)中,并發(fā)送消息msgQBIT到消息隊(duì)列中,告知任務(wù)tDeal_CPU周期檢測完畢,tDeal_CPU則根據(jù)檢測數(shù)據(jù)做相應(yīng)處理。圖9.15自檢測模塊流程9.3.4任務(wù)調(diào)度設(shè)計(jì)在ELMC系統(tǒng)的應(yīng)用軟件開發(fā)中,如何根據(jù)系統(tǒng)的性能要求設(shè)計(jì)合適的任務(wù)調(diào)度算法是關(guān)鍵。目前,關(guān)于實(shí)時操作系統(tǒng)(RTOS)的調(diào)度技術(shù)有很多種,比較普遍的劃分是根據(jù)優(yōu)先級驅(qū)動策略劃分為靜態(tài)調(diào)度和動態(tài)調(diào)度。靜態(tài)調(diào)度即為靜態(tài)優(yōu)先級調(diào)度,它表示任務(wù)的優(yōu)先級會在任務(wù)運(yùn)行之前就分配好,其后不再發(fā)生改變。動態(tài)調(diào)度則表示任務(wù)的優(yōu)先級可以隨著時間或系統(tǒng)狀態(tài)的變化而變化。在眾多的任務(wù)調(diào)度算法中,最為突出的兩種典型算法為靜態(tài)調(diào)度的RM算法和動態(tài)調(diào)度的EDF算法。RM算法對CPU的利用率較低,且只適用于周期任務(wù)。EDF算法運(yùn)行開銷較大,且對任務(wù)具有同一優(yōu)先級的情況考慮不足。所以在這兩種算法的基礎(chǔ)上,又衍生出一些針對不同系統(tǒng)的不同解決方案。其中對于包含周期和非周期任務(wù)的混合任務(wù)集的調(diào)度主要有三種方法:后臺執(zhí)行法、輪詢法和空閑時間法。后臺執(zhí)行法和空閑時間法主要是利用CPU空閑時間來處理非周期任務(wù)。這兩種方法的缺點(diǎn)是沒

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論