Bezugstellen Managment

Pinguino

Level-1
Beiträge
182
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hatte jemanden eine Idee, wie man ein Bezugstellen Managment für Trinkwasser realisieren kann?
Jeder Bezüger sollte eine Priorität zugeteilt werden.

Danke für Unterstützung
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Sollte irgendwie so funktionieren:
Es steht nicht genug Wasser zur Verfügung, um alle Entnahmestellen gleichzeitig zu bedienen und außerdem auch noch die geforderte Strömung im Rücklauf einhalten zu können.

Über das Automatisierungsystem (Taster oder Bedienterminal) an jeder Entnahmestelle wird die Wasserentnahme durch den Benutzer oder eine Maschine angefordert. Das Automatisierungsystem (SPS) entscheidet dann, ob eine sofortige Entnahme möglich ist. Falls das nicht möglich ist, wird die Anforderung in eine Warteschlange aufgenommen. Erst wenn wieder genug Reserven im System vorhanden sind, wird die nächste Anforderung in der Warteschlange berücksichtigt. Das Automatisierungsystem
(Pneumatikventil) gibt die Entnahme dann ggf. frei. Außerdem können auch Prioritäten gesetzt werden. Eine Anforderung an einer Entnahmestelle mit hoher Priorität würde dann ggf. eine laufende Entnahme an einer Entnahmestelle mit niedriger Priorität beenden.

Danke für die Unterstützung!
 
eigendlich ist es alles eine frage der UND verknüpfungen. du könntest jeder wasserentnahmestelle einen flusswert zuordnen. so dass du praktisch über die addition dieser werte jeweils auf deinen gesamtfluss kommst.

für die gleichmässig berechtigten anschlüsse würde ich einfach einen wert vorgeben. gehen wir einfach mal davon aus, dass dein hauptventil an der pipeline ein strömungsvermögen von 32 m³/h hat.

dann setzt du den Wert "FLOW" auf 32.000. das geht mit [MOV_W]

ein normaler ½" Wasseranschluss hat grob gesagt ein duchlassvermögen von 12l/min, das sind 720l/h oder 0,72 m³/h also zihest du diesen wert einfach mit der funktion [SUB_I] von der Variable "FLOW" ab. der Trigger dafür ist dann der gleiche kanal wie der für das Öffnen des Ventils.

dann setzt du noch einen Vergleich zwischen der Variable "FLOW" und dem Duchflusswert der Zapfstelle. nach dem Motto: WENN "FLOW" > 720 DANN Q0.1 (beispielausgang)

an diesen hängst du eine grüne lampe, die dem Bediener signalisiert, dass er zapfen darf.

die freigabe macsht du dann ganz einfach über ein und gatter. wenn Q0.1 UND I0.1 (Beispieleingang) DANN SET-Q1.1 (beispielventilausgang)

und für das anhalten einfach einen weiteren EIngang, sagen wir I1.1 mit einem öffnereingang belegen. also WENN I1.1 DANN RESET-Q1.1 wichtig ist, dass du mit dem abschaltbefehl auch den [ADD_I] triggerst, der deiner Variable FLOW wieder den vollen wert zuweist.

hardwarmässig würde ich die freigabetaster so regeln, dass du an jeder entnahmestelle ein gehäuse für 2 befehlsgeräte setzt. eine grüne leuchttaste und einen roten Pilztaster (AUS)

das mit der vorrangschaltung ist eigendlich relativ einfach, du musst nur die gruppen, vor denen dein vorrangsanschluss hängt abfragen, und gegebennfalls schrittweise abschallten.

sprich eine schrittkette.....

also

WENN BEDARF > FLOW DANN Teilnehmer 1 abschalten, mit ADD_I den bedarfswert wieder drauf rechnen....
WENN BEDARF > FLOW DANN Teilnehmer 2 abschalten, mit ADD_I den bedarfswert wieder drauf rechnen
...

wichtig ist, dass er das halt eben als schrittkette macht.

hoffe das hat dir geholfen....

lg, anna
 
Wie machst du die Gruppen wo die Teilnehmer dann abgefragt und danach abgeschaltet werden.
Wie würdest du zu den Teilnehmer die Prioritäten zuteilen?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wie machst du die Gruppen wo die Teilnehmer dann abgefragt und danach abgeschaltet werden.
Wie würdest du zu den Teilnehmer die Prioritäten zuteilen?
Ich würde für die Prioritäten verschiedene DB's erstellen. Z.B.: Prio A = DB 1 , Prio B = DB 2 ... .
Nun die Benutzer nach dem FIFO Prinzip (First In First Out) in die jeweiligen DB's eintragen.
Von der Reihenfolge dann immer den DB1 ab arbeiten, ist der leer kommt DB 2 dran.

