亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

冗余數(shù)據(jù)的自動(dòng)選擇方法、分析器及實(shí)現(xiàn)無擾切換的方法

文檔序號(hào):6585278閱讀:892來源:國知局
專利名稱:冗余數(shù)據(jù)的自動(dòng)選擇方法、分析器及實(shí)現(xiàn)無擾切換的方法
技術(shù)領(lǐng)域
本發(fā)明涉及冗余配置系統(tǒng)中冗余數(shù)據(jù)的自動(dòng)選擇方法,相應(yīng)分析器,及通過挑選
冗余數(shù)據(jù)以保證雙機(jī)切換時(shí)實(shí)現(xiàn)輸出無擾切換的方法、系統(tǒng)。
背景技術(shù)
—個(gè)簡單而典型的冗余配置的分布式控制系統(tǒng)(DCS)應(yīng)包括工程師站,服務(wù)器,操作站,控制站等等,如圖l所示。圖中的服務(wù)器和控制站均為冗余配置,各個(gè)通訊網(wǎng)絡(luò)也采用了冗余配置。 DCS工作原理如下首先,工程人員在工程師站進(jìn)行工程組態(tài)即編程;然后,工程師站將組態(tài)結(jié)果分別下裝給操作站,服務(wù)器和控制站;最后,各站進(jìn)入工作狀態(tài),工程師站可以離線。各站進(jìn)入工作狀態(tài)后,控制站周期性執(zhí)行工業(yè)控制程序(業(yè)界也稱為"組態(tài)邏輯")來完成對(duì)現(xiàn)場(chǎng)工業(yè)儀表的控制任務(wù),同時(shí)將實(shí)時(shí)數(shù)據(jù)周期性上報(bào)給服務(wù)器,服務(wù)器的通過實(shí)時(shí)數(shù)據(jù)庫和歷史數(shù)據(jù)庫來處理各類數(shù)據(jù)并和操作站發(fā)生數(shù)據(jù)交互,而操作站由操作人員進(jìn)行監(jiān)視或?qū)\(yùn)行數(shù)據(jù)進(jìn)行一些人工操作(如寫入,手動(dòng)設(shè)定等),這些操作將通過服務(wù)器傳遞給控制站,這樣DCS系統(tǒng)就可以進(jìn)行生產(chǎn)過程控制了。 工程人員要在工程師站為整個(gè)DCS系統(tǒng)進(jìn)行組態(tài),其中一部分是使用編程器(業(yè)界也稱為"組態(tài)軟件")為控制站編寫工業(yè)控制程序,控制站通過周期性執(zhí)行工業(yè)控制程序來完成控制工作,上圖中的控制站采用的是冗余配置,稱之為雙機(jī)。控制站運(yùn)行時(shí)一臺(tái)控制器作為工作機(jī)(稱為主機(jī)),另一臺(tái)作為備份機(jī)(稱為從機(jī)),主機(jī)接收輸入,執(zhí)行工業(yè)控制程序中的運(yùn)算,并對(duì)外輸出;而從機(jī)只接收輸入,執(zhí)行工業(yè)控制程序中的運(yùn)算,但并不輸出。在運(yùn)行過程中,一旦主機(jī)出現(xiàn)嚴(yán)重問題(例如看門狗復(fù)位等),從機(jī)馬上升級(jí)為主機(jī),而原主機(jī)可以在再次正常啟動(dòng)后降級(jí)為從機(jī),這一過程稱為雙機(jī)切換??刂普镜膫浞菔饺哂嘤欣谔岣哒麄€(gè)系統(tǒng)的穩(wěn)定性和可靠性。 對(duì)于應(yīng)用于過程控制現(xiàn)場(chǎng)的DCS系統(tǒng)而言,控制站的輸入和輸出大部分與現(xiàn)場(chǎng)的物理設(shè)備相對(duì)應(yīng),例如控制站輸入可能是某個(gè)傳感器給出的現(xiàn)場(chǎng)某點(diǎn)溫度值,而輸出可能是現(xiàn)場(chǎng)某個(gè)閥門的開度值。顯而易見,為保證控制的安全和質(zhì)量,雙機(jī)切換時(shí)應(yīng)保證控制站輸出"無擾動(dòng)",即控制站雙機(jī)切換后的輸出值與假設(shè)未進(jìn)行切換時(shí)應(yīng)有的輸出值完全一致,或者說雙機(jī)切換對(duì)輸出值來說是透明的??梢?,實(shí)現(xiàn)輸出"無擾切換"是雙機(jī)切換的基本要求。因?yàn)楣ぷ鳈C(jī)和備份機(jī)輸入相同,運(yùn)算邏輯相同,理論上的運(yùn)算周期(例如運(yùn)算周期為50ms,則每50ms進(jìn)行一輪運(yùn)算)也相同,所以在理想情況下,同時(shí)啟動(dòng)雙機(jī),即使雙機(jī)各自獨(dú)立運(yùn)行,它們所有變量的值應(yīng)是時(shí)刻一致的。但是由于各種原因,雙機(jī)的實(shí)際運(yùn)算周期還是有差別的,如果雙機(jī)各自獨(dú)立運(yùn)行,經(jīng)過長時(shí)間的累積效應(yīng),雙機(jī)中相同變量(包含輸出變量)的值可能會(huì)有很大差別,此時(shí)如果發(fā)生雙機(jī)切換,可能的輸出值突變會(huì)帶給現(xiàn)場(chǎng)設(shè)備很大的擾動(dòng)。為使輸出實(shí)現(xiàn)無擾切換,主機(jī)和從機(jī)應(yīng)該保持運(yùn)算節(jié)拍"同步",這樣才能使雙機(jī)中的變量(包含輸出變量)保持?jǐn)?shù)值一致,以便將來切換時(shí)保證輸出無擾。
為實(shí)現(xiàn)雙機(jī)運(yùn)算同步,目前采用的是雙機(jī)之間拷貝更新冗余數(shù)據(jù)的方式,即雙機(jī)分別記錄各自運(yùn)算節(jié)拍,節(jié)拍數(shù)有一定差別時(shí),即認(rèn)為雙機(jī)處于"不同步"狀態(tài),然后主機(jī)將自己的部分變量的值"冗余(即拷貝)"給從機(jī),從機(jī)將在自己的內(nèi)存中更新這些數(shù)據(jù),這部分被"冗余"的變量稱為冗余數(shù)據(jù)。在冗余期間,雙機(jī)暫停運(yùn)算,冗余拷貝結(jié)束后,雙機(jī)同時(shí)啟動(dòng)運(yùn)算。拷貝這些冗余數(shù)據(jù)的目的是使雙機(jī)的輸出變量值保持一致,以便實(shí)現(xiàn)輸出無擾切換。 現(xiàn)有技術(shù)中,將哪些變量作為冗余數(shù)據(jù),通常采取人工方式來挑選在組態(tài)時(shí),由工程人員通過給變量添加標(biāo)志例如"Retain"標(biāo)志,將其確定為冗余數(shù)據(jù),本文約定將冗余數(shù)據(jù)也稱為Retain數(shù)據(jù)。人工挑選Retain數(shù)據(jù)工作量大且易出錯(cuò),為避免遺漏,工程人員往往將很多甚至全部變量都組態(tài)成Retain數(shù)據(jù),這樣就給整個(gè)控制器軟硬件帶來很大的負(fù)擔(dān)。 對(duì)于其他需要運(yùn)行控制程序和進(jìn)行主、備切換的冗余配置系統(tǒng)也存在相似的問題。

