TIA Lagersystem Chronologisch wieder Einlagern nach dem man es Ausgelagert hat??? V17

Beiträge
1
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo ich habe eine frage bezüglich, meinem kleinen Lagersystem.
Ich habe alles her bekommen außer eben das chronologische Einlagern nach dem man es nach belieben ausgelagert hat, ich habe auch mehrere Möglichkeiten probiert aber keine gefunden die ansatzweiße realistisch ist.
Daher falls jmd ne Idee hat bitte melden!!!

ABLAUF:
"Flanke"(CLK:="Einlagern",
Q=>"m_rs");

IF "m_rs" THEN
"int 2,0" := "int 2,0" + 1;
ELSE
"Einlagern" := False;
END_IF;

IF "int 2,0" = 9 THEN
"int 2,0" := 1;
END_IF;

AUSGÄNGE:

CASE "int 2,0" OF
1:
"m_1" := TRUE;
2:
"m_2" := TRUE;
3:
"m_3" := TRUE;
4:
"m_4" := TRUE;
5:
"m_5" := TRUE;
6:
"m_6" := TRUE;
7:
"m_7" := TRUE;
8:
"m_8" := True;




ELSE
IF "int 2,0" < 0 THEN
"m_1" := FALSE;
"m_2" := FALSE;
"m_3" := False;
"m_4" := FALSE;
"m_5" := FALSE;
"m_6" := False;
"m_7" := False;
"m_8" := False;

END_IF;
END_CASE;

IF "komplett Auslagern(Rs)" THEN
"m_1" := FALSE;
"m_2" := FALSE;
"m_3" := False;
"m_4" := FALSE;
"m_5" := FALSE;
"m_6" := False;
"m_7" := False;
"m_8" := False;
"int 2,0" := 0;
"Datenbaustein_1".Ausgelagert[0] := False;
"Datenbaustein_1".Ausgelagert[1] := False;
"Datenbaustein_1".Ausgelagert[2] := False;
"Datenbaustein_1".Ausgelagert[3] := False;
"Datenbaustein_1".Ausgelagert[4] := False;
"Datenbaustein_1".Ausgelagert[5] := False;
"Datenbaustein_1".Ausgelagert[6] := False;
"Datenbaustein_1".Ausgelagert[7] := False;

END_IF;

CASE "int3.0" OF
1:
IF "Auslagern" THEN
"m_1" := false;
"Datenbaustein_1".Ausgelagert[0] := TRUE;
END_IF;

2:

IF "Auslagern" THEN
"m_2" := FALSE;
"Datenbaustein_1".Ausgelagert[1] := TRUE;
END_IF;

3:
IF "Auslagern" THEN
"m_3" := FALSE;
"Datenbaustein_1".Ausgelagert[2] := TRUE;
END_IF;

4:

IF "Auslagern" THEN
"m_4" := FALSE;
"Datenbaustein_1".Ausgelagert[3] := TRUE;
END_IF;

5:
IF "Auslagern" THEN
"m_5" := FALSE;
"Datenbaustein_1".Ausgelagert[4] := TRUE;
END_IF;

6:
IF "Auslagern" THEN
"m_6" := FALSE;
"Datenbaustein_1".Ausgelagert[5] := TRUE;
END_IF;

7:
IF "Auslagern" THEN
"m_7" := FALSE;
"Datenbaustein_1".Ausgelagert[6] := TRUE;
END_IF;

8:
IF "Auslagern" THEN
"m_8" := FALSE;
"Datenbaustein_1".Ausgelagert[7] := TRUE;
END_IF;

END_CASE;

IF "Auslagern" THEN
"int 2,0" := 0;
END_IF;

1725528175220.png

1725528228035.png


Alles wurde auf einem hmi dargestellt und das auslagern basiert auf einem a/e feld an das ein 2. INT angehängt wurde
 
Also brauchst neben der Information ob ausgelagert wurde, auch eine Reihenfolge (Alter) mit dem du beim Einlagern wieder arbeiten kannst.

Mein Vorschlag dein Array of Bool in ein Array of Struct umbauen und einen Int für die Reihenfolge hinzu fügen.
 
Wie @Hermsen vorgeschlagen hat, könntest du recht simpel die Datenhaltung für dein Lager aus einem Array of Bool zu einem Array of UDT ändern & dann jedem Platz beim Einlagern einen Zeitstempel mitgeben (z.B. per RD_SYS_T).
Beim Auslagern könntest du dann dein Array per Schleife nach dem ältesten oder dem neuesten Zeitstempel durchsuchen => wäre recht flexibel.

Wenn ich ehrlich bin riecht die Art einer Fragestellung und dein Code so ein bisschen nach Übungsaufgabe zum Thema FIFO und LIFO Datenhandling.
Dein Problem liese sich beispielsweise sehr einfach mit einem FIFO und den Platznummern auf die eingelagert/ausgelagert wird realisieren.
=> Evtl auch mal eine Google-Suche wert.

Und wenn du Code postest bitte diesen in ein Code-Element einfügen.
Verbessert die Lesbarkeit ;)
1725534760611.png
 
Zurück
Oben