Step 7 Mehrsequenz Regler erstellen

Midav

Level-1
Beiträge
30
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo liebe Mitglieder

ich habe hin und wieder Lüftungsanlagen mit Mehrsequenzregelung

Das habe ich bis jetzt mit einem speziell dafür bestellten und
konfigurierten Hardware Regler gemacht.

Wollte das aber eventuell mit einer S7 ( Step 7 V.5 oder Tia Portal )
mal machen.

Also Heizen zuerst mit einer Wärmerückgewinnung ( Wärmerad oder Kreuzstromtauscher mit Klappe ) Ansteuerung 0-10V

wenn das nicht reicht kommt eine Wärmepumpe dazu mit 0-10V ( diese kann dann auch Kühlen mit Umschaltkontakt )

und wenn das noch nicht reicht regelt ein Regelventil 0-10V einWarmwassrregister auf.

In Richtung kälter dann umgedreht: zuerst das Heizregisterzurückregeln, dann die Wärmepumpe zurückregeln

und zu guter letzt dann die Wärmerückgewinnung zurückregeln.

Wenn Zuluft dann immer noch zu Warm arbeitet die Wärmepumpe in Kühlfunktion

Heizen und Kühlen habe ich schon mit der SPS gemacht kein Problem.

Aber wo ich zur Zeit an die Grenzen stoße ist bei dem Aufbau von der
mehrsequentigen Heizregelung

wo ich ja in der Reihenfolge die 3 Heizeinrichtungen aufregeln und auch
wieder umgekehrt zuregeln muss

( Rückmeldekontakte sind vorhanden ansonsten Auswertung der 0 und 10V )

Siemens hat da wenig Beispiele die passen, hat so was jemand schon mal
gemacht ??


 
Servus,
Das ist leichter wie gedacht einfach deinen regler Ausgangsgrenzen von dir statt nur von 0-100% Regeln
Auf das Limit von 0-300 % einstellen.
Dann einen sequenzaufteiler selber bauen:
0-100% erstes Heizelement 0-100%
100-200% zweites Heizelement 0-100%
200-300% drites Heizelement 0-100%

Du kannst den reglerausgang auch auf 400% stellen dann könntest wenn du die erste Sequenz investierst als kuhlansteuerung benutzen.
Sowas wird tatsächlich eingebaut teilweise mit Todzone zwischen heizen und kühlen oder auch ohne
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich mache das normalerweise mit einer Integer-Variable die die aktuell aktive Sequenz angibt. Ist eine Sequenz am oberen / unteren Limit, dann schaltet sie auf die nächste / vorige Sequenz. Ist die Sequenz nicht die aktive, dann wird der Regler fest auf auf den passenden Wert gesetzt. Bei der WRG mache ich eine Umschaltung der Regelrichtung je nach dem ob ich damit heizen oder kühlen kann. Das lässt sich damit relativ modular aufbauen, je nachdem ob deine konkrete Anlage eine bestimmte Sequenz besitzt oder nicht.
 
Hallo, die Möglichkeit mit der Sequenzaufteilung ist auch gut,
gibt es dafür eventuell schon fertige Funktionen, habe in diesem Bereich wenig Erfahrung
 
Den Regler belassen wie er ist und mit SplitRange (Technologie->Hilfsfunktionen) die Bereiche zuordnen, das wäre der von Siemens vorgeschlagene Weg, sofern man mit TIA arbeiten möchte.

Habe ich bereits mehrfach gemacht in Lüftungsanlagen, dazu benötigt man jeweils einen SplitRange:
Wärmerückgewinnung 0-48%
Gasbrenner/Heizregister 52-100%

Den Bereich dazwischen lasse ich gern als Puffer übrig, kommt aber auf die Anlage an.
Funktioniert ziemlich gut.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hab mal schnell was getippt in AWL.
Am besten ist es wenn du dir selbst den Baustein schreibst damit bist du sehr flexibel und versteht die Hintergründe leichter:

Code:
     L     #Regler_wert                //Reglerausgang 0-300%
      T     #Regler_Split               // Angepasster Reglerwert für Sequenzen
      L     1.000000e+000               // Faktor für Todzone Sequenz1/2
      *R    
      T     #Sequenz1
      L     0.000000e+000
      >=R   
      SPB   max1
      L     0.000000e+000
      T     #Sequenz1


max1: L     #Sequenz1
      L     1.000000e+002
      <=R   
      SPB   ok1
      L     1.000000e+002
      T     #Sequenz1


