Beiträge von dax

    Hallo,
    der Ursprung deines Base-Koordinatensystems bezieht sich bereits auf das $WORLD-Koordinatensystem. Also ist die Verschiebung zu $WORLD gleich den Ursprungskoordinaten deiner Base. Diese sind in BASE_DATA[ x ] hinterlegt. Dabei unbedingt die Verdehungen beachten, sofern diese nicht gleich 0 sind.
    Hoffe das hilft weiter.
    Grüße, dax

    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

    Servus,
    durchsuche doch mal dein ganzes Projekt nach deiner Variable "Werkzeug_geschlossen" bzw. "Werkzeug_geschlossen=TRUE".
    Einfach mittels Suchfunktion in WorkVisual dein ganzes Projekt durchsuchen. Ist die einfachste Variante. Irgendwo muss es zugewiesen werden 8).


    LG, dax

    Ein Vater kauft sich einen Roboter mit eingebautem Lügendetektor, der einem eine Ohrfeige gibt, wenn man lügt.
    Der Vater probiert diesen direkt beim Abendessena aus.
    Vater: "Na Sohn, wie war die Schule?"
    Sohn: "So wie immer."
    Roboter schlägt Sohn.
    Sohn: "Gut, ich war im Kino und hab mir nen Film angeguckt."
    Vater: "Was für einen Film?"
    Sohn: "Die Tribute von Panem!"
    Roboter schlägt Sohn.
    Sohn: "Gut, ich habe mir einen Porno angeguckt!"
    Vater: "Waaaas? In deinem Alter wusste ich noch nichtmal was ein Porno ist!
    Roboter schlägt Vater.
    Mutter: "Haha, ist halt dein Sohn."
    Roboter schlägt Mutter...
    :roll:

    Hallo DannyNRW,
    hier mal 2 Möglichkeiten:


    Mit Relativbewegungen:

    Code
    PTP XP1 ;faehrt deinen geteachten Punkt P1 an
    LIN_REL {Y -50} #TOOL ;faehrt ausgehend von der aktuellen Position (P1) 50mm in -Y Richtung deines Werkzeugkoordinatensystems
    
    
    ;PTP_REL {Y -50} #TOOL Waere auch moeglich, je nach deiner gewuenschten Bewegungsart


    Mit geometrischer Berechnung:


    Code
    DECL FRAME Offset ;deklariert ein FRAME (X,Y,Z,A,B,C) 
    
    
    OFFSET=$NULLFRAME ;setzt alle Werte auf 0 (X 0,Y 0,Z 0,A 0,B 0,C 0)
    OFFSET.Y=-50      ;weist dem Y-Wert deines Offset-Frames -50 zu
    
    
    LIN XP1:Offset    ;faehrt die geometrisch addierte Position von XP1 und Offset an


    Ansonsten einfach mal die Suchfunktion zu Relativbewegung, Geometrischer Operator, Doppelpunktoperatur etc. fragen (oder in Doku`s danach suchen).
    Vor allem als Neuling findet man praktisch immer Lösungen zu bereits gestellten Fragen, die auch die eigene Frage beantworten.
    LG, dax

    Hallo,
    um das Thema nochmal aufzugreifen: gibt es den roboterforum-Chat noch oder nicht? Wenn ja - wo? Wenn nein - noch in Planung oder nicht mehr?
    Ich persönlich würde einen Chat hier schon feiern :beerchug: .
    LG, dax :)

    Genauso frage ich mich warum der Punktname (z.B: Beispielpunkt) beim teachen mittels Inlineformular in der .dat immer in Großbuchstaben (DECL E6POS BEISPIELPUNKT) hinterlegt wird, unabhängig davon, wie man diesen eingegeben hat.
    Und dann unterwellt WorkVisual im Bewegungsfold das "SPTP XBeispielpunkt" grün, weil die schreibweise an der Deklarationsstelle anders ist. :uglyhammer_2:


    Naja solange es funktioniert soll es mich nicht weiter stören. ;)

    Hallo buschke,
    zeig doch mal wie/wo du die Werte für $VEL und $ACC erhöhst und wie deine Bewegungsanweisungen aussehen. So ists schwierig dir zu helfen.


    Wenn du über den INI-Fold fährst, dann wird darin "BAS (#INITMOV,0 )" aufgerufen. Darin werden Bewegungsparameter, darunter auch $VEL und $ACC, auf ihre Defaulteinstellungen gesetzt. Dabei werden davor von dir gesetzte Werte wieder überschrieben. Guck dir dazu doch mal das Bas.src Programm mit den jeweiligen Übergabeparameter (z.B: #INITMOV) an.


    Hast du dir deine Bewegungsanweisungen selber in KRL-Syntax programmiert oder hast du dazu INLINE-Formulare benutzt? Bei Inlineformularen werden für jede Bewegung einzeln Geschwindigkeitsparameter gesetzt. Oft lohnt es sich mal den Bewegungs-Fold aufzumachen und reinzugucken was da gemacht wird. :) Systemintegratoren bzw. Systemvariablendoku sind dabei sehr hilfreich!



    LG dax ;)

    Servus twin,
    soweit ich deine Problemstellung verstanden habe sollte dies so umsetzbar sein:

    Code
    LIN Pos1 C_DIS ;faehrt deinen Punkt Pos1 an
    LIN_REL {A 180} #TOOL ;dreht dein Werkzeug relativ um 180° um die Z-Achse des Werkzeugkoordinatensystems
    ;Roboter sollte nun auf gewuenschter Pos2 stehen


    oder wie du es schon probiert hast mittels Geometrischem Operator (Doppelpunktoperator):





    Erklärung: Jeder Punkt wird so angefahren, dass das Werkzeugkoordinatensystem mit dem "Punktkoordinatensystem" deckungsgleich ist. Deshalb drehst du dein Werkzeug wenn du an deinem Punkt stehst auch um das "Punktkoordinatensystem", wenn du um dein Werkzeugkoordinatensystem drehst.


    LG dax

    Servus dekasi,


    ich hatte zwar mit VKRC noch nichts am Hut, denke aber dass die Unterschiede nicht allzu gravierend sein sollten.



    Warum setzt du denn dein Werkzeugkoordinatensystem $TOOL auf dein Basekoordinatensystem $BASE? Damit verpflanzt du deinen TCP nur irgendwohin wo er sicher nicht hingehört. Ergibt einfach keinen Sinn.
    $TOOL sollte die vermessene Distanz/Verdrehung zwischen $FLANGE (Roboterflanschmittelpunkt) und dem gewünschtem Punkt auf dem Werkzeug (oft Werkzeugspitze oder Greifermittelpunkt) sein (=TCP).


    Außerdem wenn du mit PTP $BASE deine Base anfahren willst und du vorangehend schon dieselbe Base aktiv geschalten hast, dann verfährst du von deinem Basemittelpunkt nochmal die Koordianten deiner Vermessenen Base.


    Wenn du kein Werkzeug montiert hast, setze dein $TOOL doch mal auf $NULLFRAME, oder wenn doch, dann vermiss doch dein Werkzeug und setze dein Werkzeugkoordinatensystem mit $TOOL=TOOL_DATA[X] . Damit ist dein TCP da wo er hingehört und nicht irgendwo mit Maßen eines Basekoordinatensystems verstreut :).


    Danach sollte dein Programm funktionieren. Etwa so:




    Greetz, dax!

    Hallo woodys,
    das Cell Programm cell.src hat mit einer Grundstellungsfahrt nicht allzu viel zu tun. Dieses Programm ist ein standardmäßig angelegtes Hauptprogramm,welches lediglich einen Homeposition-Check (bau diesen doch ein, wenn sich euer Programm bis jetzt noch starten lässt, ohne dass der Roboter in seiner Grundstellung steht) beinhaltet und ansonsten dazu dient in der Betriebsart EXT Programme mittels Programmnummer von einer externen Steuerung anzuwählen. Kann man verwenden, kann sich aber auch selbst sowas schreiben.


    Die Grundstellungsfahrt, bei der man ohne zu denken nur Zustimm und Start Vorwärtstaste drücken muss und der Roboter findet von überall seinen kollisionsfreien Weg gibt es wenn dann nur bei einfachen Anwendungen. Du kannst sowas probieren wie dir mit einem TRIGGER bei erreichtem Punkt diesen in einem E6POS Array zu speichern und in deiner Grundstellungsroutine diese bereits gefahrenen Punkte wieder zurückzufahren. Dabei auf die Bewegungsart achten ansonsten krachts schnell mal wieder.


    Oder du lässt die Bediener leichter erreichbare, "sichere Vorpunkte" anfahren , von denen aus eine kollisionsfreie Grundstellungsfahrt möglich/programmiert ist.


    Die Arbeitsraumüberwachung lässt sich zu diesem Zwecke wie Hermann schon sagte nur sehr bedingt einsetzen, abhängig von deinem Werkzeug, TCP, und der restlichen Umgebung des Roboters, da der Roboter diese Bereiche mit allem anderen außer seinem TCP verletzen kann, ohne dass dadurch ein Stopp ausgelöst wird.


    Gutes Gelingen und schönen Gruß,
    dax

    Hallo Stan,
    Build-In Funktionen zum Speichern von Pfaden bzw. anschließendem Rückwärts abfahren dieser gibt es meines Wissens nach bei KUKA nicht - habe mir die bisher immer selber ähnlich wie du oben beschrieben hast "zusammengebastelt".

    Gibt es eine Möglichkeit ab dieser Relativbewegung, bis zu einem bestimmten Punkt (also bevor das Tool greift) die Achsbewegungen zu speichern und dann einfach rückwärts wieder abzufahren?


    Diese Beschreibung erinnert mich ein bisschen an die ABB Funktionen "PathRecStart", "PathRecStop" und "PathRecMoveBwd". So einfach gehts auf jeden Fall nicht :).


    Wenn du eine paar Punkte hintereinander linear anfährst und anschließend manche Punkte derselben Strecke wieder per PTP zurück, kann ein von die beschriebenes "unvorhersehbares ausschwenken" dann passieren (so hört es sich für mich an), wenn in dem per PTP angefahrenen Punkt eine andere als die aktuelle Achskonfiguration hinterlegt ist. Dabei "Status und Turn-Bits" S und T beachten.


    Bei LIN passiert das deshalb nicht, weil er versucht die Strecke linear abzufahren und standardmäßig die Orientierung des Werkzeuges dabei nicht zu ändern. Entweder dies ist der Roboterkinematik möglich und sie macht es, oder eben nicht.



    Beste Grüße,


    dax

    Hallo Tobi,
    zwar einige Zeit her aber vlt. hilfts ja noch wem ;) .
    wenn du dein Programm über die Roboguide-Oberfläche (Cycle Start Button, blaues Dreieck) und nicht über das virtuelle iPendant startest, dann werden auch deine im TPE Programm aufgerufenen Simulationsprogramme zum Öffnen/Schließen des Greifers so ausgeführt, dass wirklich Teile genommen bzw. abgelegt werden.
    Dazu musst du in den Simulationsprogrammen die Instruktion "Pickup bzw. Drop" verwenden und dabei angeben mit welchem Greifer du welches Teil wo aufnimmst bzw. ablegst.
    LG dax.

    Hallo Tassilo,
    mit der Funktion IS_KEY_PRESSED(i) lässt sich herausfinden, ob eine bestimmte Taste am KCP gedrückt ist oder nicht (Funktion returniert TRUE oder FALSE). Welche Taste sich hinter welchem i versteckt weiß ich an der KRC2 leider nicht auswendig.
    Im sps.sub kannst du dir dann eine $FLAG oder einen beliebige andere boolsche Variable setzen, wenn die gewünschte Taste gedrückt wird.


    IF (IS_KEY_PRESSED(i)==TRUE) THEN
    $FLAG[1]=TRUE
    ELSE
    $FLAG[1]=FALSE
    ENDIF


    Der Interrupt in deinem Programm wird mittels
    INTERRUPT DECL Priorität WHEN $FLAG[1]==TRUE DO Interruptroutine()
    deklariert und mittels INTERRUPT ON Priorität bzw. INTERRUPT OFF Priorität aktiv und inaktiv geschalten.
    Dazu mehr in den Doku´s.



    Bin mir jedoch nicht sicher ob dies auf VKRC Steuerungen auch so möglich ist.
    Hoffe ich konnte dir weiterhelfen.


    LG dax.