Palettieren

  • Hallo,


    trotz Schulungen muss ich mal meinen Horizont erweitern... ,


    ich habe drei Produkte die von einem Förderband kommen und in Kisten 10 x 12 Fächer gelagert werden.
    Jedes der drei Produkte hat eine Kiste.


    Ablauf Teileanwesenheit Band , Robby fährt zum Band holt teil a,b,c ab.
    Jede Kiste hat eine eigene Base. und soll die Teile hinein legen.


    Nun hab ich das Problem mit dem Palettiermuster, nach dem ein Teil weg gelegt worden ist, soll der Robby in die Home fahren und auf das nächste teil warten, das dann in einer der angefangen Behälter gelgt wird.
    Nun ist aber das Problem das er solange in der for schleife bleibt, bis die komplett ab gearbeitet ist.
    Er soll aber, nach dem der Robby ein Teil abgelgt hat wieder in die Home fahren und auf ein neues Teil warten.
    Habe auch mal probiert, aus der Schleife heraus zu springen zurück ins Hauptprogramm, das geht dann ein paar mal gut, bis eine Fehlermeldung aufgrund Verschachtelungstiefe kommt.


    for reihe = RE1 to 10
    For spalte = SP1 to 12


    (Berechnungen)
    Fahrsätze


    RE1=RE1+1


    IF (RE1==11) Then
    RE1=1
    SP1=SP1+1
    Endif

    IF ((RE1==10) and (SP1==12))
    RE1=1
    SP1=1
    ENDIF
    Hauptprogramm()
    endfor
    endfor


    Jedes Produkt hat so eine Schleife, dementsprechend RE2 RE3 SP2 SP3



    SP1 und RE1 ist ein INT welches ich angelegt habe. In der Schleife werden Werte übertragen, damit das System erkennt wie weit die Schleife abgearbeitet worden ist.


    Ich hoffe, das ich es ein wenig verständlich rüber bringen konnte, und bedanke mich schon mal für eure Hilfe.

  • Schritt für Schritt zum Roboterprofi!
  • verwende doch eine normal variable, die du hochzählst und mittels if-abfrage prüfst.


    sprich spalte bei jedem durchlauf um 1 erhöhen und ist 12 erreicht, erhöhst du die reihe um 1 und fängst mit spalte wieder bei 1 an.

    „Welten, regiert von künstlichen Intelligenzen,<br />mußten oftmals ihre schmerzlichen Erfahrungen machen.<br />Logik kennt keine Gefühle.“

    Einmal editiert, zuletzt von Anubis ()

  • Wenn Integer als Variablen genommen werden, dann ist 12 / 12 = 1. Und 23 / 12 sind immer noch 1.
    Das heisst: Reihenversatz ist "(zähler_Kiste_x / 12) * Reihenabstand_in_mm". Spaltenversatz ist der Rest * Spaltenabstand. (Bei 0 zu zählen anfangen!) Damit errechnet man sich nur aus einem Zähler pro Kiste eine brauchbare Baseverschiebung.
    Wenn man dann die Bases und Zähler noch in einem Array ablegt, dessen Index der Produktnummer entspricht (1, 2 oder 3) braucht man Zählschleifen und IF-Verzweigungen gar nicht mehr, sondern errechnet mit drei Sätzen das Fahrziel. (Unwahrscheinliche Vorgaben sollten aber abgefangen werden. Wenn in einem Zähler plötzlich -2987 steht, darf der Roboter keinen Mist machen.)
    Rücksetzen der Zähler erfolgt nach Bedarf und wenn sicher ist, dass die Kiste gewechselt wurde. Die Zähler sollten dazu global gespeichert werden.


    Grüße,
    Michael


  • verwende doch eine normal variable, die du hochzählst und mittels if-abfrage prüfst.


    sprich spalte bei jedem durchlauf um 1 erhöhen und ist 12 erreicht, erhöhst du die reihe um 1 und fängst mit spalte wieder bei 1 an.


    Hey, so klappt es, hab irgendwie zu kompliziert gedacht. ;)
    Danke

  • Beim Palettieren habe ich öfters mal mit unterschiedlichen Mengen zu tun. Daher immer die Grenzwertangabe als MaxReihe, MaxSpalte und MaxHöhe. Das erspart mir bei kurzfristigen Änderungen (stapel da mal einen weniger drauf, ist für einen Versuch) einen größeren Programmeingriff.

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