Step 7 Problem bei Programmablauf mit einem externen Heizungsregler

Surface

Level-1
Beiträge
1
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Guten Abend,

ich bin ganz frisch hier, und wollte erstmal kurz etwas zu mir schreiben...
Ich bin 23 Jahre alt und bin eigentlich Elektroniker für Energie- und Gebäudetechnik, inzwischen aber nur noch Schaltschrankbauer und schreibe ab und zu mal kleinere Programme. Ich bevorzuge bei der Programmierung AWL

Wir setzen grundsätzlich nur Siemens SPS ein, mit der Hardware bin ich vertraut.

Mit Step 7, WinCC flexible und TIA Portal bin ich ebenfalls vertraut.

Zu meinem Problem, in der Regel realisieren wir unsere Heizungsregelung über die SPS, jetzt haben wir ein neues Projekt, wo unbedingt ein externes Temperaturregelgerät eingesetzt werden soll.

Bei diesem Gerät handelt es sich um ein Feller FP16 Heizungsregler mit Profibus Schnittstelle.
Soweit so gut, mit Profibus hatte ich bisher noch keine Schwierigkeiten, aber bei diesem Regler scheint es nicht ganz so einfach zu sein.

Hier mal ein Beispiel wie der Hersteller die Kommunikation zwischen SPS und Regler angibt:

Der Busmaster is hier die SPS.
Der Busmaster möchte die Istwerte der Zonen 9..16 lesen:


  1. aKonsistenz auf 0 setzen
  2. aAktion auf 1 (es soll gelesen werden)
  3. aGruppe auf 2 (Zonen 9..16 anfordern)
  4. aKennung auf 254 (Die Istwerte Anfordern)
  5. aKonsistenz auf 255 setzen (alle 8 bits = 1)
  6. Warten bis eGruppe = aGruppe = 2 ist
  7. Warten bis eKennung = aKennung = 254 ist
  8. Warten bis bit0 von eKonsistenz gesetzt ist
  9. Jetzt können von eDatenwort1 .. eDatenwort8 die
    gewünschten Istwerte der Zonen 9..16 gelesen werden.

Der Busmaster möchte den Sollwert der Zone 20 auf 300°C setzen. Alle anderen Sollwertesollen dabei nicht verändert werden.


1. aKonsistenz auf 0 setzen
2. aAktion auf 2 setzen (es soll geschrieben werden)
3. aGruppe auf 3 setzen (Zone 20 ist die 4. Zone innerhalb Gruppe 3)
4. aKennung auf 0 setzen (Parameter 0=Sollwert)
5. aDatenwort4 auf 300 setzen (Byte 10= 44, Byte 11 = 1. LO-Byte first beachten !)aKonsisitenz auf binär 00001000 = 8 setzen. Damit wird nur Datenwort 4 gültigWarten, bis eGruppe = aGruppe = 3 ist
6. Warten, bis eKennung = aKennung = 0 ist
7. Warten, bis bit0 von eKonsistenz gesetzt ist.
8. Ist eAktion = 3 ? Dann wurde der Wert übernommen.
9. Bei eAktion=4 hätte eine Bereichsüberschreitung stattgefunden

10. Bei eDatenwort4 kann der neue Sollwert bereits als Kontrolle wieder ausgelesen werden.



Insgesamt habe ich 30 Zonen.
Die Zonen und PID Parameter werden über ein TP in mehrere Datenbanken geschrieben.

Leider konnte mir der Support bei Feller Engineering auch nicht weiterhelfen aufgrund mangelndem Step 7 Wissen.

Mein Problem ist, ich weis nicht wirklich wie ich diesen Ablauf für die 30 Zonen programmieren soll. Es soll die Temperatur gelesen sowie 30 mal die Temperatur geschrieben werden, dazu kommen noch die Parameter des Reglers selbst und der Zonenstatus der ganz wichtig ist für weitere Verriegelungen. Das ganze soll nicht einmal passieren sondern so schnell und oft wie es möglich ist. Das einzige was mir der Support sagen konnte war, dass es mit einer Art State machine (Zustandsautomat) realisierbar sein soll. Ein Beispiel Projekt gibt es leider nicht.

