Überschleifen bei PTP Bewegungen

  • 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

  • Schritt für Schritt zum Roboterprofi!
  • 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,

  • - 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.

    Greetings, Irrer Polterer!

    Wie poste ich falsch? Nachdem ich die Suche und die FAQ erfolgreich ignoriert habe, erstelle ich das gleiche Thema in mehreren Unterforen, benutze einen sehr kreativen Titel wie "Hilfe", am Besten noch mit mehreren Ausrufezeichen, und veröffentliche einen so eindeutigen Text, dass sich jeder etwas Anderes darunter vorstellt.


    Life is a beta version. Full of bugs and no Manual.

  • $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:

    Code
    ;--- Interruptberechnung Stapel 1 ----------------
    interrupt decl 1 when $meas_pulse[1]== true Do ablegen ()
    interrupt on 1
    $advance=0
    suchfahrt ()
    $advance=DEF_ADVANCE
    interrupt off 1
    ;-------------------------------------------------
  • 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 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

Erstelle ein Benutzerkonto oder melde dich an um zu kommentieren

Du musst ein Benutzerkonto haben um einen Kommentar hinterlassen zu können

Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Geht einfach!
Neues Benutzerkonto erstellen
Anmelden
Du hast bereits ein Benutzerkonto? Melde dich hier an.
Jetzt anmelden