本發(fā)明具體涉及一種數(shù)據(jù)采集監(jiān)控器的程序調(diào)度方法。
背景技術(shù):
隨著經(jīng)濟技術(shù)的發(fā)展和人們生活水平的提高,對于電氣設(shè)備的運行可靠性和及時性的要求也越來越高。
數(shù)據(jù)采集監(jiān)控器廣泛應(yīng)用于電網(wǎng)中,發(fā)揮著重要的作用。現(xiàn)有的數(shù)據(jù)采集監(jiān)控器的程序均設(shè)計成傳統(tǒng)的、常用的前后臺系統(tǒng),初始化完成后,在主循環(huán)中依次調(diào)用相應(yīng)的模塊的函數(shù)完成相應(yīng)的功能,各個功能模塊按照先后次序無限地循環(huán)運行,如圖1所示,這部分為后臺行為(background)。中斷服務(wù)程序處理異常事件,例如定時器的定時時間到的中斷、通信端口接收到數(shù)據(jù)后的中斷,等,這部分為前臺行為(foreground)。這種前后臺系統(tǒng)設(shè)計比較簡單和常用,但在處理數(shù)據(jù)的及時性上,存在明顯的不足。因為當(dāng)某個模塊需要運行時,不能馬上運行,必須等到其他模塊運行完成并且循環(huán)到自身時才可以運行,各個模塊的響應(yīng)時間取決于整個循環(huán)的執(zhí)行時間,但主循環(huán)的整個運行時間不是一個固定值,每個模塊的準確運行時間也不是固定不變的,另外如果程序修改了,循環(huán)的時間也會受到影響。
數(shù)據(jù)采集監(jiān)控器內(nèi)的各個模塊對于實時性有不同程度的要求,數(shù)據(jù)采集處理監(jiān)控模塊和當(dāng)前時間同步模塊、通信模塊對于實時性要求較高,而在這種前后臺系統(tǒng)的設(shè)計中,無法保證它們的實時性,例如數(shù)據(jù)卡處理模塊的處理時間很長,可達數(shù)十秒種,期間的數(shù)據(jù)采集監(jiān)控模塊就不能按時地、準確地運行,這樣就會遺失數(shù)據(jù),也會失去監(jiān)控功能而帶有隱患,并且期間如果隨時有電腦管理系統(tǒng)發(fā)出抄讀命令,也不能及時應(yīng)答。映像校驗?zāi)K的處理時間也很長,也會面臨同樣的問題,其他模塊得不到運行,期間也會失去重要的功能。
技術(shù)實現(xiàn)要素:
本發(fā)明的目的在于提供一種能夠?qū)崟r響應(yīng)各個程序的運行要求,而且能夠有效提高運行安全性和可靠性的數(shù)據(jù)采集監(jiān)控器的程序調(diào)度方法。
本發(fā)明提供的這種數(shù)據(jù)采集監(jiān)控器的程序調(diào)度方法,采用實時內(nèi)核進行數(shù)據(jù)采集監(jiān)控器的程序調(diào)度。
所述的采用實時內(nèi)核進行數(shù)據(jù)采集監(jiān)控器的程序調(diào)度,具體包括如下步驟:
s1.對數(shù)據(jù)采集監(jiān)控器的程序模塊進行分析,從而獲取各個程序模塊的重要程度;
s2.根據(jù)步驟s1獲取的各個程序模塊的重要程度將各個程序模塊進行分級,所述程序模塊的重要性越高,則該程序模塊的等級越高;
s3.實時內(nèi)核根據(jù)步驟s2確定的程序模塊等級,以優(yōu)先執(zhí)行等級高的程序模塊為原則,對所述數(shù)據(jù)采集監(jiān)控器的程序模塊進行調(diào)度和執(zhí)行。
步驟s3所述的對數(shù)據(jù)采集監(jiān)控器的程序模塊進行調(diào)度和執(zhí)行,具體為采用如下步驟進行調(diào)度和執(zhí)行:
a.基于實時內(nèi)核的內(nèi)部時基,每隔x毫秒即判斷各個程序模塊是否準備就緒;
b.若有程序模塊準備就緒且當(dāng)前無程序模塊正在執(zhí)行或被掛起,則判斷準備就緒的各個程序模塊的優(yōu)先級,并優(yōu)先執(zhí)行優(yōu)先級高的程序模塊;
c.若有程序模塊準備就緒且當(dāng)前無程序模塊正在執(zhí)行且有程序模塊被掛起,則判斷準備就緒的程序模塊和被掛起的程序模塊之間的優(yōu)先級大小,并優(yōu)先執(zhí)行優(yōu)先級高的程序模塊,優(yōu)先級低的程序模塊則被掛起,直至優(yōu)先級高的程序模塊執(zhí)行完畢;
d.若有程序模塊準備就緒且當(dāng)前有程序模塊正在執(zhí)行,則判斷準備就緒的程序模塊和正在執(zhí)行的程序模塊之間的優(yōu)先級大小,并優(yōu)先執(zhí)行優(yōu)先級高的程序模塊,優(yōu)先級低的程序模塊則被掛起,直至優(yōu)先級高的程序模塊執(zhí)行完畢。
所述的數(shù)據(jù)采集監(jiān)控器的程序模塊包括數(shù)據(jù)采集監(jiān)控模塊,當(dāng)前時間同步模塊,通信模塊,顯示模塊,數(shù)據(jù)卡模塊和映像校驗?zāi)K。
所述的數(shù)據(jù)采集監(jiān)控模塊的等級為最高,1級;當(dāng)前時間同步模塊的等級為次高,2級;通信模塊的等級再次,為3級;顯示模塊的等級為4級;數(shù)據(jù)卡模塊的等級為5級;映像校驗?zāi)K的等級為6級。
本發(fā)明提供的這種數(shù)據(jù)采集監(jiān)控器的程序調(diào)度方法,通過將實時內(nèi)核引入數(shù)據(jù)采集監(jiān)控器,因此能夠采用實時內(nèi)核的功能對數(shù)據(jù)采集監(jiān)控器進行程序調(diào)度;而且本發(fā)明中將數(shù)據(jù)采集監(jiān)控器的程序模塊進行分級,并依據(jù)優(yōu)先級的高低進行程序調(diào)度,因此本發(fā)明方法能夠?qū)崟r響應(yīng)各個程序的運行要求,而且能夠有效提高運行安全性和可靠性。
附圖說明
圖1為現(xiàn)有技術(shù)的程序模塊調(diào)度方法。
圖2為本發(fā)明方法的程序模塊調(diào)度示意圖。
圖3為本發(fā)明的方法流程圖。
具體實施方式
如圖2所示為本發(fā)明方法的程序模塊調(diào)度示意圖:本發(fā)明采用實時內(nèi)核進行數(shù)據(jù)采集監(jiān)控器的程序調(diào)度,并且配合中斷服務(wù)程序,能夠?qū)崿F(xiàn)數(shù)據(jù)采集監(jiān)控器內(nèi)各個程序模塊的統(tǒng)一科學(xué)調(diào)度。在采用實時內(nèi)核進行程序模塊的調(diào)度時,各個程序模塊不再是輪詢的或順序執(zhí)行的方式進行調(diào)度,而是科學(xué)合理的進行調(diào)度,因此能夠?qū)崟r響應(yīng)各個程序的運行要求,而且能夠有效提高數(shù)據(jù)采集監(jiān)控器的運行安全性和可靠性。
如圖3所示為本發(fā)明的方法流程圖:采用實時內(nèi)核進行數(shù)據(jù)采集監(jiān)控器的程序調(diào)度,具體包括如下步驟:
s1.對數(shù)據(jù)采集監(jiān)控器的程序模塊進行分析,從而獲取各個程序模塊的重要程度;
程序模塊包括數(shù)據(jù)采集監(jiān)控模塊,當(dāng)前時間同步模塊,通信模塊,顯示模塊,數(shù)據(jù)卡模塊和映像校驗?zāi)K;
s2.根據(jù)步驟s1獲取的各個程序模塊的重要程度將各個程序模塊進行分級,所述程序模塊的重要性越高,則該程序模塊的等級越高;
數(shù)據(jù)采集監(jiān)控模塊的等級為最高,1級;當(dāng)前時間同步模塊的等級為次高,2級;通信模塊的等級再次,為3級;顯示模塊的等級為4級;數(shù)據(jù)卡模塊的等級為5級;映像校驗?zāi)K的等級為6級;
s3.實時內(nèi)核根據(jù)步驟s2確定的程序模塊等級,以優(yōu)先執(zhí)行等級高的程序模塊為原則,對所述數(shù)據(jù)采集監(jiān)控器的程序模塊進行調(diào)度和執(zhí)行,具體為采用如下步驟進行調(diào)度和執(zhí)行:
a.基于實時內(nèi)核的內(nèi)部時基,每隔x毫秒即判斷各個程序模塊是否準備就緒,x為正整數(shù);
b.若有程序模塊準備就緒且當(dāng)前無程序模塊正在執(zhí)行或被掛起,則判斷準備就緒的各個程序模塊的優(yōu)先級,并優(yōu)先執(zhí)行優(yōu)先級高的程序模塊;
c.若有程序模塊準備就緒且當(dāng)前無程序模塊正在執(zhí)行且有程序模塊被掛起,則判斷準備就緒的程序模塊和被掛起的程序模塊之間的優(yōu)先級大小,并優(yōu)先執(zhí)行優(yōu)先級高的程序模塊,優(yōu)先級低的程序模塊則被掛起,直至優(yōu)先級高的程序模塊執(zhí)行完畢;
d.若有程序模塊準備就緒且當(dāng)前有程序模塊正在執(zhí)行,則判斷準備就緒的程序模塊和正在執(zhí)行的程序模塊之間的優(yōu)先級大小,并優(yōu)先執(zhí)行優(yōu)先級高的程序模塊,優(yōu)先級低的程序模塊則被掛起,直至優(yōu)先級高的程序模塊執(zhí)行完畢。
在具體應(yīng)用時,在上電初始化階段,除了前后臺系統(tǒng)也有的硬件初始化、軟件初始化的程序以外,根據(jù)實時內(nèi)核的設(shè)計原則,必須先創(chuàng)建各個任務(wù)模塊,在創(chuàng)建每個任務(wù)模塊的時候,指定任務(wù)模塊的名稱、優(yōu)先級、堆棧大小等。當(dāng)所有的任務(wù)模塊都創(chuàng)建完成后,就可以啟動實時內(nèi)核的調(diào)度了。
每個任務(wù)模塊運行時,可以看成全部占用cpu,每個任務(wù)模塊都可以看成是無限循環(huán),什么時候啟動、什么時候終止都受實時內(nèi)核的調(diào)度。
實時內(nèi)核的內(nèi)部時基,每隔1毫秒,就判斷各個模塊是否就緒,根據(jù)其優(yōu)先級進行調(diào)度,如果優(yōu)先級高的模塊就緒了,例如定時時間到了或接收到了消息,就進行模塊切換、調(diào)度,把當(dāng)前運行的模塊掛起,保存cpu當(dāng)前的程序指針寄存器和狀態(tài)寄存器、其它的寄存器到各自的任務(wù)模塊堆棧中;運行優(yōu)先級高的模塊。優(yōu)先級高的模塊運行完后,調(diào)出之前保存的各寄存器的數(shù)據(jù),繼續(xù)運行原來掛起的模塊任務(wù)。如果各個模塊都沒就緒,實時內(nèi)核就進入空閑狀態(tài)。
數(shù)據(jù)采集監(jiān)控模塊是最主要的功能模塊,需要定時運行,每隔100毫秒運行1次,運行期間不受其他模塊的影響和打斷,以免遺漏重要數(shù)據(jù)。
當(dāng)前時間同步模塊也是定時運行,每隔500毫秒運行1次,運行期間只會被數(shù)據(jù)采集監(jiān)控模塊所打斷,不受其他模塊的影響和打斷。運行完后進入掛起狀態(tài)。
通信模塊不是定時運行,硬件通信端口接收到數(shù)據(jù)后產(chǎn)生中斷,在接收中斷服務(wù)程序中對于數(shù)據(jù)幀進行頭尾字節(jié)內(nèi)容和數(shù)據(jù)長度的檢查,如果通過了檢查,就通過實時內(nèi)核向通信模塊發(fā)送消息,此時通信模塊進入運行狀態(tài),在通信模塊內(nèi)部詳細解析是哪種命令,抄讀哪些數(shù)據(jù)等等,然后進行相應(yīng)應(yīng)答;如果前面描述的數(shù)據(jù)采集監(jiān)控模塊監(jiān)控到了異常情況,也會通過實時內(nèi)核向通信模塊發(fā)送消息,此時通信模塊也會進入運行狀態(tài)。
顯示模塊也是定時運行,每隔1000毫秒就在液晶顯示屏上刷新顯示1次數(shù)據(jù)??梢员磺懊鎺讉€模塊打斷,運行完后進入掛起狀態(tài)。
數(shù)據(jù)卡模塊不是定時運行,當(dāng)有數(shù)據(jù)卡放入的時候,引起硬件io端口電平變化產(chǎn)生中斷,在端口中斷服務(wù)程序中,通過實時內(nèi)核向數(shù)據(jù)卡模塊發(fā)送消息,此時數(shù)據(jù)卡模塊進入運行狀態(tài),在數(shù)據(jù)卡模塊內(nèi)部詳細解析,將需要設(shè)置的參數(shù)保存到數(shù)據(jù)采集監(jiān)控器,將采集監(jiān)控器內(nèi)的數(shù)據(jù)寫到數(shù)據(jù)卡中,處理完后進入掛起狀態(tài)。
映像校驗執(zhí)行時耗時較長,因此將其設(shè)計成單獨的模塊。映像校驗?zāi)K只會在接收到其他模塊發(fā)來的消息后才會進入運行狀態(tài),電腦管理系統(tǒng)發(fā)出映像校驗命令后,通信模塊解析出是映像校驗命令后,就通過實時內(nèi)核向映像校驗?zāi)K發(fā)送消息,此時映像校驗?zāi)K進入運行狀態(tài),校驗內(nèi)部的程序映像的完整性和合法性,處理完后進入掛起狀態(tài)。