Ich hoffe jemand kann mir hierbei Helfen.

Vielen Dank schonmal und schönen Abend noch.
;)
Grüße Surface
 
Hallo,

den Heizungsregler kenn ich nicht, vielleicht aber trotzdem ein paar Gedanken zur Abarbeitung:

Als 1. würde ich wohl eine Art Managementbaustein schreiben. Der kennt den aktuellen Status der Kommunikation mit dem Regler und nimm die einzelnen Aufträge entgegen (Werte lesen, Sollwerte setzen, ...). Die einzelnen Komm.-aktionen, wie von Feller beschrieben, können ja dann von Unterbausteinen abgewickelt werden.

Die Aufträge selbst sollten in verschiedene Prioritäten eingeordnet werden. Istwerte lesen hat dabei meiner Meinung nach die niedrigste, Parameter/Sollwerte setzen die höchste. Parameter und Sollwerte setzt Du ja wahrscheinlich nicht ständig neu, sollte also mit hoher Priorität gesetzt werden und fertig. Ich weiß nicht, wie schnell sich die Istwerte ändern, brauchen vermutlich aber auch nur aller paar Sekunden gelesen werden. Bleibt also nur der Status übrig, der dann in der restlichen Zeit ständig und so schnell wie möglich gelesen wird.

Davon unabhängig solltest Du aber mal testweise so ein Teil anschließen und einfach zyklisch den Status aller 30 Zonen vom Regler abholen. Dann siehst Du ja die maximal erreichbare Aktualisierungszeit und kannst hoffentlich einschätzen, ob die für Euren Prozess überhaupt ausreicht. Wenn nicht, wirst Du Dich wohl nach einem anderen Regler umsehen oder mehrere einsetzen müssen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Also so schwierig scheint das nicht.
Die Beschreibung ist doch recht gut.

Wie der Herr Rose schreibt, einfach mal ausprobieren.
Ich vermute mal, dass es sich um Heizzonen an einem Extruder handelt.

Also ist das ganze weniger zeitkritisch.
 
Sinnvoll ist, sich wie oben beschrieben einen Managementbaustein zu schreiben, der die Funktionalität für eine Zone abbildet und den dann auf die anderen 30 auszudehnen.
Ich mache solche Sachen meistens mit einem Zähler, der dann den nächsten Satz "füttert". Abfragen kannst du ja, ob zum Schluss mit eAktion = 3 beendet wurde und die Kette dann wieder mit dem nächsten Satz neu starten.

Bei solchen Aufgaben solltest du peinlich genau darauf achten, dass sich keine Aufträge überschneiden. Du könntest z.B. nach dem Lesen oder Schreiben eines oder mehrerer Datensätze ein Fenster einräumen und schauen, ob es einen "asynchronen" Auftrag gibt. Gibt es einen, wird dieser "eingeschoben", gibt es keinen, geht es mit dem nächsten Datensatz weiter.
 
@Surface:
Im Grunde ist es so, wie meine Vorredner es schon dargestellt haben. Die kurze Beschreibung, die du gepostet hast, gibt eigentlich alles wieder. Es ist aber nicht trivial in der Umsetzung, da hier im weiteren Sinne ja auch eine Art Protokoll gefahren wird/werden soll.
Du hast als erstes mal einen Koppelbereich zu dem Regler aus dem du Informationen erhältst und in den du Informationen/Kommandos hineinschreibst. Den solltest du zyklisch aktualisieren. Darauf reagieren würde nun die genannte Statemaschine (Schrittkette), die dann etwas auslößt und dann in dem Schritt solange verharrt bis die entsprechende Antwort kommt. Du solltest ggf. überlegen, ob du das nicht in SCL umsetzen möchtest da das (aus meiner Sicht) dann lesbarer und beherrschbarer wird.

Du darfst hier auf keinen Fall versuchen, alles zu einem Ding zusammenfassen zu wollen ...

Gruß
Larry
 
Zurück
Oben