# Warteschleife programmieren



## Loderan (1 März 2022)

Hallo zusammen,
ich möchte gern eine Warteschleife programmieren. Im Prinzip sollte es so aussehen, das ich 2 Vorratstanks habe aus denen 6 andere Tanks befüllt werden.
Die beiden Vorratstanks werden mit Temperaturfühlern überwacht. Es soll immer der Tank mit dem niedrigsten Füllstand vorrangig befüllt werden, auf ein Niveau von 
80% und es soll immer der Vorratstank ausgewählt werden der in dem Moment die niedrigste Temperatur aufweist. Die anderen Pumpvorgänge sollen in Warteschleife gelegt werden um zu verhindern das einer der 6 Tanks leer läuft. 
Ich programmiere im FUP und möchte fragen ob sich dieses Programm überhaupt so schreiben lässt oder ob das nur im ST zu realisieren ist?

Ich danke euch


----------



## blackpeat (1 März 2022)

Ich würde nicht den Begriff Warteschleife verwenden, sondern vielleicht Bedingung. 

Weil eigentlich hast du ja nur die Bediung das wenn nachgefüllt wird dürfen die anderen nicht laufen, zumindest lese ich das so. 

Also kannst du noch bei deinen anderen vorgängen einfach an ein AND ein NOT Füllvorgang hängen.


----------



## escride1 (1 März 2022)

Loderan schrieb:


> Ich programmiere im FUP und möchte fragen ob sich dieses Programm überhaupt so schreiben lässt oder ob das nur im ST zu realisieren ist?


Es ist am einfachsten im FUP zu schreiben, da Du hier während der Ausführung und Beobachtung auch gleich Fehler sehen kannst oder die Zustände einsiehst warum er nun was macht.

Es ist auch in ST möglich, beachte jedoch das hier, je nach Wissensstand, das Beobachten nur schwieriger wird.


----------



## Loderan (1 März 2022)

Vielen Dank für eure schnellen Antworten,

wie kann man denn am einfachsten die Auswahl des Tanks mit der niedrigsten Temperatur festlegen? Ich habe da keine Idee...


----------



## JSEngineering (1 März 2022)

Eine Lösung, die für beliebig viele Tanks erweiterbar ist:


```
Temperaturen    : Array [1..6] of Real;
x                : INT;
MinTempIdx        : INT;

MinTempIdx := 1;

for x := 2 to 6 do
    if Temperaturen[x] < Temperaturen[MinTempIdx] then
        MinTempIdx := x;
    end_if
end_for

//Hier enthält MinTempIdx jetzt den Tank-Index mit der geringsten Temperatur
```


----------



## Loderan (1 März 2022)

Ok, wäre es auch möglich das im FUP umzusetzen? Ich habe andere Programmteile schon auf die Weise geschrieben und bin im ST alles andere als sicher


----------



## JSEngineering (1 März 2022)

Du könntest 5x den MIN-Baustein hintereinanderschalten, dann hättest Du die kleinste Temperatur ermittelt. Und dann vergleichst Du diese mit den Tanktemperaturen um auf den Tank zu kommen, welcher der gesuchte ist.


----------



## Onkel Dagobert (1 März 2022)

Loderan schrieb:


> Ok, wäre es auch möglich das im FUP umzusetzen? Ich habe andere Programmteile schon auf die Weise geschrieben und bin im ST alles andere als sicher


Ganze vier Minuten waren vergangen und bettelst schon um eine schnelle Lösung?


----------



## Heinileini (1 März 2022)

Onkel Dagobert schrieb:


> Ganze vier Minuten waren vergangen und bettelst schon um eine schnelle Lösung?


Zeit ist Geld, Dagobert! Das muss man Dir doch nicht sagen? 

Die Aufgabe ist noch recht undefiniert.
Z.B. was, wenn beide VorratsTanks die minimale Temperatur oder mehrere der 6 "Ziel"-Tanks den minimalen Füllstand haben?
Wie sollen die Füllstände der VorratsTanks berücksichtigt werden?
Dürfen mehrere ZielTanks gleichzeitig befüllt werde? Wenn nicht, welche Prioritäten sollen gelten?
Da bleibt noch viel zu tun für den TE, sich darüber Gedanken zu machen bzw. die entsprechenden Informationen einzuholen (und diese hier evtl. noch zu äussern).


----------



## Loderan (1 März 2022)

Ich wollte jetzt hier nicht den Eindruck erwecken, nur nach einer schnellen Lösung zu "betteln". Ich hatte einfach keine Idee, wie man den Lösungsansatz aus dem ST in FUP umsetzt da ich nicht im ST programmiere. Dieses Projekt ist wesentlich umfangreicher, nur den Part mit der Auswahl des Tanks nach Temperatur wusste ich mir nicht zu erklären.

Ich danke euch für eure Antworten. Den Rest werde ich nun erst einmal versuchen allein zu lösen.


----------

