KUKA MsgDialog()解析及示例

一、引言

        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)

        显示如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值