發(fā)明內(nèi)容
本發(fā)明要解決的技術(shù)問題是提供一種冗余數(shù)據(jù)的自動(dòng)選擇方法及分析器,能夠從原始集中選擇得到較少的冗余變量,這些冗余變量的值相同時(shí),能保證輸出變量在此后任意正整數(shù)周期保持一致。 為解決這個(gè)問題,本發(fā)明提供了一種冗余數(shù)據(jù)的自動(dòng)選擇方法,應(yīng)用于采用備份式冗余的計(jì)算機(jī)控制系統(tǒng),該自動(dòng)選擇方法包括 確定控制程序中定義的所有變量組成的原始集,以及主備切換時(shí)需要保證輸出無擾的變量組成的目標(biāo)集,該目標(biāo)集為該原始集的子集; 將所述控制程序的代碼轉(zhuǎn)換為包含多個(gè)函數(shù)式及其順序信息的關(guān)系集,轉(zhuǎn)換時(shí),按照所述控制程序的代碼的執(zhí)行順序,提取出所述代碼表示的運(yùn)算邏輯中存在的因變量及與每一因變量相關(guān)的所有自變量,將每一因變量及其自變量表示為反映變量之間關(guān)系的一函數(shù)式并記錄各函數(shù)式的順序信息; 根據(jù)所述目標(biāo)集和關(guān)系集對(duì)所述原始集尋優(yōu),從原始集中選擇出滿足優(yōu)化器約束條件且包含元素個(gè)數(shù)最少的子集作為冗余數(shù)據(jù),該子集稱為冗余最優(yōu)集;該優(yōu)化器約束條件指主機(jī)和備機(jī)間拷貝更新冗余最優(yōu)集中變量的值后,所述目標(biāo)集中變量的值在此后任意正整數(shù)周期運(yùn)算結(jié)束時(shí)保持一致。 進(jìn)一步地,所述控制程序是用多種語言編寫的,所述控制程序的代碼為將所述控制程序轉(zhuǎn)換為的統(tǒng)一形式的中間代碼。 進(jìn)一步地,所述控制程序的代碼包括多條語句或多個(gè)對(duì)應(yīng)于語句的語法結(jié)構(gòu),通過轉(zhuǎn)換算法和程序控制語句處理算法的遞歸調(diào)用完成轉(zhuǎn)換,轉(zhuǎn)換開始時(shí)當(dāng)前一層設(shè)為整個(gè)代碼的最外層; 轉(zhuǎn)換開始后運(yùn)行轉(zhuǎn)換算法依次遍歷當(dāng)前一層的語句或語法結(jié)構(gòu),對(duì)每一語句或語法結(jié)構(gòu),如該語句或該語法結(jié)構(gòu)對(duì)應(yīng)的語句為賦值語句,則直接轉(zhuǎn)換為一函數(shù)式,將該函數(shù)式及其順序號(hào)添加到所述關(guān)系集中;如該語句或該語法結(jié)構(gòu)對(duì)應(yīng)的語句是合法的程序控制語句,則調(diào)用程序控制語句處理算法將其轉(zhuǎn)換為函數(shù)式;如該語句或語法結(jié)構(gòu)不合法,做出錯(cuò)處理,結(jié)束轉(zhuǎn)換。
進(jìn)一步地,將賦值語句或?qū)?yīng)于賦值語句的語法結(jié)構(gòu)轉(zhuǎn)換為一函數(shù)式時(shí),該函數(shù)式的因變量為該賦值語句等號(hào)左邊的變量,該函數(shù)式的自變量應(yīng)為該賦值語句等號(hào)右端的所有變量,如等號(hào)右端沒有變量,則該函數(shù)式的自變量為空。 進(jìn)一步地,所述程序控制語句處理算法為按序遍歷該程序控制語句的各個(gè)控制分支,對(duì)每個(gè)控制分支,調(diào)用所述轉(zhuǎn)換算法對(duì)該控制分支的所有語句或?qū)?yīng)于語句的語法結(jié)構(gòu)依次進(jìn)行處理,當(dāng)前一層為該控制分支代碼的最外層,處理完成后,根據(jù)該程序控制語句的類型按以下方式進(jìn)行轉(zhuǎn)換 對(duì)IF_ELSE語句,先進(jìn)行分支對(duì)等化的預(yù)處理,使兩個(gè)分支的函數(shù)式對(duì)等出現(xiàn);然后只保留一個(gè)分支上的所有函數(shù)式,對(duì)其中的每一函數(shù)式,將另一分支上對(duì)等的函數(shù)式的
自變量及判斷條件中的變量合并到該函數(shù)式的自變量中,合并后得到的函數(shù)式即為轉(zhuǎn)換后的函數(shù)式; 對(duì)除SWITCH語句外的其他條件分支語句,先將該語句轉(zhuǎn)換成IF_ELSE語句,然后采用IF_ELSE語句的轉(zhuǎn)換方式轉(zhuǎn)換為函數(shù)式; 對(duì)WHILE語句,將判斷條件中的變量合并到該語句各函數(shù)式的自變量中,將各函數(shù)式的因變量合并到本函數(shù)式的自變量中,得到轉(zhuǎn)換后的函數(shù)式。 進(jìn)一步地,對(duì)除SWITCH語句外的其他循環(huán)語句,先轉(zhuǎn)換成賦值語句和WHILE語句,然后采用賦值語句和WHILE語句的轉(zhuǎn)換方式轉(zhuǎn)換為函數(shù)式; 對(duì)SWITCH語句,先轉(zhuǎn)換成賦值語句和WHILE語句,然后采用賦值語句和WHILE語句的轉(zhuǎn)換方式轉(zhuǎn)換為函數(shù)式;或者,先進(jìn)行分支對(duì)等化的預(yù)處理,使得各分支的函數(shù)式對(duì)等出現(xiàn);然后只保留一個(gè)分支上的所有函數(shù)式,對(duì)其中的每一函數(shù)式,將其他分支對(duì)等的函數(shù)式的自變量和判斷條件中的變量合并到該函數(shù)式的自變量中,合并得到的函數(shù)式即為轉(zhuǎn)換后的函數(shù)式。 進(jìn)一步地,對(duì)IF_ELSE語句,或IF_ELSE語句和SWITCH語句進(jìn)行分支對(duì)等化的預(yù)處理時(shí),逐次比較各分支相同位置上的函數(shù)式,如各分支上第n個(gè)函數(shù)式的因變量有m種,n=1, 2, . . . , , m = 2, 3,...;則以"該因變量=該因變量"的方式在每個(gè)分支補(bǔ)充m-1個(gè)函數(shù)式,補(bǔ)充的函數(shù)式的因變量是其他分支第n個(gè)函數(shù)式的因變量且不同于該分支第n個(gè)函數(shù)式的因變量,補(bǔ)充的函數(shù)式與該第n個(gè)函數(shù)式位置連續(xù)且其中每一位置上的函數(shù)式的因變量均相同,之后,從第n+m個(gè)函數(shù)式開始進(jìn)行下次比較。 進(jìn)一步地,所述的自動(dòng)選擇方法,其特征在于,根據(jù)所述目標(biāo)集和關(guān)系集對(duì)所述原始集尋優(yōu),選擇冗余變量的過程包括 先將關(guān)系集中所有函數(shù)式置為"存在"狀態(tài);然后根據(jù)輸入的原始集V、目標(biāo)集AV和關(guān)系集F,從尾至頭遍歷關(guān)系集F中的函數(shù)式; 每一次遍歷過程中,對(duì)當(dāng)前的函數(shù)式Vj = fi(Vu,Vi2,…),i = 1,2,... ,n;如Vj不屬于AV,則結(jié)束對(duì)該函數(shù)式的處理;如Vj屬于AV,則從AV中刪除Vj,并繼續(xù)判斷該函數(shù)式是否為"存在"狀態(tài),如否,結(jié)束對(duì)該函數(shù)式的處理,如為"存在"狀態(tài),還要將該函數(shù)式所有自變量合并到當(dāng)前的AV中并取消該函數(shù)式的存在狀態(tài); 每一次遍歷結(jié)束后,將AV中的變量合并到0V中,并判斷當(dāng)前AV中的變量是否與該次遍歷前的相同,如果相同,則將當(dāng)前的OV中的變量作為確定的冗余變量輸出,結(jié)束優(yōu)化,如果不同,以同樣方式繼續(xù)下一次的遍歷。
為解決這個(gè)問題,本發(fā)明還提供了一種冗余數(shù)據(jù)分析器,用于為采用備份式冗余
的計(jì)算機(jī)控制系統(tǒng)選擇冗余變量,其特征在于,包括轉(zhuǎn)換器和優(yōu)化器,其中 所述轉(zhuǎn)換器用于接收控制程序的代碼,將所述代碼轉(zhuǎn)換為包含多個(gè)函數(shù)式及其順
序信息的關(guān)系集并輸出到優(yōu)化器,轉(zhuǎn)換時(shí),按照所述控制程序的代碼的執(zhí)行順序,提取出所
述代碼表示的運(yùn)算邏輯中存在的因變量及與每一因變量相關(guān)的所有自變量,將每一因變量
及其自變量表示為反映變量之間關(guān)系的一函數(shù)式并記錄各函數(shù)式的順序信息; 所述優(yōu)化器用于接收控制程序中定義的所有變量組成的原始集,主備切換時(shí)需
要保證輸出無擾的變量組成的目標(biāo)集,及所述關(guān)系集,根據(jù)所述目標(biāo)集和關(guān)系集對(duì)所述原
始集尋優(yōu),從原始集中選擇出滿足優(yōu)化器約束條件且包含元素個(gè)數(shù)最少的子集作為冗余數(shù)
據(jù),該子集稱為冗余最優(yōu)集;該優(yōu)化器約束條件指主機(jī)和備機(jī)間拷貝更新所述冗余最優(yōu)集
中變量的值后,所述目標(biāo)集中變量的值在此后任意正整數(shù)周期運(yùn)算結(jié)束時(shí)保持一致。 進(jìn)一步地,所述的冗余數(shù)據(jù)分析器,其特征在于,所述轉(zhuǎn)換器包括轉(zhuǎn)換控制單元、
代碼控制單元、第一轉(zhuǎn)換單元和第二轉(zhuǎn)換單元,其中 所述轉(zhuǎn)換控制單元用于控制控制程序的代碼的接收和緩存到代碼緩存單元,接收完成后將當(dāng)前一層設(shè)為整個(gè)代碼的最外層,通知第一轉(zhuǎn)換單元開始轉(zhuǎn)換,該代碼包括多條語句或多個(gè)對(duì)應(yīng)于語句的語法結(jié)構(gòu); 所述代碼緩存單元用于緩存輸入的控制程序的代碼; 所述第一轉(zhuǎn)換單元用于執(zhí)行轉(zhuǎn)換算法,依次遍歷當(dāng)前一層的語句或語法結(jié)構(gòu),對(duì)每一語句或語法結(jié)構(gòu),如該語句或該語法結(jié)構(gòu)對(duì)應(yīng)的語句為賦值語句,則直接轉(zhuǎn)換為一函數(shù)式,將該函數(shù)式及其順序號(hào)添加到所述關(guān)系集中;如該語句或該語法結(jié)構(gòu)對(duì)應(yīng)的語句是合法的程序控制語句,則調(diào)用第二轉(zhuǎn)換單元將其轉(zhuǎn)換為函數(shù)式;遍歷完成后將得到關(guān)系集輸出到優(yōu)化器; 所述第二轉(zhuǎn)換單元用于將程序控制語句轉(zhuǎn)換為函數(shù)式,轉(zhuǎn)換時(shí)按序遍歷該程序控
制語句的各個(gè)控制分支,對(duì)每個(gè)控制分支,將當(dāng)前一層設(shè)為該控制分支代碼的最外層,調(diào)用
第一轉(zhuǎn)換單元對(duì)該控制分支的所有語句或?qū)?yīng)于語句的語法結(jié)構(gòu)依次進(jìn)行處理,處理完成
后,根據(jù)該程序控制語句的類型將程序控制語句轉(zhuǎn)換為相應(yīng)的函數(shù)式。 進(jìn)一步地,所述的冗余數(shù)據(jù)分析器,其特征在于 所述第一轉(zhuǎn)換單元將賦值語句或?qū)?yīng)于賦值語句的語法結(jié)構(gòu)轉(zhuǎn)換為一函數(shù)式時(shí),該函數(shù)式的因變量為該賦值語句等號(hào)左邊的變量,該函數(shù)式的自變量應(yīng)為該賦值語句等號(hào)右端的所有變量,如等號(hào)右端沒有變量,則該函數(shù)式的自變量為空。
進(jìn)一步地,所述的冗余數(shù)據(jù)分析器,其特征在于 所述第二轉(zhuǎn)換單元根據(jù)該程序控制語句的類型將程序控制語句轉(zhuǎn)換為相應(yīng)的函數(shù)時(shí),按以下方式進(jìn)行 對(duì)IF_ELSE語句,先進(jìn)行分支對(duì)等化的預(yù)處理,使兩個(gè)分支的函數(shù)式對(duì)等出現(xiàn);然后只保留一個(gè)分支上的所有函數(shù)式,對(duì)其中的每一函數(shù)式,將另一分支上對(duì)等的函數(shù)式的
自變量及判斷條件中的變量合并到該函數(shù)式的自變量中,合并后得到的函數(shù)式即為轉(zhuǎn)換后的函數(shù)式; 對(duì)除SWITCH語句外的其他條件分支語句,先將該語句轉(zhuǎn)換成IF_ELSE語句,然后采用IF—ELSE語句的轉(zhuǎn)換方式轉(zhuǎn)換為函數(shù)式;
對(duì)WHILE語句,將判斷條件中的變量合并到該語句各函數(shù)式的自變量中,將各函
數(shù)式的因變量合并到本函數(shù)式的自變量中,得到轉(zhuǎn)換后的函數(shù)式。 進(jìn)一步地,所述的冗余數(shù)據(jù)分析器,其特征在于 所述第二轉(zhuǎn)換單元對(duì)除SWITCH語句外的其他循環(huán)語句,先轉(zhuǎn)換成賦值語句和
WHILE語句,然后采用賦值語句和WHILE語句的轉(zhuǎn)換方式轉(zhuǎn)換為函數(shù)式; 對(duì)SWITCH語句,先轉(zhuǎn)換成賦值語句和WHILE語句,然后采用賦值語句和WHILE語
句的轉(zhuǎn)換方式轉(zhuǎn)換為函數(shù)式;或者,先進(jìn)行分支對(duì)等化的預(yù)處理,使得各分支的函數(shù)式對(duì)等
出現(xiàn);然后只保留一個(gè)分支上的所有函數(shù)式,對(duì)其中的每一函數(shù)式,將其他分支對(duì)等的函數(shù)
式的自變量和判斷條件中的變量合并到該函數(shù)式的自變量中,合并得到的函數(shù)式即為轉(zhuǎn)換
后的函數(shù)式。 進(jìn)一步地,所述的冗余數(shù)據(jù)分析器,其特征在于 所述第二轉(zhuǎn)換單元對(duì)IF_ELSE語句,或IF_ELSE語句和SWITCH語句進(jìn)行分支對(duì)等化的預(yù)處理時(shí),逐次比較各分支相同位置上的函數(shù)式,如各分支上第n個(gè)函數(shù)式的因變量有m種,n = 1,2,... ,,m = 2,3,...;則以"該因變量=該因變量"的方式在每個(gè)分支補(bǔ)充m-l個(gè)函數(shù)式,補(bǔ)充的函數(shù)式的因變量是其他分支第n個(gè)函數(shù)式的因變量且不同于該分支第n個(gè)函數(shù)式的因變量,補(bǔ)充的函數(shù)式與該第n個(gè)函數(shù)式位置連續(xù)且其中每一位置上的函數(shù)式的因變量均相同,之后,從第n+m個(gè)函數(shù)式開始進(jìn)行下次比較。 進(jìn)一步地,所述的冗余數(shù)據(jù)分析器,其特征在于,所述優(yōu)化器按以下方式對(duì)所述原始集進(jìn)行尋優(yōu) 先將關(guān)系集中所有函數(shù)式置為"存在"狀態(tài);然后根據(jù)輸入的原始集V、目標(biāo)集AV和關(guān)系集F,從尾至頭遍歷關(guān)系集F中的函數(shù)式; 每一次遍歷過程中,對(duì)當(dāng)前的函數(shù)式Vj = fi(Vu,Vi2,…),i = 1,2,... ,n;如Vj不屬于AV,則結(jié)束對(duì)該函數(shù)式的處理;如Vj屬于AV,則從AV中刪除Vj,并繼續(xù)判斷該函數(shù)式是否為"存在"狀態(tài),如否,結(jié)束對(duì)該函數(shù)式的處理,如為"存在"狀態(tài),還要將該函數(shù)式所有自變量合并到當(dāng)前的AV中并取消該函數(shù)式的存在狀態(tài); 每一次遍歷結(jié)束后,將AV中的變量合并到0V中,并判斷當(dāng)前AV中的變量是否與該次遍歷前的相同,如果相同,則將當(dāng)前的OV中的變量作為確定的冗余變量輸出,結(jié)束優(yōu)化,如果不同,以同樣方式繼續(xù)下一次的遍歷。 上述冗余數(shù)據(jù)自動(dòng)選擇方法和分析器,能夠從所有的變量中自動(dòng)挑選出冗余最優(yōu)集作為冗余數(shù)據(jù),這些冗余數(shù)據(jù)的值相同時(shí),就能使輸出變量在此后保持一致,且挑選出的冗余最優(yōu)集包含的元素少,占用的軟硬件資源少。 本發(fā)明要解決的另一技術(shù)問題是提供一種實(shí)現(xiàn)無擾切換的方法和系統(tǒng),可以從原始集中自動(dòng)選擇得到較少的冗余變量,主機(jī)和備機(jī)之間拷貝更新選擇的冗余變量的值,能使輸出變量在此后任意正整數(shù)周期保持雙機(jī)一致。 為解決這個(gè)問題,本發(fā)明提供了一種實(shí)現(xiàn)無擾切換的方法,應(yīng)用于采用備份式冗余的計(jì)算機(jī)控制系統(tǒng),該方法包括 所述的冗余數(shù)據(jù)的自動(dòng)選擇方法選擇得到冗余最優(yōu)集,其中包含一個(gè)或多個(gè)冗余
將所述冗余最優(yōu)集配置到采用備份式冗余的設(shè)備中可作為主機(jī)的每一個(gè)設(shè)備上,
11所述設(shè)備工作時(shí)運(yùn)行所述控制程序; 在實(shí)現(xiàn)主機(jī)和備機(jī)的雙機(jī)運(yùn)算同步的冗余期間,雙機(jī)暫停運(yùn)算,由主機(jī)將所述冗余最優(yōu)集中各個(gè)變量的值拷貝給從機(jī),從機(jī)更新自己內(nèi)存中的這些變量的值,拷貝結(jié)束后,雙機(jī)同時(shí)啟動(dòng)控制程序。 進(jìn)一步地,所述的方法,其特征在于 所述采用備份式冗余的計(jì)算機(jī)控制系統(tǒng)為分布式控制系統(tǒng)(DCS),所述控制程序?yàn)楣I(yè)控制程序,所述冗余配置的設(shè)備為該DCS系統(tǒng)中采用備份式冗余并運(yùn)行所述工業(yè)控制程序的控制站; 所述冗余數(shù)據(jù)的自動(dòng)選擇在工程師站進(jìn)行,該工程師站將選擇得到的冗余最優(yōu)集下裝到所述控制站。 為解決這個(gè)問題,本發(fā)明還提供了一種采用備份式冗余的計(jì)算機(jī)控制系統(tǒng),包括控制程序的編程設(shè)備和控制程序的執(zhí)行設(shè)備,所述執(zhí)行設(shè)備采用備份式冗余的方式配置,其特征在于,還包括所述的冗余數(shù)據(jù)分析器,其中 所述編程設(shè)備用于確定控制程序中定義的所有變量組成的原始集,主備切換時(shí)需要保證輸出無擾的變量組成的目標(biāo)集,將所述原始集、目標(biāo)集和控制程序的代碼輸出到所述冗余數(shù)據(jù)分析器; 所述冗余數(shù)據(jù)分析器還用于將得到的冗余最優(yōu)集配置到所述執(zhí)行設(shè)備中可作為主機(jī)的每一個(gè)設(shè)備上; 所述執(zhí)行設(shè)備作為主機(jī)時(shí),在雙機(jī)運(yùn)算同步的冗余期間暫停運(yùn)算,將所述冗余最
優(yōu)集中各個(gè)變量的值拷貝給從機(jī),拷貝結(jié)束后,與備機(jī)同時(shí)啟動(dòng)所述控制程序; 所述執(zhí)行設(shè)備作為備機(jī)時(shí),在雙機(jī)運(yùn)算同步的冗余期間暫停運(yùn)算,根據(jù)從主機(jī)拷
貝的所述冗余最優(yōu)集中各個(gè)變量的值更新自己內(nèi)存中的這些變量的值,拷貝結(jié)束后,與主
機(jī)同時(shí)啟動(dòng)所述控制程序。 進(jìn)一步地,所述的計(jì)算機(jī)控制系統(tǒng),其特征在于 所述采用備份式冗余的計(jì)算機(jī)控制系統(tǒng)為分布式控制系統(tǒng)(DCS),所述控制程序
的編程設(shè)備和冗余數(shù)據(jù)分析器位于該DCS中的工程師站; 所述控制程序的執(zhí)行設(shè)備為該DCS中運(yùn)行工業(yè)控制程序的控制站; 所述冗余數(shù)據(jù)分析器得到工業(yè)控制程序的冗余最優(yōu)集后,下裝到相應(yīng)的控制站中。 上述實(shí)現(xiàn)無擾切換的方法和系統(tǒng),能夠從所有的變量中自動(dòng)挑選出冗余最優(yōu)集作為冗余數(shù)據(jù),在雙機(jī)不同步時(shí)通過拷貝更新這些冗余數(shù)據(jù)值就能使輸出變量在此后保持一致,從而實(shí)現(xiàn)輸出無擾切換。無需人工選擇,且挑選出的冗余最優(yōu)集包含的元素少,占用的軟硬件資源少。


