Temperatursteuerung für Tankfarm

franciscator.

Level-1
Beiträge
7
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Guten Tag zusammen.

Ich beschäftige mich seit einiger Zeit mit SPS-Programmierung, konkret Programmieren mit SCL im TIA-Portal.
Hardwaremäßig benutze ich eine CPU 1513 PN mit einer ET200SP, visualisiert wird mit einem KTP700 Basic HMI, allerdings alles noch nicht vor Ort, es geht primär mal darum, ein grundsätzlich funktionierendes Programm und eine saubere Visualisierung zu erstellen.

Zu meinem Projekt:

folgender Aufbau ist gegeben:
Eine Tankfarm (18 Tanks á 10 l) sind JEWEILS mit einem PT100 als Temperatursensor, einer kleinen Zirkulationspumpe, sowie 4 Magnetventilen (Vorlauf/Rücklauf-Kaltwasser und Vorlauf/Rücklauf-Heißwasser) ausgestattet.
Jeder Tank wird über einen Mantel temperiert, "hinter den Tanks" laufen die Hauptzirkulationskreisläufe mit Kalt- und Heisswasser, sind aber von der Automatisierung NICHT betroffen, da wir die Kälteanlage auch für andere Abteilungen verwenden, das Heizthermostat mit großer Warscheinlichkeit auch.

folgende Programmstruktur ist angedacht:

Der Grundsätzliche Betrieb soll in Hand oder Automatik erfolgen können. Im Handbetrieb soll über das Panel eine Solltemperatur eingestellt werden, die Temperatur wird solange geregelt, bis der Handmodus wieder beendet wird. (Wird der Tank gar nicht betrieben, hätte ich das über einen Freigabemerker gelöst, damit sich der Tank nicht dauerhaft versucht zu regeln).
Dementsprechend 2 UP, eines für den Handbetrieb (realisiert durch AktionsNr-Array im Global-DB), eines für die Schrittkette (realisiert durch Case-Anweisung und Schritt-Array im gleichen DB). 2 Funktionen, HEAT & COOL, welche bei ON-Ansteuerung die zugehörogen Ventile öffnen.
Jetzt zu meinem größten Fragezeichen: für mich als Anfänger ist die Steuerung durch Magnetventile ein unstetiger Regler, daher ein klassischer Fall für eine Zweipunktregelung. Allerdings wurde nun angetragen, dass ein PID-Regler gewünscht wäre, ich habe mir nun erlesen, dass dies mit nachgeschalteter PWM auch möglich ist. Dementsprechend würde meine Wahl auf den Siemens-Baustein PID_Temp fallen, da dieser wohl über die Spezifikationen verfügt. Das Problem, das ich habe, ist, dass ich nicht weiß, wie der Baustein zu programmieren ist.
- irgendwelche grundsätzliche Zweifel an der Eignung des Bausteins für meinen Einsatzzweck?
- WO muss ich den Baustein einsetzen? Ich habe bei meinen Übungen bisher nur Regelsysteme pro Einheit gesehen, aber brauche ich wirklich 18 Bausteinaufrufe im Cyclic interrupt (also für jeden Tank), in dem der Regler aufgerufen und Parametriert wird? Ich habe leider so wenig Erfahrung, dass mir da einfach die Vorstellung einer sauberen Struktur fehlt.


Eine weitere Frage wäre noch nebenbei: Gibt es keine Möglichkeit meine Globalen Variablen schneller einzutragen in meine PLC-Variablentabelle? Ich hätte gedacht, einen Datentyp "Tank" zu erstellen, der dann alle Parameter eines Tanks enthält (M_Zulauf_H, M_Rücklauf_H, M_Zulauf_K, M_Rücklauf_K, Q_Pumpe, B_Temp). Allerdings wenn ich in meiner Standardvariablentabelle als Datentyp "Tank" auswähle, adressiert er sämtliche Parameter als Eingänge. Dabei brauche ich die Pumpe als Q.
Falls es hierfür keine Lösung gibt, müsste ich 72! Magnetventile, 18 Pumpen, und 18 Sensoren einzeln deklarieren?


