工具工件偏移模板
GLOBAL DEFFCT E6POS Offs(iPoint:IN,iX:IN,iY:IN,iZ:IN,iA:IN,iB:IN,iC:IN,iTool:IN,iBase:IN)
DECL REAL iX,iY,iZ,iA,iB,iC
DECL INT iTool,iBase
DECL FRAME tFrame
DECL E6POS iPoint
tFrame=$NULLFRAME
IF (iTOOL>16) OR (iTOOL<1) THEN
$TOOL=$NULLFRAME
$ACT_TOOL=0
ELSE
$TOOL=TOOL_DATA[iTOOL]
$ACT_TOOL=iTool
ENDIF
IF (iBASE>32) OR (iBASE<1) THEN
$BASE=$NULLFRAME
$ACT_BASE=0
ELSE
$BASE=BASE_DATA[iBASE]
$ACT_BASE=iBase
ENDIF
WAIT SEC 0
tFrame.X=iX
tFrame.Y=iY
tFrame.Z=iZ
tFrame.A=iA
tFrame.B=iB
tFrame.C=iC
$IPO_MODE=#BASE
iPoint=tFrame:iPoint
RETURN(iPoint)
ENDFCT
GLOBAL DEFFCT E6POS RelTool(iPoint:IN,iX:IN,iY:IN,iZ:IN,iA:IN,iB:IN,iC:IN,iTool:IN,iBase:IN)
DECL REAL iX,iY,iZ,iA,iB,iC
DECL INT iTool,iBase
DECL FRAME tFrame
DECL E6POS iPoint
tFrame=$NULLFRAME
IF (iTOOL>16) OR (iTOOL<1) THEN
$TOOL=$NULLFRAME
$ACT_TOOL=0
ELSE
$TOOL=TOOL_DATA[iTOOL]
$ACT_TOOL=iTool
ENDIF
IF (iBASE>32) OR (iBASE<1) THEN
$BASE=$NULLFRAME
$ACT_BASE=0
ELSE
$BASE=BASE_DATA[iBASE]
$ACT_BASE=iBase
ENDIF
WAIT SEC 0
tFrame.X=iX
tFrame.Y=iY
tFrame.Z=iZ
tFrame.A=iA
tFrame.B=iB
tFrame.C=iC
$IPO_MODE=#BASE
iPoint=iPoint:tFrame
RETURN(iPoint)
ENDFCT
错误处理模板
DECL INT a
DECL INT b
b=3
on_error_proceed
a = b/0
机器人信息显示模板
DECL KrlMsgDlgSK_T softkey[7]
DECL KRLMSG_T MyMessage
DECL EKRLMsgType Type
DECL int result1
DECL KRLMSGOPT_T Myoptions1
DECL KRLMSGPAR_T Para[3]
DECL bool result
softkey[1] = {sk_type #value, sk_txt[] "Open"}
softkey[2] = {sk_type #value, sk_txt[] "Close"}
softkey[3] = {sk_type #value, sk_txt[] "Show"}
softkey[4] = {sk_type #value, sk_txt[] "Hide"}
softkey[5] = {sk_type #empty, sk_txt[] "Open1"}
softkey[6] = {sk_type #empty, sk_txt[] "Close1"}
softkey[7] = {sk_type #empty, sk_txt[] "Show1"}
MyMessage={modul[]"USER",Nr 103,msg_txt[]"MaxForceLimit"}
Myoptions1= {VL_STOP true, Clear_P_Reset true, Clear_P_SAW false, Log_to_DB false}
result1 = Set_KrlMsg(#NOTIFY, MyMessage, Para[ ], Myoptions1)
result1=SET_KRLDLG(MyMessage,Para[ ],softkey[ ], Myoptions1)
result = EXISTS_KRLDLG(result1, answer)
;result = Clear_KrlMsg(result1)
halt
机器人通过中断暂停启动模块
interrupt decl 1 when $in[601]==true do abc()
interrupt on 1
def abc()
BRAKE f
WAIT SEC 1
WAIT FOR ( $IN[600] ) AND ( NOT $IN[601] )
WAIT SEC 1
end
机器人原点启动模块
global DEF PTPStartPoint()
DECL E6AXIS StartP
$VEL.CP =0.2
$TOOL = TOOL_DATA[1]
$BASE = BASE_DATA[1]
StartP = $AXIS_ACT
$ADVANCE = 0
PTP StartP
END
机器人搜寻点模块
INTERRUPT DECL 21 WHEN DI_27_Completion == TRUE DO OnInterrupt() ;启动中断将信号关联中断程序
PTPStartPoint() ;将当前点作为起点位置
PULSE ( DO_18_ForceClear, true, 0.5 ) ;设置力值清零信号为真0.5S
PULSE ( DO_19_DistanceClear, true, 0.5 ) ;设置记录距离清理信号为真0.5S
PULSE ( DO_23_CurveClear, true, 0.5 ) ;设置曲线清除信号为真0.5S
DO_21_StartBack=FALSE ;发送信号给上位机
nMoveDistance=0 ;将移动距离设置为0
WAIT SEC 1; ;等待1s
WAIT for (DI_26_AllowStart) ;等待允许开始信号为真
DO_21_StartBack=TRUE ;发送信号给上位机
$TOOL = TOOL_DATA[1] ;将当前工具设置为第一个工具
pPreNowPoint=$POS_ACT ;将当前位置赋值给ppreNowPoint点位
XPointF = pPreNowPoint ;将ppreNowPoint赋值给XPointF
LoadSpeed = GI_48_63_LoadSpeed/100.0
$VEL.CP = LoadSpeed/1000.0 ;设置机器人移动速度为上位机设定速度
nMoveDistance=GI_128_143_MoveLimit/100; ;将上位机设定的移动距离赋值给nMoveDistance
IF DI_30_PressPull==true THEN ;判断设置方向是否为正方向
nMoveDistance=-nMoveDistance ;设置移动方向为负值
ENDIF
FOffset = {X 0,Y 0,Z 0,A 0,B 0,C 0} ;编辑偏移方向
FOffset.Z=nMoveDistance; ;设置偏移的Z方向为上位机移动的距离
search() ;移动机器人向Z方向寻找直到DI_27_Completion为真或者直到设定的最大距离
WAIT SEC 0; ;等待0S 防止机器预读
WAIT for (NOT DI_21_KeepLoad) ;等待保持力不为真
lin XPointF ;移动到XPointF
WAIT SEC 0.5 ;等待0.5S
PULSE ( DO_22_Complete, true, 0.5 ) ;设置完成信号为真0.5S
WAIT SEC 0.5 ;等待0.5S
DO_21_StartBack =FALSE ;;发送信号给上位机
HALT;
DEF OnInterrupt()
INTERRUPT OFF 21
BRAKE F
lin $POS_INT
RESUME
END
DEF search()
INTERRUPT ON 21
;PTP
LIN pPreNowPoint:FOffset
end
机器人INT转字符功能模块
GLOBAL DEFFCT CHAR[1] Int_to_String(zVar:IN )
DECL CHAR Ret[1]
DECL INT Offset,I
DECL STATE_T state
DECL INT zVar
Offset=0
FOR I=1 TO 1
Ret[I]=0
ENDFOR
SWRITE(Ret[],state,Offset,"%d",zVar)
Return (Ret[])
ENDFCT