einen Trick für Kuka Programmierung

  • Hallo zusammen,


    Ich habe ein Problem mit einem aktuellen Projekt. Wir benutzen einen KUKA CR4) mit

    KSS 8.6.


    Der Roboter steht auf einem Gestell neben unserer eigentlichen Maschine und nimmt kleine Glaschips aus einem Tray. Leere „Slots“ sollen quasi nicht angefahren bzw. übersprungen werden.


    Es gibt unterschiedliche Trays. Jeder hat 100 Glaschips.


    Leider habe ich nicht so viel Erfahrung mit Robotern und in unserer kleinen Firma auch niemanden zum Fragen. Mein Problem ist folgendes. Gibt es eine Möglichkeit, dass ich nicht jede einzelne der jeweils 100 Positionen teachen muss? Das wären dann insgesamt 400 Punkte. Ich suche nach einer Lösung, wo ich nur zwei Punkte teachen muss und er den Rest selbst ausrechnet. Die Abstände der Glaschips sind auf dem jeweiligen Tray gleich groß.




    Mit freundlichen Grüßen /


    With best regards

  • Schritt für Schritt zum Roboterprofi!
  • ja... entweder base und 1 punkt teachen, oder drei punkte teachen (damit auch Z defniert ist). fuer nur 2 punken solte etwa so aussehen:


    Code
    dX = (xP2.X - xP1.X) / (n-1)
    dY = (xP2.Y - xP1.Y) / (m-1)
    
    for i = 0 to n-1
      for j = 0 to m-1
        p[i,j]=xP1
        p[i,j].X=xP1.X + i*dX
        p[i,j].Y=xP1.Y + j*dY
      endfor
    endfor
  • Bevor Du weiter drüber nachdenkst, die Punkte selbst ausrechnen zu lassen, rechne lieber einen Frame zur Base-Verschiebung aus. (Suchstichwort: Doppelpunkt-Operator)

    Dann verschiebst Du in jedem Zyklus das Base (Abstände sollten ja bekannt sein) und fährst jedes Mal dieselbe Bahn ab. Hat den Vorteil, dass Du an beliebiger Stelle teachen kannst.

    Das geht mit Umweg über ein temporäres Base aus der Liste dann sogar mit Inline-Formularen.

    Bei 0 anfangen, dann

    schiebeframe.x=aktuelle_zahl*X_abstand

    schiebeframe.y=aktuelle_zahl*Y_abstand

    wenn Du Reihen und Spalten hast oder gar 3 Dimensionen, wird's minimal aufwendiger.


    Grüße,

    Michael

  • eine Frage
    wenn ich in Globale Punkte ein Punkt XYZABC speichere
    und in eine Modul diese Punkt verwende ,dann fährt der Kuka wo anderes ,obwohl das gleiche Bases

    kann jemand mir helfen ?

  • Hallo Mustafa,


    wenn du doppelt deklariert hast siehst du das in WoV, dann ist deine Positionsname grün Unterstrichen. Sollte das nicht der Fall seins kann aber auch an dem Status, Turn liegen. Fahr mal die Position in Lin an ob er dann richtig fährt.

    Deklariere den Punkt als pos nicht als e6pos in pos hast du kein Status turn drin.

    Siehe Bild unten eine Deklaration mit und ohne Status Turn.

  • Hallo Mustafa,


    ich verstehe schon was du machen möchtest. Ich würde dir raten es nicht mit verschiedenen Positionen zu machen . Ich würde die Base auf den Trey legen bzw. auf die Platte des Treys. Der Base 0 Punkt ist dein Startpunkt. Alle anderen Punkte sind dann nur eine Baseverschiebung vom 0 Punkt aus.


    z.B.


    DECL FRAME fVerschiebung{x,y,z,a,b,c}

    DECL e6Pos pStartposition{x,y,z,a,b,c,s,t}

    DECL e6Pos pAbholposition{x,y,z,a,b,c,s,t}

    DECL e6Pos pVorAbholposition{x,y,z,a,b,c,s,t}


    Du fährst den 0 Punkt der Base an und speicherst den (Touchup) in die pStartposition.


    in deine Verschiebung schreibst du dann deine X,Y Verschiebung zum 0 Punkt der Base rein.

    Platz1:


    fVerschiebung.x=xPunkt

    fVerschiebung.y=yPunkt


    ;Solltest du einen höhen Versatzt haben musst du auch in z was reinschreiben.


    fVerschiebung.z=zPunkt


    ;danach machst du einen Base Verschiebung


    pAbholposition=fVerschiebung:pStartposition


    ; Solltest du eine Vorposition über der Abholstelle benötigen


    pVorAbholposition=pAbholposition

    pVorAbholposition.z=pVorAbholposition.z+20


    PTP pVorAbholposition


    ;Anfahren der Abholposition


    PTP pAbholposition


    Du musst in deine fVerschiebung nur die verschiedenen Verschiebungen reinschreiben.


    Gruß

  • Danke euch für Info.


    ich muss dann noch testen, aber ich habe noch eine Frage

    wenn ich Deckliniere

    DECL e6Pos pStartposition{x,y,z,a,b,c,s,t}

    dann

    LIN pStartposition

    wie kann ich Geschwindigkeit Programmiere ?

    ich habe nur Programmierung 1 gemacht ,deswegen habe ich viele Fragen
    danke nochmall

  • Hallo Mustafa,


    kein Problem alles gut.


    Setzen des Tools 2 und der Base 2 z.B:


    $Act_Tool=2

    $Act_Base=2


    Setzen der Geschwindigkeit bei einer PTP Bewegung:


    BAS (#VEL_PTP,100) ;* Bahngeschwindigkeit in %

    BAS (#ACC_PTP,100) ;* Beschleunigung in %


    Setzen der Geschwindigkeit bei einer LIN Bewegung und einer CIRC Bewegung:


    BAS (#VEL_CP,2.0) ;* Bahngeschwindigkeit in m/s

    BAS (#ACC_CP,100) ;* Beschleunigung in %


    Für die Zahlen kannst du auch eine Variablen einsetzen.

  • Kleine Anmerkung:

    Zuweisungen an $act_base und $act_tool ändern nicht das Base bzw. Tool sondern nur den Index des Base/Tool oben rechts auf der Benutzeroberfläche.

    Die tatsächlichen Werte werden über Zuweisungen an $Base bzw. $Tool gesetzt. Alternativ auch über EX_BASE aus dem bas.src.


    Ansonsten hilft hier wie immer bas.src zu studieren. Hier passiert das Umsetzen von Inlineformularen in KRL. Ferner beschreibt auch die Dokumentation für Systeminbetriebnehmer KRL auf Expertenebene.


    Fubini

    Einmal editiert, zuletzt von fubini ()

  • bitte korrigieren

    funktioniert nicht

  • Hallo Mustafa,


    du musst vor der LIN G51 noch die Geschwindigkeit und Beschleunigung vorgeben. Danach reicht es, das du nur eine Geschwindigkeit vorgibst.


    BAS (#VEL_CP,2.0) ;* Bahngeschwindigkeit in m/s

    BAS (#ACC_CP,100) ;* Beschleunigung in %


    LIN G51

    .

    .

    .

    .

  • auch leider nicht

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