Palettierprogramm für Kuka

  • Erst mal hallo an alle.


    Bin Kuka-Neuling und muss demnächst ein Programm zum Palettieren schreiben. Kann mir vielleicht jemand Beispielprogramme zusenden, damit ich einen groben Einblick bekomme wie man so was aufbaut und strukturiert?


    Vielen Dank im Voraus.



    Gruß Thomas

  • Schritt für Schritt zum Roboterprofi!

  • Bin Kuka-Neuling und muss demnächst ein Programm zum Palettieren schreiben. Kann mir vielleicht jemand Beispielprogramme zusenden, damit ich einen groben Einblick bekomme wie man so was aufbaut und strukturiert?


    So wirds nichts...


    Mehr Infos: Was palletieren? Welches Packmuster? Wieviele verschiedene Produkte?

    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.

    Einmal editiert, zuletzt von IrrerPolterer ()

  • Äh... :meld: ... vielleicht noch früher anfangen?
    Da gibts doch bestimmt auch Lehrgänge und Tech-Pakete bei KUKA, oder?

    Wolfram (Cat) Henkel

    never forget Asimov's Laws at the programming of robots...

    "Safety is an integral part of function. No safety, no production. I don't buy a car without brakes."


    Messages und Mails mit Anfragen wie "Wie geht das..." werden nicht beantwortet.

    Diese Fragen und die Antworten interessieren jeden hier im Forum.


    Messages and Mails with questions like "how to do..." will not be answered.

    These questions and the answers are interesting for everyone here in the forum.

  • So wirds nichts...
    Mehr Infos: Was palletieren? Welches Packmuster? Wieviele verschiedene Produkte?


    Es werden Eimer palettiert. Immer eine Lage auf Europalette.
    Von den Eimern gibt es zwei verschiedene Sorten. Die Palettierung erfolgt aber immer sortenrein.




    Äh... :meld: ... vielleicht noch früher anfangen?
    Da gibts doch bestimmt auch Lehrgänge und Tech-Pakete bei KUKA, oder?


    War schon bei Kuka auf den Grundlehrgang. Fortgeschrittener kommt noch. Ich denke mit der Programmierung komme ich klar (kann VB und ein wenig C#).



    Ich brauch nur ein paar Beispiele um einen Einstieg für die Sache zu bekommen.


    Gruß Thomas

  • Ok.


    Du kannst also Tools und bases vermessen.


    Da wo die Palette steht, legst Du ein Base hin. Z ist oben, X längsrichtung und Y ist quer.


    Nun lade mal ne Palette von Hand:
    Jeder Eimer ist eine Position auf der Palette.
    Also z.B. 3 Eimer Quer nebeneinander und 4 Längs hintereinander.


    Ich habe also eine geteachte Position (Eimer Quer/längs 1/1)
    Die nächste Position ist längs einen Eimerdurchmesser weiter in X...


    Wenn ich also nun längs zähle, muß ich bei längszähler > 4 den Längszähler auf 1 setzen und den Querzähler +1
    Wenn ich nun Quer =3 und längs >4 erreiche, also längs 3 und Quer 4 abgesetzt habe, dann kommt der dritte Zähler ins Spiel... Lagenzähler +1, Längs =1 Quer=1...


    So zähle ich durch und wenn ichs ordentlich mache ist das mit nur einer Position geteacht

    Wolfram (Cat) Henkel

    never forget Asimov's Laws at the programming of robots...

    "Safety is an integral part of function. No safety, no production. I don't buy a car without brakes."


    Messages und Mails mit Anfragen wie "Wie geht das..." werden nicht beantwortet.

    Diese Fragen und die Antworten interessieren jeden hier im Forum.


    Messages and Mails with questions like "how to do..." will not be answered.

    These questions and the answers are interesting for everyone here in the forum.

  • Im zweiten Lehrgang lernst du mit Datenfeldern (zwei- und dreidimensional) zu arbeiten.


    WolfHenk hat's ja schon beschrieben. Ich schmücke es mal noch ein wenig aus.


    In deinem Fall ist es wohl am günstigsten eine Masterposition zu teachen und dann die restlichen Positionen der Lage zu errechnen (bei 6 Eimern pro Lage also 1-Fixposition und 5 errechnete)
    Nach jeder Lage erhöhst du deine Palettenbase in Z und beginnst wieder mit den 6 Positionen. Wird eine neue Palette eingestellt, setzt du die Palettenbase wieder auf den Ursprung.


    Ist eigentlich echt easy...

    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.

  • Wolf und Poldi haben ja schon fast alles gesagt....


    Den Ursprung der BASES würde ich in der Mitte der Palettenbreite legen, dann fällt Dir später das Spiegeln leichter, wenn du jede ungerade Lage versetzt setzten möchtest.

  • *grins*


    ...und den Rest Deiner Arbeit, wirst Du dann selber schaffen, denke ich.
    Schließlich würd's wenns einfach wär, ja auch die Putzfrau machen und nicht ein hochdotierter Roboterdompteur...

    Wolfram (Cat) Henkel

    never forget Asimov's Laws at the programming of robots...

    "Safety is an integral part of function. No safety, no production. I don't buy a car without brakes."


    Messages und Mails mit Anfragen wie "Wie geht das..." werden nicht beantwortet.

    Diese Fragen und die Antworten interessieren jeden hier im Forum.


    Messages and Mails with questions like "how to do..." will not be answered.

    These questions and the answers are interesting for everyone here in the forum.

  • Geht das so?


    kann vielleicht ein Experte mal drüberschauen??


    ;*****************************************************************************
    ;Variablen

    DECL E6POS Abl_Position [15,15,15]
    DECL E6POS Vor_Position [15,15,15]
    DECL INT Reihe,Spalte,Ebene,MaxReihen,MaxSpalten,MaxEbenen
    DECL REAL x_Abl,y_Abl,z_Abl,z_Vor


    ;*****************************************************************************
    ;Konfiguration

    MaxReihen=4
    MaxSpalten=4
    MaxEbenen=4

    x_Abl=80.0
    y_Abl=80.0
    z_Abl=50.0
    z_Vor=100.0

    ;*****************************************************************************
    ;Ablegepositionen

    FOR Ebene = 1 TO MaxEbenen
    FOR Reihe = 1 TO MaxReihen
    FOR Spalte = 1 TO MaxSpalten
    Abl_Position[Ebene,Reihe,Spalte]=xMasterPos1
    Abl_Position[Ebene,Reihe,Spalte].x=Abl_Position[Ebene,Reihe,Spalte].x+(Spalte-1)*x_Abl
    Abl_Position[Ebene,Reihe,Spalte].y=Abl_Position[Ebene,Reihe,Spalte].y+(Reihe-1)*y_Abl
    Abl_Position[Ebene,Reihe,Spalte].z=Abl_Position[Ebene,Reihe,Spalte].z+(Ebene-1)*z_Abl
    ENDFOR
    ENDFOR
    ENDFOR

    ;Vorpositionen
    FOR Ebene = 1 TO MaxEbenen
    FOR Reihe = 1 TO MaxReihen
    FOR Spalte = 1 TO MaxSpalten
    Vor_Position[Ebene,Reihe,Spalte]=Abl_Position[Ebene,Reihe,Spalte]
    Vor_Position[Ebene,Reihe,Spalte].z=Vor_Position[Ebene,Reihe,Spalte].z+z_Vor
    ENDFOR
    ENDFOR
    ENDFOR

    Ebene=1
    Reihe=1
    Spalte=1


    ;*****************************************************************************
    ;Palette befuellen

    WHILE Ebene < (MaxEbenen+1)
    WHILE Reihe < (MaxReihen+1)
    WHILE Spalte < (MaxSpalten+1)
    ;Bauteil holen ()
    $base=base_data[1]
    $tool=tool_data[1]
    LIN Vor_Position[Ebene,Reihe,Spalte] c_dis
    LIN Abl_Position[Ebene,Reihe,Spalte]
    ;Greifer oeffnen
    LIN Vor_Position[Ebene,Reihe,Spalte]
    Spalte=Spalte+1
    ENDWHILE
    Reihe=Reihe+1
    Spalte=1
    ENDWHILE
    Ebene=Ebene+1
    Reihe=1
    ENDWHILE


    Ebene=MaxEbenen
    Reihe=MaxReihen
    Spalte=MaxSpalten


    ;*****************************************************************************
    ;Palette leeren

    REPEAT
    REPEAT
    REPEAT
    $base=base_data[1]
    $tool=tool_data[1]
    LIN Vor_Position[Ebene,Reihe,Spalte] c_dis
    LIN Abl_Position[Ebene,Reihe,Spalte]
    ;Greifer schliessen
    LIN Vor_Position[Ebene,Reihe,Spalte]
    ;Bauteil irgendwo ablegen
    Spalte=Spalte-1
    UNTIL Spalte == 0
    Reihe=Reihe-1
    Spalte=MaxSpalten
    UNTIL Reihe == 0
    Ebene=Ebene-1
    Reihe=MaxReihen
    UNTIL Ebene == 0


    ;FOLD PTP HOME Vel= 100 % DEFAULT;%{PE}%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:HOME, 3:, 5:100, 7:DEFAULT
    $BWDSTART = FALSE
    $H_POS=XHOME
    PDAT_ACT=PDEFAULT
    BAS (#PTP_DAT )
    FDAT_ACT=FHOME
    BAS (#FRAMES )
    BAS (#VEL_PTP,100 )
    PTP XHOME
    ;ENDFOLD


    END


  • Geht das so?
    kann vielleicht ein Experte mal drüberschauen??


    Das sieht auf den ertsen Blick gut aus. Wobei ich die Lagenberechnung mit Base-Z-Erhöhung bevorzuge.
    Bist du nicht selbst Experte? :huh:

    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.


  • Hallo,


    wie sieht dann so etwas bei dir aus?


    Gruss $CYCFLAG


    Sehr ähnlich allerdings nur mit Reihe und Spalte. Bei jeder Lage würde ich dann BASE_DATA[1] um eine Höhe hochrechnen. Ich bevorzuge dass, weil meist noch Zwischenlagen gelegt werden oder auch Höhenkorrekturen einfacher möglich sind.
    Aber das ist natürlich Geschmackssache.

    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.

  • @CYCFLAG
    Also grundsätzlich ist das ein wirklich hohes Niveau wie Dein Code gestaltet ist.


    Ich mach da ich UltraEdit verwende und da bei der Suche die Verwendung von Funktionen eine leichtere Suche erlaubt mehrere Programmteile aus dem Code.


    z. B.
    CalcLayer()
    CalcRow()
    CalcTool()
    IsLayerPair() ; bei gespiegelten oder versetzten Lagen.
    ...


    Verstehe mich nicht falsch eigentlich gibt da net wirklich was zu meckern, Dein Code ist wirklich gut gestaltet.


    Des leichteren Verständnist kann man den Variablen aber ein Startkürzel geben...


    f = Frame ; fAblPos ohne unterstriche.... groß/klein ala Camel Case tuts doch.
    n = Int


    Wir benutzen mnVar für m = MerkerLokal ung g für Global. gnZahl >> globaler Integer


    r = Real


    Ich möchte hier keine Coding Convention posten, doch würde ich mir einen Thread im Forum wünschen, auf dem wir uns auf EINEN Standard einigen - denn wir müssen immer wieder Programme von anderen erweitern / ändern.
    Dieser Thread ist schon lange überfällig, da sich wenn wir es hier nicht gebacken kriegen, eine für Deutschland/Europa einheitliche Programmierweise im Roboterbereich zu erstellen, es keiner tun wird, und das Chaos bleibt.


    Was ich so zu sehen bekomme ist z. B.
    goZahl - warum nicht noZahl für Integer Out statt GroupOut
    doSignal für BinärOut statt boSignal
    c für Char ist eigentlich doof, da es für Constant, gebraucht wird, besser ist strText
    z würde ich für Int noch noch gelten akzepieren - na ja...
    i für Int geht auch gar nicht, da es sich hier um Roboter handelt die IN's haben.
    i und o muss für Ein/Ausgänge reserviert werden....
    .... da gibt's so viele Varianten - eine richtige katastrophe.


    Wir haben 2010 und es sollte ein Einheitlicher Standard gefunden werden, nach dem auf KUKA's gearbeitet wird.


    Es gibt einen verdammt langen Thread - der über die Wunschliste was ein Robbi können muss oder was besser geht, nur nicht übers Coden.
    Und jetzt seid Ihr dran.


    Arbeitet bitte an der Vereinheitlichung von Code - Struktur - Doku... mit.
    Werner macht bestimmt einen eigenen Bereich in dem man sich über sowas unterhalten kann.


    Sowas in einem deutschen Forum zu starten heißt auch sich einen Vorsprung vor dem Rest der Welt zu erarbeiten.


    That's all.... Made in germany soll ein Markenzeichen bleiben.

  • Hallo,


    erst mal viele Dank für die Anregungen und das Beispiel. Ich war die letzten vier Tage unterwegs und hab mich deshalb nicht weiter mit dem Thema befasst. Werde mir in den nächsten Tagen die Sachen anschauen und versuchen daraus schlau zu werden.


    Gruß Thomas

  • Des leichteren Verständnist kann man den Variablen aber ein Startkürzel geben...


    Das wird ja öfters so gemacht... ich persönlich find's scheußlich. Für mich wird der Code dadurch so gut wie unlesbar, da es die Fähigkeit meiner Wahrnehmung, einen Variablennamen im Wust wiederzufinden, um mehr als die Hälfte herabsetzt. Standards sind gut und schön, aber ich lehne es ab, mich dafür mehr als nötig zu quälen.


    Zum Thema:
    Die Positionsverschiebung generell über das Basiskoordinatensystem vorzunehmen und nicht nur in Z und somit KEINE Punktkoordinaten zu berechnen, kann einem in der Zukunft (wenn man u. U. mit dem Bediener vor Ort nur noch über Telefon verbunden ist) einiges an Arbeit ersparen: die Aufforderung "teach einfach neu" erledigt es dann normalerweise....


    Grüße


  • :genau:

    "Erfahrung heißt gar nichts. Man kann eine Sache auch 35 Jahre falsch machen."

    Kurt Tucholsky

    Wenn die Macht der Liebe die Liebe zur Macht überwindet, erst dann wird es Frieden geben

    Jimi Hendrix (1942 - 1970), US-amerikanischer Rockmusiker

  • Ich hab da noch eine Verständnisfrage zur Verschiebung der Basis in Z-Richtung.


    Kann ich einfach den Z-Wert der Basis hoch rechen wenn die nächste Lage gesetzt wird? Funktioniert das auch, wenn die Basis nicht lotrecht zum World-Koordinatensystem steht?
    Wie schaut die Syntax aus? "BASE_DATA[n] = BASE_DATA[n] + Lagenhoehe"



    Es muss auch noch die Palettenhöhe berücksichtigt werden. Beim Ablegen der ersten Zwischenlage wird über Sensoren in den Saugerstößeln das Aufsetzen auf die Palette gemeldet. Diese Position in Z muss ich beim Ablegen der Eimer berücksichtigen. Mach man das über einen Interrupt?



    Gruß Thomas

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