Wie erkennst Du denn die Priorität? Über RFID oder Passwort oder haben die Taster verschiedene Prioritäten?
 
Durch den Tastern erkenne ich die Priorität.
Wie muss ich die DBs belegen wenn ich 20 Bezugstellen habe, 10 sind mit der Priorität A, 5 mit der Priorität B und die restlichen mit Priorität C?
Es können Maximal 10 Bezüger gleichzeitig Wasser entnehmen!
Mit welcher Bedingung wird das FIFO IN und OUt angesteuert?
Was ich nicht verstehe warum zuerst den DB1,DB2,DB3 usw.?
 
Durch den Tastern erkenne ich die Priorität.
Wie muss ich die DBs belegen wenn ich 20 Bezugstellen habe, 10 sind mit der Priorität A, 5 mit der Priorität B und die restlichen mit Priorität C?
Es können Maximal 10 Bezüger gleichzeitig Wasser entnehmen!
Mit welcher Bedingung wird das FIFO IN und OUt angesteuert?
Ich würde jeden DB so groß machen dass alle 20 Benutzer eingetragen werden könnten.
Sobald ein Benutzer sich anmeldet, weißt Du ja anhand der Taste welche Priorität er hat. Also in den entsprechenden DB eintragen und den Zeiger für den DB Eintrag um eins erhöhen.
Meldet sich nun ein neuer Benutzer mit der gleichen Priorität an, wird er anhand des Zeigers auf den zweiten Platz eingereiht. (wieder wird der Zeiger erhöht)
Gleichzeitig beginnst Du mit der Abarbeitung der DB Listen. Erst DB 1 weil:

Eine Anforderung an einer Entnahmestelle mit hoher Priorität würde dann ggf. eine laufende Entnahme an einer Entnahmestelle mit niedriger Priorität beenden.
So nun wird dem Benutzer von dem ersten Eintrag des Priorität A DB's das Wasserventil geöffnet. Ist er fertig, wird der Eintrag gelöscht und alle eingetragenen Benutzer in diesem DB rutschen um eine Stelle nach vorne und der Zeiger wird um 1 verringert (es fehlt ja einer).
Ist der DB leer wird der nächste DB abgearbeitet.
Was ich nicht verstehe warum zuerst den DB1,DB2,DB3 usw.?
Weil in dem DB 1 alle Benutzer mit der Priorität A sind und im DB 2 alle Benutzer mit der Priorität B.

So nun kommt die Maximale Anzahl der Entnahmen ins Spiel.
Da alle VIP Benutzer im DB 1 stehen werden die zuerst bedient.
Also 10 minus Zeiger vom DB 1 ergibt wie viele Leute vom DB 2 bedient werden dürfen.
Ist der DB 2 z.B. leer aber ein Wasserträger mit Priorität C hat sich angemeldet ergibt das:
Code:
10 - (Zeiger vom DB 1) - (Zeiger vom DB 2) = wie viele Leute vom DB 3 werden bedient.

Für das FIFO gibt es hier glaube ich einige Beispiele.
 
Noch etwas, was passiert wenn alle 5 Benutzer der Priorität B und C
Wasser beziehen und jetzt einer mit mit der Priorität A Wasser beziehen will?
 
Noch etwas, was passiert wenn alle 5 Benutzer der Priorität B und C
Wasser beziehen und jetzt einer mit mit der Priorität A Wasser beziehen will?
Das kommt jetzt darauf an was passieren soll.
Eine Anforderung an einer Entnahmestelle mit hoher Priorität würde dann ggf. eine laufende Entnahme an einer Entnahmestelle mit niedriger Priorität beenden.
Wenn wirklich Prio A immer Vorrang hat ist das am einfachsten denn nach meiner Idee wird ja einfach immer Zyklisch von Prio A bis Prio x frisch gelesen. Sprich kommt eine VIP Person wird dem letzten Wasserträger der sich zum Schluss angemeldet hat, der Hahn wieder zu gedreht.

Die andere Variante ist schon ein bisschen aufwendiger wenn die je 5 Benutzer von B und C weiter versorgt werden sollen.
Dann musst Du das FIFO zwischen sichern und schauen ob bei dem aktuellen endlich mal einer fertig ist. Dann aus dem ersten FIFO denn ersten holen und in den aktuellen reinschieben.
Aber machbar ist natürlich alles.

Einen guten Link habe ich grad keinen, da ich das eigentlich immer selber mache.
Ich habe gestern mal einfach so FIFO bei der Suche eingegeben, aber klar da sind auch viele Diskussionen dabei.
 
Wie sieht es aus mit SCL, ein bisschen verstehe ich es.
Ja das geht natürlich auch, ich glaube ich habe auch so was hier schon gesehen. Vielleicht nicht komplett aber vom Ansatz her.

