摘 要: 在設(shè)計各種軟硬件人機交互控制設(shè)備時,輸入容錯處理是必然遇到的一個問題。常規(guī)做法是用大量邏輯判斷進行處理,但是這種方法代碼容易出錯,而且當(dāng)設(shè)備控制關(guān)系需要改變時,控制程序也需要重新編寫,極大影響系統(tǒng)的可靠性和編程效率。提出一種新的輸入控制容錯處理方法——“禁忌表”方法,將整個設(shè)備的輸入控制關(guān)系整合在一起。按照本文方法,在設(shè)備的控制關(guān)系發(fā)生改變的時候,只需改動“禁忌表”,控制程序無需改動,從而大大提高系統(tǒng)的開發(fā)速度。
關(guān)鍵詞: 禁忌表; 輸入容錯處理; 人機交互控制; 編程效率
中圖分類號: TN911?34 文獻標(biāo)識碼: A 文章編號: 1004?373X(2014)02?0053?03
0 引 言
當(dāng)前,各種設(shè)備終端人機交互控制關(guān)系越來越復(fù)雜,對設(shè)備輸入控制容錯處理的要求也越來越高,特別對大型武器裝備,容錯處理控制不好,將帶來不可預(yù)知的風(fēng)險和損失,因此對設(shè)備研發(fā)人員的軟件控制技術(shù)提出了極高的要求[1?2]。輸入控制容錯處理的常規(guī)做法是編程時使用大量的邏輯判斷,對各種輸入操作與當(dāng)前設(shè)備狀態(tài)進行相容判斷,確定該輸入操作在當(dāng)前狀態(tài)下是否允許[3]。這種方法只適用于控制關(guān)系簡單的設(shè)備。由于設(shè)備狀態(tài)少,操作簡單,使用結(jié)構(gòu)簡單的邏輯判斷就可以實現(xiàn)設(shè)備的容錯處理。但對于狀態(tài)多、控制關(guān)系復(fù)雜的設(shè)備,這種方法不僅程序編寫效率低,而且也很難保證可靠性。即使編制出可靠的輸入控制容錯程序,系統(tǒng)控制關(guān)系一旦需要改變,控制容錯程序就需重新編寫,增加了軟件編寫的工作量、系統(tǒng)開發(fā)成本和開發(fā)周期[4]。為此,提出一種新的輸入控制容錯處理方法——“禁忌表”方法,不僅編程中省去大量的邏輯判斷,簡化程序結(jié)構(gòu),而且在系統(tǒng)軟件升級和控制關(guān)系變動時,只需改動“禁忌表”,而無需改動程序,從而大大提高系統(tǒng)軟件的開發(fā)速度和可靠性。
1 “禁忌表”方法的數(shù)學(xué)模型
“禁忌表”方法基本思想就是首先建立設(shè)備所有鍵控輸入的“相容”與“禁忌”關(guān)系表,稱之為“鍵控輸入禁忌表”。在每次執(zhí)行一個鍵控功能時,通過搜索“鍵控輸入禁忌表”,判斷系統(tǒng)當(dāng)前狀態(tài)下,該輸入是否有效,若有效,就可執(zhí)行相應(yīng)的鍵控功能,并更新當(dāng)前狀態(tài);否則不執(zhí)行任何操作。這樣在每次對輸入進行容錯處理時,只需執(zhí)行一個特定的處理函數(shù),該函數(shù)基于“鍵控輸入禁忌表”分析當(dāng)前鍵控與當(dāng)前系統(tǒng)狀態(tài)是否相容,若相容則輸入有效,若不相容則輸入無效。系統(tǒng)控制關(guān)系變更時,只需相應(yīng)改動“鍵控輸入禁忌表”即可完成。
該方法的數(shù)學(xué)模型如下:
定義系統(tǒng)所有鍵控輸入的集合為K={k1,k2,…,km}。其中m為正整數(shù),表示系統(tǒng)可鍵控輸入組合的個數(shù)。
定義系統(tǒng)所有可能狀態(tài)的集合為S={s1,s2,…,sn}。其中n為正整數(shù),表示系統(tǒng)所有可能狀態(tài)的個數(shù)。
系統(tǒng)工作時所有可能呈現(xiàn)的狀態(tài)組合稱為系統(tǒng)的工作狀態(tài)。定義系統(tǒng)所有可能工作狀態(tài)的集合為WS={WS1,WS2,…,WSp},其中WSi =[si1,si2,…,sij]表示系統(tǒng)的某個工作狀態(tài);j為此工作狀態(tài)包含系統(tǒng)狀態(tài)的個數(shù),p為系統(tǒng)所有可能的工作狀態(tài)數(shù),且有[WSi?S];
定義系統(tǒng)當(dāng)前工作狀態(tài)為CWS, [CWS?S]。
定義與鍵控輸入ki相容的系統(tǒng)工作狀態(tài)集合為TSi={TSi1,TSi2,…,TSiq},i[?]{1,2,…,m}。其中:TSij={sij1,sij2,sij3,…,sijl};q為與鍵控輸入ki相容的系統(tǒng)工作狀態(tài)的個數(shù);l為TSij中系統(tǒng)狀態(tài)的個數(shù),顯然有[TSi?WS],即TSi為系統(tǒng)工作狀態(tài)集合WS的子集。所謂TSij與鍵控輸入ki相容,是指系統(tǒng)當(dāng)前工作狀態(tài)CWS為TSij的情況下,鍵控輸入ki有效。
定義與鍵控輸入ki不相容的系統(tǒng)工作狀態(tài)集合為FSi={FSi1,F(xiàn)Si2,…,F(xiàn)Siq},i[?]{1,2,…,m},其中FSij={sij1,sij2,sij3,…,sijl};q為與鍵控輸入ki不相容的系統(tǒng)工作狀態(tài)集合的個數(shù);l為FSij中系統(tǒng)狀態(tài)的個數(shù),顯然有[FSi?WS],即FSi也為系統(tǒng)工作狀態(tài)集合 WS的子集。所謂FSij與鍵控輸入ki不相容,是指系統(tǒng)當(dāng)前工作狀態(tài)CWS為FSij時,鍵控輸入ki無效。
[KEY_PROHIBIT(ki)=T,WSC?TSiF,WSC?FSi]
顯然,對任何一鍵控輸入ki,其對應(yīng)的相容系統(tǒng)工作狀態(tài)集合TSi與非相容系統(tǒng)工作狀態(tài)集合FSi之和就是系統(tǒng)工作狀態(tài)集合WS,即TSi+FSi=WS。設(shè)KEY_ PROHIBIT(ki)為鍵控輸入ki有效判別函數(shù),T表示有效,F(xiàn)表示無效,則有:
2 “禁忌表”方法的計算機實現(xiàn)
對任何系統(tǒng),建立如下數(shù)據(jù)表:
(1) 鍵控輸入表K_table,表中存儲系統(tǒng)所有可能的鍵控輸入組合K。
(2) 狀態(tài)表S_table,表中存儲系統(tǒng)所有可能的狀態(tài)S。
(3) 工作狀態(tài)表WS_table,表中存儲所有可能的工作狀態(tài)的集合WS。
(4) 當(dāng)前工作狀態(tài)表CWS_table,表中存儲系統(tǒng)當(dāng)前工作狀態(tài)WSC。
(5) 鍵控輸入禁忌表PROHIBIT_table,該表中存儲了所有鍵控輸入的相容與非相容狀態(tài)。
基于上面的討論,可以得到如圖1所示的系統(tǒng)鍵控輸入容錯處理流程。
圖1 鍵控輸入容錯處理
以下是某偵察雷達模擬器設(shè)備采用VB6編寫的“禁忌表”(部分)和“禁忌判別函數(shù)”實現(xiàn)的輸入容錯控制,代碼很少[5?6]:
Const ty = \"99,tt,ay,ff,ay\" 通用狀態(tài)
Const cp = \"01,tt,99,01,08,10,09,16,edff,ay\" 重排
Const js = \"02,tt,99,02,01,08,09,16,edff,ay\" 監(jiān)視
Const zj = \"03,tt,99,03,01,10,09,16,edff,ay\" 自檢
Const ks = \"04,tt,99,04,01,08,09,16,edff,ay\" 快速
Const jz = \"05,tt,99,05,01,10,09,16,edff,ay\" 加載
Const bp = \"06,tt,99,06,08,10,09,16,edff,ay\" 編批
Const sc = \"07,tt,99,07,01,08,10,16,edff,ay\" 刪除
Const qx = \"08,tt,99,08,01,10,09,16,edff,ay\" 全顯
Const sm = \"09,tt,ay,ff,10,13,17,16,ed\" 掃描
Const yj = \"10,tt,ay,ff,09,13,17,16,ed\" 預(yù)警
Const gj = \"11,tt,99,01,08,10,09,16,edff,ay\" 告警
Const dy = \"12,tt,99,01,10,09,16,edff,ay\" 打印
“禁忌表”中,相容的系統(tǒng)工作狀態(tài)用tt表示,系統(tǒng)所有工作狀態(tài)用ay表示,不相容的系統(tǒng)工作狀態(tài)用ff表示,ed表示表結(jié)束。
只需在命令按鍵執(zhí)行處理前,執(zhí)行如下的“禁忌判別函數(shù)”,判斷輸入命令是否有效,有效執(zhí)行相應(yīng)的按鍵功能,無效則不執(zhí)行。其中傳遞變量jj_bz為當(dāng)前按鍵輸入。
Public Function jjpb(jj_bz As String) As Boolean
'禁忌判別函數(shù)
dim int1,int2 as integer
dim str1,str2 as string
str1 = stateWord '取當(dāng)前按鍵的禁忌標(biāo)狀態(tài)字
int1 = 7
int2 = 2
str2 = Mid$(jj_bz, int1, int2)
If str2 = \"ay\" Then
int1 = int1 + 6
str2 = Mid$(jj_bz, int1, int2)
While str2 <> \"ed\"
If str2 = str1 Then
jjpb = False '有不可用當(dāng)前狀態(tài),函數(shù)返回不可用
Exit Function
End If
int1 = int1 + 3
str2 = Mid$(jj_bz, int1, int2)
Wend
jjpb = True '沒有不可用當(dāng)前狀態(tài),函數(shù)返回可用
Exit Function
Else
While str2 <> \"ed\"
str2 = Mid$(jj_bz, int1, int2)
If str2 = str1 Then
jjpb = True '有可用當(dāng)前狀態(tài),函數(shù)返回可用
Exit Function
End If
int1 = int1 + 3
Wend
jjpb = False '沒有可用當(dāng)前狀態(tài),函數(shù)返回不可用
Exit Function
End If
End Function
3 結(jié) 論
從上面分析可以看出,對復(fù)雜系統(tǒng)的控制,只要在系統(tǒng)控制設(shè)計之前,將系統(tǒng)的狀態(tài)、工作狀態(tài)以及與鍵控輸入的關(guān)系明確,建立各種必要的數(shù)據(jù)表,即可通過鍵控輸入判別函數(shù)實現(xiàn)所有鍵控輸入的容錯處理判斷,設(shè)計人員可以將主要精力集中到各種鍵控輸入具體功能的實現(xiàn)上,有利于系統(tǒng)的模塊化編程,提高了系統(tǒng)的可靠性和開發(fā)效率。此方法已在完成的某型艇載雷達模擬器系統(tǒng)的開發(fā)中得到了很好的應(yīng)用,取得了明顯的效果。同時,該方法完全可推廣到大型、具有復(fù)雜輸入控制關(guān)系設(shè)備的鍵控輸入容錯設(shè)計中。
參考文獻
[1] 李人厚.智能控制理論和方法[M].西安:西安電子科技大學(xué)出版社,1999.
[2] 聞新.控制系統(tǒng)的故障診斷和容錯控制[M].北京:機械工業(yè)出版社,2001.
[3] 周東華,葉銀忠.現(xiàn)代故障診斷與容錯控制[M].北京:清華大學(xué)出版社,2000.
[4] 胡昌華,許化龍.控制系統(tǒng)故障診斷與容錯控制的分析和設(shè)計[M].北京:國防工業(yè)出版社,2000.
[5] 李華,曾艷麗.電子對抗系統(tǒng)效能仿真支撐環(huán)境研究[J].系統(tǒng)仿真學(xué)報,2007,19(9):1954?1958.
[6] 許兵.輕型戰(zhàn)場偵察雷達的結(jié)構(gòu)總體設(shè)計[J].現(xiàn)代電子技術(shù),2005,28(13):29?30.