PID Regelung mit Codesys und Wago

T1000

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

Ich habe vor mit einem Heitzelement Metallgehäuse auf eine bestimmte Temperatur zu erwärmen und auf dieser Temperatur zu halten. Ich verwende eine Wago 750-881 mit einer PT 100 Eingangsklemme, dazu verwende ich die Wago Building_HVAC_01 lib. . Ich benutze den Baustein Fb_Control_PID_Adv.
Mein Problem: das Heitzelement wird mit einem Halbleiter Schütz angesteuert, das heißt nur ein oder aus. Der Baustein Fb_Control_PID_Adv gibt als Regelgrößen allerdings ein analoges REAL Signal aus. Ich habe versucht einfach mit REAL_TO_BOOl mein Schütz anzusteuern, geht zwar anfangs aber der Regler schalt das Schütz bei erreichen des soll werde nicht ab. Frage: wie bekomme ich das Schütz am besten angesteuert.?
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Der Baustein Fb_Control_PID_Adv gibt als Regelgrößen allerdings ein analoges REAL Signal aus.
Auf die Gefahr hin, Dein Weltbild zu zerstören: RealGrössen sind digital!

Ich habe versucht einfach mit REAL_TO_BOOl mein Schütz anzusteuern, geht zwar anfangs aber ...
Hierzu habe ich im WWW gefunden:
NOTE: The function converts strictly in accordance with IEC rules. Since this function has been realized as a generic function, there will also be a few illogical conversions, e.g. REAL_TO_BOOL.
When converting to BOOL, BYTE, WORD, the least significant bits of the input value are transferred to the output. A runtime error message is not given and ENO remains 1.

D.h. "der Vollständigkeit halber" sind auch diejenigen Umwandlungen realisiert, die mehr oder weniger "sinnfrei" sind. Das gilt insbesondere für die Wandlung von REAL in BOOL.
Immerhin hätten die Wandlungen aus einem GanzzahlFormat den Sinn, dass das Ergebnis angibt, ob die Zahl ungeradzahlig ist.
Ob sich jemand für niederwertigste Bit der Mantisse einer RealZahl interessieren könnte, wage ich eher zu bezweifeln.
Du bist also darauf hereingefallen, dass REAL_TO_BOOL zwar formal von REAL in BOOL wandelt, aber dennoch nicht annähernd das leistet, was Du erhofft hattest.

Gruss, Heinileini
 
Zuletzt bearbeitet:
Du kannst einen fertigen PWM-Baustein nehmen oder machst es "zu Fuß".

Die Reglerausgangsgröße skalierst Du wegen der Übersichtlichkeit auf 0...100%.
Dann wählst Du die Reglerzykluszeit entsprechend der Anwendung - sagen wir mal 10 Sekunden (thermische Trägheit usw.).
Als letztes rechnest Du die 100% Reglerausgangsgröße auf die Zykluszeit um - 100% sollten also den Beispielsweise 10s entsprechen.

Diesen Wert nimmst Du einfach als Einschaltzeit der Heizung per TOF.
Also Zeitwert setzen, der Zyklusbeginn triggert den TOF und der Regler bestimmt die Zeit.Fertig.

Im Ergebnis hast Du im gewälten Beispiel bei Reglerausgang 10% 1 s Heizung an und 9 sekunden Heizung aus.
Bei 40% entsprechend 4s an und 6s aus. Bei 100% Hast Du Dauersignal.

Das ganze lässt sich schön in einen Baustein packen, der zyklisch alle 10s aufgerufen wird. Arbeitest Du mit festen Zykluszeiten im Programm kannst Du einfach alle x Programmzyklen den Regler aufrufen. Hast Du variable Zykluszeiten nimmst Du entweder eine separate Task (meine allerletzte Wahl!) oder rufst den Baustein zeitgesteuert auf.

Bei SSR-Ausgängen kannst Du auch kürzere Reglerzyklen verwenden aber das ist dennoch nicht immer sinnvoll weil das System in jedem Fall eine thermische Trägheit aufweist.
 
Im Ergebnis hast Du im gewäHlten Beispiel bei Reglerausgang 10% 1 s Heizung an und 9 sekunden Heizung aus.
Bei 40% entsprechend 4s an und 6s aus. Bei 100% Hast Du Dauersignal.

Das ganze lässt sich schön in einen Baustein packen, der zyklisch alle 10s aufgerufen wird.
Das betrifft aber nur das Starten des TOF. Auf den Ausgang muss TOF.Q schon sehr viel öfter umgeschaufelt werden.

Hat schonmal jemand erwähnt, dass auch HalbleiterRelais nicht in beliebig kurzen Abständen geschaltet werden sollten? 10 s sollten problemlos sein, aber vorsichtshalber DatenBlatt konsultieren!
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hierzu habe ich im WWW gefunden:
NOTE: The function converts strictly in accordance with IEC rules. Since this function has been realized as a generic function, there will also be a few illogical conversions, e.g. REAL_TO_BOOL.
When converting to BOOL, BYTE, WORD, the least significant bits of the input value are transferred to the output. A runtime error message is not given and ENO remains 1

Das ist aber jetzt nicht aus einer Codesys-Doku, sondern irgendwas allgemeineres, oder?
Codesys weicht schon mal ein wenig von der Norm ab, wenn es allzu sinnfrei wird. Die "Zahlenwert_to_Bool"-Konvertierungen geben bei Codesys "Zahlenwert<>0" zurück.
Bei einem Real-Wert bringt das natürlich trotzdem nicht viel, denn wann ist der schon mal genau 0.
 
Zurück
Oben