Vorherige Implementierung

Folgende Schritte müssen durchgeführt werden:

Im Bibliotheksmanager ist die TcTempCtrl.lib einzufügen.

Eine Instanz des Reglerbausteins FB_TempController ist anzulegen. Ausserdem wird eine Instanz der Struktur ST_ControllerParameter anzulegen.

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 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; 

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.

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).

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.

Vorherige Implementierung 1:

Nach der Erstinbetriebnahme sollten alle notwendigen Alarme wieder eingeschaltet werden!

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.

Vorherige Implementierung 2:

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!

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.

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