Hallo Zusammen,
ich brauche Hilfe beim Überschleifen von mehreren LIN-Befehlen.
Ich bin eigentlich SPS-Programmierer und muss leider auf Grund eines Ausfalls unseres Roboterprogrammierers die Anlage fertigstellen.
Das Programm ansich steht und läuft auch soweit sehr gut. Im Grunde nur noch Optimierung.
Es geht nur um das fahren von A nach C über B. Die Punkte sind jeweils 1,5-2m auseinander, liegen also auch nicht zu nahe beisammen.
Hier mal der Programmteil:
&ACCESS RVP2
&REL 124
&PARAM DISKPATH = KRC:\R1\Program\JOBS
DEF Ablegen_Maus ( )
DECL BOOL retValue
;FOLD INI;%{PE}
;FOLD BASISTECH INI
GLOBAL INTERRUPT DECL 3 WHEN $STOPMESS==TRUE DO IR_STOPM ( )
INTERRUPT ON 3
BAS (#INITMOV,0 )
;ENDFOLD (BASISTECH INI)
;FOLD USER INI
;Make your modifications here
;ENDFOLD (USER INI)
;ENDFOLD (INI)
IF (FALSE) THEN
BAS(#INITMOV,0)
PA_TMP = $AXIS_ACT
PTP PA_TMP
ENDIF
$APO.CPTP = 100 ;[mm] oder [%] (Abhängig von Registry-Eintrag) Überschleifen wenn ...
;$APO.CVEL = 100 ;[mm] Überschleifen wenn Geschwindigkeit < X zum Zielpunkt
$APO.CDIS = 500 ;[mm] Überschleifen wenn Entfernung < X zum Zielpunkt
retValue = FALSE
LOCATION_SOURCE = LOCATION_ACTUAL
LOCATION_DESTINATION = #ST21
SWITCH WerkstParaIN
CASE ...
CASE 3, 4 ;SB 7
IF DI44_Teil_n_gegriffen THEN
$TOOL =TOOL_DATA[3]
$ACT_TOOL = 3
$LOAD = LOAD_DATA[3]
LOOP_MSG("Werkstueck 3")
ENDIF
IF DI43_Teil_gegriffen THEN
$TOOL =TOOL_DATA[4]
$ACT_TOOL = 4
$LOAD = LOAD_DATA[4]
LOOP_MSG("Werkstueck 4")
ENDIF
SWITCH (LOCATION_SOURCE)
...
CASE #ST10
LOOP_MSG("BAUTEIL in ST20 ablegen: aus Bereich <ST10> fahren")
$BASE = BASE_DATA[1]
$ACT_BASE = 1
LIN XN1_Pick_ST10_SB7 C_Dis
LIN XN2_Pick_ST10_SB7 C_Dis
LIN XN3_Pick_ST10_SB7 C_Dis
LIN XN4_Pick_ST10_SB7 C_Dis
LIN XN5_Pick_ST10_SB7 C_Dis
LIN XN6_Pick_ST10_SB7 C_Dis
LIN XN7_Pick_ST10_SB7 C_Dis
LIN XN8_Pick_ST10_SB7 C_Dis
$BASE = BASE_DATA[2]
$ACT_BASE = 2
LIN XZW_ST10_ST20 C_Dis
;LOCATION_ACTUAL=#preST20
retValue = TRUE
CASE ...
ENDSWITCH
IF retValue == FALSE THEN
DO37_Job_beendet = TRUE
RETURN
ENDIF
$BASE = BASE_DATA[2]
$ACT_BASE = 2
LIN XPrepos_ST20 C_Dis
LIN XV1_Place_ST21_SB7 C_Dis
;Arbeitsraum abfragen
CONTINUE ;Vorlaufstopp verhindern
IF NOT DI114_AR_2 THEN
CONTINUE ;Vorlaufstopp verhindern
WAIT FOR DI114_AR_2
ENDIF
;250mm vor nachfolgendem Zielpunkt Geschwindigkeit anpassen
TRIGGER WHEN PATH=-250 DELAY=0 DO Max_Override = 30
LIN XPlace_ST21_SB7
WAIT SEC 0
Max_Override = 100
CASE ...
ENDSWITCH
;TRIGGER WHEN DISTANCE=0 DELAY=0 DO CHECK_AND_LOCK_AREA() PRIO=-1
LOCATION_ACTUAL=LOCATION_DESTINATION
END
Alles anzeigen
Die Bewegungen beginnen am Zeile 64 bzw danach.
ZitatLIN XN1_Pick_ST10_SB7 C_Dis
LIN XN2_Pick_ST10_SB7 C_Dis...
LIN XZW_ST10_ST20 C_DIS
und enden bei Zeile 94
ZitatLIN XPrepos_ST20 C_DIS
LIN XV1_Place_ST21_SB7 C_DIS
Die Bewegungen werden zwar überschliefen, der Roboter Bremst aber bei jedem Punkt etwas ab, was nicht schön aussieht und auf die Taktzeit geht.
Hierzu wäre noch zu sagen, dass die Achse 5 um etwa 90° geknickt ist und bei der Bewegung ausgestreckt wird. Achse 6 wird über die 3 Positionen um 180° gedreht.
Mit PTP kann ich die Positionen nicht anfahren, da wir Störkonturen haben. Habe es schon mit C_ORI versucht, da hält der Roboter bei jedem Punkt an. SPLINE-Bewegung fährt der Roboter in die Störkontur.
Wie bekomme ich die Bewegung flüssiger hin?
MfG Oma