一、引言
MsgDialog()是基于函数 Set_KrlDlg( )开发的功能块,弹出对话信息适用于显示用户必须回答的问题。
二、Set_KrlDlg( )解析
MsgDialog()是基于函数 Set_KrlDlg( )开发的功能块,Set_KrlDlg( )是在 Set_KrlMsg()的基础上添加了按键及反馈的功能,所以也可以说,MsgDialog()是在MsgNotify()的基础上添加了按键及反馈的功能
Set_KrlDlg()与 Set_KrlMsg()一致的就不赘述了,此处指解析按键部分及按键反馈的部分。
按键类型为KrlMsgDlgSK_T,是KUKA预定义的类型
示例:
三、原MsgDialog()分段注释
;*************************************************
;Execution of dialog message
;parameter NoBrakes: Robot leaves brakes open
;*************************************************
GLOBAL DEF MsgDialog(nAnswer:OUT,sText[]:IN,sModul[]:IN,sTextPar[]:IN,sDialogSK1[]:IN,sDialogSK2[]:IN,sDialogSK3[]:IN,sDialogSK4[]:IN,sDialogSK5[]:IN,sDialogSK6[]:IN,sDialogSK7[]:IN,NoBrakes:IN, nMsgNr:IN,MsgOpt:IN)
DECL KrlMsg_T Msg
DECL KrlMsgPar_T MsgPar[3]
DECL KrlMsgOpt_T MsgOpt
DECL KrlMsgOpt_T DummyMsgOpt
DECL KrlMsgDlgSK_T Msg_SOFTKEY[7]
DECL INT count, len, nHandle, nAnswer, nMsgNr
DECL BOOL NoBrakes
DECL CHAR sText[], sModul[], sTextPar[], sDialogSK1[], sDialogSK2[], sDialogSK3[], sDialogSK4[], sDialogSK5[], sDialogSK6[], sDialogSK7[]
DECL CHAR sMsg[80]
;******************************针对
ON_ERROR_PROCEED
DummyMsgOpt=MsgOpt
IF ($ERR.Number<>0) THEN
MsgOpt.VL_Stop=TRUE ;DEFAULT setting TRUE
MsgOpt.Clear_P_Reset=TRUE
MsgOpt.Log_To_DB=FALSE
ERR_CLEAR($ERR)
ENDIF
;Creates default values in case of none availability
MsgOpt=CheckOfMsgOpt(MsgOpt)
Msg.Nr=1
ERR_CLEAR($ERR)
;******************************针对
ON_ERROR_PROCEED
Msg.Nr=nMsgNr
len=STRLEN(sText[])
IF len>0 THEN
IF len>80 THEN
len=80
ENDIF
FOR count=1 TO len
Msg.Msg_txt[count]=sText[count]
ENDFOR
ELSE
Msg.Msg_txt[]="parameter sText[] is missing"
ENDIF
len=STRLEN(sModul[])
IF len>0 THEN
IF len>24 THEN
len=24
ENDIF
FOR count=1 TO len
Msg.Modul[count]=sModul[count]
ENDFOR
ELSE
Msg.Modul[]="Appl"
ENDIF
ERR_CLEAR($ERR)
;******************************针对软键7的显示及文本写入
ON_ERROR_PROCEED
len=STRLEN(sDialogSK1[])
IF $ERR.Number==0 THEN
IF len > 0 THEN
IF len>24 THEN
len=24
ENDIF
Msg_SOFTKEY[7].Sk_Type = #KEY
FOR count=1 TO len
Msg_SOFTKEY[7].Sk_txt[count] = sDialogSK1[count]
ENDFOR
ENDIF
ELSE
FOR count=1 TO 24
Msg_SOFTKEY[7].Sk_txt[count] = " "
ENDFOR
ENDIF
ERR_CLEAR($ERR)
;******************************针对软键6的显示及文本写入
ON_ERROR_PROCEED
len=STRLEN(sDialogSK2[])
IF $ERR.Number==0 THEN
len=STRLEN(sDialogSK2[])
IF len > 0 THEN
IF len>24 THEN
len=24
ENDIF
Msg_SOFTKEY[6].Sk_Type = #KEY
FOR count=1 TO len
Msg_SOFTKEY[6].Sk_txt[count] = sDialogSK2[count]
ENDFOR
ENDIF
ELSE
FOR count=1 TO 24
Msg_SOFTKEY[6].Sk_txt[count] = " "
ENDFOR
ENDIF
ERR_CLEAR($ERR)
;******************************针对软键5的显示及文本写入
ON_ERROR_PROCEED
len=STRLEN(sDialogSK3[])
IF $ERR.Number==0 THEN
len=STRLEN(sDialogSK3[])
IF len > 0 THEN
IF len>24 THEN
len=24
ENDIF
Msg_SOFTKEY[5].Sk_Type = #KEY
FOR count=1 TO len
Msg_SOFTKEY[5].Sk_txt[count] = sDialogSK3[count]
ENDFOR
ENDIF
ELSE
FOR count=1 TO 24
Msg_SOFTKEY[5].Sk_txt[count] = " "
ENDFOR
ENDIF
ERR_CLEAR($ERR)
;******************************针对软键4显示及文本写入
ON_ERROR_PROCEED
len=STRLEN(sDialogSK4[])
IF $ERR.Number==0 THEN
len=STRLEN(sDialogSK4[])
IF len > 0 THEN
IF len>24 THEN
len=24
ENDIF
Msg_SOFTKEY[4].Sk_Type = #KEY
FOR count=1 TO len
Msg_SOFTKEY[4].Sk_txt[count] = sDialogSK4[count]
ENDFOR
ENDIF
ELSE
FOR count=1 TO 24
Msg_SOFTKEY[4].Sk_txt[count] = " "
ENDFOR
ENDIF
ERR_CLEAR($ERR)
;******************************针对软键3的显示及文本写入
ON_ERROR_PROCEED
len=STRLEN(sDialogSK5[])
IF $ERR.Number==0 THEN
len=STRLEN(sDialogSK5[])
IF len > 0 THEN
IF len>24 THEN
len=24
ENDIF
Msg_SOFTKEY[3].Sk_Type = #KEY
FOR count=1 TO len
Msg_SOFTKEY[3].Sk_txt[count] = sDialogSK5[count]
ENDFOR
ENDIF
ELSE
FOR count=1 TO 24
Msg_SOFTKEY[3].Sk_txt[count] = " "
ENDFOR
ENDIF
ERR_CLEAR($ERR)
;******************************针对软键2的显示及文本写入
ON_ERROR_PROCEED
len=STRLEN(sDialogSK6[])
IF $ERR.Number==0 THEN
len=STRLEN(sDialogSK6[])
IF len > 0 THEN
IF len>24 THEN
len=24
ENDIF
Msg_SOFTKEY[2].Sk_Type = #KEY
FOR count=1 TO len
Msg_SOFTKEY[2].Sk_txt[count] = sDialogSK6[count]
ENDFOR
ENDIF
ELSE
FOR count=1 TO 24
Msg_SOFTKEY[2].Sk_txt[count] = " "
ENDFOR
ENDIF
ERR_CLEAR($ERR)
;******************************针对软键1的显示及文本写入
ON_ERROR_PROCEED
len=STRLEN(sDialogSK7[])
IF $ERR.Number==0 THEN
len=STRLEN(sDialogSK7[])
IF len > 0 THEN
IF len>24 THEN
len=24
ENDIF
Msg_SOFTKEY[1].Sk_Type = #KEY
FOR count=1 TO len
Msg_SOFTKEY[1].Sk_txt[count] = sDialogSK7[count]
ENDFOR
ENDIF
ELSE
FOR count=1 TO 24
Msg_SOFTKEY[1].Sk_txt[count] = " "
ENDFOR
ENDIF
len=STRLEN(sTextPar[])
IF len>0 THEN
IF len>26 THEN
len=26
ENDIF
FOR count=1 TO len
MsgPar[1].Par_Txt[count]=sTextPar[count]
ENDFOR
MsgPar[1].Par_type=#Value
ENDIF
;******************************执行Set_KRLDLG(),设置或生成一条对话框信息
nHandle=SET_KRLDLG(Msg, MsgPar[], Msg_SOFTKEY[], MsgOpt)
ERR_CLEAR($ERR)
;******************************执行Exists_KrlDlg,返回按键数值
ON_ERROR_PROCEED
NoBrakes=NoBrakes
IF NOT($ERR.Number==0) THEN
NoBrakes=FALSE
ENDIF
IF (nHandle > 0) THEN
WHILE (Exists_KrlDlg(nHandle, nAnswer))
WAIT SEC 0.5
IF NoBrakes THEN
PTP $AXIS_ACT
ENDIF
ENDWHILE
ENDIF
END ;(MsgDialog)
四、结论如下:
MsgDialog是弹出对话信息适用于显示用户必须回答的问题,具体总结如下:
GLOBAL DEF MsgDialog(nAnswer:OUT,sText[]:IN,sModul[]:IN,sTextPar[]:IN,sDialogSK1[]:IN,sDialogSK2[]:IN,sDialogSK3[]:IN,sDialogSK4[]:IN,sDialogSK5[]:IN,sDialogSK6[]:IN,sDialogSK7[]:IN,NoBrakes:IN, nMsgNr:IN,MsgOpt:IN)
nAnswer:返回的按键值
sText[]:弹出的信息
sModul[]:发送人
sTextPar[]:文本参数,
sDialogSK1[]..sDialogSK7[]:按键1..7显示的文本信息
nMsgNr:信息号
MsgOpt:通用信息提示选项
4.1 示例:
DECL KRLMSGOPT_T Option
DECL INT handle
DECL KRLMSGPAR_T Parameter[3]
DECL KRLMSGDLGSK_T Softkey[7] ;
DECL BOOL NoBrakes
softkey[1]={sk_type #value, sk_txt[] "key1"}
softkey[4]={sk_type #value, sk_txt[] "key4"}
softkey[6]={sk_type #value, sk_txt[] "key6"}
Parameter[1] = {Par_Type #EMPTY}
Parameter[2] = {Par_Type #EMPTY}
Parameter[3] = {Par_Type #EMPTY}
Option = {VL_STOP FALSE, Clear_P_Reset TRUE, Clear_P_SAW FALSE,Log_to_DB TRUE}
Handle = MsgDialog(nAnswer,"My Question ?","College",Parameter,softkey[1],softkey[2],softkey[3],softkey[4],softkey[5],softkey[6],softkey[7],NoBrakes,1907,Option)
显示如下: