guten tag, ich hab hier ein kleines Problem mit interrupt und resume
und zwar war mal ein KuKa programmierer bei uns und hat den Roboter soweit vor programmiert, zu der Zeit war die Anlage noch nicht fertig und man könnte den Ablauf nur zum Teil testen
nun ist es alles fertig, der Roboter soll an eine vorPosition anfahren Vaccum einschalten, mit laser den abstand zu Material messen und dann den abstand zu seinem Z-Wert addieren und runter fahren, und kurz vor ende mit offset von 60 dann das Material suchen und ansaugen, was alles FUNKTIONIERT, nur diese such Aktion wird mit interrupt abgebrochen wenn er das Signal "Vaccum erzeugt" kriegt und dann soll er wieder auffahren, und genau bei dem resume kommt dann die Meldung ungültig, hatte schon im Forum geguckt dass es sein kann dass der "Zeiger" dann im falschem unterprogramm ist bzw. gleiche eben bei decl und auslösung hat
Zeile 52 decl, 118 on, 186 interrupted
DEF pick_mat( )
;FOLD INI;%{PE}%V3.2.0,%MKUKATPBASIS,%CINIT,%VCOMMON,%P
;FOLD BAS INI;%{E}%V3.2.0,%MKUKATPBASIS,%CINIT,%VINIT,%P
GLOBAL INTERRUPT DECL 3 WHEN $STOPMESS==TRUE DO IR_STOPM ( )
INTERRUPT ON 3
BAS (#INITMOV,0 )
;ENDFOLD (BAS INI)
;FOLD A20 INI;%{E}%V3.2.0,%MKUKATPA20,%CINIT,%VINIT,%P
IF ARC20==TRUE THEN
A20 (ARC_INI)
INTERRUPT DECL 6 WHEN $CYCFLAG[3]==FALSE DO A20(TECH_STOP2)
ENDIF
;ENDFOLD (A20 INI)
;FOLD A10 INI;%{E}%V3.2.0,%MKUKATPARC,%CINIT,%VINIT,%P
IF A10_OPTION==#ACTIVE THEN
INTERRUPT DECL 4 WHEN $CYCFLAG[2]==FALSE DO A10 (#APPL_ERROR)
INTERRUPT DECL 7 WHEN A_ARC_SWI==#ACTIVE DO A10 (#ARC_SEAM)
INTERRUPT DECL 5 WHEN A_FLY_ARC==TRUE DO A10 (#HPU_ARC)
INTERRUPT ON 5
A10_INI ( )
ENDIF
;ENDFOLD (A10 INI)
;FOLD GRIPPER INI;%{E}%V3.2.0,%MKUKATPGRIPPER,%CINIT,%VINIT,%P
USER_GRP(0,DUMMY,DUMMY,GDEFAULT)
;ENDFOLD (GRIPPER INI)
;FOLD SPOT INI;%{E}%V3.2.0,%MKUKATPSPOT,%CINIT,%VINIT,%P
USERSPOT(#INIT)
;ENDFOLD (SPOT INI)
;FOLD TOUCHSENSE INI;%{E}%V3.2.0,%MKUKATPTS,%CINIT,%VINIT,%P
IF H70_OPTION THEN
INTERRUPT DECL 15 WHEN $MEAS_PULSE[TOUCH_I[TOUCH_ACTIVE].IN_NR] DO H70 (6,CD0 )
INTERRUPT DECL 16 WHEN $ZERO_MOVE DO H70 (7,CD0 )
INTERRUPT DECL 17 WHEN $TECHPAR_C[FG_TOUCH,8]>0.5 DO H70 (8,CD0)
H70 (1,CD0 )
ENDIF
;ENDFOLD (TOUCHSENSE INI)
;FOLD USER INI;%{E}%V3.2.0,%MKUKATPUSER,%CINIT,%VINIT,%P
;Make your modifications here
;ENDFOLD (USER INI)
;ENDFOLD (INI)
If doRobINService == false then
;FOLD Stations INI
xvorpos = xteach
x_1 = offset_x_1 / 100.0
y_1 = offset_y_1 / 100.0
z_1 = offset_z_1 / 100.0
xvorpos.x = xvorpos.x + x_1
xvorpos.y = xvorpos.y + y_1
xvorpos.z = xvorpos.z + z_1
Interrupt decl 1 when diVaccumON == true do findpos ()
;ENDFOLD
;FOLD PTP HOME Vel= 100 % DEFAULT;%{PE}%V3.2.0,%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:HOME, 3:, 5:100, 7:DEFAULT
$BWDSTART = FALSE
$H_POS=XHOME
PDAT_ACT=PDEFAULT
BAS (#PTP_DAT )
FDAT_ACT=FHOME
BAS (#FRAMES )
BAS (#VEL_PTP,100 )
PTP XHOME
;ENDFOLD
;FOLD TeachPosition
IF False then
; ======== Hier Satzanwahl um den Punkt zu Teachen ========
;FOLD PTP teach Vel= 100 % PDAT1 Tool[1]:Sauger Base[2]:Magazin;%{PE}%R 4.1.16,%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:teach, 3:, 5:100, 7:PDAT1
$BWDSTART = FALSE
PDAT_ACT=PPDAT1
BAS(#PTP_DAT)
FDAT_ACT=Fteach
BAS(#FRAMES)
BAS(#VEL_PTP,100)
PTP Xteach
;ENDFOLD
halt
Endif
;ENDFOLD
; =====Anfahren zum Material
;FOLD PTP p1 CONT Vel= 100 % PDAT6 Tool[1]:Sauger Base[2]:Magazin;%{PE}%R 4.1.16,%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:p1, 3:C_PTP, 5:100, 7:PDAT6
$BWDSTART = FALSE
PDAT_ACT=PPDAT6
BAS(#PTP_DAT)
FDAT_ACT=Fp1
BAS(#FRAMES)
BAS(#VEL_PTP,100)
PTP Xp1 C_PTP
;ENDFOLD
;FOLD PTP VorPos Vel= 100 % PDAT5 Tool[1]:Sauger Base[2]:Magazin;%{PE}%R 4.1.16,%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:VorPos, 3:, 5:100, 7:PDAT5
$BWDSTART = FALSE
PDAT_ACT=PPDAT5
BAS(#PTP_DAT)
FDAT_ACT=FVorPos
BAS(#FRAMES)
BAS(#VEL_PTP,100)
PTP XVorPos
;ENDFOLD
;=============================
;====Handschake Daten Einlesen =======
doRobVorPosMat = True
wait for diFreigabeZ_Wert
If diMatOK then
posrechnen ()
;=====================================
; =====Material Suchen================
interrupt on 1
suchen ()
interrupt off 1
wait sec 1
;=====================================
;======Material Hoch fahren===========
;FOLD LIN VorPos Vel= 0.5 m/s CPDAT5 Tool[1]:Sauger Base[2]:Magazin;%{PE}%R 4.1.16,%MKUKATPBASIS,%CMOVE,%VLIN,%P 1:LIN, 2:VorPos, 3:, 5:0.5, 7:CPDAT5
$BWDSTART = FALSE
LDAT_ACT=LCPDAT5
BAS(#CP_DAT)
FDAT_ACT=FVorPos
BAS(#FRAMES)
BAS(#VEL_CP,0.5)
LIN XVorPos
;ENDFOLD
;=====================================
Endif
;FOLD PTP p1 CONT Vel= 50 % PDAT7 Tool[1]:Sauger Base[2]:Magazin;%{PE}%R 4.1.16,%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:p1, 3:C_PTP, 5:50, 7:PDAT7
$BWDSTART = FALSE
PDAT_ACT=PPDAT7
BAS(#PTP_DAT)
FDAT_ACT=Fp1
BAS(#FRAMES)
BAS(#VEL_PTP,50)
PTP Xp1 C_PTP
;ENDFOLD
;FOLD PTP HOME Vel= 50 % DEFAULT;%{PE}%R 4.1.16,%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:HOME, 3:, 5:50, 7:DEFAULT
$BWDSTART = FALSE
PDAT_ACT=PDEFAULT
BAS(#PTP_DAT)
FDAT_ACT=FHOME
BAS(#FRAMES)
BAS(#VEL_PTP,50)
$H_POS=XHOME
PTP XHOME
;ENDFOLD
Endif
END
def Suchen ()
;FOLD LIN SuchPLC Vel= 0.5 m/s CPDAT6 Tool[1]:Sauger Base[2]:Magazin;%{PE}%R 4.1.16,%MKUKATPBASIS,%CMOVE,%VLIN,%P 1:LIN, 2:SuchPLC, 3:, 5:0.5, 7:CPDAT6
$BWDSTART = FALSE
LDAT_ACT=LCPDAT6
BAS(#CP_DAT)
FDAT_ACT=FSuchPLC
BAS(#FRAMES)
BAS(#VEL_CP,0.5)
LIN XSuchPLC
;ENDFOLD
;FOLD LIN MaxSuch Vel= 0.1 m/s CPDAT7 Tool[1]:Sauger Base[2]:Magazin;%{PE}%R 4.1.16,%MKUKATPBASIS,%CMOVE,%VLIN,%P 1:LIN, 2:MaxSuch, 3:, 5:0.1, 7:CPDAT7
$BWDSTART = FALSE
LDAT_ACT=LCPDAT7
BAS(#CP_DAT)
FDAT_ACT=FMaxSuch
BAS(#FRAMES)
BAS(#VEL_CP,0.1)
LIN XMaxSuch
;ENDFOLD
end
def findpos ()
interrupt off 1
brake
wait sec 0.5
resume
end
def posrechnen ()
xSuchPLC = xvorpos
Z_Wert_Sensor = sensor_z / 100.0
xSuchPLC.z = xSuchPLC.z + Z_Wert_Sensor
xMaxSuch = xSuchPLC
xMaxSuch.z = xMaxSuch.z - 50
end
Alles anzeigen