Generelle Funktionsweise
In den folgenden Absätzen wird die generelle Funktionsweise der Bausteine in der TwinCAT Controller Toolbox beschrieben.
Diskretisierung
Die kontinuierlichen Übertragungsfunktionen der in dieser Bibliothek zusammengestellten Übertragungsglieder sind mit der Trapezregel (Tustin-Formel) diskretisiert worden.
Tustin-Formel:
Eingänge der Funktionsbausteine
eMode
Mit diesem Eingang kann die Betriebsart der meisten Bausteine ausgewählt werden. Hiermit ist es möglich, eine der folgenden Betriebsarten anzuwählen:
eCTRL_MODE_PASSIVE | Der oder die Ausgänge des Bausteins werden auf „Null“ gesetzt, die internen Zustände bleiben aber erhalten. |
eCTRL_MODE_ACTIVE | Der Baustein wird entsprechend seiner Beschreibung ausgeführt und entsprechende Ausgangsgrößen werden berechnet (Normalbetrieb). |
eCTRL_MODE_RESET | In dieser Betriebsart werden alle internen Zustände zurückgesetzt und das Fehlerbit gelöscht. |
eCTRL_MODE_MANUAL | Es wird am Ausgang der Wert der Eingangsgröße |
stParams
Mit dieser Struktur werden dem Funktionsbaustein die benötigten Parameter übergeben. In allen Parameterstrukturen sind die Variablen tTaskCycleTime
und tCtrlCycleTime
enthalten. Die Wirkungsweise dieser Parameter ist die Folgende:
Mit dem Parameter tTaskCycleTime
wird die Zykluszeit angegeben, mit der der Funktionsbaustein aufgerufen wird. Diese entspricht der Zykluszeit der aufrufenden Task, wenn der Baustein in jedem Zyklus aufgerufen wird. Wird er nur in jedem zweiten Zyklus aufgerufen, muss die Zeit entsprechend verdoppelt werden. Der Parameter tCtrlCycleTime
gibt die Abtastzeit des Regelkreises an. Diese Zeit muss größer oder gleich des Parameters tTaskCycleTime
sein. Wenn die Abtastzeit gleich der tTaskCycleTime
gesetzt wird, wird der Baustein bei jedem Aufruf ausgeführt. Wenn sie um den Faktor 5 größer gewählt wird, wird der Baustein nur bei jedem fünften Aufruf bearbeitet. Somit ist es möglich, in einer schnellen Task auch langsame Regelkreise zu implementieren.
Die Parameter tTaskCycleTime
und tCtrlCycleTime
sind vom Typ TIME und erlauben somit keine Eingaben, die kleiner als 1ms sind. Um die Regler in einer schnellen SPS-Task mit einer Zykluszeit kleiner 1ms einsetzen zu können, kann eine globale Base-Time angegeben werden, auf die die angegebenen Zykluszeiten bezogen werden. Die Verwendung der Base-Time wird in den folgenden Beispielen erläutert.
Es wird angenommen, dass der Baustein in jedem Task-Zyklus aufgerufen wird.
Task: Configuration | Parameter: | Parameter: | Wirkungsweise |
T#10ms | T#10ms | T#10ms | Der Regelkreis wird mit 10ms Abtastzeit bearbeitet. |
T#10ms | T#10ms | T#50ms | Der Regelkreis wird mit 50ms Abtastzeit bearbeitet. |
T#100ms | T#100ms | T#100ms | Der Regelkreis wird mit 100ms Abtastzeit bearbeitet. |
T#100ms | T#100ms | T#50ms | FEHLER, eine Ausführung ist nicht möglich! |
T#100ms | T#50ms | T#50ms | FEHLER, der Baustein wird zwar ausgeführt, aber es werden falsche Ausgangsgrößen berechnet! |
Ausgänge der Funktionsbausteine
eState
Dieser Ausgang zeigt den aktuellen internen Zustand an, in dem sich der Baustein befindet.
eCTRL_STATE_IDLE | Ein Reset des Bausteins ist erfolgreich ausgeführt worden, der Baustein wartet auf eine Betriebsartenumschaltung. |
eCTRL_STATE_PASSIVE | Der Baustein befindet sich im Passive-State, in dem keine Berechnungen ausgeführt werden. |
eCTRL_STATE_ACTIVE | Der Baustein befindet sich im Active-State, dieses ist der normale Betriebszustand. |
eCTRL_STATE_RESET | Eine Reset-Anforderung wird bearbeitet und der Reset ist noch nicht abgeschlossen. |
eCTRL_STATE_MANUAL | Der Baustein befindet sich im Manual-State und die Ausgangsgröße kann manuell an dem entsprechenden Eingang vorgegeben werden. |
eCTRL_STATE_... | Eventuelle weitere interne Zustände werden bei den entsprechenden Bausteinen beschrieben. |
eCTRL_STATE_ERROR | Es ist ein Fehler aufgetreten und der Baustein wird in diesem State nicht ausgeführt. Siehe eErrorId für weitere Informationen. |
bError
An diesem boolschen Ausgang wird mit einem TRUE ein Fehler des Bausteins signalisiert.
eErrorId
An diesem Ausgang wird die Fehlernummer ausgegeben, wenn der Ausgang bError
TRUE ist.
Verwendung der globalen Base-Time
Um die Funktionsbausteine in einer SPS-Task mit einer Zykluszeit kleiner 1ms einsetzen zu können, ist es möglich, die angegebenen Zykluszeiten als Ticks einer Basiszeit zu interpretieren. Bei dieser besonderen Parametrierung wird die Zeiteinheit 1ms als 1 Tick interpretiert. Dieses Vorgehen ist äquivalent zu der Einstellung einer SPS-Zykluszeit kleiner 1ms im TwinCAT Systemmanager.
Die Umschaltung und Angabe der Basiszeit erfolgt mit der globalen Struktur stCtrl_GLOBAL_CycleTimeInterpretation
für alle Funktionsbausteine der Toolbox.
VAR_GLOBAL
stCtrl_GLOBAL_CycleTimeInterpretation :
ST_CTRL_CYCLE_TIME_INTERPRETATION;
END_VARTYPE ST_CTRL_CYCLE_TIME_INTERPRETATION :
STRUCT
bInterpretCycleTimeAsTicks : BOOL; (* e.g. 2ms -> 2ticks *)
fBaseTime : FLOAT; (* Base time in seconds, e.g. 200µs -> 200E-6s *)
END_STRUCT
END_TYPE
Um die angegebenen Zykluszeiten als Ticks zu interpretieren, wird die Variable bInterpretCycleTimeAsTicks
in der globalen Struktur stCtrl_GLOBAL_CycleTimeInterpretation
auf TRUE gesetzt. In dieser Struktur muss dann auch die Basiszeiteinheit in der Variablen fBaseTime
gesetzt werden.
Durch das Setzen des Flags bInterpretCycleTimeAsTicks
wird die Interpretation der Parameter mit den Namen
- tTaskCycleTime
- tCtrlCycleTime
geändert. Alle sonstigen Parameter vom Typ TIME bleiben in ihrer Interpretation und Wirkung unbeeinflusst.
Beispiel
Die Basiszeiteinheit des TwinCAT-Systems beträgt 200µs. Die SPS-Task und somit die Bausteine der Toolbox werden zyklisch alle 400µs aufgerufen.
Setzen der globalen Struktur:
stCtrl_GLOBAL_CycleTimeInterpretation.bInterpretCycleTimeAsTicks := TRUE;
stCtrl_GLOBAL_CycleTimeInterpretation.fBaseTime := 200E-6;
Parametrierung eines Funktionsbausteins aus der Toolbox:
stParams.tTaskCycleTime := T#2ms; (* 2*200µs=400µs *)
stParams.tCtrlCycleTime := T#4ms; (* 4*200µs=800µs *)
stParams. ...
Die an den Bausteinen angegebene TaskCycleTime beträgt „2•200E-6s = 400µs“ und entspricht somit der eingestellten SPS-Zykluszeit. Die CtrlCycleTime wird auf „800µs = 4•200E-6s“ gesetzt, sodass der Regelkreis mit einer Abtastzeit von 800µs arbeitet, also in jedem zweiten SPS-Zyklus bearbeitet wird.