# Codesys - Pumpen Zuschaltung über Betriebszeit



## IndraMagic (15 September 2010)

Hallo zusammen, 

ich suche eine Codesys Lösung für eine Zuschaltung von 4 Pumpen, die über 4 Schaltschwellen (Durchfluss) zugeschaltet werden. 
Das hat man ja gleich über eine Case Anweisung gelöst.
z.B.
VAR
Durchfluss : int;
END_VAR

CASE Durchfluss OF
  0 :  (* Zuschaltung Pumpe 1 *)

160 :  (* Zuschaltung Pumpe 2 *)

320 :  (* Zuschaltung Pumpe 3 *)

480 :  (* Zuschaltung Pumpe 4 *)
END_CASE


Mein Problem liegt aber jetzt darin, denn ich muss diese 4 Pumpen je nach Betriebszeit d.h. Betriebsstundenzähler (habe ich schon gelöst) über einen Vergleich welche Pumpe die niedrigste Zeit in Betrieb war nacheinander über die Schaltschwellen vom Durchfluss zuzuschalten und wer die höchste Betriebsstunden hat nach dem Druchfluss wieder abzuschalten.

Hätte hier jemand eine Lösung Parat, und im Strukturierten Text (ST) wenn es geht!


----------



## derwestermann (15 September 2010)

IndraMagic schrieb:


> Hätte hier jemand eine Lösung Parat, und im Strukturierten Text (ST) wenn es geht!


 
Nope, aber noch eine Anmerkung:

Was machst Du, wenn Dein Wert den Schaltschwellenwert der CASE-Anweisung gar nicht erreicht?
Also Durchfluss zum Bleistift die Wertefolge 158,159,161 annimmt?


----------



## IndraMagic (15 September 2010)

nichts! 

1 Pumpe ist zwischen    0-160 aktiv
2 Pumpe ist zwischen 161-320 aktiv
3 Pumpe ist zwischen 321-480 aktiv
4 Pumpe ist zwischen 480-unendlich  aktiv


Es geht rein um die Zuschaltung und Abschaltung über die Betriebszeit über einen Vergleich. Alle vier Pumpen werden wiederum an einen Regler übergeben der auf einen gewissen Druck regelt. Das tut aber noch nichts zur Sache ich brauche die Lösung erst auf meine Frage.


----------



## derwestermann (15 September 2010)

Nun, Du hast aber, meiner Ansicht nach, mit der CASE-Anweisung noch nicht mal die Lösung für die Schwellwert-Umschaltung.
Oder ICH habe die CASE-Anweisung nicht begriffen, auch möglich.....


----------



## dalbi (18 September 2010)

Hi,



derwestermann schrieb:


> Nun, Du hast aber, meiner Ansicht nach, mit der CASE-Anweisung noch nicht mal die Lösung für die Schwellwert-Umschaltung.
> Oder ICH habe die CASE-Anweisung nicht begriffen, auch möglich.....



da hast Du vollkommen recht.  Das geht so nicht.

Richtig wäre:

```
CASE Durchfluss OF
  0..159 :  (* Zuschaltung Pumpe 1 *)

160..319 :  (* Zuschaltung Pumpe 2 *)

320..479 :  (* Zuschaltung Pumpe 3 *)

480..600 :  (* Zuschaltung Pumpe 4 *)
END_CASE
```

Gruss Daniel


----------



## IndraMagic (21 September 2010)

Ja stimmt, bei meiner Lösung würde man erst in den Schritt z.B. 160 erst hereinkommen wenn die 160 durchlaufen wird.

 

Habe ich dann beim ausprobieren auch gemerkt.


----------



## Pietpinguin (21 September 2010)

Hallo!

Vielleicht folgender Denkanstoß:
Nenne die Schwellen nicht Pumpe 1, Pumpe 2 usw., sondern Zuschaltung 1. Pumpe, Zuschaltung 2. Pumpe, ....usw.
Welche von deinen vier Pumpen nun die 1.,2.,3. und 4. ist, erledigst Du über Vergleicher mit den Betriebsstunden untereinander. Das heißt für jede Pumpe gibt es vier boolsche Variablen (Pumpe 1=1.Pumpe, Pumpe1=2.Pumpe,....) Der Vergleich über die Betriebsstunden sollte evtl. nur bei Anforderung einer weiteren Pumpe durchgeführt werden. Da es sonst zu Umschaltungen der Pumpen während des Betriebes kommen kann.

[Klugscheissmodus ON]_In ST könnte ich sowas übrigens auch nicht programmieren._ In FUP relativ einfach und für jeden nachvollziehbar.​[Klugscheissmodus OFF]

Viel Spaß!


----------



## JOHKU (22 September 2010)

Hallo

Sowas nennt man Aggregate Umschaltung  und in Prozessleitsystemen gibt es fertige Bausteine dafür. Allerdings ist man mittlerweile auf den Trichter gekommen dass der  gleichmäßige Verschleiß von Aggregaten unvorteilhaft ist da beim Ausfall eines Aggregats das Reserveaggregat sich in einem genauso bescheidenen Zustand befindet. Also überlege Dir das mit den Betriebsstunden ganz genau.
Gruß


----------



## rheumakay (23 September 2010)