Wie sieht es aus mit SCL, ein bisschen verstehe ich es.
Wie kann ich den Tastern die Prioritäten zuweisen?
Das ist ja lustig, da ich auch gerade darüber nachgedacht habe.
Mal auf die schnelle den ersten Ansatz (aber halt in AWL):

Code:
   U Taster 1 Prio A
   FP M 0.0
   SPBN go1
   L 1   // Erste Entnahmestelle von Prio A
   T DB_Prio_A.DBW 100   // Eintrag welche Entnahmestelle als nächste an der Reihe ist
   SET
   S M 1.0 // Mit diesem Merker wird ein neuer Eintrag in der Warteliste erstellt
go1:NOP 0
 
   U Taster 2 Prio A
   FP M 0.1
   SPBN go2
   L 2   // Zweite Entnahmestelle von Prio A
   T DB_Prio_A.DBW 100   // Eintrag welche Entnahmestelle als nächste an der Reihe ist
   SET
   S M 1.0 // Mit diesem Merker wird ein neuer Eintrag in der Warteliste erstellt
go2:NOP 0
   .
   .
   .
 
   U M 1.0
   SPBN PA
   L #Zeiger   // Zeiger auf die nächste frei Stelle im DB
   SLD 3
   LAR1
 
   L DB_Prio_A.DBW 100 // Den Inhalt der Entnahmestelle (DB 1 ist nun geöffnet)
   T DBW [AR1, P#0.0]  // Auf den freien Platz in der Warteliste
 
   L #Zeiger // Nächste frei Stelle vorbelegen
   L 2
   +I
   T #Zeiger
 
   SET
   R M 1.0  // Eintrag ist erledigt
PA:NOP 0

Das ganze für Prio B und C
Und anschließend eine Schleife durch die drei DB's und auf die Ausgänge schalten.
Mit (10 - Zeiger DB_Prio_A - Zeiger DB_Prio_B - Zeiger DB_Prio_C)

Das war jetzt mal auf die schnelle, kann sicher noch optimiert werden. ;)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wie kann ich beim FIFO das First Out realisieren gemäss Bespiel dass du mir angegeben hast?
Idee:
Das könnte man so machen, dass wenn bei der Priorität B
5 Bezüger Wasser entnehmen. Und danach 7 Bezüger der Priorität A jetzt Wasser beziehen wollen. Das beim FIFO Priorität B (DB2) mit einem Takt von 1Sek. die ersten zwei die Wasser angefordert haben heraus-ausgenommen werden, bis dann nur noch 3 Bezüger der Priorität B bleiben.

Hat es in Standard Library von Siemens ein LIFO / FIFO usw.? Wenn ja, kann man sie für meine Anwendung einsetzen?
 
Zuletzt bearbeitet:
Hat es in Standard Library von Siemens ein LIFO / FIFO usw.? Wenn ja, kann man sie für meine Anwendung einsetzen?
Nicht das ich wüsste.
Ich glaube die Oscat.lib könnte da was haben.
Wie kann ich beim FIFO das First Out realisieren gemäss Bespiel dass du mir angegeben hast?
Idee:
Das könnte man so machen, dass wenn bei der Priorität B
5 Bezüger Wasser entnehmen. Und danach 7 Bezüger der Priorität A jetzt Wasser beziehen wollen. Das beim FIFO Priorität B (DB2) mit einem Takt von 1Sek. die ersten zwei die Wasser angefordert haben heraus-ausgenommen werden, bis dann nur noch 3 Bezüger der Priorität B bleiben.
Mann, Du machst es aber echt kompliziert, die bedenken verstehe ich aber.
Nicht das die hinteren Bezüger von Prio B oder C gar nichts abbekommen.
Da die 7 Prio A Bezüger nicht gleichzeitig kommen ist es bisschen komplizierter.
Also den Eintrag in den DB habe ich Dir ja schon geschrieben.
Die Abfrage und Zuweisung auf die Ausgänge würde ich in SCL machen.
Zwei Schleifen ineinander.
Die erste über die Anzahl der Teilnehmer im DB und die Zweite für die Zuweisung des Wasserventils je nach Nummer des Eintrags vom Datenwort.
Jetzt fehlt nur noch das Austragen aus der Liste. Sobald Entnahme fertig oder Befehl "Kein Wasser mehr" Eintrag entfernen und alle um eine Position nach vorne schieben.

Nun habe ich zwei Fragen:
Nimmt es denn langsam eine Gestallt an oder scheitert das alles wegen AWL?
Zweite Frage an die Kollegen im Forum:
Verrenne ich mich hier, hat jemand eine einfachere Lösung?
 
Zwei Schleifen hintereinander habe ich noch nie gemacht. Kannst du mir zeigen wie das geht beim zuweisen der Ausgänge.
Beim Austragen brauch ich dort auch eine Schleife?
 
Zurück
Oben