# Programmaufbau für Raumtemperturregelung mit vielen Räumen



## andreas-w211 (29 September 2021)

Hallo zusammen,

für eine Heizungssteuerung mit Einzelraum- Temperaturregelung brauche ich eine Strategie um die Programmierung mit Visuaisierung möglichst effizient umzusetzen. Die Temperaturen (PT1000, jeweils Luft- und Estrichtemp.) der ca. 50 Räume werden durch Multiplexer erfasst. Die Stellantriebe der FBH werden von der SPS direkt angesteuert. Als Steuerung kommt ein Wago PFC100 mit e!COCKPIT als Programmiersoftware zum Einsatz. Je Nutzungseinheit (umfasst 4 bis 6 Räume) werden die Soll- Raumtemperaturen durch ein Webpanel vorgegeben und die Istwerte angezeigt. 
Für eine Nutzungseinheit habe ich ein Programm und eine Visualisierung erstellt welches gut funktioniert. Das Programm ist aktuell sehr einfach und soll später über weitere Funktionen (z.B. Nachtabsenkung) erweitert werden. Ich habe zwar schon ein paar SPS- Programme erstellt, welche auch alle so funktionieren wie ich es mir vorgestellt habe, gelernt habe ich das Programmieren von Grund auf aber nie und brauche es auch nicht täglich.
Ich erstelle die Programme immer mit Funktionsbausteinen (bzw. CFC), da mir die grafische Darstellung sehr hilft. Bisher hatte ich jedoch keinen Fall, wo eine Funktion so häufig benötigt wird. 
Wie kann ich am besten damit umgehen? Wenn ich den bereits erstellten Funtionsbaustein für die Regelung eines Raums über 50 mal einfüge und mit den entsprechenden Ein- und Ausgängen versehe ist dies sehr Zeitraubend und bei Änderungen immer aufwändig.
Ich stelle mir vor die Variablen für einen Raum in einer Struktur (Datentyp) zu definieren, die Variable (1...50) wäre dann der entsprechende Raum.
Wie kann ich nun die vorhandene Funktion mehrfach nutzen? Geht das über Instanzen? Muss ich eine "Array of Struct" anlegen? 

Das gleiche gilt für die Visualisierung: Die einzelne Visualisierung für einen Raum würde ich als Frame einfügen und die definierten Schnittstellen müssten dann auf die jeweilige Struktur / Instanz zurückgreifen?

Eine weiteres bisher ungelöstes Problem: Die über die Visu eingestellten Sollwerte und Regelparameter sollen abgespeichert werden und auch bei Änderungen am Programm wiederhergestellt werden. Mit der Retain Persistant- Deklaration bleiben die Werte ja nur erhalten wenn sich das Programm nicht ändert (und beim OnlineChange). Hilft hier die Rezepturverwaltung weiter? Für alle zu speichernden Variablen in einem Rezept eine Rezeptur anlegen und das ganze dan auf der Speicherkanrte sichern. Wenn das Programm startet müsste die Rezeptur einmalig gelesen und dann in regelmäßigen Abständen geschrieben werden. Gibt es noch eine bessere Möglichkeit?

Vielen Dank,
Andreas


----------



## holgermaik (29 September 2021)

Hallo Andreas
Ich würde es über eine Struct lösen. Mache dir Gedanken was du als Eingänge, Ausgänge, ungespeicherte Variablen und gespeicherte Variablen brauchst. Definiere auch gleich spätere Erweiterungen oder setze Platzhalter. Den Struct dann übersichtlich Gliedern nach Variablen.
Ob man dann den Struct für die 50 Räume einzeln oder als Array definiert ist Geschmakssache. Übersichtlicher wird es als einzelne Definition mit aussagekräftigen Variablen.

Deine Regelung / Steuerung verpackst du in einen FB den du dann 50 mal aufrufen kannst. Hier bietet sich wahrscheinlich ST als Sprache besser an.

Deine Visu erstellst du als Frame. Für die Anbindung greifst du dann auf die Struct zu.

Speichern kannst du alles als Rezept oder Binärfile. Ich würde Binärfile vorziehen ist aber auch Geschmackssache.

Den Teil


andreas-w211 schrieb:


> und bei Änderungen immer aufwändig.


musst du mal ausführlicher Erläutern.
Den FB zu erweitern und auch den Struct ist nur an einer Stelle nötig. Allerdings verlierst du dann einen großteil deiner gespeicherten Daten.
Aus diesem Grund auch Erweiterung gleich mit berücksichtigen.

PS: Meiner Meinung nach ist es besser bei der Programmierung mehr Zeit und Aufwand zu investieren als über Pointer oder Ähnliches zwar kürzeren aber auch später schlecht verständlichen Code zu erzeugen.


----------



## andreas-w211 (5 Oktober 2021)

Hallo Holger,

gibt es gute Beispielprojekte oder für den Anfänger geeignete Anleitungen mit ähnlichen Lösungen? Mit Struct habe ich bisher nicht gearbeitet.
Die Visu als Frame sollte für mich lösbar sein. 
Die Speicherung als Rezept scheint mir sympatischer, hier muss ich aber auch noch lernen...


----------