圖1為典型的冗余配置的DCS系統(tǒng)的結(jié)構(gòu)示意 圖2為本發(fā)明實(shí)施例冗余數(shù)據(jù)分析器在DCS系統(tǒng)中的位置的示意 圖3為圖2中冗余數(shù)據(jù)分析器的構(gòu)成與數(shù)據(jù)流傳遞的示意 圖4為本發(fā)明實(shí)施例將中間代碼轉(zhuǎn)換為關(guān)系集的轉(zhuǎn)換方法的流程 圖5為圖4中程序控制語句處理算法的流程圖; 圖5a為圖3中轉(zhuǎn)換器的模塊圖; 圖6a為從X到Y(jié)的變量之間映射是單值的情況的示意圖; 圖6b為從X到Y(jié)的變量之間映射是多值的情況的示意圖; 圖7為本發(fā)明實(shí)施例采用的優(yōu)化算法的流程示意圖。
具體實(shí)施例方式
下面將結(jié)合附圖及實(shí)施例對(duì)本發(fā)明的技術(shù)方案進(jìn)行更詳細(xì)的說明。 本發(fā)明用于采用備份式冗余的計(jì)算機(jī)控制系統(tǒng),例如DCS(分布式控制系統(tǒng)),工
作于運(yùn)行工業(yè)控制程序的工程師站,主要作用是在工業(yè)控制程序編程完成后幫助挑選冗余
數(shù)據(jù),將來控制站據(jù)此進(jìn)行數(shù)據(jù)冗余以使雙機(jī)的輸出變量值保持一致,實(shí)現(xiàn)無擾切換。 以下圖1所示的DCS系統(tǒng)為例進(jìn)行說明,但本發(fā)明不局限于此,其他采用備份式冗
余的計(jì)算機(jī)控制系統(tǒng)都可以使用該方案。 冗余數(shù)據(jù)分析器運(yùn)行于工程師站,在DCS系統(tǒng)中的位置如圖2所示。圖中的原始集(V)是工程人員在編程器中定義的所有變量組成的集合。目標(biāo)集(AV)可以是原始集的任意子集,控制站主從機(jī)之間的冗余(主機(jī)將部分或全部數(shù)據(jù)拷貝給從機(jī))就是要保證目標(biāo)集中的變量值在雙機(jī)切換時(shí)可以無擾。從現(xiàn)場(chǎng)控制的角度看,目標(biāo)集可以由工業(yè)控制程序中的輸出變量(例如輸出變量可能是閥門開度值)組成,當(dāng)然目標(biāo)集也可以就是原始集,因此冗余數(shù)據(jù)分析器將目標(biāo)集的組成作為程序的輸入,這樣就保證了目標(biāo)集設(shè)定的靈活性。冗余數(shù)據(jù)分析器的功能就是根據(jù)工業(yè)控制程序從原始集中挑選出的子集,將來主從機(jī)之間冗余這個(gè)子集來實(shí)現(xiàn)目標(biāo)集無擾切換,這個(gè)子集稱之為冗余最優(yōu)集(0V)。如果將從原始集挑選出冗余最優(yōu)集的過程視為對(duì)原始集的尋優(yōu),那么在尋優(yōu)過程中每次得到的子集都應(yīng)滿足條件雙機(jī)之間拷貝更新該子集中冗余變量的值可使目標(biāo)集中變量的值在此后任意正整數(shù)周期運(yùn)算結(jié)束時(shí)保持雙機(jī)一致,該條件就是優(yōu)化約束條件。冗余最優(yōu)集是滿足優(yōu)化約束條件且包含元素個(gè)數(shù)最少的原始集的子集。 顯然,冗余數(shù)據(jù)分析器確定最優(yōu)集的依據(jù)就是工業(yè)控制程序,這些程序是由多種編程語言(如ST, LD, CFC, SFC等)編寫而成。對(duì)于冗余數(shù)據(jù)分析器而言,從這些語言編寫成的源代碼開始分析是沒有必要的,因?yàn)檫@相當(dāng)于進(jìn)行了一部分編譯的分析工作,而這個(gè)工作是編程器原有的主要工作之一。因此,本實(shí)施例在編程器將各種語言編寫的工業(yè)控制程序轉(zhuǎn)成統(tǒng)一形式的中間代碼后,再傳送到冗余數(shù)據(jù)分析器,同時(shí)向冗余數(shù)據(jù)分析器傳送原始集和目標(biāo)集,由冗余數(shù)據(jù)分析器最終給出冗余最優(yōu)集。 中間代碼可以是一種統(tǒng)一的語法結(jié)構(gòu),例如樹或圖。本實(shí)施例中,中間代碼是編程器和冗余數(shù)據(jù)分析器約定的一種語法樹結(jié)構(gòu),該語法樹結(jié)構(gòu)可以表示各種語言編寫的工業(yè)控制程序的運(yùn)算邏輯。編程器將各種語言描述的工業(yè)控制程序轉(zhuǎn)成用該結(jié)構(gòu)描述的中間代碼,直接保存在內(nèi)存中交給冗余數(shù)據(jù)分析器進(jìn)行分析。工業(yè)控制程序的語句到語法樹結(jié)構(gòu)的轉(zhuǎn)換是已有的一種做法,這里不再詳細(xì)進(jìn)行介紹。在其他例中,中間代碼也可以是某種統(tǒng)一的語言,例如C語言、ST語言或CFC語言等等。 圖3示出了冗余數(shù)據(jù)分析器的構(gòu)成與數(shù)據(jù)流,如圖所示,冗余數(shù)據(jù)分析器由兩部分構(gòu)成轉(zhuǎn)換器和優(yōu)化器,其中
13
轉(zhuǎn)換器用于接收控制程序的中間代碼,將中間代碼轉(zhuǎn)換為包含多個(gè)函數(shù)式及其順序信息的關(guān)系集(F)并輸出到優(yōu)化器。轉(zhuǎn)換時(shí),按工業(yè)控制程序的執(zhí)行順序,依照中間代碼表示的運(yùn)算邏輯將中間代碼轉(zhuǎn)換為反映變量之間關(guān)系的多個(gè)函數(shù)式。更具體地,是按照所述控制程序的代碼的執(zhí)行順序,提取出所述代碼表示的運(yùn)算邏輯中存在的因變量及與每一因變量相關(guān)的所有自變量,將每一因變量及其自變量表示為反映變量之間關(guān)系的一函數(shù)式并記錄各函數(shù)式的順序信息。 關(guān)系集是轉(zhuǎn)換器的輸出也是優(yōu)化器的輸入,關(guān)系集的元素為函數(shù)式及其在編程時(shí)的邏輯順序號(hào)組成的二元組。該二元組用集合語言可以描述為
F = {(i, fi()) I i = 1,2, ...m} 其中,分量i表示該函數(shù)式的順序號(hào),m是關(guān)系集中元素的總個(gè)數(shù)。轉(zhuǎn)換得到的第i
個(gè)函數(shù)式fi()可表示為Vj二fi( ,^, ),Vj,Vil,Vi2,…均為原始集中的變量。其中Vj
是轉(zhuǎn)換時(shí)從中間代碼表示的運(yùn)算邏輯中提取出的因變量,也可稱為函數(shù)值變量;Vil,vi2,…
是轉(zhuǎn)換從中間代碼表示的運(yùn)算邏輯中提取出的與因變量Vj相關(guān)的所有自變量。也即將每
個(gè)因變量及其相關(guān)的自變量表示為一個(gè)函數(shù)式。而函數(shù)式的順序號(hào)要保證按該順序號(hào)順序執(zhí)行函數(shù)式fi()&()f")…和執(zhí)行工業(yè)控制程序?qū)τ谠技兞恐档淖兓堑葍r(jià)的。
為了方便理解,下面對(duì)關(guān)系集的形成進(jìn)行舉例說明。這些例子的輸入應(yīng)是由語法樹結(jié)構(gòu)的中間代碼來表示,為便于閱讀,此處使用c語言進(jìn)行描述。
0093]假設(shè)中間代碼如下所示力=/(W0094]例1 :
0095]VAR
0096]a:DINT
0097]b :DINT
0098]c :DINT
0099]d細(xì)L
0100]e :DINT
0101]END—VAR
0102]原始集V和目標(biāo)集AV為0103]V = {a, b, c, d, e};此例中取為AV =0104]中間代碼為0105]a := 1 ;
0106]b : = b+1 ;0107]c := a氺2+l+e ;0108]IF e > ==100THEN
0109]d := 0 ;
0110]ELSE
0111 ]d := 1 ;
0112]END—IF
0113]上述運(yùn)算邏輯可轉(zhuǎn)換為以下函數(shù)式0114]a = f! 0
<formula>formula see original document page 15</formula> 因此,關(guān)系集F為<formula>formula see original document page 15</formula>
轉(zhuǎn)換器的工作是將中間代碼進(jìn)行轉(zhuǎn)換生成關(guān)系集,在上面的例子中可見,對(duì)于中間代碼中的賦值語句可以直接轉(zhuǎn)換 再例如 a = b+c ;應(yīng)轉(zhuǎn)換為函數(shù)式<formula>formula see original document page 15</formula>
c := a*2+l+e ;應(yīng)轉(zhuǎn)換為函數(shù)式<formula>formula see original document page 15</formula>
c := c+1 ;應(yīng)轉(zhuǎn)換為函數(shù)式<formula>formula see original document page 15</formula> c := 5 ;應(yīng)轉(zhuǎn)換為函數(shù)式<formula>formula see original document page 15</formula> 對(duì)于程序結(jié)構(gòu)控制類的語句,例如IF, IF_ELSE, FOR, WHILE, DO_WHILE, SWITCH等
有時(shí)要先進(jìn)行一些預(yù)處理,然后再進(jìn)行轉(zhuǎn)換,例如 IF—ELSE語句的轉(zhuǎn)換 if (e >= 10) { d = 0; } else { d = c; } 再將該運(yùn)算邏輯轉(zhuǎn)換為函數(shù)式d = f (c, e) "F語句的轉(zhuǎn)換 IF x > = 100THEN y : = z+1 ; END_IF 先進(jìn)行預(yù)處理,將該結(jié)構(gòu)轉(zhuǎn)換為基本的條件分支語句即IF_ELSE語句 IF x > = 100THEN y : = z+1 ; ELSE y:=y; END—IF 再將該運(yùn)算邏輯轉(zhuǎn)換為函數(shù)式y(tǒng) = f (x, z, y)。
SWITCH語句的轉(zhuǎn)換 switch (a+b) { case 1 :c = d+1break 5cass 2 :
d = a+bbreak ^C3S6 3 :e = d+1 ;break 5default :d = 0 ;
先將其轉(zhuǎn)換為switch(a+b)
C3S6 1 :
C = d+1 ;
d = d
breakC3S6 2 :
c = c ^d = a+b
break ^
C3S6 3 :c = c ^d = d ;e = d+1break j
default :c = cd = 0
6
6
再將該運(yùn)算邏輯轉(zhuǎn)換為以下函數(shù)式
c = f (a, b, c, d)d = f (a, b, d)e = f (a, b, d, e) WHILE語句的轉(zhuǎn)換:0191] while (a ! = 0)
:0192] {
:0193] b = 5 ;
:0194] a—;
:0195] }
:0196] 該運(yùn)算邏輯轉(zhuǎn)換為函數(shù)式
:0197] b = f(a,b)
:0198] a = f(a)
:01"] D0_WHILE語句的轉(zhuǎn)換
:0200] do
:0201] {
:0202] a = a+1 ;
:0203] i = i+1 ;
:0204] }while(i < 100);
:0205] 先預(yù)處理,將該結(jié)構(gòu)轉(zhuǎn)換為基本的循環(huán)語句即WHILE語句
:0206] a = a+1 ;
:0207] i = i+1 ;
:0208] while (i < 100)
:0209] {
:0210] a = a+1 ;
:0211] i = i+1 ;
:0212] }
:0213] 再將該運(yùn)算邏輯轉(zhuǎn)換為以下函數(shù)式
:0214] a = f(a)
:0215] i = f (i)
:0216] a = f(a,i)
:0217] i = f(i)
:0218] .FOR語句的轉(zhuǎn)換
:0219] for(i = 0 ;i < a ;i++)
:0220] {
:0221] b = b+1 ;
:0222] c = 7 ;
:0223] } 先預(yù)處理,將該結(jié)構(gòu)轉(zhuǎn)換為基本的循環(huán)語句即WHILE語句 i = 0 ; while(i<a) { b = b+1 ; c = 7 ;
i = i+1 ; } 再將該運(yùn)算邏輯轉(zhuǎn)換為以下函數(shù)式 i = f () b = f(i,a,b) c = f(i,a,c) i = f(i,a) 由于這些程序結(jié)構(gòu)控制類的語句在語法上是可以嵌套出現(xiàn)的,因此轉(zhuǎn)換器算法中
預(yù)處理這類語句的函數(shù)之間也可能會(huì)遞歸調(diào)用。 例如 Ifa > b THEN c = a+b ; Else Ifd > e THEN c = d+e ;END—IF END—IF 先預(yù)處理,將該結(jié)構(gòu)轉(zhuǎn)換為 Ifa > b
c = a+b ; Else If d > e THEN c = d+e ; Else
c = c ; END—IF END—IF 先將外層分支中的賦值語句和內(nèi)層的IF_ELSE語句的運(yùn)算邏輯轉(zhuǎn)換為對(duì)應(yīng)的函 數(shù)式 Ifa > b THEN
c = f (a, b); Else
c = f(d,e,c) End 再將外層的IF_ELSE語句的運(yùn)算邏輯轉(zhuǎn)換為函數(shù)式 c = f (a, b, d, e, c); 轉(zhuǎn)換工作包含兩個(gè)算法轉(zhuǎn)換算法和程序控制語句處理算法,二者構(gòu)成遞歸調(diào)用 關(guān)系。 本實(shí)施例的中間代碼采用語法樹形式,每顆語法樹對(duì)應(yīng)于一個(gè)賦值語句或一個(gè)程
18轉(zhuǎn)換算法"的流程如圖4所示,包括 依次遍歷當(dāng)前一層的每一顆語法樹,轉(zhuǎn)換算法開始時(shí)當(dāng)前一層指整個(gè)中間代碼的 最外層(步驟110,170),對(duì)每一顆語法樹,判斷該語法樹是否對(duì)應(yīng)于賦值語句(步驟120):
如對(duì)應(yīng)于賦值語句,則直接生成函數(shù)式,并順序生成該函數(shù)式的序號(hào),將其添加到 關(guān)系集中(步驟130); 如不對(duì)應(yīng)于賦值語句,則判斷是否合法的程序控制語句(步驟140),如果否,則生 成錯(cuò)誤報(bào)告(步驟150),結(jié)束轉(zhuǎn)換,如果是合法的程序控制語句,則調(diào)用程序控制語句處理 算法處理(步驟160)。 對(duì)賦值語句,轉(zhuǎn)換成的函數(shù)式的因變量應(yīng)為該賦值語句等號(hào)左邊的變量,函數(shù)式 的自變量應(yīng)為該賦值語句等號(hào)右端的所有變量,如等號(hào)右端沒有變量,則函數(shù)式的自變量 為空。 圖5示出了程序控制語句處理算法的流程,包括以下步驟 步驟210,按序遍歷各個(gè)控制分支,對(duì)每個(gè)控制分支,調(diào)用"轉(zhuǎn)換算法"對(duì)該控制分 支的所有語句依次進(jìn)行處理,遍歷完成后轉(zhuǎn)入下一步; 該步在處理控制分支時(shí),調(diào)用了轉(zhuǎn)換算法,在運(yùn)行轉(zhuǎn)換算法時(shí),對(duì)該控制分支當(dāng)前 一層進(jìn)行遍歷(當(dāng)前一層即為該控制分支代碼的最外層),如果還存在嵌套在該控制分支 的控制語句,就會(huì)再次調(diào)用程序控制語句處理算法,如此遞歸調(diào)用,這樣最底層的程序控制 語句和賦值語句會(huì)首先完成轉(zhuǎn)換,然后逐層向上,直到完成對(duì)第一層程序控制語句的轉(zhuǎn)換。
步驟220,判斷當(dāng)前處理的是哪種程序控制語句,本實(shí)施例中是分為幾下幾種情況 分別處理 a)對(duì)IF語句,先進(jìn)行分支預(yù)處理算法,將其轉(zhuǎn)換成IF_ELSE語句,然后采用IF_ ELSE語句的轉(zhuǎn)換方式轉(zhuǎn)換為函數(shù)式; b)對(duì)IF_ELSE語句,先進(jìn)行分支對(duì)等化的預(yù)處理,使兩個(gè)分支的函數(shù)式對(duì)等出現(xiàn)。 進(jìn)行轉(zhuǎn)換時(shí),只保留一個(gè)分支上的所有函數(shù)式,對(duì)其中的每一函數(shù)式,將另一分支上對(duì)等的 函數(shù)式的自變量及判斷條件中的變量合并到該函數(shù)式的自變量中,合并后得到的函數(shù)式即 為轉(zhuǎn)換后的函數(shù)式,文中提到的將變量"合并"均指"取并集"。 c)對(duì)FOR語句,先用分支預(yù)處理算法將其轉(zhuǎn)換成賦值語句和WHILE語句,然后采用 WHILE語句的轉(zhuǎn)換方式轉(zhuǎn)換為函數(shù)式; d)對(duì)WHILE語句,預(yù)處理時(shí)將判斷條件中的變量合并到該語句各個(gè)函數(shù)式的自變 量中;轉(zhuǎn)換時(shí),再將每個(gè)函數(shù)式的因變量合并到該函數(shù)式的自變量中,得到的函數(shù)式即為轉(zhuǎn) 換后的函數(shù)式; e)對(duì)DO WHILE語句,先用分支預(yù)處理算法將其轉(zhuǎn)換成賦值語句和WHILE語句,然 后采用WHILE語句的轉(zhuǎn)換方式轉(zhuǎn)換為函數(shù)式; f)對(duì)SWITCH語句,先進(jìn)行分支對(duì)等化的預(yù)處理,使得各個(gè)分支的函數(shù)式對(duì)等出 現(xiàn)。進(jìn)行轉(zhuǎn)換時(shí),只保留一個(gè)分支上的所有函數(shù)式,對(duì)其中的每一個(gè)函數(shù)式,將其他分支上 對(duì)等的函數(shù)式的自變量和判斷條件中的變量合并到該函數(shù)式的自變量中,合并后得到的函 數(shù)式即為轉(zhuǎn)換后的函數(shù)式。 對(duì)IF_ELSE語句和SWITCH語句進(jìn)行分支對(duì)等化的預(yù)處理時(shí),逐次比較各分支相同 位置上的函數(shù)式,如各分支上第n個(gè)函數(shù)式的因變量有m種,n = 1, 2,. . . , , m = 2, 3,...;
19則以"該因變量=該因變量"的方式在每個(gè)分支補(bǔ)充111-1個(gè)函數(shù)式,補(bǔ)充的函數(shù)式的因變量 是其他分支第n個(gè)函數(shù)式的因變量且不同于該分支第n個(gè)函數(shù)式的因變量,補(bǔ)充的函數(shù)式 與該第n個(gè)函數(shù)式位置連續(xù)且其中每一位置上的函數(shù)式的因變量均相同,之后,從第n+m個(gè) 函數(shù)式開始進(jìn)行下次比較。 以兩分支為例,如,分支一的第n個(gè)函數(shù)式為Vj = fi(Vil, vi2,…),分支二的第n
個(gè)函數(shù)式為v' j = fi(v' n,v' i2,…),則可以將Vj二Vj補(bǔ)充到分支二,作為第n個(gè)函
數(shù)式,將原來的v' j = fi(v' n,v' i2,…)作為第n+l個(gè)函數(shù)式,將v' j = v' j補(bǔ)充
到分支一,作為第n+1個(gè)函數(shù)式,Vj = & (vn, vi2,…)仍作為第n個(gè)函數(shù)式; 如果步驟220判斷出當(dāng)前語句不是任何一種合法的控制語句時(shí)給出錯(cuò)誤報(bào)告,結(jié)
束程序控制語句處理算法。 以上程序控制語句處理算法是將程序控制語句分為了三類,一類是條件分支語 句,一類是循環(huán)語句,一類是SWITCH語句。轉(zhuǎn)換時(shí),以IF—ELSE語句為基本的條件分支語句, 其他的條件分支語句先轉(zhuǎn)換為IF_ELSE語句后再進(jìn)行處理;以WHILE語句為基本的循環(huán)語 句,其他的循環(huán)語句先轉(zhuǎn)換為該WHILE語句后再進(jìn)行處理。以上雖然是對(duì)C語句的語句為 例,但程序控制語句的類別都是相似的,因此均可參照以上方式進(jìn)行處理。因?yàn)镾WITCH語 句其實(shí)也是一種多分支的條件分支語句,雖然在本實(shí)施例是單獨(dú)作為一類處理,但在另一 實(shí)施例中,也是可以作為第一類條件分支語句中的一種,轉(zhuǎn)換為多級(jí)IF—ELSE語句然后再 進(jìn)行處理的。 相應(yīng)地,如圖5a所示,可以將轉(zhuǎn)換器分為轉(zhuǎn)換控制單元、代碼緩存單元、第一轉(zhuǎn)換 單元和第二轉(zhuǎn)換單元,其中 轉(zhuǎn)換控制單元用于控制控制程序的代碼的接收和緩存到代碼緩存單元,接收完成 后將當(dāng)前一層設(shè)為整個(gè)代碼的最外層,通知第一轉(zhuǎn)換單元開始轉(zhuǎn)換,該代碼包括多條語句 或多個(gè)對(duì)應(yīng)于語句的語法結(jié)構(gòu); 代碼緩存單元用于緩存輸入的控制程序的代碼; 第一轉(zhuǎn)換單元用于執(zhí)行轉(zhuǎn)換算法,依次遍歷當(dāng)前一層的語句或語法結(jié)構(gòu),對(duì)每一 語句或語法結(jié)構(gòu),如該語句或該語法結(jié)構(gòu)對(duì)應(yīng)的語句為賦值語句,則直接轉(zhuǎn)換為一函數(shù)式, 將該函數(shù)式及其順序號(hào)添加到所述關(guān)系集中;如該語句或該語法結(jié)構(gòu)對(duì)應(yīng)的語句是合法的 程序控制語句,則調(diào)用第二轉(zhuǎn)換單元將其轉(zhuǎn)換為函數(shù)式;遍歷完成后將得到關(guān)系集輸出到 優(yōu)化器; 第二轉(zhuǎn)換單元用于將程序控制語句轉(zhuǎn)換為函數(shù)式,轉(zhuǎn)換時(shí)按序遍歷該程序控制語
句的各個(gè)控制分支,對(duì)每個(gè)控制分支,將當(dāng)前一層設(shè)為該控制分支代碼的最外層,調(diào)用第一
轉(zhuǎn)換單元對(duì)該控制分支的所有語句或?qū)?yīng)于語句的語法結(jié)構(gòu)依次進(jìn)行處理,處理完成后,
根據(jù)該程序控制語句的類型將程序控制語句轉(zhuǎn)換為相應(yīng)的函數(shù)式。 具體地, 第一轉(zhuǎn)換單元將賦值語句或?qū)?yīng)于賦值語句的語法結(jié)構(gòu)轉(zhuǎn)換為一函數(shù)式時(shí),該函 數(shù)式的因變量為該賦值語句等號(hào)左邊的變量,該函數(shù)式的自變量應(yīng)為該賦值語句等號(hào)右端 的所有變量,如等號(hào)右端沒有變量,則該函數(shù)式的自變量為空。 所述第二轉(zhuǎn)換單元根據(jù)該程序控制語句的類型將程序控制語句轉(zhuǎn)換為相應(yīng)的函 數(shù)時(shí),按以下方式進(jìn)行
對(duì)IF_ELSE語句,先進(jìn)行分支對(duì)等化的預(yù)處理,使兩個(gè)分支的函數(shù)式對(duì)等出現(xiàn);然 后只保留一個(gè)分支上的所有函數(shù)式,對(duì)其中的每一函數(shù)式,將另一分支上對(duì)等的函數(shù)式的 自變量及判斷條件中的變量合并到該函數(shù)式的自變量中,合并后得到的函數(shù)式即為轉(zhuǎn)換后 的函數(shù)式; 對(duì)除SWITCH語句外的其他條件分支語句,先將該語句轉(zhuǎn)換成IF_ELSE語句,然后 采用IF—ELSE語句的轉(zhuǎn)換方式轉(zhuǎn)換為函數(shù)式; 對(duì)WHILE語句,將判斷條件中的變量合并到該語句各函數(shù)式的自變量中,將各函 數(shù)式的因變量合并到本函數(shù)式的自變量中,得到轉(zhuǎn)換后的函數(shù)式。 對(duì)除SWITCH語句外的其他循環(huán)語句,先轉(zhuǎn)換成賦值語句和WHILE語句,然后采用 賦值語句和WHILE語句的轉(zhuǎn)換方式轉(zhuǎn)換為函數(shù)式; 對(duì)SWITCH語句,先轉(zhuǎn)換成賦值語句和WHILE語句,然后采用賦值語句和WHILE語 句的轉(zhuǎn)換方式轉(zhuǎn)換為函數(shù)式;或者,先進(jìn)行分支對(duì)等化的預(yù)處理,使得各分支的函數(shù)式對(duì)等 出現(xiàn);然后只保留一個(gè)分支上的所有函數(shù)式,對(duì)其中的每一函數(shù)式,將其他分支對(duì)等的函數(shù) 式的自變量和判斷條件中的變量合并到該函數(shù)式的自變量中,合并得到的函數(shù)式即為轉(zhuǎn)換 后的函數(shù)式。 優(yōu)化器對(duì)所述原始集進(jìn)行尋優(yōu)的方法在下文再詳細(xì)說明。 優(yōu)化器用于接收原始集、目標(biāo)集及所述關(guān)系集,根據(jù)所述目標(biāo)集和關(guān)系集對(duì)所述 原始集尋優(yōu),從原始集中選擇出滿足優(yōu)化器約束條件且包含元素個(gè)數(shù)最少的子集作為冗余 數(shù)據(jù),該子集稱為冗余最優(yōu)集。主機(jī)和備機(jī)間拷貝更新該冗余最優(yōu)集中變量的值后,該目標(biāo) 集中變量的值在此后任意正整數(shù)周期運(yùn)算結(jié)束時(shí)保持一致。 由冗余數(shù)據(jù)分析器運(yùn)行方式可知優(yōu)化器的輸入應(yīng)包含三個(gè)集合原始集V,目標(biāo) 集AV和關(guān)系集F?,F(xiàn)在逐一進(jìn)行說明 原始集V :該集合的元素為編程時(shí)(也稱為組態(tài)時(shí))定義的所有變量,使用集合語 言可以描述為V二 {Vl,v2,…,vJ,這里Vi是工業(yè)控制程序中定義的變量,n是定義的變 量總數(shù)。 目標(biāo)集AV :該集合可以是原始集V的任意子集,即AV G V ,例如可以將AV取為輸
出變量集合,雙機(jī)之間拷貝更新優(yōu)化器挑選出的冗余數(shù)據(jù)(0V)就是為了使目標(biāo)集AV的變
量值在此后任意正整數(shù)周期運(yùn)算結(jié)束時(shí)保持雙機(jī)一致。 關(guān)系集F :關(guān)系集既是優(yōu)化器的輸入,也是轉(zhuǎn)換器的輸出。 優(yōu)化器在對(duì)原始集V進(jìn)行尋優(yōu)后,產(chǎn)生輸出,即冗余最優(yōu)集(OV) 。 OV是V的滿足
優(yōu)化器約束條件且包含元素個(gè)數(shù)最少的子集,優(yōu)化器約束條件即雙機(jī)之間拷貝更新該子集
中冗余變量的值應(yīng)使目標(biāo)集中變量的值在此后任意正整數(shù)周期運(yùn)算結(jié)束時(shí)保持雙機(jī)一致。
需要說明一下,雖然OV和AV都是V的子集,但是它們之間沒有必然聯(lián)系。 對(duì)于上文中的例l,設(shè)AV = V,直觀上就能看得出OV = {b,e},也即在雙機(jī)之間拷
貝更新變量b, e,是目標(biāo)集AV的變量值在雙機(jī)切換后任意周期運(yùn)算結(jié)束時(shí)保持雙機(jī)一致的
充分和必要條件。 為清晰描述最優(yōu)集OV的含義,再舉一例
例2 : VAR〃定義變量a, b, c, d, e
e :DINT ;
END—VAR
IF a > = 100
THEN
b:=0;
a:=0;
ELSE
b : = 1 ;
a:=a+l;
END—IF
c:=a*2+l+e;
d : = c-a ; 上述代碼在運(yùn)算邏輯上可轉(zhuǎn)換為函數(shù)式 b = f!(a) a = f 2 (a) c = f3(a,e) d = f4(a,c) 因此,集合V, AV和F分別為 V = {a, b, c, d, e}; AV可以是V的任何子集,此例中取為AV = V ; F = {(1, b = f\(a)) , (2, a = f2(a)) , (3, c = f3(a, e)) , (4, d = f4(a, c))}。
直觀上就能看得出0V = {a, e} 實(shí)際上,優(yōu)化器的約束條件就是要保證將來在控制站中因?yàn)楦鞣N原因不同步(運(yùn) 算周期個(gè)數(shù)相差較遠(yuǎn))時(shí),控制站雙機(jī)的以下處理過程可以成功達(dá)到同步目的
雙機(jī)不同步->雙機(jī)停止運(yùn)算_>拷貝更新冗余數(shù)據(jù)(最優(yōu)集OV)-〉雙機(jī)重新開 始運(yùn)算_ >達(dá)到同步目的經(jīng)歷任意周期的運(yùn)算后雙機(jī)目標(biāo)集AV中的變量應(yīng)該完全一致。
如果約束條件可以用明確的數(shù)學(xué)語言進(jìn)行描述,那么優(yōu)化器的設(shè)計(jì)就可以轉(zhuǎn)換成 給出一個(gè)有約束的最優(yōu)化問題的求解算法。為方便進(jìn)行數(shù)學(xué)描述,此處先定義一種集合的 運(yùn)算"有序化Se(S)"(Se是sequence的簡寫)。如果V是某個(gè)變量名集合(記為V = {Vl, v2,…,vJ),則Se(V)也是一個(gè)集合,定義為
Se(V)4(^A,…e (變量v,的定義域"
實(shí)際Se (V)是V的一個(gè)多元組。 有了上述準(zhǔn)備工作,現(xiàn)在定義一個(gè)由集合X(定義域)到集合Y(值域)的映射Fc, 即Y = Fc (X):
22
X :X = Se (VI)
Y:Y = Se(V2)
其中,V1,V2是原始集V的子集。 Fc (這里的F表示函數(shù)function ;c表示約束,constraint):表示將X中的元素x 作為初值,順序運(yùn)算表達(dá)式4(),&0,…,fm(),如果運(yùn)算fi()時(shí)出現(xiàn)無具體值的自變量, 將該自變量和fi()的函數(shù)值視為可取任意值。經(jīng)過這樣的運(yùn)算后最終可以得到Y(jié)中的元 素y。這個(gè)映射可能是單值的,如圖6a,即從X到Y(jié)的變量之間映射是一對(duì)一或多對(duì)一的, 不存在一對(duì)多的情況;也可能是多值的,如圖6b所示,即從X到Y(jié)的變量之間的映射存在一 對(duì)多的情況。如果映射是單值的,稱之為函數(shù)。 任取一個(gè)X, Y不一定可以使Fc是一個(gè)函數(shù),例如,在例2中,如果取 X = Se ({a, b, c, d}) = {(a, b, c, d) | a, c, d G Z, b G {0, 1}}, Y = Se ({a, b, c, d, e}) = {(a, b, c, d, e) | a, c, d, e G Z, b G {0, 1}} 當(dāng)集合X的元素為某一值時(shí),例如x = {a, b, c, d} = {100, 1 , 10, 5},經(jīng)過Y =
Fc(X)作用后,得到Y(jié)中的對(duì)應(yīng)元素為y = {a,b,c,d,e} = {0,0, l+e, l+e, e},可見y不唯
一,映射Y二Fc(X)是多值的,因此它不是函數(shù)。 但如果取 X = Se ({a, e}) = {(a, e) | a, e G Z}, Y = Se ({a, b, c, d, e}) = {(a, b, c, d, e) | a, c, d, e G Z, b G {0, 1}} 顯然當(dāng)集合X的元素為某一值時(shí),經(jīng)過Y二Fc(X)作用后,得到Y(jié)中的對(duì)應(yīng)唯一的
元素y。例如x = {a, e} = {100, 8}時(shí),y = {a, b, c, d, e} = {0, 0, 9, 9, 8},也就是說映
射Y = Fc(X)是一個(gè)函數(shù),這一點(diǎn)直觀上就能看得出。 現(xiàn)在再定義映射Fc的一個(gè)冪運(yùn)算 Y = Fcn (X) = Fc (Fcn-1 (X)) , n為任意正整數(shù) 當(dāng)0時(shí),補(bǔ)充定義Y = Fc° (X) = Y 經(jīng)過這些準(zhǔn)備工作,得到優(yōu)化器約束條件的一個(gè)數(shù)學(xué)描述最優(yōu)集0V應(yīng)滿足對(duì) 于任意的n(正整數(shù)或O),集合X = Se(0V)可使映射Y = Fcn(X)是一個(gè)函數(shù),其中Y = Se(AV)。 在以上描述的基礎(chǔ)之上,優(yōu)化器的設(shè)計(jì)變成了對(duì)如下數(shù)學(xué)問題求解給定優(yōu)化器 的輸入,求一個(gè)算法可以求出V的一個(gè)子集0V,滿足 1、對(duì)于任意正整數(shù)的n,集合X = Se(0V)可使映射Y = Fcn(X)是一個(gè)函數(shù)(單值 映射),其中Y = Se(AV)。; 2、滿足條件1的情況下,包含元素個(gè)數(shù)最少。 對(duì)于上文中的例2,直觀上就能看得出0V = {(a, e) |a, e G Z}。 定理1 :給定輸入,優(yōu)化器的輸出0V —定存在。 證明對(duì)于任意的正整數(shù)n,Se(AV) = Fcn(Se(V)) —定是一個(gè)函數(shù),所以V滿足約 束條件;又因?yàn)閂中元素個(gè)數(shù)是有限的所以包含元素個(gè)數(shù)最少且滿足約束條件的OV—定存 在。 這里需要再說明一下,雙機(jī)之間拷貝更新最優(yōu)集OV,應(yīng)使目標(biāo)集AV的變量值在此 后任意正整數(shù)周期而不是一個(gè)周期運(yùn)算結(jié)束時(shí)保持雙機(jī)一致,從問題的數(shù)學(xué)描述來看,即n是任意正整數(shù),不能限制為n = 1?,F(xiàn)舉例說明
例3 :如下的關(guān)系集
y = f (x)
x = f (a)
i殳AV = {y} 分析如果只要求拷貝更新OV數(shù)據(jù)的第一個(gè)運(yùn)算周期結(jié)束時(shí),AV無擾,那么只要 求0¥= {x}即可,但是從工程邏輯上來看,第二個(gè)周期結(jié)束時(shí)雙機(jī)的AV變量y的值是否一 致就不確定了。對(duì)于這樣的工程邏輯,為保證AV變量y無擾,顯然需要冗余x, a即OV二 {x, a}。 通過例3,可見雙機(jī)之間拷貝更最優(yōu)集0V,應(yīng)使目標(biāo)集AV的變量值在此后任意正 整數(shù)周期而不是一個(gè)周期運(yùn)算結(jié)束時(shí)保持雙機(jī)一致,即在優(yōu)化問題的數(shù)學(xué)描述中n應(yīng)為任 意正整數(shù),不可以將其限制為n = l,否則不能徹底滿足無擾切換的要求。
根據(jù)以上優(yōu)化器數(shù)學(xué)問題描述,本實(shí)施例采用如下算法來求解OV,請(qǐng)參照?qǐng)D7所 示的流程 設(shè)算法開始時(shí)各個(gè)集合的狀態(tài)為
原始集V(優(yōu)化器輸入,已給定);
目標(biāo)集AV (優(yōu)化器輸入,已給定); 關(guān)系集F(優(yōu)化器輸入,已給定,為每個(gè)函數(shù)式設(shè)定一個(gè)狀態(tài),初始時(shí)均為"存在狀 態(tài)")。
最優(yōu)集0V (優(yōu)化器輸出,空集);
臨時(shí)變量集vTempSet (空集)。 用程序結(jié)構(gòu)描述該優(yōu)化算法如下(該優(yōu)化算法對(duì)應(yīng)于圖7中的流程) 優(yōu)化算法開始 OV = AV :將AV元素添加到OV中; While (vTempSet與AV包含元素未完全相同) {% 1 清空vTempSet,然后復(fù)制AV到vTempSet中; While (由尾至頭遍歷關(guān)系集F) {% 2 if(當(dāng)前函數(shù)式y(tǒng)i = fi(Xn,Xi2,...)中的函數(shù)值變量yi屬于AV) {&3 在AV中刪除變量yi; if (函數(shù)式f i的狀態(tài)為"存在狀態(tài)") {&4 將該函數(shù)式所有自變量Xil, xi2,...按照不重復(fù)原則添 加到AV中(即已經(jīng)屬于AV的不再添加); 將函數(shù)式&設(shè)置為"被刪除狀態(tài)"; } &4 } &3
24
} % 2 0V = 0V+ (AV-OV) 〃將屬于AV但不屬于OV的元素添加到OV中; } % 1 清空vT卿Set 輸出OV 優(yōu)化算法結(jié)束 結(jié)束狀態(tài) 輸入原始集V (無變化),目標(biāo)集AV (有變化),關(guān)系集F (包含元素不變但每個(gè)元
素狀態(tài)可能會(huì)有變化); 輸出最優(yōu)集OV (有變化); 臨時(shí)變量集vTempSet (無變化,仍為空集)。 用自然語言描述該優(yōu)化過程,優(yōu)化器對(duì)原始集進(jìn)行尋優(yōu)時(shí),包括如下步驟 先將關(guān)系集中所有函數(shù)式置為"存在"狀態(tài);然后根據(jù)輸入的原始集V、目標(biāo)集AV
和關(guān)系集F,從尾至頭遍歷關(guān)系集F中的函數(shù)式; 每一次遍歷過程中,對(duì)當(dāng)前的函數(shù)式Vj = fi(Vu,Vi2…),i = 1,2,... ,n ;如、不 屬于AV,則結(jié)束對(duì)該函數(shù)式的處理;如Vj屬于AV,則從AV中刪除Vj,并繼續(xù)判斷該函數(shù)式 是否為"存在"狀態(tài),如否,結(jié)束對(duì)該函數(shù)式的處理,如為"存在"狀態(tài),還要將該函數(shù)式所有 自變量合并到當(dāng)前的AV中并取消該函數(shù)式的存在狀態(tài); 每一次遍歷結(jié)束后,將AV中的變量合并到OV中,并判斷當(dāng)前AV中的變量是否與
該次遍歷前的相同,如果相同,則將當(dāng)前的OV作為最優(yōu)集輸出,結(jié)束優(yōu)化,如果不同,以同
樣方式繼續(xù)下一次的遍歷。 按例2的情況做一下推演,其中 V = {a, b, c, d, e}; AV可以是V的任何子集,此例中取為AV = V ;
F = {(1, b = f\(a)) , (2, a =
第一次遍歷
遍歷前的AV = {a, b, c, d, e
對(duì)函數(shù)式(1 = f4(a, c),因變 為存在狀態(tài),a, c在AV已存在,取消d
對(duì)函數(shù)式c = f3(a, e),因變 為存在狀態(tài),a, e在AV已存在,取消c 對(duì)函數(shù)式a = 4(a),因變量a屬于當(dāng)前AV,從AV中刪除a,此時(shí)a = f2(a)為存 在狀態(tài),自變量a在AV不存在,再加入到AV中,取消a二&(a)的存在狀態(tài),處理后的AV = {a, b, e}; 對(duì)函數(shù)式b = fJa),因變量b屬于當(dāng)前AV,從AV中刪除b,此時(shí)b = f工(a)為存 在狀態(tài),自變量a在AV已存在,取消b = ^ (a)的存在狀態(tài),處理后的AV = {a, e};
因此第一次遍歷后AV二 (a,eh將屬于AV但不屬于OV的元素添加到OV中,有OV ={a, e},因此要進(jìn)行第二次的遍歷;
第二次遍歷
f2(a)) , (3, c = f,(a, e)) , (4, d = f4(a, c
d屬于當(dāng)前AV,從AV中刪除d,此時(shí)d二 f4(a, c) f4(a,c)的存在狀態(tài),處理后的AV = {a,b,c,e}; c屬于當(dāng)前AV,從AV中刪除c,此時(shí)c = f3(a, e) f3(a, e)的存在狀態(tài),處理后的AV = {a, b, e};
遍歷前的AV = {a, e}; 對(duì)函數(shù)式d = f4(a, c),因變量d不屬于當(dāng)前AV,不做處理;
對(duì)函數(shù)式c = f3 (a, e),因變量c不屬于當(dāng)前AV,不做處理; 對(duì)函數(shù)式a二 f2(a),因變量a屬于當(dāng)前AV,從AV中刪除a,因?yàn)榇藭r(shí)a二 f2(a)已
取消存在狀態(tài),不再對(duì)自變量處理,處理后AV二 {e}; 對(duì)函數(shù)式b = ^ (a),因變量b不屬于當(dāng)前AV,不做處理; 因此第一次遍歷后AV = {e} , e已在0V中存在,因此仍有OV = {a, e},因?yàn)锳V在 遍歷后不同于遍歷前,還要進(jìn)行第三次遍歷; 第三次遍歷,遍歷前AV = {e},所有函數(shù)式的因變量都不屬于AV,因此均不做處 理,因此遍歷后AV不變,結(jié)束優(yōu)化,得到的最終的OV = {a, e}。 將上述冗余數(shù)據(jù)的自動(dòng)選擇方法應(yīng)用于采用備份式冗余的計(jì)算機(jī)控制系統(tǒng),可以 實(shí)現(xiàn)無擾切換,該實(shí)現(xiàn)無擾切換的方法包括 按上述冗余數(shù)據(jù)的自動(dòng)選擇方法選擇得到冗余最優(yōu)集,其中包含一個(gè)或多個(gè)冗余 將所述冗余最優(yōu)集配置到采用備份式冗余的設(shè)備中可作為主機(jī)的每一個(gè)設(shè)備上, 所述設(shè)備工作時(shí)運(yùn)行所述控制程序; 在實(shí)現(xiàn)主機(jī)和備機(jī)的雙機(jī)運(yùn)算同步的冗余期間,雙機(jī)暫停運(yùn)算,由主機(jī)將所述冗 余最優(yōu)集中各個(gè)變量的值拷貝給從機(jī),從機(jī)更新自己內(nèi)存中的這些變量的值,拷貝結(jié)束后, 雙機(jī)同時(shí)啟動(dòng)控制程序。 本實(shí)施例中,上述采用備份式冗余的計(jì)算機(jī)控制系統(tǒng)為分布式控制系統(tǒng)(DCS),上 述控制程序?yàn)楣I(yè)控制程序,上述冗余配置的設(shè)備為該DCS系統(tǒng)中采用備份式冗余并運(yùn)行 所述工業(yè)控制程序的控制站;冗余數(shù)據(jù)的自動(dòng)選擇在工程師站進(jìn)行,該工程師站將選擇得 到的冗余最優(yōu)集下裝到所述控制站。 相應(yīng)的采用備份式冗余的計(jì)算機(jī)控制系統(tǒng)包括控制程序的編程設(shè)備和控制程序 的執(zhí)行設(shè)備,所述執(zhí)行設(shè)備采用備份式冗余的方式配置,還包括上述冗余數(shù)據(jù)分析器,其 中 上述編程設(shè)備用于確定控制程序中定義的所有變量組成的原始集,主備切換時(shí)需 要保證輸出無擾的變量組成的目標(biāo)集,將所述原始集、目標(biāo)集和控制程序的代碼輸出到所 述冗余數(shù)據(jù)分析器; 上述冗余數(shù)據(jù)分析器還用于將得到的冗余最優(yōu)集配置到所述執(zhí)行設(shè)備中可作為 主機(jī)的每一個(gè)設(shè)備上; 上述執(zhí)行設(shè)備作為主機(jī)時(shí),在雙機(jī)運(yùn)算同步的冗余期間暫停運(yùn)算,將所述冗余最
優(yōu)集中各個(gè)變量的值拷貝給從機(jī),拷貝結(jié)束后,與備機(jī)同時(shí)啟動(dòng)所述控制程序; 上述執(zhí)行設(shè)備作為備機(jī)時(shí),在雙機(jī)運(yùn)算同步的冗余期間暫停運(yùn)算,根據(jù)從主機(jī)拷
貝的所述冗余最優(yōu)集中各個(gè)變量的值更新自己內(nèi)存中的這些變量的值,拷貝結(jié)束后,與主
機(jī)同時(shí)啟動(dòng)所述控制程序。 本實(shí)施例中,上述采用備份式冗余的計(jì)算機(jī)控制系統(tǒng)為分布式控制系統(tǒng)(DCS),所 述控制程序的編程設(shè)備和冗余數(shù)據(jù)分析器位于該DCS中的工程師站;上述控制程序的執(zhí)行 設(shè)備為該DCS中運(yùn)行工業(yè)控制程序的控制站;冗余數(shù)據(jù)分析器得到工業(yè)控制程序的冗余最
26優(yōu)集后下裝到相應(yīng)的控制站中。 下面給出上述優(yōu)化器算法的有效性證明。 為方便描述將主循環(huán)While (vTempSet與AV包含元素未完全相同){}記為"% 1 循環(huán)"。為便于研究算法,需要將"% l循環(huán)"變?yōu)閃hile (1){},即將其變?yōu)樗姥h(huán)(為敘述 方便,以下記為"% 1(1)循環(huán)")來研究各個(gè)集合的變化。 因?yàn)榧蟅,AV,F(xiàn),OV,vTempSet中元素個(gè)數(shù)都是有限的,且無重?cái)?shù)(詳見)。因此 不妨設(shè) " % ! (D循環(huán)"執(zhí)行的次數(shù)為0或i (i屬于正整數(shù),如無特別說明i取值范圍均如 此); V集合元素個(gè)數(shù)為n,F(xiàn)集合元素個(gè)數(shù)為m,設(shè)第i個(gè)循環(huán)周期結(jié)束時(shí)F集合"存在 狀態(tài)"元素構(gòu)成的子集是巳(i),元素個(gè)數(shù)為mli ;F集合"被刪除狀態(tài)"元素構(gòu)成的子集是 F2 (i),元素個(gè)數(shù)為m2i (補(bǔ)充定義F! (0) = F, F2 (0)=空集,ml。 = m, m2。 = 0)。
設(shè)第1次"% 1(1)循環(huán)"結(jié)束時(shí)的AV集合(記作AV(i))中的元素個(gè)數(shù)為ki(補(bǔ)充 未開始進(jìn)入循環(huán)時(shí)的AV集合AV(O) 二AV,元素個(gè)數(shù)k。二n),那么第i次"X 1(1)循環(huán)"開 始時(shí)的vTempSet集合(記作vTempSet (i))滿足vTempSet (i) = AV (i-l),且vTempSet (i) 中的元素個(gè)數(shù)應(yīng)為gi = k卜!(補(bǔ)充定義vTempSet (0)為空集,g。 = 0)。 注意,以下關(guān)系顯然成立(i =0,1,2,...)
ki < = nFji) U F2(i) = F, mli+m2i = m(i = 0, 1,2,...) mli > = mli+1, < = m2i+1 (由算法中&4括號(hào)間的內(nèi)容決定)柳3柳+ l), F2(/)^(/ + l)(由算法中&4括號(hào)間的內(nèi)容決定)
優(yōu)化器核心算法收斂性證明 本小節(jié)主要為了證明在優(yōu)化算法不會(huì)出現(xiàn)死循環(huán)。首先引理2說明在優(yōu)化算法 中,某一次"% 1(1)循環(huán)"開始前,AV為空集,則本次"X 1循環(huán)"結(jié)束后,AV仍未空集,即
引理2:對(duì)于"% 1(1)循環(huán)",若j(0或正整數(shù))滿足AV(j)=小,則AV(j+l)= 證明如果"% 1 (1)循環(huán)"開始前AV是空集,由算法邏輯顯然"&3分支"始終無法 進(jìn)入,那么本次"% 1(1)循環(huán)"結(jié)束后,AV不會(huì)有任何變化,即仍為空集。 得證。 定理3 : 對(duì)于"% 1(1)循環(huán)",存在一個(gè)有限的I(O或正整數(shù)),使vTempSet(I) =AV(I)。 證明 現(xiàn)在分兩種情況對(duì)上述等價(jià)命題進(jìn)行證明 情況1 (特殊情況)AV是空集(即兩個(gè)控制器不需要保證任何變量數(shù)據(jù)實(shí)現(xiàn)無擾 切換)
由核心算法可得滿足vTempSet(I) = AV(I),顯然正確。此時(shí)"% 1循環(huán)"無法 進(jìn)入,0V是空集, 情況2(—般情況)AV是V的非空子集。此時(shí)顯然"% l循環(huán)"至少要進(jìn)入一次。
使用反證法證明如下 假設(shè)經(jīng)歷任意次(記為i, i為正整數(shù))"% 1 (1)循環(huán)",每次循環(huán)前后AV均會(huì)變 化,即vTempSet(i)不等于AV(i)。由算法顯然可知每次"% 1(1)循環(huán)"使得AV發(fā)生變 化的必要條件是一定要進(jìn)入"&3分支"(具體來說分為進(jìn)入"&3分支"不進(jìn)入"&4分支"或 進(jìn)入"&4分支"兩種情形)。由假設(shè)每次"% 1(1)循環(huán)"后,兩種情形至少會(huì)有一種出現(xiàn)一 次。由算法的結(jié)構(gòu)可見,每次"% 1(1)循環(huán)"AV發(fā)生變化的必要條件總共最多只能出現(xiàn)m 次,可以分為情形a和情形b: 情形a:每次"X 1(1)循環(huán)"后只發(fā)生若干次(正整數(shù))進(jìn)入"&3分支"不進(jìn)入 "&4分支"的情形,則有v7V附/ 5^(/) c ^F0'),同時(shí)gi < ki, mli—! = mli, m2i—! = m2i (1)
情形b:每次"X 1(1)循環(huán)"后發(fā)生若干次(0或正整數(shù))進(jìn)入"&3分支"不進(jìn)入 "&4分支"的情形,也發(fā)生了若干次(正整數(shù))只進(jìn)入"&4分支"的情形(記作情形b),則 有 mli—! > mli, m2i—丄< m2i (2) 有了上述AV變化的"必要條件"的分析,可以研究n*m個(gè)"% 1循環(huán)"的情況,利 用"抽屜原理"將n*m個(gè)"% 1"周期分為m個(gè)組,每組n個(gè),如下所示
(1,2,…,n)
...... (i氺n+l, i氺n+2, , (i+l)氺n)
...... ((m_l)*n+l, (m_l)*n+2, , m*n) 對(duì)于上述各組,或者出現(xiàn)情形a,或者出現(xiàn)情形b。如果某一組的n次循環(huán)只出現(xiàn) 情形a,則由(1)顯然最遲在該組最后一個(gè)"% 1(1)循環(huán)"結(jié)束時(shí)AV成為空集,則由引理 2,下一個(gè)"% 1(1)循環(huán)"結(jié)束后AV仍為空集,這與假設(shè)相矛盾。所以每一組(每組有n次 "% l(l)"循環(huán))中至少出現(xiàn)一次情形b,這樣總共m組循環(huán)后,根據(jù)(2)mU二0且m2,二 m。這樣關(guān)系集F的所有關(guān)系式都成為"被刪除狀態(tài)",也就是說,當(dāng)"% 1 (1)循環(huán)"繼續(xù)進(jìn) 行時(shí),只能出現(xiàn)情形a 了,那么在如下的第m+l組循環(huán)后
(m*n+l, m*n+2, , (m+l)*n) AV必將變?yōu)榭占?,則由引理2,下一個(gè)(第(m+l)^+l個(gè))"% 1(1)循環(huán)"結(jié)束后
AV仍為空集,這與假設(shè)相矛盾。 因此假設(shè)不成立,原命題正確。 得證。 定理3實(shí)際上說明了優(yōu)化算法一定可以退出"% 1循環(huán)",并將退出"% 1循環(huán)"時(shí) 循環(huán)次數(shù)I(下同)的上限估計(jì)為(m+l)n次,實(shí)際上這是一個(gè)非常保守的估計(jì),實(shí)際循環(huán)結(jié) 束的次數(shù)比這個(gè)估計(jì)小很多。另外顯然可以得到推論4 :滿足定理3的I可以取1=0<^ AV是空集;滿足定理3的IX)e AV非空。 進(jìn)一步,還應(yīng)了解對(duì)于"% 1(1)循環(huán)",第I+1次及其后的每次循環(huán)前后集合AV和
28OV可能會(huì)有什么變化?下述引理和定理回答了這個(gè)問題,從而可以說明算法導(dǎo)致AV和0V 的變化是"收斂的"。 引理5 :對(duì)于"% 1(1)循環(huán)"和非空的AV,一定存在J(正整數(shù)),滿足J《I且 vremp&" J) 2 #0/) 證明:AV非空時(shí),首次出現(xiàn)vT卿Set (J) = AV(J)的"% 1 (1)循環(huán)"次數(shù)I > 0, 另一方面vTempSet(J) = AV(J)是vrem/7&^/) 3 JrG/)的特殊情況,所以命題顯然成立。
得證。 引理5說明對(duì)于"% 1(1)循環(huán)"和非空的AV,一定存在不大于I的正整數(shù)J,使得 第次"% 1(1)循環(huán)"前后,AV集合不變或變?yōu)樵瓉淼恼孀蛹?引理6 :對(duì)于"% 1(1)循環(huán)"和非空的AV,若正整數(shù)J滿足vre琴&"J)2 ^fX/),則
必有vr呻&"j+1) 2 +1) 證明 第J次"% 1 (1)循環(huán)"開始時(shí)各集合為
F丄(J-l) , F2 (J-l) , AV (J—1)(即vT卿Set (J)); 第J次"% 1 (1)循環(huán)"結(jié)束時(shí)(第J+l次"% 1 (1)循環(huán)"開始時(shí))各集合為 F丄(J) , F2 (J) , AV (J)(即vT卿Set (J+l)); 第J+l次"% 1(1)循環(huán)"結(jié)束時(shí)各集合為 F丄(J+l) , F2 (J+l) , AV (J+l)(即vT卿Set (J+2))。 對(duì)于本命題,這些集合應(yīng)滿足的關(guān)系是 AOZ — Dsi^J^S^GZ + l) (6.1)^G/-1)gAG/ —1)+1) (6.2)^rc/—1)2爿H7) (6.3) 這里采用如下證明方法對(duì)于第J和第J+l次"% 1 (1)循環(huán)"中的子循環(huán)"% 2循 環(huán)(用于遍歷關(guān)系集F)",進(jìn)行"同步"比較證明,目的是最終得到第J和第+1次"% 1(1) 循環(huán)"后得到的AV集合滿足"F0/)2W07 + 1)。為此,定義第次"% 1(1)循環(huán)"中子循環(huán) "% 2循環(huán)"在遍歷了第p個(gè)關(guān)系式(從第m個(gè)關(guān)系式開始向前遍歷)后,AV集合記作AV (J)
(P),補(bǔ)充定義: AV(J) (m+l) = AV(J-1) 顯然應(yīng)有AV (J) (1) = AV (J)。
因此原命題 vr,&"J+i)2 <=> k7)2,cz+i) e k;j)(i)2I("i)(1) (6.4) 現(xiàn)在使用數(shù)學(xué)歸納法來證明^r0/)(1) 3 ^F07 + 1)(1),從而原命題可證。
10首先,對(duì)于初始狀態(tài)顯然有^rG/)(w + l)二Jr(/-1)2 ^爿廠0/ + 1)(附+ 1) 2°假設(shè),對(duì)于p (滿足m+l > = p > 1)時(shí)成立^rC/)0) 2」r(J + l)0), 那么對(duì)于p-l的情況,AV(J) (p-l)和AV(J+1) (p-l)是AV(J) (p)和AV(J+1) (p) 分別在各自的"% 2循環(huán)"中遍歷了第p-l關(guān)系式后的AV集合,在分別遍第p-l個(gè)表達(dá)式 之前,根據(jù)(6. 1)和(6. 2)(將第J次"X 1(1)循環(huán)"中的被遍歷前的第p-l個(gè)表達(dá)式記作 f(J) (P-1)),應(yīng)有以下幾種情況: 2. l°f (J) (p-l)狀態(tài)是"存在狀態(tài)",f (J+l) (P-1)是"存在狀態(tài)";
該情況說明第p-1個(gè)關(guān)系式的函數(shù)值變量不屬于AV(J) (p),由假設(shè)該函數(shù)值變量
也不屬于AV(J+1) (p),因此在遍歷第p-l個(gè)關(guān)系式后,兩個(gè)"X 1(1)循環(huán)"(J次和J+l次)
中的AV集合均無變化,所以乂rO/)(P -1) 2 ^ + - l)仍然成立。 2. 2°f (J) (p-1)狀態(tài)是"存在狀態(tài)",f (J+l) (p-1)是"被刪除狀態(tài)"; 該情況說明第p-l個(gè)關(guān)系式的函數(shù)值變量一定屬于AV(J) (p),那么該函數(shù)值變量
可能屬于也可能不屬于AV(J+1) (p)。 該函數(shù)值變量屬于AV(J+1) (p)時(shí),因?yàn)閒 (J+l) (p-1)是"被刪除狀態(tài)",所以只進(jìn) 入"&3分支"不能進(jìn)入"&4分支",這樣遍歷完第p-1個(gè)關(guān)系式后,AV(J+1) (p-1)較AV(J+1) (P)只減少了一個(gè)變量;但是AV(J) (p-1)較AV(J) (p)也只減少了同一個(gè)變量,同時(shí)可能增 加一些新的變量(也可能不增加)。由假設(shè),所以」「0/)(^-1)2 ^「0/-1)(^)仍然成立。
該函數(shù)值變量不屬于AV(J+1) (p)時(shí),在第J+1次"X 1(1)循環(huán)"中無法進(jìn)入"&3 分支",那么AV(J+1) (p-l) = AV(J+1) (p);另一方面,在第次"% 1(1)循環(huán)"中,該函數(shù)值 變量屬于AV(J) (p),這樣將進(jìn)入"&3分支",該函數(shù)值變量將在AV(J) (p)中被刪除,然后可 能再添加一些變量(進(jìn)入"&4分支的話"),得到AV(J) (p-l),由于該函數(shù)值變量本來就不 屬于AV(J+1) (p-l) = AV(J+1) (p),根據(jù)假設(shè)JFG/)(P —1)2乂r(J + l)(P-l)仍然成立。
2. 3°f (J) (p-l)狀態(tài)是"被刪除狀態(tài)",f (J+l) (p-l)是"被刪除狀態(tài)";
該情況不能直接說明第p-l個(gè)關(guān)系式的函數(shù)值變量是否屬于AV(J) (p),所以又可 以分為以下三種子情況 2.3."第p-l個(gè)關(guān)系式的函數(shù)值變量不屬于AV(J) (p):那么必有該函數(shù)值變量也 不屬于AV(J+1) (p),則必有 ^ rC -1)=爿2 + l)(P) = + l)O -1) 2. 3. f第p-l個(gè)關(guān)系式的函數(shù)值變量屬于AV(J) (p)但函數(shù)值變量不屬于AV(J+1) (p):那么從AV (J) (p)到AV (J) (p-l)減少了該函數(shù)值變量,而AV (J+l) (P) = AV (J+l) (P-1),因?yàn)樵撟兞勘緛砭筒粚儆贏V(J+1) (p),根據(jù)假設(shè),所以^r0/)0-1)2^r07 + l)O-l)成立。 2.3.3。第p-l個(gè)關(guān)系式的函數(shù)值變量屬于AV(J)(p)也屬于AV(J+l) (p):那么從 AV(J) (p)到AV(J) (p-l)和從AV(J+1) (p)到AV(J+1) (p-l)均只減少了該函數(shù)值變量,根據(jù) 假設(shè),所以^ r( -1) 2 ^ + - l)成立。 按照數(shù)學(xué)歸納法的意義JfX/)(l) = JrOZ + l)(l)成立,由(6. 4)原命題得證。
得證。 引理6說明對(duì)于"% 1(1)循環(huán)"和非空的AV,若第J(正整數(shù))次"% 1(1)循環(huán)" 前后,AV集合不變或變?yōu)樵瓉淼恼孀蛹?,則第J+l "% 1(1)循環(huán)"前后AV集合的變化仍如 此。
定理7(收斂性定理):對(duì)于"%1(1)循環(huán)",存在一個(gè)有限的J(0或正整數(shù))J《1, 滿足任取N(0或正整數(shù))> =J時(shí),都有v7^^&《J) 2 ^rO/)。
證明 對(duì)于AV是空集的情況,J = 0 ; 對(duì)于AV不是空集的情況,引理5和引理6構(gòu)成了證明這種情況的一個(gè)數(shù)學(xué)歸納 法。
得證。 定理7實(shí)際上說明"% 1循環(huán)"退出之前,已經(jīng)保證AV進(jìn)入到"收斂狀態(tài)(每次循 環(huán)結(jié)束時(shí),AV總是不變或者變?yōu)樵瓉淼恼孀蛹?"。如果將"% 1循環(huán)"變?yōu)?% 1(1)循環(huán)", AV(i)形成的一個(gè)序列可以通過微積分學(xué)中的閉區(qū)間套定理(或單調(diào)有界收斂定理)中的 方法繼續(xù)進(jìn)行研究,由于本主題不再需要進(jìn)一步的結(jié)論,所以本文檔不再進(jìn)行深入論述。
若從某一次起,以后各次"% 1(1)循環(huán)"前后,某集合不再變化,本文稱之為"飽 和"。有了上述定理和引理,現(xiàn)在可以回答如下問題了,OV集是否可以達(dá)到"飽和",如能"飽 和"是否可在"% l循環(huán)"退出之前達(dá)到 推論8 :對(duì)于優(yōu)化算法,程序在退出"% 1循環(huán)"之前,0V集合可以達(dá)到"飽和"。
證明 當(dāng)程序退出時(shí),"% 1循環(huán)"已進(jìn)行到第I次,由定理7, AV集合已經(jīng)進(jìn)入到"收斂 狀態(tài)",在算法中0V集合的變化方式為0V = 0V+ (AV-0V),即將AV中不屬于0V的元素添加 到0V中,顯然若AV集合已經(jīng)進(jìn)入"收斂狀態(tài)"后,0V將達(dá)到"飽和狀態(tài)"。
得證。 優(yōu)化器核心算法有效性證明 上文已經(jīng)給出了優(yōu)化器算法應(yīng)滿足條件的數(shù)學(xué)描述,并證明了最優(yōu)集0V的存在 性。優(yōu)化器算法應(yīng)滿足 給定優(yōu)化器的輸入,求一個(gè)算法可以求出V的一個(gè)子集OV,滿足如下兩個(gè)約束條 件 1、對(duì)于任意的n(正整數(shù)或0),集合X二Se(0V)可使映射Y二Fcn(X)是一個(gè)函數(shù), 其中Y = Se(AV)。; 2、滿足條件1的情況下,包含元素個(gè)數(shù)最少。 現(xiàn)證明優(yōu)化算法的可行性,即需證明當(dāng)0V = 0V時(shí)可以滿足上述條件1和2,其中 0V由優(yōu)化算法得到。為此先給出幾個(gè)引理或映射Fc的性質(zhì),最后證明0V就是所求的最優(yōu)集。 在優(yōu)化算法面對(duì)的各類工程中,AV包含的元素個(gè)數(shù)是不確定的,可能是多個(gè),也可 能是1個(gè),甚至理論上也可以是空集。如果能將這些情況都轉(zhuǎn)化為AV只包含一個(gè)元素的情 況,那么為以后的證明肯定會(huì)帶來方便。如果在V中增加一個(gè)變量(不妨設(shè)為output),并在 F增加一個(gè)元素(m+l,output = f(原來AV中的元素)),最后將得到的OV中去掉output, 顯然這個(gè)0V和對(duì)原始問題求得的0V是一致的,即下述引理9成立。 引理9 :映射& = (X) O映射Y。 = Fc。 (X),其中Y。 = Se ({output}) , 0 = FU {(m+l, output = f(原來AV中的元素)))。
顯然得證。 映射Fc和關(guān)系及F密切相關(guān),不妨認(rèn)為由F生成的映射Fc()也可記作FcF(),那 么映射Y = Fcn(X)就是:r = ,對(duì)這種冪映射進(jìn)行進(jìn)一步分析,具有性質(zhì)10 : 性質(zhì)10 :對(duì)于任意的n (正整數(shù)),映射r = F《(X) O映射F = = ,即
它們同時(shí)為函數(shù)或同時(shí)不為函數(shù),其中集合F和G的關(guān)系如下
f = {(i, f ()) |i = 1,2,…,m且
f ()是"=/(、,",2,—),它是按照組態(tài)邏輯順序抽象出的第i個(gè)數(shù)據(jù)關(guān)系式}
G = {(kXm+i, f ()) I i = 1,2, ...,m;k = 0,l,…,n—l;且
f ()是"=/(、^,2,—),它是按照組態(tài)邏輯順序抽象出的第i個(gè)數(shù)據(jù)關(guān)系式}
顯然得證。 性質(zhì)10的物理意義很明顯,就是在實(shí)際控制中將n(正整數(shù))個(gè)周期的IEC運(yùn)算 的效果等價(jià)于一個(gè)周期內(nèi)完成一個(gè)新的IEC運(yùn)算,這個(gè)新的IEC運(yùn)算邏輯是由原IEC運(yùn)算 邏輯簡單重復(fù)n次產(chǎn)生的。所以必有映射r = F《(X)和r = (X) = Fce(X洞時(shí)為函數(shù)或同 時(shí)不為函數(shù)。 引理ll(函數(shù)定義域維數(shù)的可擴(kuò)張性)如果映射Y = FcF(X)是函數(shù),其中X = Se(0V), Y = Se(AV),那么映射J^Fc,(f)也是函數(shù),其中f = &(涼),且有
顯然得證。C^G涼。 引理12(函數(shù)值域維數(shù)的可擴(kuò)張性)如果映射^ = FcF(X), Y2 = FcF(X)是函 數(shù),其中X = Se(0V), Y丄=Se(AV》,Y2 = Se (AV2),那么映射f = F (X)也是函數(shù),其中 顯然得證。 性質(zhì)13 :如果映射Y丄=FcF (X》和Y2 = FcF (X2)均為函數(shù),其中X! = Se (0V》, Y丄=Se(AV》,X2 = Se(0V2), Y2 = Se (AV2),那么映射Y3 = FcF(X3)也是函數(shù),其中X3 = Se (0V丄U 0V2) , Y3 = Se (AV丄U AV2)。
證明 由引理11 , = FcF (X3)和Y2 = FcF (X3)均是函數(shù);
再由引理12, Y2 = FcF(X3)是函數(shù)。
得證。 現(xiàn)在給出一個(gè)定義,OV對(duì)關(guān)系集F的化簡集族從頭到尾遍歷F的所有關(guān)系式, 初始時(shí)將OV中的元素視為已確定數(shù)值的變量,按照集合F中的關(guān)系式的先后順序,對(duì)于函 數(shù)值y可以確定的關(guān)系式改為y = f(),也可以不作任何改動(dòng),經(jīng)過這樣一次遍歷后,得到 所有可能的關(guān)系集組成的集合,稱之為OV對(duì)關(guān)系集F的化簡集族,記作/(OF,F),該集族 中的元素稱為OV對(duì)關(guān)系集F的化簡集,記作# 。顯然也可以定義對(duì)關(guān)系集f的化簡集族 /(尺C^),其中的元素(化簡集)可以記為#(2)。......。顯然有 引理14 :如果Se(AV) = FcF(Se(0V))是 一 個(gè)函數(shù),#e /(F,),那么 &"。 = Fc^(&(OF))也是一個(gè)函數(shù) 顯然得證。 以下算法P實(shí)際上是優(yōu)化算法部分內(nèi)容("% 2循環(huán)")的等價(jià)變化與提煉,算法
P可以得到一個(gè)化簡集,見引理14。 算法P : OV為空,AV已知; AVT卿=AV ; While (由尾至頭遍歷關(guān)系集F) {% 5
if(當(dāng)前關(guān)系式y(tǒng)i = fi(xn,Xi2,...)中的函數(shù)值變量yi屬于AvTemp) {&6 在AvTemp中刪除變量yi ; 將該關(guān)系式所有自變量Xil, xi2,...按照無重?cái)?shù)原則添加到 AvTemp中(即已經(jīng)屬于AvTemp的不再添加); 將關(guān)系式&改為y = fi 0 ;〃與優(yōu)化算法中的"設(shè)置為被刪除狀態(tài)" 有一致性; } &6 } % 5 0V = AvT卿; 得到新的F記為A和0V ; 算法結(jié)束。 引理15 :算法P運(yùn)算后,映射Se(AV) = FcF (Se (0V))是一個(gè)函數(shù),且& e/CF,Or) (即F變成了一個(gè)0V對(duì)關(guān)系集F的化簡集) 證明由算法P本身的遍歷方式以及/(F,OF)的定義,引理結(jié)論顯然成立。
顯然得證。 引理16 :如果Se(AV) = FcF(Se(0V))是 一 個(gè)函數(shù),F(xiàn)e /(F,OF),且映射 &(#1) = /^(&(0。)為關(guān)系集^上的一個(gè)函數(shù),那么映射&(^1) :Fcp(Se((^ U 0V))是 關(guān)系集F上的一個(gè)函數(shù)。
證明 由,的定義可知在完成Se(AV》二Fcp(Se((^ U 0V))(記為原映射)映射過
程中,由于定義域?yàn)镾e(0K U 0V),包含了 0V所提供的維數(shù),所以按照f的生成方式可
將部分關(guān)系式化簡為無自變量形式,顯然這樣不影響原映射的進(jìn)行,這樣原映射就變?yōu)?&0^) = &#(&((^^6^)),由于已知&04。 = 7^(&(0。)是一個(gè)函數(shù),由引理ll(函數(shù)定
義域維數(shù)的可擴(kuò)張性),&G^^i^(&(OF^OF))是一個(gè)函數(shù)。 所以Se(AV》=FcF(Se(0V丄U 0V))是關(guān)系集F上的一個(gè)函數(shù)。
得證。 弓|理17 :若Se(AV) =FcF(Se(0V))是 一 個(gè)函數(shù),f e/(OF,F), Se^FO-Fc^S^O^))為關(guān)系集,上的 一 個(gè)函數(shù),那么映射Se(A^ U AV)= FcF(Se(0V丄U 0V))是關(guān)系集F上的一個(gè)函數(shù)。
證明 由引理16, Se(AV》=FcF(Se(0V丄U 0V))是關(guān)系集F上的一個(gè)函數(shù); 由引理ll(函數(shù)定義域維數(shù)的可擴(kuò)張性),Se(AV) 二Fcp(Se((^ U 0V))是關(guān)系集
F上的一個(gè)函數(shù); 進(jìn)而 由引理12 (函數(shù)值域維數(shù)的可擴(kuò)張性),Se (AV丄U AV) = FcF(Se (0V丄U 0V))是關(guān)
系集F上的一個(gè)函數(shù)。 得證。
若集合AV,關(guān)系集F,經(jīng)過算法P可以得到A和OV,再任取集合AVp關(guān)系集A ,經(jīng)過 算法P得到,尸)和0Vp由引理15和引理17可知,Se(AV! U AV) = FcF(Se(OV! U OV))是一 個(gè)函數(shù),且/f顯然是一個(gè)(0V+0V》對(duì)關(guān)系集F的化簡集,即 引理18 :若集合AV,關(guān)系集F,經(jīng)過算法P可以得到A和0V,再任取集合AV"關(guān)系 集& ,經(jīng)過算法P得到^2)和0Vp那么Se(AVi U AV) = Fcp(Se((^ U 0V))是一個(gè)函數(shù)且 ^2)e/(C^uOr,F)。
顯然得證。
為證明優(yōu)化算法滿足約束條件l,先給出優(yōu)化算法的一個(gè)等價(jià)形式算法Q : 算法Q : 算法初始狀態(tài)
輸入原始集V (已給定),目標(biāo)集AV (已給定),關(guān)系集F (已給定,每個(gè)關(guān)系式均 為"存在狀態(tài)");
輸出最優(yōu)集0V(空集); 臨時(shí)變量集vTempSet (空集)。 算法
0V = av :將av元素添加到0V中;〃 以便實(shí)現(xiàn)雙機(jī)立即無擾切換 While (vTempSet與AV包含元素未完全相同) {% 7
釋放vTempSet鏈表,然后復(fù)制AV到中vTempSet ; While (由尾至頭遍歷關(guān)系集F) {% 8
if(當(dāng)前關(guān)系式y(tǒng)i = fi(x^Xi2,...)中的函數(shù)值變量yi屬于AV) {&9
在AV中刪除變量yi ;
將該關(guān)系式所有自變量Xil, xi2,...按照無重?cái)?shù)原則添加到 AV中(即已經(jīng)屬于AV的不再添加); 將關(guān)系式4改為y = 4 0 ;〃與優(yōu)化算法中的"設(shè)置為被刪除狀態(tài)" 有一致性;
}&9 } % 8
0V = 0V+(AV-0V):將屬于AV但不屬于OV的元素添加到OV中; } % 7
釋放vTempSet鏈表 輸出OV 算法結(jié)束。 結(jié)束狀態(tài)
輸入原始集V (無變化),目標(biāo)集AV (有變化),關(guān)系集F (包含元素不變但每個(gè)元 素狀態(tài)可能會(huì)有變化);
輸出最優(yōu)集0V(有變化); 臨時(shí)變量集vTempSet (無變化,仍為空集)。(顯然"% 8循環(huán)"為算法P) 現(xiàn)證明優(yōu)化算法滿足約束條件1 。 定理19 :優(yōu)化算法滿足約束條件1 。
證明 顯然算法Q與優(yōu)化算法一致,因此問題變?yōu)樽C明算法Q滿足約束條件l,這里需要
注意,算法Q的"% 8循環(huán)"部分實(shí)際上就是算法P。對(duì)于AV是空集的情況算法顯然成立,
現(xiàn)證明AV非空的情況,即"% 7循環(huán)"至少可以被進(jìn)入一次,設(shè)"% 7循環(huán)"執(zhí)行的次數(shù)為
i,與收斂性定理推導(dǎo)過程類似"^ 7(1)循環(huán)"表示將"% 7循環(huán)"變?yōu)樗姥h(huán)。(分析對(duì)于i = l,顯然算法Q得到的OV(巧"此時(shí)OV:AV(l))滿足Se (AV)=
FcF(Se(BestOV))是一個(gè)函數(shù),F(xiàn)變?yōu)?,也就是說,只要AV(l)中的變量是定值,經(jīng)過1個(gè)周
期的運(yùn)算后,AV中變量的值就會(huì)是唯一的定值,但是第一個(gè)周期結(jié)束時(shí)AV(l)中的變量有
可能變?yōu)槲粗獱顟B(tài),所以需要一個(gè)周期結(jié)束時(shí)AV(l)中的變量也是定值,所以將AV(l)作為
算法Q的"% 8循環(huán)"部分的開始,得到AV (2)和巧2),這里 巧)£ /(^ j/①,。&(J K(l)) = &, (&(J F(2)))是一個(gè)函數(shù) 戶尸E /(J r(2),野)) 根據(jù)引理16, Se(AV(l)) = FcF (Se (AV (2) U BestOV))是 一 個(gè)函數(shù),即只要 Best0V(2) =AV(2) U BestOV(l)中的變量是定值,那么經(jīng)過1個(gè)周期的運(yùn)算后,AV(1)的 變量為定值,但是Best0V(2)中不屬于AV(l)的部分即BestOV(2)-AV(1)的元素值不確定, 這個(gè)差集一定來自于AV(2),依次類推,...,將一直遞歸下去。事實(shí)上只要能證明如下映射 是個(gè)函數(shù)即可 Se (BestOV) = FcF (Se (BestOV))且爿F £ foe,(9F 。)
這里分兩步進(jìn)行 第一步,用數(shù)學(xué)歸納法證明以下結(jié)論
對(duì)于第i次"% 7(1)循環(huán)"結(jié)束時(shí),F(xiàn)變?yōu)?Se(AV(O) U AV(l) U…AV(i-1)) = FcF (Se (Best0V (i)))是 一 個(gè)函數(shù)且 1°對(duì)于i = 1的情況,顯然成立。
2°假設(shè),對(duì)于i = k時(shí),F(xiàn)變?yōu)? Se(AV(O) U AV(l) U…AV(k-1)) = FcF(Se (Best0V (k)))是一個(gè)函數(shù)
巧"e /(5M0r(",F(xiàn))那么按照算法Q的邏輯,第k+l次"% 7(1)循環(huán)"開始 時(shí),AV = AV (k),對(duì)巧"進(jìn)行算法Q的"% 8循環(huán)",得到巧"1)和AV = AV (k+l)(顯然 = Fc^) ^ + l)))是一個(gè)函數(shù))。 因此,由引理18,得 Se(AV(O) U AV(l) U…AV(k)) = FcF(Se (Best0V(k) U AV(k+l)))是一個(gè)函數(shù)且
35
有算法Q中的操作"OV = OV+(AV-OV):將屬于AV但不屬于OV的元素添加到OV 中;"易知BestOV(k+l) = BestOV(k) U AV(k+l),所以 Se(AV(O) U AV(l) U…AV(k)) = FcF(Se (BestOV (k+1)))是一個(gè)函數(shù), e /(Bes,Or(A; +1), 。 第二步,依據(jù)推論8,芑S 5eWOF(/) = 5erfOr 而lim(」F(0)u ^r(l)u…v4F(/ —1))= lim 5eWOK(/ —1) = SeWOr 上述兩個(gè)極限狀態(tài),只需要在i = J(J的意義參見定理7,收斂性定理)時(shí)就可達(dá) 到0V狀態(tài)。 因此,Se (BestOV) = FcF (Se (BestOV))且乂F £ 5sWOF
成立 所以優(yōu)化算法滿足約束條件1。
得證。
權(quán)利要求
一種冗余數(shù)據(jù)的自動(dòng)選擇方法,應(yīng)用于采用備份式冗余的計(jì)算機(jī)控制系統(tǒng),該自動(dòng)選擇方法包括確定控制程序中定義的所有變量組成的原始集,以及主備切換時(shí)需要保證輸出無擾的變量組成的目標(biāo)集,該目標(biāo)集為該原始集的子集;將所述控制程序的代碼轉(zhuǎn)換為包含多個(gè)函數(shù)式及其順序信息的關(guān)系集,轉(zhuǎn)換時(shí),按照所述控制程序的代碼的執(zhí)行順序,提取出所述代碼表示的運(yùn)算邏輯中存在的因變量及與每一因變量相關(guān)的所有自變量,將每一因變量及其自變量表示為反映變量之間關(guān)系的一函數(shù)式并記錄各函數(shù)式的順序信息;根據(jù)所述目標(biāo)集和關(guān)系集對(duì)所述原始集尋優(yōu),從原始集中選擇出滿足優(yōu)化器約束條件且包含元素個(gè)數(shù)最少的子集作為冗余數(shù)據(jù),該子集稱為冗余最優(yōu)集;該優(yōu)化器約束條件指主機(jī)和備機(jī)間拷貝更新冗余最優(yōu)集中變量的值后,所述目標(biāo)集中變量的值在此后任意正整數(shù)周期運(yùn)算結(jié)束時(shí)保持一致。
2. 如權(quán)利要求1所述的自動(dòng)選擇方法,其特征在于所述控制程序是用多種語言編寫的,所述控制程序的代碼為將所述控制程序轉(zhuǎn)換為的 統(tǒng)一形式的中間代碼。
3. 如權(quán)利要求1所述的自動(dòng)選擇方法,其特征在于所述 控制程序的代碼包括多條語句或多個(gè)對(duì)應(yīng)于語句的語法結(jié)構(gòu),通過轉(zhuǎn)換算法和程 序控制語句處理算法的遞歸調(diào)用完成轉(zhuǎn)換,轉(zhuǎn)換開始時(shí)當(dāng)前一層設(shè)為整個(gè)代碼的最外層;轉(zhuǎn)換開始后運(yùn)行轉(zhuǎn)換算法依次遍歷當(dāng)前一層的語句或語法結(jié)構(gòu),對(duì)每一語句或語法 結(jié)構(gòu),如該語句或該語法結(jié)構(gòu)對(duì)應(yīng)的語句為賦值語句,則直接轉(zhuǎn)換為一函數(shù)式,將該函數(shù)式 及其順序號(hào)添加到所述關(guān)系集中;如該語句或該語法結(jié)構(gòu)對(duì)應(yīng)的語句是合法的程序控制語 句,則調(diào)用程序控制語句處理算法將其轉(zhuǎn)換為函數(shù)式;如該語句或語法結(jié)構(gòu)不合法,做出錯(cuò) 處理,結(jié)束轉(zhuǎn)換。
4. 如權(quán)利要求3所述的自動(dòng)選擇方法,其特征在于將賦值語句或?qū)?yīng)于賦值語句的語法結(jié)構(gòu)轉(zhuǎn)換為一函數(shù)式時(shí),該函數(shù)式的因變量為該 賦值語句等號(hào)左邊的變量,該函數(shù)式的自變量應(yīng)為該賦值語句等號(hào)右端的所有變量,如等 號(hào)右端沒有變量,則該函數(shù)式的自變量為空。
5. 如權(quán)利要求3或4所述的自動(dòng)選擇方法,其特征在于所述程序控制語句處理算法為按序遍歷該程序控制語句的各個(gè)控制分支,對(duì)每個(gè)控 制分支,調(diào)用所述轉(zhuǎn)換算法對(duì)該控制分支的所有語句或?qū)?yīng)于語句的語法結(jié)構(gòu)依次進(jìn)行處 理,當(dāng)前一層為該控制分支代碼的最外層,處理完成后,根據(jù)該程序控制語句的類型按以下 方式進(jìn)行轉(zhuǎn)換對(duì)IF—ELSE語句,先進(jìn)行分支對(duì)等化的預(yù)處理,使兩個(gè)分支的函數(shù)式對(duì)等出現(xiàn);然后只 保留一個(gè)分支上的所有函數(shù)式,對(duì)其中的每一函數(shù)式,將另一分支上對(duì)等的函數(shù)式的自變 量及判斷條件中的變量合并到該函數(shù)式的自變量中,合并后得到的函數(shù)式即為轉(zhuǎn)換后的函 數(shù)式;對(duì)除SWITCH語句外的其他條件分支語句,先將該語句轉(zhuǎn)換成IF_ELSE語句,然后采用 IF—ELSE語句的轉(zhuǎn)換方式轉(zhuǎn)換為函數(shù)式;對(duì)WHILE語句,將判斷條件中的變量合并到該語句各函數(shù)式的自變量中,將各函數(shù)式的因變量合并到本函數(shù)式的自變量中,得到轉(zhuǎn)換后的函數(shù)式。
6. 如權(quán)利要求5所述的自動(dòng)選擇方法,其特征在于對(duì)除SWITCH語句外的其他循環(huán)語句,先轉(zhuǎn)換成賦值語句和WHILE語句,然后采用賦值 語句和WHILE語句的轉(zhuǎn)換方式轉(zhuǎn)換為函數(shù)式;對(duì)SWITCH語句,先轉(zhuǎn)換成賦值語句和WHILE語句,然后采用賦值語句和WHILE語句的 轉(zhuǎn)換方式轉(zhuǎn)換為函數(shù)式;或者,先進(jìn)行分支對(duì)等化的預(yù)處理,使得各分支的函數(shù)式對(duì)等出 現(xiàn);然后只保留一個(gè)分支上的所有函數(shù)式,對(duì)其中的每一函數(shù)式,將其他分支對(duì)等的函數(shù)式 的自變量和判斷條件中的變量合并到該函數(shù)式的自變量中,合并得到的函數(shù)式即為轉(zhuǎn)換后 的函數(shù)式。
7. 如權(quán)利要求6所述的自動(dòng)選擇方法,其特征在于對(duì)IF_ELSE語句,或IF_ELSE語句和SWITCH語句進(jìn)行分支對(duì)等化的預(yù)處理時(shí),逐次比 較各分支相同位置上的函數(shù)式,如各分支上第n個(gè)函數(shù)式的因變量有m種,n = 1, 2,...,, m = 2,3,...;則以"該因變量=該因變量"的方式在每個(gè)分支補(bǔ)充111-1個(gè)函數(shù)式,補(bǔ)充的函 數(shù)式的因變量是其他分支第n個(gè)函數(shù)式的因變量且不同于該分支第n個(gè)函數(shù)式的因變量, 補(bǔ)充的函數(shù)式與該第n個(gè)函數(shù)式位置連續(xù)且其中每一位置上的函數(shù)式的因變量均相同,之 后,從第n+m個(gè)函數(shù)式開始進(jìn)行下次比較。
8. 如權(quán)利要求1所述的自動(dòng)選擇方法,其特征在于,根據(jù)所述目標(biāo)集和關(guān)系集對(duì)所述 原始集尋優(yōu),選擇冗余變量的過程包括先將關(guān)系集中所有函數(shù)式置為"存在"狀態(tài);然后根據(jù)輸入的原始集V、目標(biāo)集AV和關(guān) 系集F,從尾至頭遍歷關(guān)系集F中的函數(shù)式;每一次遍歷過程中,對(duì)當(dāng)前的函數(shù)式Vj = fi(vn,Vi2,…),i = 1,2,... ,n ;如Vj不屬 于AV,則結(jié)束對(duì)該函數(shù)式的處理;如Vj屬于AV,則從AV中刪除Vj,并繼續(xù)判斷該函數(shù)式是 否為"存在"狀態(tài),如否,結(jié)束對(duì)該函數(shù)式的處理,如為"存在"狀態(tài),還要將該函數(shù)式所有自 變量合并到當(dāng)前的AV中并取消該函數(shù)式的存在狀態(tài);每一次遍歷結(jié)束后,將AV中的變量合并到0V中,并判斷當(dāng)前AV中的變量是否與該次 遍歷前的相同,如果相同,則將當(dāng)前的OV中的變量作為確定的冗余變量輸出,結(jié)束優(yōu)化,如 果不同,以同樣方式繼續(xù)下一次的遍歷。
9. 一種冗余數(shù)據(jù)分析器,用于為采用備份式冗余的計(jì)算機(jī)控制系統(tǒng)選擇冗余變量,其 特征在于,包括轉(zhuǎn)換器和優(yōu)化器,其中所述轉(zhuǎn)換器用于接收控制程序的代碼,將所述代碼轉(zhuǎn)換為包含多個(gè)函數(shù)式及其順序信 息的關(guān)系集并輸出到優(yōu)化器,轉(zhuǎn)換時(shí),按照所述控制程序的代碼的執(zhí)行順序,提取出所述代 碼表示的運(yùn)算邏輯中存在的因變量及與每一因變量相關(guān)的所有自變量,將每一因變量及其 自變量表示為反映變量之間關(guān)系的一函數(shù)式并記錄各函數(shù)式的順序信息;所述優(yōu)化器用于接收控制程序中定義的所有變量組成的原始集,主備切換時(shí)需要保證 輸出無擾的變量組成的目標(biāo)集,及所述關(guān)系集,根據(jù)所述目標(biāo)集和關(guān)系集對(duì)所述原始集尋 優(yōu),從原始集中選擇出滿足優(yōu)化器約束條件且包含元素個(gè)數(shù)最少的子集作為冗余數(shù)據(jù),該 子集稱為冗余最優(yōu)集;該優(yōu)化器約束條件指主機(jī)和備機(jī)間拷貝更新所述冗余最優(yōu)集中變量 的值后,所述目標(biāo)集中變量的值在此后任意正整數(shù)周期運(yùn)算結(jié)束時(shí)保持一致。
10. 如權(quán)利要求9所述的冗余數(shù)據(jù)分析器,其特征在于,所述轉(zhuǎn)換器包括轉(zhuǎn)換控制單元、代碼控制單元、第一轉(zhuǎn)換單元和第二轉(zhuǎn)換單元,其中所述轉(zhuǎn)換控制單元用于控制控制程序的代碼的接收和緩存到代碼緩存單元,接收完成 后將當(dāng)前一層設(shè)為整個(gè)代碼的最外層,通知第一轉(zhuǎn)換單元開始轉(zhuǎn)換,該代碼包括多條語句 或多個(gè)對(duì)應(yīng)于語句的語法結(jié)構(gòu);所述代碼緩存單元用于緩存輸入的控制程序的代碼;所述第一轉(zhuǎn)換單元用于執(zhí)行轉(zhuǎn)換算法,依次遍歷當(dāng)前一層的語句或語法結(jié)構(gòu),對(duì)每一 語句或語法結(jié)構(gòu),如該語句或該語法結(jié)構(gòu)對(duì)應(yīng)的語句為賦值語句,則直接轉(zhuǎn)換為一函數(shù)式, 將該函數(shù)式及其順序號(hào)添加到所述關(guān)系集中;如該語句或該語法結(jié)構(gòu)對(duì)應(yīng)的語句是合法的 程序控制語句,則調(diào)用第二轉(zhuǎn)換單元將其轉(zhuǎn)換為函數(shù)式;遍歷完成后將得到關(guān)系集輸出到 優(yōu)化器;所述第二轉(zhuǎn)換單元用于將程序控制語句轉(zhuǎn)換為函數(shù)式,轉(zhuǎn)換時(shí)按序遍歷該程序控制語 句的各個(gè)控制分支,對(duì)每個(gè)控制分支,將當(dāng)前一層設(shè)為該控制分支代碼的最外層,調(diào)用第一 轉(zhuǎn)換單元對(duì)該控制分支的所有語句或?qū)?yīng)于語句的語法結(jié)構(gòu)依次進(jìn)行處理,處理完成后, 根據(jù)該程序控制語句的類型將程序控制語句轉(zhuǎn)換為相應(yīng)的函數(shù)式。
11. 如權(quán)利要求IO所述的冗余數(shù)據(jù)分析器,其特征在于所述第一轉(zhuǎn)換單元將賦值語句或?qū)?yīng)于賦值語句的語法結(jié)構(gòu)轉(zhuǎn)換為一函數(shù)式時(shí),該函 數(shù)式的因變量為該賦值語句等號(hào)左邊的變量,該函數(shù)式的自變量應(yīng)為該賦值語句等號(hào)右端 的所有變量,如等號(hào)右端沒有變量,則該函數(shù)式的自變量為空。
12. 如權(quán)利要求10或11所述的冗余數(shù)據(jù)分析器,其特征在于所述第二轉(zhuǎn)換單元根據(jù)該程序控制語句的類型將程序控制語句轉(zhuǎn)換為相應(yīng)的函數(shù)時(shí), 按以下方式進(jìn)行對(duì)IF—ELSE語句,先進(jìn)行分支對(duì)等化的預(yù)處理,使兩個(gè)分支的函數(shù)式對(duì)等出現(xiàn);然后只 保留一個(gè)分支上的所有函數(shù)式,對(duì)其中的每一函數(shù)式,將另一分支上對(duì)等的函數(shù)式的自變 量及判斷條件中的變量合并到該函數(shù)式的自變量中,合并后得到的函數(shù)式即為轉(zhuǎn)換后的函 數(shù)式;對(duì)除SWITCH語句外的其他條件分支語句,先將該語句轉(zhuǎn)換成IF_ELSE語句,然后采用 IF—ELSE語句的轉(zhuǎn)換方式轉(zhuǎn)換為函數(shù)式;對(duì)WHILE語句,將判斷條件中的變量合并到該語句各函數(shù)式的自變量中,將各函數(shù)式 的因變量合并到本函數(shù)式的自變量中,得到轉(zhuǎn)換后的函數(shù)式。
13. 如權(quán)利要求12所述的冗余數(shù)據(jù)分析器,其特征在于所述第二轉(zhuǎn)換單元對(duì)除SWITCH語句外的其他循環(huán)語句,先轉(zhuǎn)換成賦值語句和WHILE語 句,然后采用賦值語句和WHILE語句的轉(zhuǎn)換方式轉(zhuǎn)換為函數(shù)式;對(duì)SWITCH語句,先轉(zhuǎn)換成賦值語句和WHILE語句,然后采用賦值語句和WHILE語句的 轉(zhuǎn)換方式轉(zhuǎn)換為函數(shù)式;或者,先進(jìn)行分支對(duì)等化的預(yù)處理,使得各分支的函數(shù)式對(duì)等出 現(xiàn);然后只保留一個(gè)分支上的所有函數(shù)式,對(duì)其中的每一函數(shù)式,將其他分支對(duì)等的函數(shù)式 的自變量和判斷條件中的變量合并到該函數(shù)式的自變量中,合并得到的函數(shù)式即為轉(zhuǎn)換后 的函數(shù)式。
14. 如權(quán)利要求13所述的冗余數(shù)據(jù)分析器,其特征在于所述第二轉(zhuǎn)換單元對(duì)IF_ELSE語句,或IF_ELSE語句和SWITCH語句進(jìn)行分支對(duì)等化的預(yù)處理時(shí),逐次比較各分支相同位置上的函數(shù)式,如各分支上第n個(gè)函數(shù)式的因變量有m種,n = 1, 2, . . . , , m = 2, 3,...;則以"該因變量=該因變量"的方式在每個(gè)分支補(bǔ)充m_l個(gè)函數(shù)式,補(bǔ)充的函數(shù)式的因變量是其他分支第n個(gè)函數(shù)式的因變量且不同于該分支第n個(gè)函數(shù)式的因變量,補(bǔ)充的函數(shù)式與該第n個(gè)函數(shù)式位置連續(xù)且其中每一位置上的函數(shù)式的因變量均相同,之后,從第n+m個(gè)函數(shù)式開始進(jìn)行下次比較。
15. 如權(quán)利要求9所述的冗余數(shù)據(jù)分析器,其特征在于,所述優(yōu)化器按以下方式對(duì)所述原始集進(jìn)行尋優(yōu)先將關(guān)系集中所有函數(shù)式置為"存在"狀態(tài);然后根據(jù)輸入的原始集V、目標(biāo)集AV和關(guān)系集F,從尾至頭遍歷關(guān)系集F中的函數(shù)式;每一次遍歷過程中,對(duì)當(dāng)前的函數(shù)式Vj = fi(vn,Vi2,…),i = 1,2,... ,n ;如Vj不屬于AV,則結(jié)束對(duì)該函數(shù)式的處理;如Vj屬于AV,則從AV中刪除Vj,并繼續(xù)判斷該函數(shù)式是否為"存在"狀態(tài),如否,結(jié)束對(duì)該函數(shù)式的處理,如為"存在"狀態(tài),還要將該函數(shù)式所有自變量合并到當(dāng)前的AV中并取消該函數(shù)式的存在狀態(tài);每一次遍歷結(jié)束后,將AV中的變量合并到0V中,并判斷當(dāng)前AV中的變量是否與該次遍歷前的相同,如果相同,則將當(dāng)前的OV中的變量作為確定的冗余變量輸出,結(jié)束優(yōu)化,如果不同,以同樣方式繼續(xù)下一次的遍歷。
16. —種實(shí)現(xiàn)無擾切換的方法,應(yīng)用于采用備份式冗余的計(jì)算機(jī)控制系統(tǒng),該方法包括按權(quán)利要求1至8中任一權(quán)利要求所述的冗余數(shù)據(jù)的自動(dòng)選擇方法選擇得到冗余最優(yōu)集,其中包含一個(gè)或多個(gè)冗余變量;將所述冗余最優(yōu)集配置到采用備份式冗余的設(shè)備中可作為主機(jī)的每一個(gè)設(shè)備上,所述設(shè)備工作時(shí)運(yùn)行所述控制程序;在實(shí)現(xiàn)主機(jī)和備機(jī)的雙機(jī)運(yùn)算同步的冗余期間,雙機(jī)暫停運(yùn)算,由主機(jī)將所述冗余最優(yōu)集中各個(gè)變量的值拷貝給從機(jī),從機(jī)更新自己內(nèi)存中的這些變量的值,拷貝結(jié)束后,雙機(jī)同時(shí)啟動(dòng)控制程序。
17. 如權(quán)利要求16所述的方法,其特征在于所述采用備份式冗余的計(jì)算機(jī)控制系統(tǒng)為分布式控制系統(tǒng)(DCS),所述控制程序?yàn)楣I(yè)控制程序,所述冗余配置的設(shè)備為該DCS系統(tǒng)中采用備份式冗余并運(yùn)行所述工業(yè)控制程序的控制站;所述冗余數(shù)據(jù)的自動(dòng)選擇在工程師站進(jìn)行,該工程師站將選擇得到的冗余最優(yōu)集下裝到所述控制站。
18. —種采用備份式冗余的計(jì)算機(jī)控制系統(tǒng),包括控制程序的編程設(shè)備和控制程序的執(zhí)行設(shè)備,所述執(zhí)行設(shè)備采用備份式冗余的方式配置,其特征在于,還包括如權(quán)利要求9至15中任一權(quán)利要求所述的冗余數(shù)據(jù)分析器,其中所述編程設(shè)備用于確定控制程序中定義的所有變量組成的原始集,主備切換時(shí)需要保證輸出無擾的變量組成的目標(biāo)集,將所述原始集、目標(biāo)集和控制程序的代碼輸出到所述冗余數(shù)據(jù)分析器;所述冗余數(shù)據(jù)分析器還用于將得到的冗余最優(yōu)集配置到所述執(zhí)行設(shè)備中可作為主機(jī)的每一個(gè)設(shè)備上;所述執(zhí)行設(shè)備作為主機(jī)時(shí),在雙機(jī)運(yùn)算同步的冗余期間暫停運(yùn)算,將所述冗余最優(yōu)集中各個(gè)變量的值拷貝給從機(jī),拷貝結(jié)束后,與備機(jī)同時(shí)啟動(dòng)所述控制程序;所述執(zhí)行設(shè)備作為備機(jī)時(shí),在雙機(jī)運(yùn)算同步的冗余期間暫停運(yùn)算,根據(jù)從主機(jī)拷貝的所述冗余最優(yōu)集中各個(gè)變量的值更新g己內(nèi)存中的這些變量的值,拷貝結(jié)束后,與主機(jī)同時(shí)啟動(dòng)所述控制程序。
19.如權(quán)利要求18所述的計(jì)算機(jī)控制系統(tǒng),其特征在于所述采用備份式冗余的計(jì)算機(jī)控制系統(tǒng)為分布式控制系統(tǒng)(DCS),所述控制程序的編程設(shè)備和冗余數(shù)據(jù)分析器位于該DCS中的工程師站;所述控制程序的執(zhí)行設(shè)備為該DCS中運(yùn)行工業(yè)控制程序的控制站;所述冗余數(shù)據(jù)分析器得到工業(yè)控制程序的冗余最優(yōu)集后,下裝到相應(yīng)的控制站中。
全文摘要
本發(fā)明公開了一種冗余數(shù)據(jù)的自動(dòng)選擇方法、分析器及實(shí)現(xiàn)無擾切換的方法,其中冗余數(shù)據(jù)的自動(dòng)選擇方法包括確定控制程序中定義的所有變量組成的原始集,以及主備切換時(shí)需要保證輸出無擾的變量組成的目標(biāo)集,將所述控制程序的代碼轉(zhuǎn)換為包含多個(gè)函數(shù)式及其順序信息的關(guān)系集,提取運(yùn)算邏輯中的因變量、對(duì)應(yīng)的自變量及對(duì)應(yīng)的函數(shù)式,根據(jù)所述目標(biāo)集和關(guān)系集對(duì)所述原始集尋優(yōu),選擇出冗余最優(yōu)集,使主機(jī)和備機(jī)件拷貝更新冗余最優(yōu)集中變量的值后,所述目標(biāo)集中變量的值在此后任意正整數(shù)周期運(yùn)算結(jié)束時(shí)保持一致。本發(fā)明解決了冗余配置系統(tǒng)中從原始集中選擇得到較少的冗余變量,這些冗余變量的值相同時(shí),能保證輸出變量在此后任意正整數(shù)周期保持一致。
文檔編號(hào)G06F11/14GK101770411SQ20091024319
公開日2010年7月7日 申請(qǐng)日期2009年12月31日 優(yōu)先權(quán)日2009年12月31日
發(fā)明者劉立忠 申請(qǐng)人:北京和利時(shí)系統(tǒng)工程有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1