Viel Fragerei für den Anfang, ich hoffe ich habe euch einigermaßen nahegelegt, wo meine Probleme liegen und freue mich auf eure Tipps! :)


Beste Grüße,


Franze
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Nein ... sicher nicht. Aber es liesst nicht immer jeder Alles und manchmal weiß man auch nicht so ad-hoc eine Antwort auf etwas.
So gesehen ist es also richtig, eine unbeantwortete Frage so ab und an mal wieder "hoch zu holen" ...

Ob ein PID-Regler für eine Ventil an/aus-Geschichte sinnvoll ist (vor Allem mit PWM) wage ich zu bezweifeln. Ich könnte mir hier gut vorstellen, dass der Lebensdauer dieser Ventile hier massiv entgegen gewirkt wird.

Ich würde mir einen Tank-FB bauen, der die benötigten IN's aufnimmt und die OUT's ausgibt und diesen 18 mal verwenden.
Das mit deinem Datentyp könnte auch gehen - dann aber als IN_OUT. Wobei du diesen ja auch irgendwo wieder zuweisen müßtest ...

Habe ich noch etwas übersehen ...?

Gruß
Larry
 
Hallo Larry,

du hast mir schon weitergeholfen. Ich habe mir, wie du das auch vorschlägst, einen "Modell-FB" erstellt, über den ich dann auch meine Visualisierung anbinde.
Nur nochmal meine Frage: Den Reglerbaustein kann ich, wenn ich die In/Outputs auf mein Programm parametriere, einfach alle im Cyclic interrupt anlegen, weil der das Main-Programm sowieso in der vorgegebenen Zykluszeit unterbricht oder? Oder würdest du auch die Regler-Aufgabe mit in den Tank FB nehmen.

Ich werde auch das Regelproblem nochmal ansprechen, vielleicht wird es dann doch ein Zweipunktregler.

Ansonsten besten Dank schonmal, dann bin ich ja gar nicht so falsch mit meinen ersten Ideen :)
 
Einen 2-Punkt-Regler würde ich auf alle Fälle mit in den FB/die Instanz hineinnehmen. Bei einem PID ginge es prinzipiell auch - du hast ihn (deinen FB) dann nur nicht mehr im zyklischen Programm ...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Larry und alle anderen,

ich würde mich nochmal mit einer kurzen Frage an euch wenden.

Ich würde meinen aktuellen Programmaufbau nochmal kurz beschreiben:
Ich habe mir einen FB gebaut, der später 18 mal im Main aufgerufen auf einen Global-DB parametriert werden soll, der die Werte, welche über das HMI eingegeben werden (Zeiten und Temperaturen der einzelnen Phasen), beinhaltet.
Der FB beinhaltet einen HAND und einen AUTO-Modus, der Auto-Modus wurde mit einer Case-Anweisung realsiert, die jeweils sobald der zuständige Timer eine Ausgabe gibt, die Schrittnummer um +1 erhöht. In den einzelnen Schritten wird eigentlich nur der zuehörige (eingegebene) Temperaturwert als OUTPUT "Sollwert" ausgegeben.
Dieser Sollwert (18 Instanzen dieses FB im Main) soll nun auf die 18-Reglerbausteine im Cyclic Interrupt als Setpoint gesetzt werden, und dementsprechend die Regelung der Temperatur erfolgen.
Mein Problem:
HAND-Modus bedeutet für mich, dass ich jeden Aktor von Hand anwählen kann, der Regler soll in diesem Modus nichts mehr regeln. Gibt es hier einen "Platzhalter", dem ich im FB meinem Sollwert zuweise, bei dem der Regler dann einfach keinen Sollwert mehr erhält. Primitiv beschrieben hatte ich vor einiger Zeit bei einer Datenauswertung mit Excel mal das problem, dass mir einzelne werte gefehlt haben, und durch "nV()" (oder so ähnlich) konnte ich excel klarmachen, dass er diese zelle einfach nicht berücksichtigt. Das wäre meine Idee, das zu lösen, über andere Lösungsvorschläge wäre ich aber auch schon dankbar!

Vielen vielen Dank auch schonmal für die Hilfestellung bisher,
das hat auf jeden Fall geholfen!


Grüße,

Franze
 
Zurück
Oben