Punkte anfahren, ohne zu teachen?

  • Hallo zusammen,
    ich habe ein Problem. Wir haben die Aufgabe, mittels Roboter einen (runden) Kuchen zu schneiden. Es darf nur ein einziger Punkt geteacht werden. Das ganze haben wir schon mit Relativbewegungen durchgespielt (LIN_REL), was auch soweit funktioniert hat. Nun soll daraus ein Programm entstehen, in dem alle Berechnungen innerhalb des Programms ausgeführt werden.
    Was ich nun vorhabe: Ich möchte einen einzigen Punkt teachen, der jedoch nur dazu dienen soll, die Koordinaten für weitere Berechnungen zur Verfügung zu stellen. Der Punkt soll also nicht angefahren werden. Alle weiteren Punkte sollen aus dem Punkt errechnet werden. Es hapert leider gerade bei mir daran, dass der Roboter den Punkt nicht anfährt. Dazu mal ein Codeauszug:
    ;Erste Position anfahren (Kuchenrand)
    TP.Y=TP.Y+KUCHEN_R
    TP.Z=TP.Z+KUCHEN_H
    LIN TP
    Die Deklaration wurde richtig durchgeführt, aber bei LIN TP fehlt doch noch eine ganze Menge, oder? In Beispielprogrammen sehe ich immer, dass hier ganze Folds mit Variablen vorhanden sind. Ebenso sind auch im .dat-file Variablen und Parameter zu jedem Punkt hinterlegt. Wie kann ich jetzt diesen Punkt anlegen?
    P.S.: Fahre ich zuvor den geteachten Punkt an, so wird auch der Punkt TP angefahren. Fahre ich diesen Punkt jedoch nicht an, so wird ein Fehler ausgegeben.
    Ich bin über jede Hilfe dankbar.
    Gruß
    Daniel

  • Schritt für Schritt zum Roboterprofi!
  • Hallo,


    weil du noch keine einzigen Bewegungsparameter (Beschleunigung, Geschwindigkeit, ...) für deine Bewegung definiert hast.
    Bringt euch das eure "lehrende Person" nicht bei? Frag doch wirklich mal bei dieser nach.


    Mittels Aufruf des Programmes bas.src

    Code
    BAS (#INITMOV,0)


    können all diese Parameter auf Standardwerte gesetzt werden. Spart man sich ne Menge Zeilen wenn man diese Standardwerte verwenden möchte. Ist übrigens in jedem "INI-FOLD" genau aus diesem Grund standardmäßig drinnen.



    Und eine LIN bzw. CIRC darf nicht die erste Bewegung eines neuen Programmablaufes sein.


    PS: Bei weiteren Fragen bitte die exakte Fehlermeldung dazuschreiben. Je mehr Informationen du preisgibst, umso einfach ist es dir zu helfen.

    Grüße, dax

    Always look on the bright side of life!<br /><br />Verlass dich nicht auf andere. Mach deine eigenen Fehler! - Manfred Hinrich

  • Hier nochmal der bisherige Programmanfang:


    &ACCESS RVP
    &REL 1
    DEF ct1 ( )
    DECL E6POS TP
    DECL REAL KUCHEN_D
    DECL REAL KUCHEN_R
    DECL REAL KUCHEN_H
    DECL BOOL Teachpunkt

    ;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)

    KUCHEN_D=270.0
    KUCHEN_R=KUCHEN_D/2
    KUCHEN_H=50.0
    TP=XP1
    Teachpunkt=FALSE

    ;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

    ;FOLD LIN P2 Vel=2 m/s CPDAT1 Tool[3]:Knife Base[0];%{PE}%R 8.3.48,%MKUKATPBASIS,%CMOVE,%VLIN,%P 1:LIN, 2:P2, 3:, 5:2, 7:CPDAT1
    $BWDSTART=FALSE
    LDAT_ACT=LCPDAT1
    FDAT_ACT=FP2
    BAS(#CP_PARAMS,2)
    LIN XP2
    ;ENDFOLD


    ;Teachpunkt einfuegen. Roboter fährt Punkt jedoch nicht an.
    if Teachpunkt==TRUE THEN
    ;FOLD PTP P1 Vel=100 % PDAT1 Tool[3]:Knife Base[0];%{PE}%R 8.3.48,%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:P1, 3:, 5:100, 7:PDAT1
    $BWDSTART=FALSE
    PDAT_ACT=PPDAT1
    FDAT_ACT=FP1
    BAS(#PTP_PARAMS,100)
    PTP XP1
    ;ENDFOLD
    ENDIF


    ;Erster Schnitt
    TP.Y=TP.Y+KUCHEN_R
    TP.Z=TP.Z+KUCHEN_H
    TP.A=TP.A+90

    ;FOLD Schnittposition 1 anfahren
    LIN TP
    ;ENDFOLD
    ;BAS (#INITMOV,0 )


    ;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
    END



    Zunächst wird die Homeposition angefahren, anschließend dann P2. Abhängig davon, ob die Variable TeachPunkt auf TRUE oder FALSE gesetzt wird, so wird der Punkt P1 angefahren. Dann geht es weiter zu Punkt TP (die eigentliche erste Schnittposition).
    Nun ist es so, dass bei Teachpunkt=TRUE (also mit Anfahren des Punktes P1) der Punkt TP anschließend richtig angefahren wird. Ist die Variable Teachpunkt=FALSE, so wird leider eine gänzlich andere Position angefahren.
    Kann mir dazu jemand helfen?

  • Hallo DannyNRW,
    ich vermute, Endposition TP wird schon die gleiche Position im Raum sein.
    Da Du Linear aber direkt von P2 zu TP fährst, wird er sich komplett anders Umorientieren bei der Bewegung, was verwirrt.


    Position im Raum wird gegeben über aktuelles Tool / Base / Position.
    In solchen Fällen einfach kurz über Ansicht/Variable/Einzeln aktuellen Wert prüfen und vergleichen.


    Gruss SJX

    Manche Maenner bemuehen sich lebenslang, das Wesen einer Frau zu verstehen. Andere befassen sich mit weniger schwierigen Dingen z.B. der Relativitaetstheorie.

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