只有當無其它對話存在時,才能生成一則對話。
對話可用一個軟鍵刪除,該軟鍵的標注由程序員定義。
最多能定義 7 個軟鍵。
? 對話適用于顯示必須由用戶回答的問題。
? 用函數 Set_KrlDlg( )? 可生成一則對話。
? 用函數僅僅可生成對話。
? 但該函數不等到對話得到回答。
? 用函數Exists_KrlDlg( ) 可檢查一則特定的對話是否還存在。
? 該函數也不等到對話得到回答,而是僅僅在緩存器中查找帶有該句柄的對話。
? 因此,KRL 程序中的詢問必須循環進行,直至對話得到回答或被刪除。
? 接下來的程序流程根據用戶所選的軟鍵而定。
? 按鍵的聲明和初始化
DECL KRLMSGDLGSK_T Softkey[7] ; 準備 7 個可能的軟鍵
softkey[1]={sk_type #value, sk_txt[] "key1"}
softkey[2]={sk_type #value, sk_txt[] "key2"}
softkey[3]={sk_type #value, sk_txt[] "key3"}
softkey[4]={sk_type #value, sk_txt[] "key4"}
softkey[5]={sk_type #value, sk_txt[] "key5"}
softkey[6]={sk_type #value, sk_txt[] "key6"}
softkey[7]={sk_type #value, sk_txt[] "key7"}
通過 Exists_KrlDlg() 進行分析:在索引 4 下創建的按鍵也以 4 作為反饋應答。
; 第 4 號軟鍵以 4 作為反饋應答
softkey[4]={sk_type #value, sk_txt[] "key4"}
若未給所有按鍵編程或有間斷地編程 (編號 1、4、6),則按鍵將并列排布。若僅使用了按鍵 1、4、6,則也只能給出 1、4、6 反饋。
給用戶自定義的對話編程:
1. 將主程序載入編輯器。
2. 為以下對象聲明工作變量:
發送人、信息號、信息文本 (自 KrlMsg_T )
具有 3 個用于參數的元素的數組 (自 KrlMsgPar_T )
7 個可能的按鍵 (自? KrlMsgDlgSK_T )
通用信息提示選項 (自 KrlMsgOpt_T )
“句柄”(作為 INT )
檢查結果的變量 (作為 BOOL)
回答按了哪個按鍵的結果變量 (作為 INT )
3. 用所需值初始化工作變量。
4. 給函數調用 Set_KrlDlg(…)? 編程。
5. 用一個循環停止程序,直到對話得到了應答。
6. 調用函數 Exists_KrlDlg( )? 來分析對話。
7. 規劃程序中的其它分支并進行編程。
8. 關閉并保存主程序。
生成對話后程序被停住。回答后信息提示被刪除。然后程序繼續運行。接著給 switch-case 分支編程同樣,程序復位或退出程序時信息提示也將消失。可通過在信息提示選項中的設置 Clear_P_Reset TRUE ?引發這種情況。
DECL KRLMSG_T myQuestion
DECL KRLMSGPAR_T Parameter[3]
DECL KRLMSGDLGSK_T Softkey[7] ; 準備 7 個可能的軟鍵
DECL KRLMSGOPT_T Option
DECL INT handle, answer
DECL BOOL present
...
myQuestion={modul[] "College", Nr 1909, msg_txt[] "My Questiontext"}
Option= {VL_STOP FALSE, Clear_P_Reset TRUE, Clear_P_SAW FALSE,?
Log_to_DB TRUE}?
; 通配符為空通配符 [1..3]
Parameter[1] = {Par_Type #EMPTY}
Parameter[2] = {Par_Type #EMPTY}
Parameter[3] = {Par_Type #EMPTY}
softkey[1]={sk_type #value, sk_txt[] "key1"} ; 按鍵 1
softkey[2]={sk_type #value, sk_txt[] "key2"} ; 按鍵 2
softkey[3]={sk_type #value, sk_txt[] "key3"} ; 按鍵 3
softkey[4]={sk_type #value, sk_txt[] "key4"} ; 按鍵 4
softkey[5]={sk_type #value, sk_txt[] "key5"} ; 按鍵 5
softkey[6]={sk_type #value, sk_txt[] "key6"} ; 按鍵 6
softkey[7]={sk_type #value, sk_txt[] "key7"} ; 按鍵 7
...
...; 生成對話
handle = Set_KrlDlg(myQuestion, Parameter[ ],Softkey[ ], Option)
answer=0
REPEAT ; 用于在回答對話前停住程序的循環
present = exists_KrlDlg(handle ,answer) ; 回答由系統寫入
UNTIL NOT(present)
...
SWITCH answer
CASE 1 ; 按鍵 1
; 按鍵 1 的操作
...
CASE 2 ; 按鍵 2
; 按鍵的操作2
...
CASE 7 ; 按鍵 7
; 按鍵 7 的操作
ENDSWITCH
...
例如:
生成EMZ的選擇框,選擇幾號焊鉗
DEFFCT INT SetDlgMsg()
DECL?KrlMsg_T?Msg
DECL?KrlMsgPar_T?Par[3]
DECL?KrlMsgOpt_T?Opt
DECL?KrlMsgDlgSK_T?SK[7]
INT?nHandle,?nAnswer
T 2模式下執行EMZ
Msg?=?{Modul[]?"vw_emz",?Nr 10,?Msg_txt[]?"Antriebsschnittstelleselektieren"}?提示信息條?“EMZ使用幾號工具用來測量”
SK[1]={ Sk_Type #VALUE,?Sk_txt[]?"1"}?生成的選項按鈕
SK[2]={ Sk_Type #VALUE,?Sk_txt[]?"2"}
SK[3]={ Sk_Type #VALUE,?Sk_txt[]?"3"}
SK[4]={ Sk_Type?#VALUE,?Sk_txt[]?"4"}
SK[5]={ Sk_Type #VALUE,?Sk_txt[]?"5"}
SK[6]={ Sk_Type #VALUE,?Sk_txt[]?"6"}
SK[7]={ Sk_Type #VALUE,?Sk_txt[]?"7"}
選擇幾號焊鉗
Opt?=?{ VL_Stop True,?Clear_P_ResetTrue,?Log_To_DB FALSE }?信息屬性設置
nHandle?=?Set_KrlDlg?(Msg,?Par[],SK[],?Opt)?激活信息提示
If?(nHandle>0)Then
While?(Exists_KrlDlg(nHandle,?nAnswer))?關閉對話窗口
Wait?sec?0.1
Endwhile
Endif
Return(nAnswer)?選擇按鈕的值被發出
;
ENDFCT
編輯:黃飛
?
評論
查看更多