ok1:  L     #Regler_Split
      L     1.000000e+002
      -R    
      T     #Regler_Split


// Sequenz 2

  L     #Regler_Split
      L     1.000000e+000               // Faktor für Todzone Sequenz1/2
      *R    
      T     #Sequenz2
      L     0.000000e+000
      >=R   
      SPB   max2
      L     0.000000e+000
      T     #Sequenz2


max2: L    #Sequenz2
      L     1.000000e+002
      <=R   
      SPB   ok2
      L     1.000000e+002
      T     #Sequenz2


ok2:  L     #Regler_Split
      L     1.000000e+002
      -R    
      T     #Regler_Split

// Sequenz 3 und so weiter gleiches Schema
 
Den Regler belassen wie er ist und mit SplitRange (Technologie->Hilfsfunktionen) die Bereiche zuordnen, das wäre der von Siemens vorgeschlagene Weg, sofern man mit TIA arbeiten möchte.
Das funktioniert aber nur sehr eingeschränkt. Wie willst du dann die Reglerparameter voneinander unabhängig einstellen?
Je nach Anlage sind zwischen Heizen / WRG / Kühlen völlig andere Zeitkonstanten vorhanden. Beim Heizregister hast du dann üblicherweise überlagert noch einen Min-Temp. Begrenzungsregler, bei der WRG überlagert einen Vereisungsschutz. Das lässt sich meiner Meinung nach nur schwer in einen einzigen Regler vereinen, und modular ist dann auch nichts mehr.
 
Man kann sich ja den Sequenzwert einteilen wie man will z. B. 0-90 WRG 90 - 230 1 Heizregister 230 bis 300 Nachheizregister. Wir reden immer nu von einer lüftungsanlage da spielt zeit eh keine so große Rolle 0,5 k Schwankungen in der Zuluft seh ich als normal an. Da die Ventile eh alle viel zu groß im Normalfall ausgelegt sind.

Min Temperaturregler wirken im Normalfall nur auf das 1 heizregister also Sequenz wert + min Temperaturregler addieren dann Ventil sollwert.
Verweisungsschutz kommt auf die Umsetzung drauf an
Wenn druckschalter dann einfach WRG zu Sollwert 0
Wenn druckmessumformer dann vom Sequenzwert vereisungsschutzreglerwert abziehen
Bei Tempertur Minus 1 ° Celsius fortluft gleiche Lösung wie oben.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich bin kein Freund von diesen Lösungen mit hier nochmal was addieren, da nochmal abziehen und noch einen Pi mal Daumen Faktor drauf. Wenn du bei deiner Aufteilung an einer Schraube drehst, dann beeinflusst du damit auch alle anderen Regelkreise. Aber muss jeder wissen womit er besser fährt.
 
1. Ich bin kein Freund von diesen Lösungen mit hier nochmal was addieren, da nochmal abziehen und noch einen Pi mal Daumen Faktor drauf.
2. Wenn du bei deiner Aufteilung an einer Schraube drehst, dann beeinflusst du damit auch ...
3. ...alle anderen Regelkreise.
Zu 1. und 2.:
volle Zustimmung.
Zu 3.:
leichte Verwirrung. Andere Regelkreise? Habe ich die Aufgabenstellung falsch verstanden?
Ich habe sie so verstanden: wenn der erste Teil der Sequenz "ausgereizt" ist, wird der zweite Teil dazugeschaltet und der Regler wirkt nun auf diesen, während der erste Teil mit 100% seiner Leistung weiter zum Ergebnis beiträgt. Wenn der zweite Teil nicht mehr ausreicht, wird der dritte dazu genommen u.s.w..
Wenn z.B. der erste Teil seinen Beitrag nicht mehr zu 100% erbringen kann, wirkt sich dies auf den Istwert aus, so dass der Regler "nachregelt" und vom zweiten Teil mehr Beitrag anfordert.
Ein Regler, dessen Stellgrösse auf mehrere "Aktoren" aufgeteilt wird. Unterschiede bei diesen verschiedenen "Aktoren" legen vielleicht Nahe, die ReglerParameter, mit dem jeweils aktiven Teil umzuschalten, aber es bleibt 1 Regler bzw. Regelkreis. :confused:
 
