有些玩ABB机器人的小伙伴们,当开始玩我们库卡机器人的时候,时常会说ABB有等待超时的指令,你们库卡为什么没有。其实上ABB只是将该指令封装好了,用户拿来直接使用,每家的语言有自己的特色,库卡开放性好,只要你自己理解了功能逻辑原理也可以自己来封装。废话不多说,直接简单粗暴上代码:
DEF WaitForIn(Num:IN,State:IN,MaxWaitTime:IN,TimeOut:OUT )
;***************************************************
;* Customer : *
;* Roboter : *
;* Version : Vxxxxxx *
;* Roboter Nr. : xxxxxx *
;* Controller Nr: xxxxxx *
;* Autor : xxxxxxx *
;* Company : *
;* Department : *
;* Telephone : 86 ***-****-**** *
;* Version : 1.0 *
;* Created : 12.12.2018 *
;* Modified : *
;* Project : *
;* Program Name : WaitForIn *
;* WAIT AN INPUT SIGNAL WITH A Timer; *
;**************************************************
DECL INT Num
DECL BOOL State
DECL REAL MaxWaitTime
DECL BOOL TimeOut
DECL INT Num_Abs
TimeOut=FALSE
ConTINUE
IF VARSTATE("Num")<>#INITIALIZED THEN
MsgQuit("Input channel not initialized!")
HALT
ELSE
Num_Abs=ABS(Num)
ENDIF
ConTINUE
IF (Num_ABS== 0) OR (Num_Abs> ($SET_IO_SIZE*1024)) THEN
MsgQuit("Input channel Out of range!")
HALT
ENDIF
ConTINUE
IF VARSTATE("State")<>#INITIALIZED THEN
MsgQuit("Input Status not initialized!")
HALT
ENDIF
ConTINUE
IF VARSTATE("MaxWaitTime")<>#INITIALIZED THEN
MaxWaitTime=0
ENDIF
ConTINUE
IF MaxWaitTime==0 THEN
IF ((State==(Num>0))==TRUE) THEN
WAIT FOR $IN[Num_Abs]
ELSE
WAIT FOR NOT $IN[Num_Abs]
ENDIF
ELSE
IF ((State==(Num>0))==TRUE) THEN
WAIT FOR $IN[Num_Abs] OR Timer_Limit(MaxWaitTime)
ELSE
WAIT FOR NOT $IN[Num_Abs] OR Timer_Limit(MaxWaitTime)
ENDIF
IF $IN[Num_Abs]<>(State==(Num>0)) THEN
TimeOut=TRUE
ENDIF
ENDIF
END
咨询详情:KUKA库卡机器人