Startpunkt verschieben

  • Servus zusammen,


    ich verzweifle langsam. Habe seit ein paar Monaten einen KRC4.


    Habe auch ein Programm geschrieben, wo der Roboter ein Becken ausfräst. Da der auszufräsende Baustamm nicht immer gleich ist, ist mein Plan, den Startpunkt XStart über Touch Up einen neuen Startpunkt abzuspeichern. Danach wäre mein Wunsch, dass sich alle anderen Punkte ebenfalls verschieben... Ist das irgendwie möglich??? Ich kann zwar alles markieren und über World verschieben, aber ist auch immer ein Aufwand. Gibt es irgendwie die Möglichkeit den Startpunkt neu abzuspeichern, alle anderen Punkte verschieben sich ebenfalls und fertig ?


    Vielen Dank !!!

  • Schritt für Schritt zum Roboterprofi!

  • So vieleicht?

  • Guten Morgen,


    Vielen Dank !!!

    wo soll ich den Code einfügen ? Im dat Programm ? Oder im $configdat Programm ? Oder einfach über dem normalen Fräsprogramm? Du hast mir ja 2 Codes geschrieben... wo muss welcher Code hinein ?


    Muss ich dann auch noch eine Variable konfigurieren, oder reicht es einfach nur den Code zu schreiben ?

  • Habs jetzt mal so eingefügt, zeigt aber viele Fehlermeldungen an


    DEFDAT Becken1150x190x190_Rund

    EXT BAS (BAS_COMMAND :IN,REAL :IN )

    ;FOLD BASISTECH EXT;%{PE}%MKUKATPBASIS,%CEXT%VEXT,%P


    EXT BAS (BAS_COMMAND :IN,REAL :IN )


    ;ENDFOLD (BASISTECH EXT)

    ;FOLD USER EXT;%{E}MKUKATPUSER,%CEXT,%VEXT,%P

    ;Make your modifications here


    ;ENDFOLD (USER EXT)


    ;FOLD EXTERNAL DECLARATIONS;%{PE}%MKUKATPBASIS,%VCOMMON,%P

    ;ENDFOLD (EXTERNAL DECLARATIONS)


    ;FOLD EXTERNAL DECLARATIONS;%{PE}%MKUKATPBASIS,%CEXT,%VCOMMON,%P

    ;FOLD BASISTECH EXT;%{PE}%MKUKATPBASIS,%CEXT,%VEXT,%P

    EXT BAS (BAS_COMMAND :IN,REAL :IN )

    DECL INT SUCCESS

    ;ENDFOLD (BASISTECH EXT)

    ;FOLD USER EXT;%{E}%MKUKATPUSER,%CEXT,%VEXT,%P

    ;Make your modifications here


    ;ENDFOLD (USER EXT)

    ;ENDFOLD (EXTERNAL DECLARATIONS)

    DECL BASIS_SUGG_T LAST_BASIS={POINT1[] "P0 ",POINT2[] "P0 ",CP_PARAMS[] "CPDAT19 ",PTP_PARAMS[] "PDAT0 ",CONT[] " ",CP_VEL[] "2 ",PTP_VEL[] "100 ",SYNC_PARAMS[] "SYNCDAT ",SPL_NAME[] "S1 ",A_PARAMS[] "ADAT2 "}

    DECL E6POS StartPos={X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0,S 0.0,S 0,T 0,


    ENDDAT

    DECL ADAT CSADAT1={CondStopPara {CondStopPath 0,CondStopOnStart TRUE,StopCondition[] " "}}

    DECL ADAT CSADAT2={CondStopPara {CondStopPath 0,CondStopOnStart FALSE,StopCondition[] " "}}

    DECL ADAT CSADAT3={CondStopPara {CondStopPath 0,CondStopOnStart FALSE,StopCondition[] " "}}

    DECL ADAT CVADAT3={ConstVelPara {ConstVelTyp 1,ConstVelPath 0,ConstVelOnStart TRUE}}

    DECL ADAT CSADAT4={CondStopPara {CondStopPath 0,CondStopOnStart FALSE,StopCondition[] " "}}

    DECL ADAT CVADAT4={ConstVelPara {ConstVelTyp 1,ConstVelPath 0,ConstVelOnStart TRUE}}

    DECL ADAT CSADAT5={CondStopPara {CondStopPath 0,CondStopOnStart FALSE,StopCondition[] " "}}

    DECL ADAT CVADAT5={ConstVelPara {ConstVelTyp 1,ConstVelPath 0,ConstVelOnStart TRUE}}

    DECL ADAT CSADAT6={CondStopPara {CondStopPath 0,CondStopOnStart FALSE,StopCondition[] " "}}

    DECL ADAT CVADAT6={ConstVelPara {ConstVelTyp 1,ConstVelPath 0,ConstVelOnStart TRUE}}

    ENDDAT

  • DEF Becken1150x190x190_Rund( )

    DECL FRAME OFFSET_X_Y

    DECL REAL Beckenlaenge,Beckenbreite


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

    ;ENDFOLD (BASISTECH INI)


    ;FOLD USER INI

    ;Make your modifications here


    ;ENDFOLD (USER INI)


    ;ENDFOLD (INI)


    BAS(#BASE,1)

    BAS(TOOL,1)

    ;Hier Teachen

    ;FOLD TEACHEN

    IF FALSE THEN

    BAS(#BASE,1)

    BAS(TOOL,1)

    HALT

    LIN StartPos

    ENDIF

    ;ENDFOLD


    Beckenlaenge = 500

    Beckenbreite =250

    OFFSET_X_Y = $NULLFRAME

    OFFSET_X_Y.X = Beckenlaenge


    ; Geschwindigkeit festlegen

    BAS(#VEL_PTP,50) ;PTP SPEED

    BAS(#VEL_CP,2.0) ;LIN SPEED

    PTP {X 0,Y 0,Z 500,A 0,B 0,C 0}:StartPos


    LIN StartPos


    LIN OFFSET_X_Y:StartPos


    OFFSET_X_Y.Y = Beckenbreite


    LIN OFFSET_X_Y:StartPos


    OFFSET_X_Y = $NULLFRAME


    LIN OFFSET_X_Y:StartPos


    LIN {X 0,Y 0,Z 500,A 0,B 0,C 0}:Startpos


    END

  • Wir hatten ja damals schon mal drüber gesprochen... eines der Probleme sind Deine fehlenden Kenntnisse.


    Die allersimpelste Möglichkeit, Dein Problem zu lösen, wäre, dass Du Dein Base - bzw. das Base, was Du als Ausgangswert Deiner weiteren Baseberechnung nimmst, einfach mit dem Tool teachst. Das machst Du in einem völlig unabhängigen Programm, Du legst EINEN Punkt in Welt an ($NULLFRAME), und teachst den mit Deinem Fräser ("ankratzen", soweit ich mich erinnere, hast Du CNC-Kenntnisse). Das bedingt natürlich, dass der Fräser vernünftig eingemessen ist, vermutlich wäre es bei Deiner Situation am besten, dass Z in den Fräser hineinzeigt und X und Y so liegen, wie es nachher zum Becken passt.

    Also: mit diesem Tool in Welt(!) den Punkt "nullpunkt" (Datentyp "FRAME", weil BASE auch ein Frame ist) teachen, dabei peinlich darauf achten, wo er sein soll ("in der Mitte" oder "linke vordere Ecke", je nachdem, wie Dein Programm geteacht ist), und dann nach dem Teachen die folgenden Zeilen abfahren:

    Code
    BASE_DATA[1] = xnullpunkt

    Jetzt kommt es darauf an, wie Du die Winkel festlegen willst. Wenn Du sagst, ich teache das extrem präzise, dann reicht es so. Sagst Du aber, neenee, X und Y-Richtung muss immer dieselbe sein wie in Welt, wie bei CNC, dann musst Du das wieder angleichen:

    Code
    BASE_DATA[1].a=0 ; A dreht sich um Z (Welt), aber Du willst keine Drehung
    BASE_DATA[1].b=0 ; B dreht sich um das nun neue Y, aber...
    BASE_DATA[1].c=0 ; C dreht sich um das nun neue X, aber...

    Wäre sogar möglich, dass Du sagst: X-Richtung muss immer beibehalten werden, aber wenn der Stamm um die Längsachse verdreht liegt, dann will ich schräg fräsen - dann lässt Du in Obigem die letzte Zeile weg und bist fein (sofern der Stamm in X-Richtung liegt).


    DANACH steht in BASE_DATA[1] exakt die Stelle, die Du angekratzt hast, und das ANDERE Programm kann in diesem Koordinatensystem fahren bzw. Du kannst BASE_DATA[1] als Ausgangspunkt Deiner Berechnung verwenden. Du kannst dieses Base auch anwählen und darin teachen (das ist das normale Verfahren).

    Wenn es bisher in World geteacht war, hast Du natürlich jetzt das Problem, dass Du es neu machen musst.

    Und wenn Dein Frästool (TOOL_DATA[...]) nicht eingemessen war, dann geht das im Grunde gar nicht vernünftig.

    Wenn Deine Vorrichtung (also das, wo Du das Rohteil reinlegst) gegenüber WORLD schon verdreht liegt, dann musst Du diese Verdrehung drunterlegen, das ist auch kein Problem, muss aber nicht unbedingt hier schon erklärt werden.


    Und eigentlich ist all das Quark, weil:

    exakt dafür hat man die Bases erfunden und sogar eine Vermessung im System mitgeliefert. Nur teacht Du dafür nicht EINEN Punkt, sondern einen PUNKT, eine RICHTUNG und eine EBENE. Dreimal Teachen, neues BASE, einfacher geht es kaum. Entspräche also bei Deiner (vermuteten) Anordnung:

    1.) einmal "ankratzen", speichern.

    2.) einmal wild irgendeine beliebige Strecke manuell in X fahren, speichern

    3.) von da aus einmal wild irgendeine beliebige Strecke manuell in Y fahren, speichern

    Speichern, übernehmen bestätigen, fertig.

  • Wenn die Punkte im Base geteacht sind, dann werden mit dem Verschieben der Base quasi alle Punkte automatisch um genau diesen Versatz verschoben. Das ist ja der Witz der Basis. Alle Punkte beziehen sich auf die Basis, Verschieben der Basis sorgt dafür dass die Punkte relativ zur Welt verschoben sind.

    Dieses Markieren und Verschieben der Punkte musst du nur machen, weil die Punkte nicht in dem Base geteacht sind, sondern in irgend einem anderen, das nicht verschoben wird.

  • Ich hab das ja auch mit der Base kapiert... Wenn ich mein Becken programmiert habe, köännte ich auch einfach die Base verschieben... aber dann muss ich jedesmal alle Punkte markieren und dann kartetisch Base verschieben... ? Geht das nicht einfacher ?

    Die Punktdaten (was in Xp... drinsteht) beziehen sich auf das BASE-Koordinatensystem. Wenn die Punkte in BASE_DATA[1] programmiert sind, dann verschieben sich alle gleichzeitig, wenn Du BASE_DATA[1] änderst.

    $BASE ist modal, das heisst: entweder, Du benutzt die klassische Teacherei, dann steht (versteckt) bei jedem Punkt irgendwo $BASE=BASE_DATA[1]. Oder Du hast es Expertenmäßig von Hand programmiert, dann steht das irgendwo einmal obendrüber und gilt solange, bis was anderes kommt.


    Die andere Frage: touchUp, unten in der Menüleiste...

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