Hallo Roboterforum,
ich habe ein Problem mit dem SYN PULSE. Folgendes Programm habe ich geschrieben:
Code
DEF J3_BST_Aus_WT_Abholen( )
CONTINUE
; === Anfahren der Wartepsoition ===;
;FOLD SYN PULSE 553 'Job Selected' State=TRUE Time=1 sec at END Delay=0 ms;%{PE}%R 8.3.48,%MKUKATPBASIS,%COUT,%VSYNPULSE,%P 2:553, 3:Job Selected, 5:TRUE, 7:1, 10:1, 12:0, 15:0
TRIGGER WHEN DISTANCE=1 DELAY=0 DO PULSE($OUT[553],TRUE,1)
;ENDFOLD
;FOLD PTP WartePos CONT Vel=100 % PDAT1 Tool[1]:Mitte_Greifer Base[0];%{PE}%R 8.3.48,%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:WartePos, 3:C_DIS, 5:100, 7:PDAT1
$BWDSTART=FALSE
PDAT_ACT=PPDAT1
FDAT_ACT=FWartePos
BAS(#PTP_PARAMS,100)
PTP XWartePos C_DIS
;ENDFOLD
; === Start des Jobs ===;
CONTINUE
WAIT FOR IX_Job_Start OR IX_Automatik_Stop
CONTINUE
IF IX_Job_Start AND NOT IX_Automatik_Stop THEN
;FOLD SYN PULSE 554 'Job Started' State=TRUE Time=1 sec at START Delay=0 ms;%{PE}%R 8.3.48,%MKUKATPBASIS,%COUT,%VSYNPULSE,%P 2:554, 3:Job Started, 5:TRUE, 7:1, 10:0, 12:0, 15:0
TRIGGER WHEN DISTANCE=0 DELAY=0 DO PULSE($OUT[554],TRUE,1)
;ENDFOLD
; === Vorposition === ;
;FOLD PTP VP CONT Vel=100 % PDAT2 Tool[3]:Mitte_Rohteilgreifer Base[0];%{PE}%R 8.3.48,%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:VP, 3:C_DIS, 5:100, 7:PDAT2
$BWDSTART=FALSE
PDAT_ACT=PPDAT2
FDAT_ACT=FVP
BAS(#PTP_PARAMS,100)
PTP XVP C_DIS
;ENDFOLD
;FOLD Gripper SET [2]Bestueckung Zustellung State=[2]Ausgefahren Wait 0.5[s] Check with Strategy 1 ;%{PE}
;FOLD Parameters Parameters ;%{h}
;Params IlfProvider=GripperTech.GripperSet;setgripper=2;setstate=2;setcont=nocont;waittime=0.5;errorstrategy=1
;ENDFOLD
GRPg_SetStateAndCheck(2, 2, 0.5, 1)
;ENDFOLD
; === Applikationspunkt === ;
;FOLD LIN AP Vel=0.1 m/s CPDAT1 Tool[3]:Mitte_Rohteilgreifer Base[0];%{PE}%R 8.3.48,%MKUKATPBASIS,%CMOVE,%VLIN,%P 1:LIN, 2:AP, 3:, 5:0.1, 7:CPDAT1
$BWDSTART=FALSE
LDAT_ACT=LCPDAT1
FDAT_ACT=FAP
BAS(#CP_PARAMS,0.1)
LIN XAP
;ENDFOLD
;FOLD Gripper SET [3]Bestueckung Greifer State=[2]Geschlossen Wait 0[s] Check with No Check ;%{PE}
;FOLD Parameters Parameters ;%{h}
;Params IlfProvider=GripperTech.GripperSet;setgripper=3;setstate=2;setcont=nocont;waittime=0;errorstrategy=0
;ENDFOLD
GRPg_SetStateAndCheck(3, 2, 0, 0)
;ENDFOLD
;FOLD Gripper SET [4]Bestueckung Saugen Nest1 State=[2]Ein Wait 0[s] Check with No Check ;%{PE}
;FOLD Parameters Parameters ;%{h}
;Params IlfProvider=GripperTech.GripperSet;setgripper=4;setstate=2;setcont=nocont;waittime=0;errorstrategy=0
;ENDFOLD
GRPg_SetStateAndCheck(4, 2, 0, 0)
;ENDFOLD
;FOLD Gripper SET [5]Bestueckung Saugen Nest2 State=[2]Ein Wait 0[s] Check with No Check ;%{PE}
;FOLD Parameters Parameters ;%{h}
;Params IlfProvider=GripperTech.GripperSet;setgripper=5;setstate=2;setcont=nocont;waittime=0;errorstrategy=0
;ENDFOLD
GRPg_SetStateAndCheck(5, 2, 0, 0)
;ENDFOLD
;FOLD WAIT Time=1 sec;%{PE}%R 8.3.48,%MKUKATPBASIS,%CWAIT,%VWAIT,%P 3:1
WAIT SEC 1
;ENDFOLD
;FOLD Gripper CHECK [3]Bestueckung Greifer State=[2]Geschlossen with Strategy 1 ;%{PE}
;FOLD Parameters Parameters ;%{h}
;Params IlfProvider=GripperTech.GripperCheck;setgripper=3;setstate=2;setcont=nocont;checkstrategy=1
;ENDFOLD
GRPg_Check(3, 2, FALSE, 1)
;ENDFOLD
;FOLD Gripper CHECK [4]Bestueckung Vakuum Nest1 State=[2]Ein with Strategy 1 ;%{PE}
;FOLD Parameters Parameters ;%{h}
;Params IlfProvider=GripperTech.GripperCheck;setgripper=4;setstate=2;setcont=nocont;checkstrategy=1
;ENDFOLD
GRPg_Check(4, 2, FALSE, 1)
;ENDFOLD
;FOLD Gripper CHECK [5]Bestueckung Vakuum Nest2 State=[1]Aus with Strategy 1 ;%{PE}
;FOLD Parameters Parameters ;%{h}
;Params IlfProvider=GripperTech.GripperCheck;setgripper=5;setstate=1;setcont=nocont;checkstrategy=1
;ENDFOLD
GRPg_Check(5, 1, FALSE, 1)
;ENDFOLD
;FOLD Gripper SET [2]Bestueckung Zustellung State=[1]Eingefahren Wait 0.5[s] Check with Strategy 1 ;%{PE}
;FOLD Parameters Parameters ;%{h}
;Params IlfProvider=GripperTech.GripperSet;setgripper=2;setstate=1;setcont=nocont;waittime=0.5;errorstrategy=1
;ENDFOLD
GRPg_SetStateAndCheck(2, 1, 0.5, 1)
;ENDFOLD
; === Nachposition (i.d.R gleich VP) === ;
;FOLD LIN NP CONT Vel=0.1 m/s CPDAT2 Tool[3]:Mitte_Rohteilgreifer Base[0];%{PE}%R 8.3.48,%MKUKATPBASIS,%CMOVE,%VLIN,%P 1:LIN, 2:NP, 3:C_DIS C_DIS, 5:0.1, 7:CPDAT2
$BWDSTART=FALSE
LDAT_ACT=LCPDAT2
FDAT_ACT=FNP
BAS(#CP_PARAMS,0.1)
LIN XNP C_DIS C_DIS
;ENDFOLD
;FOLD SYN PULSE 555 'Job Finished' State=TRUE Time=1 sec at END Delay=0 ms;%{PE}%R 8.3.48,%MKUKATPBASIS,%COUT,%VSYNPULSE,%P 2:555, 3:Job Finished, 5:TRUE, 7:1, 10:1, 12:0, 15:0
TRIGGER WHEN DISTANCE=1 DELAY=0 DO PULSE($OUT[555],TRUE,1)
;ENDFOLD
;FOLD PTP WartePos CONT Vel=100 % PDAT5 Tool[1]:Mitte_Greifer Base[0];%{PE}%R 8.3.48,%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:WartePos, 3:C_DIS, 5:100, 7:PDAT5
$BWDSTART=FALSE
PDAT_ACT=PPDAT5
FDAT_ACT=FWartePos
BAS(#PTP_PARAMS,100)
PTP XWartePos C_DIS
;ENDFOLD
ENDIF
END
Display More
In dem Programm gibt es 3 SYN PULSE Anweisungen. Die ersten beiden funktionieren einwandfrei.
Der letzte SYN PULSE Befehl (Job finished) wird auf das Ende der Bewegung PTP WartePos gekoppelt. Die Bewegung wird ausgeführt und beendet.
Code
;FOLD SYN PULSE 555 'Job Finished' State=TRUE Time=1 sec at END Delay=0 ms;%{PE}%R 8.3.48,%MKUKATPBASIS,%COUT,%VSYNPULSE,%P 2:555, 3:Job Finished, 5:TRUE, 7:1, 10:1, 12:0, 15:0
TRIGGER WHEN DISTANCE=1 DELAY=0 DO PULSE($OUT[555],TRUE,1)
;ENDFOLD
;FOLD PTP WartePos CONT Vel=100 % PDAT5 Tool[1]:Mitte_Greifer Base[0];%{PE}%R 8.3.48,%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:WartePos, 3:C_DIS, 5:100, 7:PDAT5
$BWDSTART=FALSE
PDAT_ACT=PPDAT5
FDAT_ACT=FWartePos
BAS(#PTP_PARAMS,100)
PTP XWartePos C_DIS
;ENDFOLD
Display More
Allerdings wird dieses Signal nie gesetzt, was ich nicht verstehe. In der SPS sind die ersten beiden Pulse im Oszi zu sehen, das letzte nie.
Erklären kann ich mir das nicht, weiß jemand Rat? Das ganze läuft auf einer KRC4, Version V8.3. Die Kommunikation zur SPS läuft über Profinet.
Danke schonmal für jeden, der sich die Mühe macht, sich das anzuschauen!