測控系統的微機化監控程序設計
圖3 鍵語狀態圖
2.2.3 建立鍵語狀態表
根據鍵語狀態圖就可以制作出鍵語狀態表。狀態表中規定:當儀器設備處于某一狀態(現態)時,若滿足一定的條件就必須脫離該狀態而進入另一個指定的狀態(次態),以及儀器設備所應采取的行動。該系統的部分狀態表如表1所列。
表1 鍵語狀態表
對于每個按鍵, 可以用2個變量描述其特征:
FNKYC = 功能性鍵碼(functional keycode),用來代替每一按鍵的實際鍵碼編碼。功能相同的按鍵可以賦予相同的FNKYC 值, 例如一切數字鍵的FNKYC值為1。各按鍵的FNKYC值如表2所列。
表2中,各按鍵的FNKYC 值NUMB=數。數字鍵所對應的NUMB值就是該鍵所規定的數字, 例如, [3] 的NUMB為3;[GHz] [MHz] [kHz] [Hz] 規定為10、11、12、13;其他鍵的NUMB值統一規定為0。
表2 按鍵的FNKYC值對照表
2.2.4 建立狀態索引表
根據狀態表可以建立狀態索引表,狀態索引表為兩級表。其中,第一級狀態索引表中為每一狀態的轉移命令;第二級狀態索引表中,為該狀態下按下某一鍵后進入的次態和執行的子程序號。
如圖3所示, 系統共有7 種不同的狀態,可以在內存的一塊連續空間中存儲這7 種狀態的特征,這就是第一級狀態索引表。而對應于每一狀態的相關參數可以用下面幾個變量來描述。
① FNKYT: 狀態表中所列的功能性鍵碼。將根據實際按下的鍵的FNKYC 值, 查找狀態表中是否有一個與之相符的FNKYT值。
② NEXST: 下一個狀態(NEXT STATE)。它指出當某一FNKYC 與FNKYT 相符時, 系統應進入哪一個狀態。
③ ACTN: 行動子程序號碼。它指出當系統處于某一狀態時所應執行的行動。
這3個參量就建立了第二級狀態索引表。該系統的狀態索引表如圖4所示。
圖4 狀態索引表
2.2.5 程序設計流程
現在可以設計鍵語分析程序。首先,要有一個識鍵程序來識別所按下的按鍵,從所獲得的實際鍵碼中求出其對應的FNKYC 和NUMB 值, 這可以利用查表法或適當的算法得到;然后,根據當前的狀態PREST在第一級狀態索引表中得到對應當前狀態的第二級索引表的入口地址,在第二級狀態索引表中將FNKYC與表中的FNKYT逐項比較,當二者相同時得到對應該按鍵的下一個狀態NEXST, 以及所對應的行動ACTN; 隨后, 把這個NEXST 值替換為當前狀態PREST。如果FNKYT為0時始終沒有與FNKYC對應的FNKYT,就意味著該FNKYT是一個非法鍵, 應該不予理睬; 反之, 則是有效鍵, 程序就轉移到相應的子程序去執行。具體設計流程如圖5所示。
圖5 程序設計流程
3 結論
用狀態法進行多義鍵的設計,有以下幾方面的優點:
① 應用一張狀態表, 統一處理任何一組按鍵和狀態的組合, 化繁為簡, 降低了程序設計的難度, 增強了程序的可讀性。
② 翻譯、解釋按鍵程序和執行子程序完全分離,避免了兩者之間的相互交叉和混淆。
③ 當系統的功能發生改變時, 主控程序的結構不變, 只需對狀態表進行修改。
評論