Einfache Palettierung mit KUKA Roboter

  • Hallo zusammen,

    ich bin gerade dabei eine einfache Palettierung für einen KR 10 R900-2 mit einer KRC4 compact Steuerung zu programmieren.


    Im Prinzip ist mein Programm recht simpel aufgebaut, die Steuerung weigert sich jedoch das Programm auszuführen.

    Ich habe eine Position P1 geteacht, die als Basis dient. Also die erste Position auf der Palette.

    Nun möchte ich durch zwei Zähler die jeweiligen nächsten Positionen ausgehend von der Position P1 anfahren.


    Das Programm sieht in etwa so aus:


    .

    .

    .

    Act_pal_pos = P1 //Act_pal_pos ist die jeweilige Position an der etwas abgelegt wird. Diese wir zuerst der Position P1 gleichgesetzt, damit ich diese nicht verändere.


    Act_pal_pos.x=Act_pal_pos.x+100*Counter_1 // Die X-Position erhöht sich je nach Wert des Zählers in 100 mm Schritten.

    Act_pal_pos.y=Act_pal_pos.y+100*Counter_2 // Die Y-Position berechtet sich entsprechend genau so.
    .

    .

    .

    Kann es sein, dass das Programm ein Problem mit der Zuweisung Act_pal_pos = P1 hat?

    Muss ich Act_pal_pos irgdenwie definieren/declarieren?

    Oder woran könnte es liegen, dass ich hierbei Probleme bekomme?



    Vielen Dank schon einmal.

  • Schritt für Schritt zum Roboterprofi!
  • KRL möchte JEDE Variable deklariert haben, allein schon, um den Geltungsbereich festzulegen. Sollte man in Sprachen, die grundsätzlich Deklarationen verlangen, irgendwo auf Stellen treffen, wo das nicht nötig zu sein scheint, sollte man es trotzdem tun, außer die Daten sind offensichtlich vordeklariert.


    Die Namenskonvention "P"-> "XP" bei durch Inline-Formulare geteachten Punkten ist ein Artefakt aus alter Zeit, weil "P.+" nur ein Meta-Name ist, hinter dem mehrere unabhängige Datenstrukturen verwaltet werden. In "XP.+" liegt dann der FRAME. KRL schleppt einige dieser faulen Kompromisse mit sich rum, die entstanden sind, als Speicher noch rar und teuer war und man nicht genau wusste, wo es enden sollte. Muss man einfach hinnehmen.


    Grüße,

    Michael

  • Wieder mal ein Fall für die verschollene Glaskugel.

    ... Das Programm sieht in etwa so aus: ....

    Dann kann der Fehler auch nur so "in etwa" eingegrenzt werden.

    Poste doch bitte den tatsächlichen Code mit SRC und DAT. Dann kann man auch mehr als "in etwa" rausfinden.


    Jeder verwendete Punkt/Position muss vor der Verwendung deklariert werden.

    ... die Steuerung weigert sich jedoch das Programm auszuführen ...

    Schüttelt da die Steuerung mit dem Kopf, weigert sich mit Händen und Füßen?:DWie hat man sich denn das genau vorzustellen? ?(

    Sprich: Fehlermeldungen, Fehlerverhalten.

  • Hallo ,

    Ich habe auch ein Problem mit dem Palettieren.

    Ich bekomme eine Positionsnummer SPS rüber und habe 15 Ablegepunkte. (3 Spalten und 5 Reihen, oder andersrum!:D)



    INT Reihe_X
    INT Reihe_Y

    INT i_PosNr

    REAL nAbstandX
    REAL nAbstandY
    DECL E6POS Ablegen_temp[14]

    nAbstandX=105.5
    nAbstandY=109


       ;Ablege Positionsnummer von der SPS
    i_PosNr=eb_position
    i_PosNr=i_PosNr-1

    for Reihe_X = 0 to 4     ;Palette in X Richtung
          for Reihe_Y = 0 to 2   ;Palette in Y Richtung


    Ablegen_temp[i_PosNr] .X = (nAbstandX * Cnt_oben_X) ------> Allerdings bekomme ich hier den Fehler "unzulässiger Feldindex"
    Ablegen_temp[i_PosNr] .Y = (nAbstandY * Cnt_oben_Y)


          ENDFOR
       ENDFOR

    PTP Ablegen_temp[i_PosNr]


    Kann mir jemand helfen wie der Syntax für das richtig heißt oder hat jemand eine einfachere/bessere Lösung dafür?

    Bin noch recht neu in der Roboterszene

  • Syntax ist schon richtig, sonst würde das Programm nicht ausgeführt.

    Was Du hast ist ein Laufzeitfehler.

    eb_position dürfte 0 sein, dann ist der Index -1, Arrayindizes müssen größer 0 sein.

    Fremde Threads kapern ist nicht nett, lieber einen neuen erstellen.

  • 1. i_PosNr=i_PosNr-1

    2. for Reihe_X = 0 to 4     ;Palette in X Richtung

    3. for Reihe_Y = 0 to 2   ;Palette in Y Richtung

    4. Ablegen_temp[i_PosNr] .X = (nAbstandX * Cnt_oben_X) ------> Allerdings bekomme ich hier den Fehler "unzulässiger Feldindex"

    5. Ablegen_temp[i_PosNr] .Y = (nAbstandY * Cnt_oben_Y)

    6. ENDFOR

    7. ENDFOR

    PTP Ablegen_temp[i_PosNr]


    Also wenn ich mir das so ansehe und einmal davon ausgehe das i_PosNr = 1 ist der 1. Zeile ist dann ist klar da du eine unzulässigen Feldindex verwendest.

    In der 2. Zeile ist i_PosNr = 0 und 0 ist unzulässig in Zeile 4, was ja auch irgendwie klar ist, oder?


    Gruß

    Wer nichts macht, macht keine Fehler!

    Wer keine Fehler macht, kann nichts daraus lernen!

    Wer nichts lernen kann, kann sich nicht weiterentwickeln!

    Wer sich nicht entwickelt, geht unter!

  • Hallo zusammen


    Ist sichergestellt das von der SPS der richtige Wert (eb_position) gesendet wird .

    Würde diesen vor der Berechnung kontrollieren ob im richtigen Bereich oder ev. die Schnittstelle um das Signal "Daten gültig " erweitern.


    Dann klappts


    Bernhard

  • Moin,


    ne weitere Idee vllt;


    bei uns wird zwar abgeholt und nicht gesetzt, aber das Prinzip wäre ja das selbe, nur das der Greifer/Sauger etc anders herum funktioniert.


    Erste Position (AHP1N) ist geteacht und wird als x0 y0 angenommen, der Rest (insg. 15 Plätze) ist per Geometrieverrechnung mit Zähler in nem Case realisert.


    Zweite Pos ist dann zB so:
    AHP2N = {X 101, Y 0, Z 0, A 0, B 0, C 0}:AHP1N

    Letzte Pos:

    AHP15N = {X 408, Y -210, Z 0, A 0, B 0, C 0}:AHP1N


    .. iCurrentPickPos wird mitgezählt und bei 16 der Blister getauscht.


    Durch nen zweites Case wird die AHPxxN noch einmal mit dem aktuellen Teiletyp abgefangen und in Z Geometrie_verrechnet.

    Über das Teiletypen-Case kann ich ihm auch noch nen Z-Offset mitgeben, wenn sich an der vorherigen Position oder der Ablegeposition mal was ändert.


    Das Blister/Paletten-Raster zu ändern wäre etwas aufwendiger, aber recht leicht nachvollziehbar.


    Die Anlage verarbeitet 6 verschieden Teile-Typen mit jeweils eigener Bauteilhöhe.

    Teachen muss ich eigentlich nur, wenn der Staplerfahrer nen langes Wochenende hatte und der Palletierer schief steht. :waffen100:


    Nur so als Anregung ... :beerchug:

    Mein Name ist Hase. Ich weiß von nix.

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