hallo indramagic,
würde es auch nicht mit "case" usw. machen.
Zum ansteuern der Pumpen einfach den Baustein "Hysteresis" oder "Limitalarm" nehmen.
Für die Umschaltung der Pumpen zunächst einmal einen Betriebsstundenzähler bauen .
Wie schon geschrieben , sehe ich das auch so, dass gleichmäßige Pumpenbetriebsstunden in einer Anlage unvorteilhaft sind.
Vielleicht hauptsächlich nur eine Pumpe benutzen, alle anderen nur hin und wieder anlaufen lassen (sitzen sonst fest - Wasserstein).
Hoffe ich konnte dir helfen.


----------



## Heinz (23 September 2010)

Hallo,
ich würde folgendes machen:

Die Sollwerte müssen eine gewisse Zeit zum Starten überschritten sein.
Beim Ausschalten müssen die Sollwerte eine Zeit unterschritten sein. Das ganze mit Hysterese.

Aus Ausbaustufe je nach Schaltspiele, eine feste Pumpenfolge, die sich im Zeitraster ändert oder die Pumpen werden Laufzeitabhängig ein oder ausgeschaltet werden.


----------



## GLT (23 September 2010)

Die Anlage des TEs wird nicht umsonst 4 Pumpen (Leistungsstufen)  enthalten - da diese wohl im Aussetzbetrieb betrieben werden, macht es  durchaus Sinn, die Pumpen im Rotationsbetrieb und FIFO vor Überlastung  zu bewahren.



JOHKU schrieb:


> Sowas nennt man Aggregate Umschaltung  und in Prozessleitsystemen gibt es fertige Bausteine dafür. Allerdings ist man mittlerweile auf den Trichter gekommen dass der  gleichmäßige Verschleiß von Aggregaten unvorteilhaft ist da beim Ausfall eines Aggregats das Reserveaggregat sich in einem genauso bescheidenen Zustand befindet. Also überlege Dir das mit den Betriebsstunden ganz genau.



Anlagen(teile) wurden für den Betrieb konstruiert - nicht dafür, dass sie sich "totstehen" - davon werden sie keinesfalls besser.


----------



## Pepper (30 September 2010)

> Mein Problem liegt aber jetzt darin, denn ich muss diese 4 Pumpen je  nach Betriebszeit d.h. Betriebsstundenzähler (habe ich schon gelöst)  über einen Vergleich welche Pumpe die niedrigste Zeit in Betrieb war  nacheinander über die Schaltschwellen vom Durchfluss zuzuschalten und  wer die höchste Betriebsstunden hat nach dem Druchfluss wieder  abzuschalten.


Hallo IndraMagic,

ich habe mal ein ähnliches Projekt realisiert. Dabei ging es um die lastabhängige Zuschaltung von Wärmepumpen. Die sollten auch je nach Betriebsstunden angesteuert werden.

Da du schon einen Beriebsstundenzähler hast und auch die lastabhängige zuschaltung der Pumpen, versuch ich dir mal zu erklären wie ich das gelöst habe.

Ich habe mir einfach eine Datenstruktur erstellt (z.B. Name_Pumpe:String, Betriebsstunden:INT, aktuelle_Betriebszeit:TIME, Pumpe_an:BOOL) und diese in einem Array1[1..4] deklariert.

Dann habe ich eine zweite Datenstruktur erstellt (z.B. Pumpennr:INT, Betriebsstunden:INT) und dies ebenfalls als Array2[1..4] deklariert. Die Startwerte für die Pumpennr sollten wie der Index 1-4 sein.

Ich nehme mal an, dass du vier boolische Ausgänge für deine vier Pumpen(zum ansteuern) hast. 

Wenn du jetzt die aktuelle_Betriebszeit in das erste Array speicherst und 
und jedesmal wenn die Pumpe ausgeht addierst du die Zeit zu den Betriebsstunden(auch im ersten Array) dazu. 

Jetzt überträgst du einfach (jedesmal wenn eine Pumpe ausgeht) die Daten(Betriebsstunden) vom ersten Array in das zweite Array und sortierst dieses dann mit einer Bubblesort-Funktion(die Pumpennr immer mit umschreiben beim sortieren). Jetzt hast du die Pumpe mit der niedrigsten/höchsten Betriebszeit in der ersten Spalte deines zweiten Arrays. 

Wenn du jetzt bei deinen Boolischen Ausgängen das erste Array (Array1[Array2.Pumpennr].Pumpe_an ) mit dem zweiten Array als Index benutzt, hast du immer die Pumpe mit der niedrigsten/höchsten Betriebszeit als erstes. 

Ich hoffe das du einigermaßen verstanden hast was ich damit meine .
(Bin leider nicht so gut im Erklären)

Gruß Pepper


----------



## Heinz (4 Oktober 2010)

GLT schrieb:


> Die Anlage des TEs wird nicht umsonst 4 Pumpen (Leistungsstufen)  enthalten - da diese wohl im Aussetzbetrieb betrieben werden, macht es  durchaus Sinn, die Pumpen im Rotationsbetrieb und FIFO vor Überlastung  zu bewahren.
> 
> 
> 
> Anlagen(teile) wurden für den Betrieb konstruiert - nicht dafür, dass sie sich "totstehen" - davon werden sie keinesfalls besser.



Die Frage war, laufen die Pumpen in der Regel 10 min oder 10 Tage.
Bei 10 Minuten würde ich eine feste Pumpenfolge wählen, bei 10 Tagen eine dynamische.


----------

