Hallo zusammen,
KR 6
KRC2
ich habe folgendes Problem. Ich möchte gerne bei PTP Bewegungen Überschleifen, bekomme dies aber nicht zum Laufen.
PTP xp10 C_PTP
PTP xp11 C_PTP
usw.
An was kann dies liegen?
vielen Dank
Hallo zusammen,
KR 6
KRC2
ich habe folgendes Problem. Ich möchte gerne bei PTP Bewegungen Überschleifen, bekomme dies aber nicht zum Laufen.
PTP xp10 C_PTP
PTP xp11 C_PTP
usw.
An was kann dies liegen?
vielen Dank
Da muss man wieder mal die Glaskugel befragen.
Etwas mehr Infos sollten da schon noch kommen:
Fehlermeldungen, Verhalten beim Fahren, fährt er gar nicht?
Vielleicht noch einen etwas größerer Programmausschnitt posten.
Vielen Dank für die schnelle Antwort und sorry für die wennigen Infos,
der Roboter fährt schon und das Programm läuft auch, allerdings werden die PTP Bewegungen nicht überschlifen, sondern der Roboter fährt sie an, stoppt kurz und fährt wieder an.
anbei das ganze Programm.
&ACCESS RVP
&REL 107
&PARAM TEMPLATE = C:\KRC\Roboter\Template\vorgabe
&PARAM EDITMASK = *
DEF Z_300_205_B1_1( )
;FOLD INI
;FOLD BASISTECH INI
GLOBAL INTERRUPT DECL 3 WHEN $STOPMESS==TRUE DO IR_STOPM ( )
INTERRUPT ON 3
BAS (#INITMOV,0 )
;ENDFOLD (BASISTECH INI)
;FOLD SPOTTECH INI
USERSPOT(#INIT)
;ENDFOLD (SPOTTECH INI)
;FOLD GRIPPERTECH INI
USER_GRP(0,DUMMY,DUMMY,GDEFAULT)
;ENDFOLD (GRIPPERTECH INI)
;FOLD USER INI
;Make your modifications here
;ENDFOLD (USER INI)
;ENDFOLD (INI)
$out[39]=false
$out[40]=false
merker=false
Stapel_leer=false
loop
;--- Anfahrt Homepos, nur aus sicherer Position anfahren!!!
;FOLD PTP HOME Vel=100 % DEFAULT;%{PE}%R 5.5.33,%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:HOME, 3:, 5:100, 7:DEFAULT
$BWDSTART=FALSE
PDAT_ACT=PDEFAULT
FDAT_ACT=FHOME
BAS(#PTP_PARAMS,100)
$H_POS=XHOME
PTP XHOME
;ENDFOLD
;-------------------------------------------------
;--- Abfrage Glas laden --------------------------
;FOLD WAIT FOR ( IN 40 'Glas beladen' );%{PE}%R 5.5.33,%MKUKATPBASIS,%CEXT_WAIT_FOR,%VEXT_WAIT_FOR,%P 2:, 4:, 5:$IN, 6:40, 7:Glas beladen, 9:
WAIT FOR ( $IN[40] )
;ENDFOLD
;-------------------------------------------------
;--- Anfahrt Startpos Stapel 1 -------------------
;FOLD PTP vor_Box CONT Vel=100 % PDAT1 Tool[1]:Sauger Base[2]:Box1;%{PE}%R 5.5.33,%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:vor_Box, 3:C_PTP, 5:100, 7:PDAT1
$BWDSTART=FALSE
PDAT_ACT=PPDAT1
FDAT_ACT=Fvor_Box
BAS(#PTP_PARAMS,100)
PTP Xvor_Box C_PTP
;ENDFOLD
;FOLD PTP vor_Stapel1 CONT Vel=100 % PDAT2 Tool[1]:Sauger Base[2]:Box1;%{PE}%R 5.5.33,%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:vor_Stapel1, 3:C_PTP, 5:100, 7:PDAT2
$BWDSTART=FALSE
PDAT_ACT=PPDAT2
FDAT_ACT=Fvor_Stapel1
BAS(#PTP_PARAMS,100)
PTP Xvor_Stapel1 C_PTP
;ENDFOLD
;-------------------------------------------------
;FOLD WAIT Time=0 sec;%{PE}%R 5.5.33,%MKUKATPBASIS,%CWAIT,%VWAIT,%P 2:0
WAIT SEC 0
;ENDFOLD
;--- Abfrage schnelles Anfahren ------------------
if merker==true then
ptp merkpos
endif
;-------------------------------------------------
;--- Interruptberechnung Stapel 1 ----------------
interrupt decl 1 when $meas_pulse[1]== true Do ablegen ()
interrupt on 1
$advance=0
suchfahrt ()
interrupt off 1
;-------------------------------------------------
;FOLD PTP HOME Vel= 100 % DEFAULT;%{PE}%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:HOME, 3:, 5:100, 7:DEFAULT
$BWDSTART = FALSE
PDAT_ACT=PDEFAULT
FDAT_ACT=FHOME
BAS (#PTP_PARAMS,100 )
$H_POS=XHOME
PTP XHOME
;ENDFOLD
if Stapel_leer == true then
goto a
endif
endloop
a:
Stapel_leer = false
END
def ablegen ()
interrupt off 1
brake F
merkpos=$Pos_INT
merker = true
$out[40]=true
;FOLD WAIT Time=0.5 sec;%{PE}%R 5.5.33,%MKUKATPBASIS,%CWAIT,%VWAIT,%P 2:0.5
WAIT SEC 0.5
;ENDFOLD
if not ($meas_pulse[1] and $meas_pulse[2])==true then
lin_rel {y 10}
if not ($meas_pulse[1] and $meas_pulse[2])==true then
$out[39]=false
$out[40]=false
;FOLD WAIT Time=0.5 sec;%{PE}%R 5.5.33,%MKUKATPBASIS,%CWAIT,%VWAIT,%P 2:0.5
WAIT SEC 0.5
;ENDFOLD
BAS (#VEL_PTP,30)
ptp xp24 c_ptp
ptp xp25 c_ptp
Stapel_leer=true
goto z
endif
endif
;--- versteckte Punkte fuer Glas aus Box entladen-
$vel.cp=0.005
wait sec 0.5
lin_rel { z 10, y -10 }
BAS(#VEL_PTP,50)
ptp xp24 c_ptp
ptp xp25 c_ptp
bas (#BASE,1)
ptp xp26 c_ptp
ptp xp27 c_ptp
ptp xp28 c_ptp
$vel.cp=1
lin xp29
$out[39]=false
;FOLD WAIT Time=3 sec;%{PE}%R 5.5.33,%MKUKATPBASIS,%CWAIT,%VWAIT,%P 2:3
WAIT SEC 3
;ENDFOLD
$out[40]=false
;FOLD WAIT Time=0.5 sec;%{PE}%R 5.5.33,%MKUKATPBASIS,%CWAIT,%VWAIT,%P 2:0.5
WAIT SEC 0.5
;ENDFOLD
BAS (#VEL_PTP,30)
ptp xp28 c_ptp
;FOLD PULSE 41 'Glas uebergeben' State=TRUE CONT Time=2 sec;%{PE}%R 5.5.33,%MKUKATPBASIS,%COUT,%VPULSE,%P 2:41, 3:Glas uebergeben, 5:TRUE, 6:CONTINUE, 8:2
CONTINUE
PULSE($OUT[41], TRUE,2)
;ENDFOLD
ptp xp27 c_ptp
ptp xhome
z:
resume
end
def suchfahrt ()
;-- versteckter Punkt XP10 Endpos Box ------------
;-------------------------------------------------
$out[39]=true
$vel.cp=0.1
lin XEnde_Stapel1
$out[39]=false
bas (#VEL_PTP,30)
bas (#BASE,2)
ptp xvor_Stapel1
ptp xvor_Box
stapel_leer=true
end
Und schon haben wir es:
$advance = 0
verhindert das Überschleifen wirkungsvoll.
Da sollte dann schon mal mindestens
$advance = 1 stehen.
Ist natürlich blöd, weil da mit resume gearbeitet wird.
Ohne jetzt das Programm komplett analysiert zu haben
denke ich mal es wäre besser (da man dann $advance wieder höher setzen kann),
das meiste Zeug, das im Ablegen() steht in's Hauptprogramm zu verfrachten (nach dem Aufruf von Ablegen())
und im Ablegen nur die Bewegung zu stoppen, die aktuelle Position
abspeichern und sofort mit resume rauszuspringen,
Hallo Hermann,
vielen Dank für die schnelle Hilfe, das versuch ich gleich mal.
Danke schön
Hallo,
kann es auch noch andere Gründe geben, denn es funktioniert immer noch nicht?
Vielen Dank
- Punkte zu dicht aufeinander,
- aktuell eingestellter Überschleifradius zu groß
- aktuell eingestellter Überschleifradius == 0
Aber $advance muss auf jeden Fall größer 0 sein, sonst kann's gar nicht gehen.
Kontrolliere an den entsprechenden Stellen $ADVANCE per Anzeige>Variablen>Einzeln. Welchen Wert hat dann $ADVANCE.
BTW: Statt $Advance nach einer Interrupt Routine einfach auf 1,2 oder 3 zu setzen kann man besser $ADVANCE=DEF_ADVANCE schreiben. Setzt dann den Vorlaufzeiger auf den Standardwert.
$Advance stellst du ja auf 0, damit beim Aufruf von Resume der Vorlaufzeiger nicht schon wieder in der Ebene ist, in der der Interrupt deklariert wurde. Das kann dann also direkt nach Ende der Suchfahrt wieder hochgesetzt werden.
Also:
Das bringt nix.
Denn das Überschleifproblem taucht im Interrupt auf.
Da muss man dann schon im Ablegen() nach Brake F den $Advance hochsetzen.
Das sollte auch funktionieren, daher auch meine erste Bemerkung mit dem Verfrachten der Bewegungen in das Hauptprogramm.
Ah, dammich, habe ich übersehen.
Also sollte es doch reichen, wenn er Advance am Ende von Suchfahrt auf 0 setzt. Dann sollte der Vorlaufzeiger Suchfahrt nicht verlassen und die PTP Bewegungen laufen noch mit Advance<>0. Nach der Suchfahrt kann dann der Advance wieder auf Standardwert gesetzt werden.
Hallo,
ich bin erst heute Nachmittag wieder an der Anlage. Ich melde mich sobald ich es versucht hab. Vielen Dank für Eure Hilfe.
Hallo zusammen,
also ich hab Ende Schuchfahrt (), $advance=0 gesetzt und beim Rücksprung nach Aufruf suchfahrt () wieder $advance=def_advance.
Doch leider ohne Erfolg. Die Punkte werden immer noch direkt angefahren.
Was könnt ich noch versuchen?
Muss ich das Programm so umstellen wie es Hermann meinte?
DAnke schön
Hallo zusammen,
jetzt funktioniert es.
ich habe das Programm so umgebaut wie es mir Hermann empfohlen hatte.
Vielen Dank für eure Hilfe.
Du musst ein Benutzerkonto haben um einen Kommentar hinterlassen zu können