机器人
只有当无其它对话存在时,才能生成一则对话。
对话可用一个软键删除,该软键的标注由程序员定义。
最多能定义 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
编辑:黄飞
全部0条评论
快来发表一下你的评论吧 !