Zu 3.:
leichte Verwirrung. Andere Regelkreise? Habe ich die Aufgabenstellung falsch verstanden?
Ich habe sie so verstanden: wenn der erste Teil der Sequenz "ausgereizt" ist, wird der zweite Teil dazugeschaltet und der Regler wirkt nun auf diesen, während der erste Teil mit 100% seiner Leistung weiter zum Ergebnis beiträgt. Wenn der zweite Teil nicht mehr ausreicht, wird der dritte dazu genommen u.s.w..
Mit "Andere Regelkreise" war die Beeinflussung gemeint, wenn über diese Split-Regler--Umrechnung die Aufteilung wie vorgeschlagen geändert wird. Wenn du die Reglerparameter am Regler selber gleich lässt, dann wird durch die Änderung der Aufteilung an allen anderen Seqeuenzen der P-Anteil mit geändert.

Du kannst bestimmt alles irgendwie mit einem einzigen Regler (zumindest für die Haupt-Regler der einzelnen Sequenzen) programmieren, in dem du da einen Haufen Umschaltungen drumherum programmierst. Ich habe bei mir abgeschlossene Sequenzmodule die ich zu einer Lüftungsanlage je nach Variante zusammensetzen kann wie einen Baukasten. Wenn es zu erst eine Lüftungsanlage ohne Kühler gab und es soll einer hinzukommen, dann füge ich die Kühlersequenz hinten an, sage der WRG Sequenz dass es noch eine weitere gibt und ich bin fertig.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Nicht irgendwie, sondern ganz einfach.
Man nehme einfach die SplitRange, die nix anderes als eine Umskalierung ist, und derjenige der aktiv ist wird z.B. per Move (bei mir übernimmt die gesamte Splittung ein FB) verschiedene PID-Parameter für den entsprechenden Teil an den Regler weitergibt.

Man könnte aber ja auch, wenn man es unbedingt getrennt haben will, jedem Gerät einen Regler zuordnen und diese einfach miteinander verschalten.
 
1. Wenn du die Reglerparameter am Regler selber gleich lässt, dann wird durch die Änderung der Aufteilung an allen anderen Sequenzen der P-Anteil mit geändert.
2. Ich habe bei mir abgeschlossene Sequenzmodule die ich zu einer Lüftungsanlage je nach Variante zusammensetzen kann wie einen Baukasten. Wenn es zu erst eine Lüftungsanlage ohne Kühler gab und es soll einer hinzukommen, dann füge ich die Kühlersequenz hinten an, sage der WRG Sequenz dass es noch eine weitere gibt und ich bin fertig.
Zu 2.: :s12:

Zu 1.: Ja, ich denke, so kann man es sagen, wenn es auch auf den ersten Blick "zu einfach" erscheint. Es kommt sozusagen ein zweiter, umschaltbarer P-Anteil hinzu, der auch die Auswirkungen von D- und I-Anteil entsprechend verstärkt, der aber die ZeitKonstanten der Regler-Parametrierung nicht beeinflusst.

In Anlehnung an Onkel Dagoberts Beitrag in Tank PID-Controller, habe ich mir mal folgendes überlegt:
Code:
// Mit Ausgang des Reglers 0.0 < #X < 100.0 und den Übergangswerten rConstX (mit X = 1..n) zwischen 
// den Abschnitten der Sequenz 0.0 = rConst0 < rConst1 < rConst2 < rConst3 = rConstH = 100.0 werden
// die Split-Ergebnisse zu 0.0 < roValueN < 100.0
// 
roValue1 := rConstH / (rConst1 - rConst0) * (LIMIT(MN := rConst0, IN := #X, MX := rConst1) - rConst0) ; // 0.0 < roValue1 < 100.0 
roValue2 := rConstH / (rConst2 - rConst1) * (LIMIT(MN := rConst1, IN := #X, MX := rConst2) - rConst1) ; // 0.0 < roValue2 < 100.0 
roValue3 := rConstH / (rConst3 - rConst2) * (LIMIT(MN := rConst2, IN := #X, MX := rConst3) - rConst2) ; // 0.0 < roValue3 < 100.0 
//
// Die Terme '- rConst0' sind natürlich überflüssig, aber mit ihnen ist der gleiche Aufbau der Zeilen sofort sichtbar.
// rConst3 und rConstH sind hier gleich. Würde noch eine Zeile mit rConst4 hinzugefügt, so muss rConst4 = rContH werden, 
// also 0.0 = rConst0 < rConst1 < rConst2 < rConst3 < rConst4 = rConstH = 100.0
 
Dann die Ranges jeweils normieren und die normierten Werte als Eingang für weitere Regler benutzen, die jeweils eigene Parameter haben.
 
Zurück
Oben