TIA Schrittkette Hochregallager dynamisch

Simatico

Level-1
Beiträge
3
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

Ich habe ein Hochregallager, mit 50 Einlagerpositionen das folgenden Aufbau aufweist:

1730970122917.png 1730970310441.png

Wie zu sehen, ist bei der X-Achse jede Position mit einem eigenen Sensor versehen.
Das selbe gilt für die Z-Achse, die Beladehöhe hat einen Sensor und die Entladehöhe hat einen eigenen Sensor.

Den Aufbau des Hochregallagers habe ich in einem Datenbaustein nachgebildet:

Er Enthält die Position als Int wert für X und Z und einen Bool Wert für belegt oder nicht belegt.

Lagermatrix.jpg

Über einen FB, frage ich das Array ab und versuche den ersten freien Lagerplatz zu finden:

Schrittkette.jpg

Wird der Freie Platz gefunden, speichert er die Koordinaten des Freien Platzes in einem Datenbaustein unter Koordinate X und Koordinate Z ab.



Da ich die Schrittkette so optimieren will, das er das Bauteil immer an dem ersten verfügbaren Platz einlagert, muss ich diese Daten jetzt umwandeln.
Beispiel: Der freie Platz der gefunden wird, ist Pos0.0 somit steht in der Koordinate x und der Koordinate z jeweils 0
Ich muss es jetzt allerdings schaffen, mit diesen Werten meine Sensoren in der Schrittkette einzubauen.

Aktuell ist die Schrittkette ausgelegt um einfach nur an einem bestimmten platz einzulagern und somit die Sensoren auch direkt vorgegeben.
Bei Input X_Einlagerposition ist aktuell direkt der Eingang zum rücksetzend des vorherigen Schrittes hinterlegt.

Für Meinen Wunsch mit BSP Pos0.0 gilt:
Der Sensor für die X-Position 0 ist bei mir Eingang E0.4 der Sensor für die Z-Position 0 ist bei mir Eingang E5.1


Schrittkette-2.jpg




wie kann ich die Schrittkette jetzt dynamisch gestalten, so dass er mir je nach pos. die richtigen Eingänge in die Schrittkette schreibt?
Wichtig wäre eine Lösung in FUP, ein SCL Netzwerk in den FUP Baustein ist bei meinem TIA(V13) leider nicht möglich.
Als SPS fungiert eine 1214C DC/DC/DC


Ich hoffe man hat mein Problem verstanden, sonst einfach nachfragen :-)

Vielen Dank vorab!
 
Du könntest folgendes machen:
Anstatt dass du die Hardware-Signale in der Schrittkette auswertest, wertest du stattdessen eine Bool-sche Variable aus, die dir anzeigt, dass deine gewünschte Position erreicht wurde.

Im Netzwerk vor deiner Schrittkette kannst du diese Variable dann setzen. Ich würde es als große ODER-Verknüpfung sehen, an deren Eingängen dann jeweils "Zielposition = xy" UND "Sensor xy erreicht" steht.

Dann hast du in der Schrittkette immer die gleiche Variable, aber die wird dann dynamisch gebildet.
 
Ich würde ebenfalls die Sensoren in drei "Array of Bool" (oder zwei zweidimensionale Arrrays fürs ein- und Auslagern, da unterschiedliche Sensoren auf der Z-Achse) mappen.
Damit kannst du recht simpel die Fahrtrichtung auf Basis der Differenz zwischen Soll- und Istposition festlegen.
Die Info "Soll-Position erreicht" kannst du dann abfragen, indem diu die Indizies der Sensorarrays entsprechend dem Index der Sollposition auf =TRUE/FALSE abfragst.

Und du könntest über die Sensor-Arrays gleich noch logische Abfragen/überwachungen realisieren.
Also ob mehr als ein Positionssensor angesprochen hat & ob der Positionswechsel logisch möglich war bzw. ob die Sensoren alle korrekt verkabelt sind. Das Handling kann schließlich nicht von Pos0 auf Pos3 springen ohne vorher Pos 1 & 2 zu durchlaufen.
 
Sorry, für die späte Antwort, ich versteh dir Vorgehensweise noch nicht ganz, meine Idee war es ursprünglich die jeweiligen Eingänge in das array zu speichern, in dem die Position auch steht allerdings hab ich keinen weg gefunden wie ich hardware Eingänge in einem Array speichern kann, geht das?
 
Eine einfache Möglichkeit wäre, dein Array-UDT anzupassen. Dein UDT besteht ja aktuell aus Pos X, Pos Z, Belegt. Wenn du deinen UDT noch um ein Bool Pos_Erreicht erweiterst, könntest du dort die Hardware-Signale der Sensoren abspeichern.

