Vorherige Implementierung
Folgende Schritte müssen durchgeführt werden:
- Die Regler-Bibliothek ist über den Bibliotheksmanager in das Projekt einzufügen.
Im Bibliotheksmanager ist die TcTempCtrl.lib einzufügen.
- Mindestens eine Instanz des Reglers ist zu programmieren.
Eine Instanz des Reglerbausteins FB_TempController ist anzulegen. Ausserdem wird eine Instanz der Struktur ST_ControllerParameter anzulegen.
- Die notwendige äußere Beschaltung durchführen.
Name |
| Beschreibung |
---|---|---|
bOn | Beschaltung notwendig | Schaltet den Regler mit TRUE ein. Kann fest auf TRUE gelegt werden, wenn der Regler immer eingeschaltet sein soll. |
bInit | Beschaltung notwendig | Initialisierungsflag, das genau für den ersten Zyklus des Regleraufrufes anstehen muss (TRUE). |
bTune | Beschaltung notwendig, wenn Tuning eingesetzt werden soll | Schaltet mit der steigenden Flanke das Selftuning ein. Wird während des Selftuning-Vorgangs auf FALSE geschaltet, so wird das Selftuning abgebrochen und mit den alten Parametern (sofern vorhanden) weitergemacht. |
bManual | Beschaltung optional | Schaltet mit TRUE auf Handbetrieb um. Wird da Signal wieder FALSE, so wird in den Automatikmode zurückgeschaltet. |
bSelSetpoint | Beschaltung optional | Wählt einen von zwei möglichen Sollwerten aus. Mit FALSE wird der normale Sollwert gewählt, mit TRUE der Standby-Sollwert. |
bSelCtrlParameterSet | Beschaltung optional | Wählt einen von zwei Parametersätzen aus. Mit FALSE wird der interne (ermittelte) Parametersatz benutzt, mit TRUE ein von aussen aufgeschalteter. |
bEnableSoftStart | Beschaltung optional | Mit TRUE wird mit der Anfahrschaltung (Softstart) hochgefahren. |
bEnableRamping | Beschaltung optional | Mit TRUE wird jeder Sollwertsprung gerampt ausgeführt. |
fW1 | Beschaltung notwendig | Sollwert. |
fW2 | Beschaltung optional | Standby-Sollwert im Regelfall kleiner als fW1. Mit fSelSetpoint kann zwischen fW1 und fW2 umgeschaltet werden. |
fX | Beschaltung notwendig | Istwert. Dieser Wert muss auf LREAL konvertiert werden. |
bOpenThermocouple | Beschaltung optional | Mit TRUE ist das Thermoelement offen. Muss von der Hardware gemeldet werden (z.B. KLxxxx). |
bReverseThermocouple | Beschaltung optional | Mit TRUE wird falsche Polarität des angeschlossenen Thermoelements gemeldet. Muss von der Hardware gemeldet werden. |
bBackVoltage | Beschaltung optional | Bei TRUE wird eine zu hohe Eingangsspannung am Thermoelement angezeigt. Muss von der Hardware gemeldet werden. |
bLeakage | Beschaltung optional | Mit TRUE wird ein Leckstrom zu Heizelement detektiert. Muss von der Hardware gemeldet werden. |
bShortCircuit | Beschaltung optional | Mit TRUE wird ein Kurzschluss im Heizelement detektiert. Muss von der Hardware gemeldet werden. |
bOpenCircuit | Beschaltung optional | Mit TRUE wird ein offener Stromkreis im Heizelement detektiert. Muss von der Hardware gemeldet werden. |
sControllerParameter | Beschaltung notwendig | In dieser Struktur werden generelle Parameter (Abtastzeiten usw.) an den Baustein übergeben. |
sParaControllerExternal | Beschaltung optional | In dieser Struktur wird ein externer Regler-Parametersatz an den Baustein übergeben. |
sLogData | Beschaltung optional | In dieser Struktur werden Parameter (Dateinamen usw.) für das Logging an den Baustein übergeben. |
- Die notwendige Parametrierung des Reglers über die Struktur durchführen.
Die Parameter können über Initialwerte oder über Zuweisung festgelegt werden. Sollen Initialwerte verwendet werden, so sieht die Instanz der Struktur mit Initialwerten folgendermassen aus:
sControllerParameter : ST_ControllerParameter :=
(
(***********************************************************************)
(* general parameters *)
iMode := CTRLMODE_HEATING, (* 1=heating, 2=cooling, 3=heating&cooling *)
iReactionOnFailure := TC_OnFailureStopController, (* controller off or manual op or yMin or yMax *)
fYTune := 100, (* step change while tuning operation *)
fYStable := 0.0, (* tuning operation *)
dwAlarmSupp := 16#ff_ff_ff_ff, (* alarm suppression *)
tCtrlCycleTime := t#100ms, (* controller cycle time *)
tTaskCycleTime := t#10ms, (* plc task cycle time *)
(***********************************************************************)
(* setpoint parameters *)
fWMin := 0.0, (* lower limit *)
fWMax := 200, (* upper limit *)
(* start up optional *)
fWStartUp := 0.0, (* soft start plateau setpoint *)
tStartUp := t#0s, (* soft start waiting time*)
bStartUpRamping := FALSE, (* enable ramping while start up phase *)
fWStartUpVeloPos := 0.0, (* max gradient for increasing setpoint in start up phase*)
fWStartUpVeloNeg := 0.0, (* max gradient for decreasing setpoint in start up phase *)
fWVeloPos := 0.0, (* max gradient for increasing setpoint *)
fWVeloNeg := 0.0, (* max gradient for decreasing setpoint *)
(***********************************************************************)
(* actual value parameters *)
bFilter := FALSE,
tFilter := t#0s,
(***********************************************************************)
(* control value parameters *)
fYMin := 0, (* lower limit *)
fYMax := 100, (* upper limit *)
fYManual := 0.0, (* manual operation*)
fYOnFailure := 0.0, (* control value on failure *)
tPWMCycleTime := t#100ms, (* PWM *)
(***********************************************************************)
(* controller settings *)
bEnablePreController := FALSE, (* enable precontroller *)
bEnableZones := FALSE, (* enable zone around setpoint with open loop control *)
bEnableCVFilter := FALSE, (* enable filter for CV (type see iFilterType) *)
iFilterType := E_FilterType_FIRSTORDER, (* filtertype of CV filter *)
iControllerType := E_ControllerType_PID, (* used controller normally PID *)
(***********************************************************************)
(* min max temperatures *)
TempLow := 10,
TempLowLow := 20,
TempHigh := 10,
TempHighHigh := 20,
TempAbsoluteHigh := 200,
TempAbsoluteLow := 0,
(***********************************************************************)
(* internal tuning parameters *)
fTuneKp := 1.2,
fTuneTn := 2.0,
fTuneTv := 0.42,
fTuneTd := 0.25
);
Die markierten Parameter sind optional und müssen nur im Bedarfsfall initialisiert werden.
Die Zuweisung im Code kann in ST folgendermassen aussehen:
sControllerParameter.tPWMCycleTime :=
t#100ms;
- Festlegung der Reglerabtastzeit, der Taskzykluszeit und der PWM Zykluszeit
Die Abtastzeit des Reglers muss der Strecke angepasst werden. Sie sollte kleiner oder gleich einem zehntel der dominierenden Streckenzeitkonstanten gewählt werden. Die Taskzykluszeit ist durch die SPS Task festgelegt in der der Reglerbaustein aufgerufen wird. Dieser Wert kann aus der Taskkonfiguration (Plc Control: Resourcen Taskkonfiguration) abgelesen werden. Die PWM Zykluszeit ist normalerweise gleich der Reglerzykluszeit. Wenn die Taskzykluszeit 10ms und die PWM Zykluszeit (=Reglerabtastzeit) zu 100ms gewählt wird, so stehen insgesamt 10 Stufen (PWM Zykluszeit/Taskzykluszeit) zur Verfügung.
- TwinCAT Scope parametrieren
Zur Kontrolle der Ergebnisse sollte auf jeden Fall vom Tuning Vorgang und vom Closed Loop Regelverhalten eine Scope-Aufnahme gemacht werden. Dazu ist das TwinCAT Scope View zu starten und zu parametrieren. Folgende Kanäle sollten aufgezeichnet werden: Sollwert (fW1 oder fW2), Istwert (fX) und analoge Stellgröße (fYAnalog).
- Abschalten der Alarme während der Inbetriebnahmephase
Während der Inbetriebnahmephase können die Alarme zeitweilig abgeschaltet werden. Dazu ist in dem Dword dwAlarmSupp eine entsprechende Bitmaske zu setzen. Ist in diesem Dword ein Bit gesetzt, so wird der entsprechende Alarm disabled. Die Belegung der einzelnen Alarme ist hier beschrieben.
Nach der Erstinbetriebnahme sollten alle notwendigen Alarme wieder eingeschaltet werden! |
- Starten des Reglers mit Tuning
Sollen die Reglerparameter mit Hilfe des Tuning ermittelt werden, so müssen die Eingangs bOn und bTune auf TRUE sein. Es läuft zunächst eine festeingestellte Wartezeit von 20s ab. In dieser Wartezeit wird geprüft, ob die Strecke innerhalb eines +-1°C Bandes bleibt. Sollte das Band verlassen werden, so wird die Wartezeit erneut gestartet. Dann erfolgt eine sprungförmige Anregung der Strecke mit einer Stellgröße von fYTune. Darauf reagiert die Strecke mit der Sprungantwort. Solange nicht 80% der Sollgröße erreicht sind, werden die Parameter der Strecke über die Wendetangenten-Methode ermittelt. Aus Sicherheitsgründen wird nach Erreichen von 80% vom Sollwert auf die Regelung im geschlossenen Regelkreis umzuschalten. Sollte die Temperatur zu schnell (ohne ausgeprägten Wendepunkt) die 80% Marke erreichen, so ist der Wert fYTune zu reduzieren. Die ermittelten Parameter werden für den PID-Regler benutzt und stehen in einer Struktur am Ausgang des Reglers zur Verfügung.
Zum Tuning muss die Strecke mindestens einen Sprung von 40°C durchführen. Kleinere Sprüngen können zur Ermittlung von falschen Parametern führen! |
- Verknüpfen der internen Reglerparameter mit externer Beschaltung
Die durch das Tuning ermittelten Parameter des Regler können wieder als externe Parameter auf den Regler aufgeschaltet werden. Das kann notwendig sein, wenn das Tuning nur ein einziges Mal (z.B. nur in der Inbetriebnahmephase) durchgeführt werden soll. Dazu ist die Struktur sParaControllerInternal auf den Eingang des Reglers sParaControllerExternal zurückzuführen und das Flag bSelCtrlParameterSet auf TRUE zu setzen.
- Finetuning
Die beim Tuning ermittelten Reglerparameter sind auf schnelles Einschwingen mit etwa 10% Überschwingen ausgelegt. Ist kein oder nur sehr geringes Überschwingen erlaubt, so kann mit den folgenden Parametern aus der ST_ControllerParameter Struktur ein fine tuning durchgeführt werden. Diese Werte sind als Anhaltswerte anzusehen.
Verhalten | fTuneKp | fTuneTn | fTuneTv | fTuneTd |
---|---|---|---|---|
Schnelles Einschwingen mit einem Überschwingen von 10%-20% | 1.2 | 2.0 | 0.42 | 0.25 |
Langsameres Einschwingen mit geringerem Überschwingen | 1.0 | 2.5 | 0.42 | 0.25 |
Nahezu asymptotische Einschwingen mit sehr geringen Überschwingen | 0.5 | 3.0 | 1.0 | 0.25 |