Code:
Lagerplatz[0,0].Pos_Erreicht := Eingang_x;
Lagerplatz[0,1].Pos_Erreicht := Eingang_y;
Lagerplatz[0,2].Pos_Erreicht := Eingang_z;
etc.

In deiner Schrittkette hast du ja dann sehr wahrscheinlich Variablen, über die du definierst, welches Fach du ansteuerst. Dann kannst du abfragen, ob in dem Array-Element, das dein Fach darstellt, die Info Pos_Erreicht gesetzt ist, und damit hast du deine dynamische Endlage.

Edit: FUP mit Screenshots:
1731494194618.png
1731494255880.png
Ich hab jetzt bloß Eingang_1 und Eingang_2 nicht definiert, da müsstest du dann eine Eingangssignale hinlegen.
 
Moin Simatico,

mal abgesehen davon, dass das Beispiel etwas realitätsfremd erscheint (In welchem HRL hat jeder Stellplatz einen Belegtsensor?) und die Bezeichnung der Achsen nicht unbedingt der Norm entspricht (X = Fahrachse, Y = Hubachse, Z = Teleskopgabelachse), ist Deine Frage doch, wie Du die Lagerplatzverwaltung optimieren kannst?

Dein (Dir selbst gestellte) Aufgabe ist ja so beschrieben:
Da ich die Schrittkette so optimieren will, das er das Bauteil immer an dem ersten verfügbaren Platz einlagert [..]

Was ist der erste verfügbare Platz?
Im leeren Lager ist das sicherlich X1Y1. Aber ist der nächste verfügbare Platz dann X1Y2 oder X2Y1? Da kommt es sicherlich etwas auf die Fachbreite und -Höhe an. Geht es um den kürzesten, diagonalen Weg oder die schnellste Erreichbarkeit?

VG
MFreiberger
 
Zuviel Werbung?
-> Hier kostenlos registrieren
... in jedem Fall aber wäre diese Aufgabenstellung, gerade wegen Array / Schleife etc., für mich ganz klar eine SCL-Geschichte. Mit FUP würde ich da unter gar keinen Umständen herangehen ... da blickt doch hinterher niemand mehr durch ...
 
Die Reihenfolge, in der die Plätze geprüft werden, ob sie frei sind, bestimmt, welches der erste bzw. der nächste freie Platz ist.
Das klingt sehr banal. Aber man muss sich darüber Gedanken machen, bevor man beginnt, die Reihenfolge festzulegen.
also noch eine mögliche Variante.

- kürzeste Distanz (Position berechnet aus Wurzel(X²+Y²))
- schnellste Erreichbarkeit (dabei muss dann die Geschwindigkeit von Fahr- und Hubachse berücksichtigt werden)
- erstes Vorkommen in einer logischen Suche (in der Praxis sicherlich die unintelligenteste, aber am einfachsten zu implementierende Variante)

Zudem muss in der Praxis noch beachtet werden, ob eine Lastgleichverteilung aufgrund der Regalstatik erforderlich ist.

VG
MFreiberger
 
also noch eine mögliche Variante.

- kürzeste Distanz (Position berechnet aus Wurzel(X²+Y²))
- schnellste Erreichbarkeit (dabei muss dann die Geschwindigkeit von Fahr- und Hubachse berücksichtigt werden)
- erstes Vorkommen in einer logischen Suche (in der Praxis sicherlich die unintelligenteste, aber am einfachsten zu implementierende Variante)
"Erstes Vorkommen in einer logischen Suche" ist das, was mir vorschwebte, wenn's auch unintelligent ist. Also nicht "noch eine mögliche Variante".
Aber auch die intelligenteren Varianten werden sicherlich nicht jedesmal alle Plätze gleichermassen prüfen und die aussortierten, in Frage kommenden nach den diversen o.g. Kriterien im Detail weiter prüfen.
Mehr oder weniger "komplizierte" Suchstrategien sind natürlich denkbar, wünschenswert und machbar.
Unintelligent wären sie für mein Verständnis, wenn sie in Frage kommende Ergebnisse "übersehen", d.h. wenn sie keine Lösung finden, obwohl wenigstens 1 Lösung noch möglich ist.
Na ja, wenn man statt 'Reihenfolge' einfach 'Suchstrategie' sagt, dann klingt es sicherlich vornehmer.
Ich denke jedenfalls, dass man sich frühzeitig Gedanken darüber machen sollte, weil die Auswirkungen auf den Lösungsweg sonst u.U. sehr erheblich sein/werden können.
Zudem muss in der Praxis noch beachtet werden, ob eine Lastgleichverteilung aufgrund der Regalstatik erforderlich ist.
Auch wichtig. Unqualifizierter Tipp: Summe der Drehmomente = 0 ?
 
Zurück
Oben