Hinweise zur Dokumentation

Diese Beschreibung wendet sich ausschließlich an ausgebildetes Fachpersonal der Steuerungs- und Automatisierungstechnik, das mit den geltenden nationalen Normen vertraut ist.
Zur Installation und Inbetriebnahme der Komponenten ist die Beachtung der Dokumentation und der nachfolgenden Hinweise und Erklärungen unbedingt notwendig.
Das Fachpersonal ist verpflichtet, für jede Installation und Inbetriebnahme die zu dem Zeitpunkt veröffentlichte Dokumentation zu verwenden.

Das Fachpersonal hat sicherzustellen, dass die Anwendung bzw. der Einsatz der beschriebenen Produkte alle Sicherheitsanforderungen, einschließlich sämtlicher anwendbaren Gesetze, Vorschriften, Bestimmungen und Normen erfüllt.

Disclaimer

Diese Dokumentation wurde sorgfältig erstellt. Die beschriebenen Produkte werden jedoch ständig weiter entwickelt.
Wir behalten uns das Recht vor, die Dokumentation jederzeit und ohne Ankündigung zu überarbeiten und zu ändern.
Aus den Angaben, Abbildungen und Beschreibungen in dieser Dokumentation können keine Ansprüche auf Änderung bereits gelieferter Produkte geltend gemacht werden.

Marken

Beckhoff®, TwinCAT®, EtherCAT®, EtherCAT G®, EtherCAT G10®, EtherCAT P®, Safety over EtherCAT®, TwinSAFE®, XFC®, XTS® und XPlanar® sind eingetragene und lizenzierte Marken der Beckhoff Automation GmbH.
Die Verwendung anderer in dieser Dokumentation enthaltenen Marken oder Kennzeichen durch Dritte kann zu einer Verletzung von Rechten der Inhaber der entsprechenden Bezeichnungen führen.

Patente

Die EtherCAT Technologie ist patentrechtlich geschützt, insbesondere durch folgende Anmeldungen und Patente:
EP1590927, EP1789857, EP1456722, EP2137893, DE102015105702
mit den entsprechenden Anmeldungen und Eintragungen in verschiedenen anderen Ländern.

EtherCAT® ist eine eingetragene Marke und patentierte Technologie lizenziert durch die Beckhoff Automation GmbH, Deutschland.

Copyright

© Beckhoff Automation GmbH & Co. KG, Deutschland.
Weitergabe sowie Vervielfältigung dieses Dokuments, Verwertung und Mitteilung seines Inhalts sind verboten, soweit nicht ausdrücklich gestattet.
Zuwiderhandlungen verpflichten zu Schadenersatz. Alle Rechte für den Fall der Patent-, Gebrauchsmuster- oder Geschmacksmustereintragung vorbehalten.


TwinCAT PLC Library PID

HINWEIS:

Diese Bibliothek wird nicht mehr unterstützt.

Bitte verwenden Sie stattdessen die Bibliothek: TwinCAT PLC Controller Toolbox.

Einleitung

Die vorliegende Bibliothek beinhaltet Funktionsbausteine, die zum einen PID-Regler-Funktionalitäten als auch die Erzeugung eines pulsweitenmodulierten Signals sowie die Bildung von 2- bzw. 3-Punkt-Kennlinien in TwinCAT PLC ermöglichen. Neben der eigentlichen PID-Regleraufgabe wurden eine Reihe von technischen Vorkehrungen getroffen, wie z.B. Anti-Reset-Windup und Stellgrößenbeschränkungen, die für den praktischen Betrieb eines realen Prozesses unumgänglich sind. Der Status der Regler wird durch Flags dargestellt. Als Ausgangssignale stehen eine analoge Stellgröße sowie beim 3-Punkt-PID-Regler zusätzlich zwei digitale Ausgänge für ein positives und ein negatives Stellsignal zur Verfügung.


Konzept

Der Reglerkern besteht aus einem realen PID-Regler (PID-T1). Jeder Regler kann entsprechend der Zielsetzung der Regelung sowohl einen positiven als auch negativen Wirkungssinn besitzen. Somit kann beispielsweise eine Füllstandregelung sowohl als Zufluß- als auch als Abflußregelung realisiert werden.

Wie für jeden realen Prozeß zwingend erforderlich, besteht die Möglichkeit einer Stellgrößenbeschränkung bzw. Abschaltung der digitalen Reglerausgänge wenn eine positive oder negative Endlage der Stelleinrichtung erreicht worden ist. Für den Fall, daß durch Erreichen einer Endlage der Stelleinrichtung diese Stellgrößenbeschränkung ausgelöst wird, werden ARW-Maßnahmen (Anti-Reset-Windup) für den Integralanteil des Reglers eingeleitet. Diese ARW-Maßnahmen sollen gewährleisten, daß bei einer möglicherweise stationär verbleibenden Regeldifferenz der I-Anteil des Reglers nicht fortwährend weiter aufintegriert. Bei einem erneuten Vorzeichenwechsel der Regeldifferenz würde sonst eine entsprechend lange Zeit vergehen, bis sich die Stellgröße in die entgegengesetzte Richtung verändern würde.

Ferner ist ein stoßfreies (ruckfreies) Aufschalten der Regler durch eine spezielle Initialisierung möglich (Sync-Flag), wodurch ein stetiger Verlauf der Stellgröße gewährleistet wird.

Hervorzuheben ist die Synthese zwischen dem PID-Reglerbaustein und der Trace-Funktion (Oszilloskop), welche ebenfalls Bestandteil der TwinCAT PLC Software ist. Durch dieses sinnvolle Zusammenspiel zwischen Regelung und Meßwerterfassung lassen sich in kürzester Zeit und ohne Zuhilfenahme weiterer Hardware zur Meßwerterfassung die Regler nach den gewünschten Kriterien in Betrieb nehmen und optimieren, denn es können auch interne Reglergrößen wie P-, I- und D-Anteil aufgezeichnet werden.

Ein weiterer grundsätzlicher Vorteil dieses Regelungskonzeptes besteht darin, daß die spezifischen Reglergrößen unverfälscht in ihren physikalischen Einheiten beibehalten werden und nicht wie sonst üblich auf feste Zahlenbereiche normiert werden müssen.


Grundlagen

Im folgenden werden die mathematischen Gleichungen eines PID-Reglers kurz zusammengefasst.

Kontinuierlicher PID-Regler

Realer kontinuierlicher PID-Regler in der Produkt-Form (Pol-Nullstellen-Form):

Realer kontinuierlicher PID-Regler in der Summen-Form:

mit:

Übergangsfunktion (Sprungantwort) des realen PID-Reglers in der Summen-Form mit der Trapezregel:

Zeitdiskreter PID-Regler

Zeitdiskreter realer PID-Regler in der Produktform (Pol-Nullstellen-Form) mit der Trapezregel:

Zeitdiskreter realer PID-Regler in der Summen-Form mit der Trapezregel:


Übersicht

Die folgende Tabelle gibt eine Übersicht über die Funktionsbausteine der Bibliothek TcPlcCtrl.lib.

Funktionsbaustein | Beschreibung
CtrlStandardPID | Standard PID-Regler
Ctrl3PointPID | 3-Punkt-PID-Regler
PwmOutput | Baustein zur Erzeugung eines pulsweitenmodulierten Signals
Ctrl2PointWithHysteresis | Baustein zur Erzeugung einer allgemeinen 2-Punkt Kennlinie
Ctrl3PointWithHysteresis | Baustein zur Erzeugung einer allgemeinen 3-Punkt Kennlinie


CtrlStandardPID

PID-Regler-Blockschaltbild

Übertragungsfunktion

Funktionsbaustein

Interface

VAR_INPUT
bInit : BOOL; (* initialization flag for first cycle *)
bSync : BOOL; (* synchronization for bumpless initialisation *)
(* controller input (deviation) *)
fCtrlInput : REAL; (* controller input (deviation=error) *)
fMinOutput : REAL; (* controller minimum output (min. limit) *)
fMaxOutput : REAL; (* controller maximum output (max. limit) *)
fSyncValue : REAL; (* syncronization value for bumpless init. *)
(* controller values *)
fCtrlCycleTime : REAL; (* controller cycle time in seconds [s] *)
fKp : REAL; (* proportional gain Kp (P) *)
fTn : REAL; (* integral gain Tn (I) [s] *)
fTv : REAL; (* derivative gain Tv (D-T1) [s] *)
fTd : REAL; (* derivative damping time Td (D-T1) [s] *)
fInnerWindow : REAL; (* inner window for reduced I-part (dE-window) *)
fOuterWindow : REAL; (* outer window for disabling I-part (dE-window) *)
END_VAR

VAR_OUTPUT
nErrorStatus : DINT; (* controller error output (0: no error; >0:error) *)
fCtrlOutput : REAL; (* controller output command *)
bMinLimit : BOOL := FALSE;(* minimum limiting active ? [TRUE/FALSE] -> ARW *)
bMaxLimit : BOOL := FALSE;(* maximum limiting active ? [TRUE/FALSE] -> ARW *)
bARWActive : BOOL := FALSE;(* ARW actice ? [TRUE/FALSE] -> freeze I-part *)
END_VAR

Eingänge

Name | Einheit | Wertebereich | Beschreibung
fCtrlInput |  | ± ¥ | Reglereingangsgröße ( Regeldifferenz e(t) )
fMinOutput |  | ± ¥ | Minimale Ausgabeschranke (minimale Stellgrößenschranke)
fMaxOutput |  | ± ¥ | Maximale Ausgabeschranke (maximale Stellgrößenschranke)
fCtrlCycleTime | s | > 0 | Regler-Zykluszeit für zeitdiskrete Implementation
fKp |  | ³ 0 | Proportionalverstärkung Kp (P-Anteil)
fTn | s | ³ 0 | Nachstellzeit Tn (I-Anteil)
fTv | s | ³ 0 | Vorhaltzeit Tv (D-T1-Anteil)
fTd | s | ³ 0 | Dämpfungszeit Td (D-T1-Anteil)
fInnerWindow |  | ³ 0 | Inneres Fenster für Reglereingangsgröße ( Regeldifferenz e(t) ), in dem der I-Anteil kontinuierlich (linear) zu Null geführt wird.
fOuterWindow |  | ³ 0 | Äußeres Fenster für Reglereingangsgröße ( Regeldifferenz e(t) ), in dem der I-Anteil abgeschaltet (eingefroren) wird, wenn sich die Reglereingangsgröße betragsmäßig außerhalb dieses Fensters befindet. Wird diese Eigenschaft nicht gewünscht, muss dieser Parameter mit dem Wert 0.0 vorbesetzt werden.
bInit | 1 | [TRUE,FALSE] | Initialisierungsflag, das genau für den ersten Zyklus des Regleraufrufes anstehen muss (TRUE).
bSync | 1 | [TRUE,FALSE] | Synchronisierungsflag für ein stoßfreies Aufschalten des Reglers. Kann zusammen mit dem Initialisierungflag benutzt werden und darf nur für genau einen Zyklus anstehen (TRUE). Diese ruckfreie Aufsynchronisieren ist nur möglich, wenn der Regler einen I- und bzw. einen D-Anteil besitzt, sonst bleibt diese Maßnahme wirkungslos.
fSyncValue |  | ± ¥ | Dies ist der Stellwert, auf den aufsynchronisiert wird (letzte Stellgröße auf die für genau einen Zyklus als Stellgröße übernommen wird).

Ausgänge

Name | Einheit | Wertebereich | Beschreibung
fCtrlOutput |  | ± ¥ | Reglerausgabewert ( Stellgröße y(t) )
nErrorStatus |  | ³ 0 | Fehlerstatus/Fehlercode des Reglers. Der Wert Null bedeutet fehlerfrei und ein Wert größer Null bedeutet einen speziellen Fehlercode (s. Tabelle).
bARWActive |  | [TRUE,FALSE] | ARW ("anti-reset-windup") aktiv/passiv. Die ARW-Maßnahmen dienen dazu, dass z.B. im Falle einer aktiven Stellgrößenlimitierung der I-Anteil in jeweils einer Richtung gesperrt wird, wohingegen sich der I-Anteil jederzeit in die entgegengesetzte Richtung verändern kann. Diese Maßnahme wirkt sich positiv auf das dynamische Verhalten des Reglers aus.
bMinLimit | 1 | [TRUE,FALSE] | Minimale Ausgabegrößenbeschränkung aktiv/passiv (Min-Stellgrößenlimitierung ).
bMaxLimit | 1 | [TRUE,FALSE | Maximale Ausgabegrößenbeschränkung aktiv/passiv (Max-Stellgrößenlimitierung).

Fehlercodes

Name | Beschreibung
nERR_NOERROR | Kein Fehler.
nERR_NOINIT | Regler Initialisierung fehlt. Der Regler muss einmalig durch ein Initialisierungsflag initialisiert werden. Dieses Flag muss genau für einen SPS-Zyklus beim erstmalige Aufruf des Reglers anstehen. Nach dem ersten Zyklus muss dieses Bit zurückgesetzt werden. Eine weitere Neuinitialisierung wird ebenfalls nötig, falls Reglerparameter geändert werden sollen.
nERR_INVALIDPARAM | Ungültige Reglerparameter. Ein oder mehrere Reglerparameter besitzen einen ungültigen Wert. Die Proportionalverstärkung Kp, die Nachstellzeit Tn, die Vorhaltzeit Tv und die Dämpfungszeit Td müssen größer gleich Null sein.
nERR_INVALIDCYCLETIME | Ungültige Zykluszeit/Abtastzeit. Die Reglerzyklus muss echt größer 0.0s und kleiner 60.0s sein. Die physikalische Einheit der Zykluszeit ist Sekunden.


Ctrl3PointPID

3-Punkt-PID-Regler Blockschaltbild

Funktionsbaustein

Interface

VAR_INPUT
bInit : BOOL; (* initialization flag for first cycle *)
bSync : BOOL; (* synchronization for bumpless initialisation *)
(* controller input (deviation) *)
fCtrlInput : REAL; (* controller input (deviation=error) *)
bLimitSwitchMinus : BOOL; (* NEW: digital limit switch minus (for minimum) *)
bLimitSwitchPlus : BOOL; (* NEW: digital limit switch plus (for maximum) *)
fSyncValue : REAL; (* syncronization value for bumpless init. *)
(* controller values *)
fCtrlCycleTime : REAL; (* controller cycle time in seconds [s] *)
fKp : REAL; (* proportional gain Kp (P) *)
fTn : REAL; (* integral gain Tn (I) [s] *)
fTv : REAL; (* derivative gain Tv (D-T1) [s] *)
fTd : REAL; (* derivative damping time Td (D-T1) [s] *)
fDeadBand : REAL; (* NEW: dead band/neutral zone for zero output *)
fInnerWindow : REAL; (* inner window for reduced I-part (dE-window) *)
fOuterWindow : REAL; (* outer window for disabling I-part (dE-window) *)
END_VAR

VAR_OUTPUT
(* main outputs *)
nErrorStatus : DINT; (* controller error output (0: no error; >0:error) *)
fCtrlOutput : REAL; (* controller output command *)
bCtrlOutputMinus : BOOL := FALSE; (* NEW: digital controller output command minus *)
bCtrlOutputPlus : BOOL := FALSE; (* NEW: digital controller output command plus *)
(* auxiliary outputs *)
bMinLimit : BOOL := FALSE; (* minimum limiting active ? [TRUE/FALSE] -> ARW *)
bMaxLimit : BOOL := FALSE; (* maximum limiting active ? [TRUE/FALSE] -> ARW *)
bARWActive : BOOL := FALSE; (* ARW actice ? [TRUE/FALSE] -> freeze I-part *)
END_VAR

Eingänge

Name | Einheit | Wertebereich | Beschreibung
fCtrlInput |  | ± ¥ | Reglereingangsgröße ( Regeldifferenz e(t) )
bLimitSwitchMinus | 1 | [TRUE,FALSE] | Endschalter Minus für Endlage der Stelleinrichtung (minimale Stellgröße)
bLimitSwitchPlus | 1 | [TRUE,FALSE] | Endschalter Plus für Endlage der Stelleinrichtung (maximale Stellgröße)
fCtrlCycleTime | s | > 0 | Regler-Zykluszeit für zeitdiskrete Implementation
fKp |  | ³ 0 | Proportionalverstärkung Kp (P-Anteil)
fTn | s | ³ 0 | Nachstellzeit Tn (I-Anteil)
fTv | s | ³ 0 | Vorhaltzeit Tv (D-T1-Anteil)
fTd | s | ³ 0 | Dämpfungszeit Td (D-T1-Anteil)
fDeadBand |  | ³ 0 | Totzone der digitalen Stellgrößenausgabe, um ein ständiges Schalten ("Flattern") zwischen positiver und negativer Stellgröße in einem vorgegebenen Stellbereich zu verhindern. Für diesen Parameter sollte mindestens ein Wert vorgegeben werden, der größer als 1.0*e-10 ist, um auch einen Ruhezustand der Stelleinrichtung zu ermöglichen.
fInnerWindow |  | ³ 0 | Inneres Fenster für Reglereingangsgröße ( Regeldifferenz e(t) ), in dem der I-Anteil kontinuierlich (linear) zu Null geführt wird.
fOuterWindow |  | ³ 0 | Äußeres Fenster für Reglereingangsgröße ( Regeldifferenz e(t) ), in dem der I-Anteil abgeschaltet (eingefroren) wird, wenn sich die Reglereingangsgröße betragsmäßig außerhalb dieses Fensters befindet. Wird diese Eigenschaft nicht gewünscht, muß dieser Parameter mit dem Wert 0.0 vorbesetzt werden.
bInit | 1 | [TRUE,FALSE] | Initialisierungsflag, das genau für den ersten Zyklus des Regleraufrufes anstehen muss (TRUE).
bSync | 1 | [TRUE,FALSE] | Synchronisierungsflag für ein stoßfreies Aufschalten des Reglers. Kann zusammen mit dem Initialisierungflag benutzt werden und darf nur für genau einen Zyklus anstehen (TRUE). Dieses ruckfreie Aufsynchronisieren ist nur möglich, wenn der Regler einen I- und bzw. einen D-Anteil besitzt, sonst bleibt diese Maßnahme wirkungslos.
fSyncValue |  | ± ¥ | Dies ist der Stellwert, auf den aufsynchronisiert wird (letzte Stellgröße auf die für genau einen Zyklus als Stellgröße übernommen wird).

Ausgänge

Name | Einheit | Wertebereich | Beschreibung
fCtrlOutput |  | ± ¥ | Reglerausgabewert ( Stellgröße y(t) )
bCtrlOutputMinus | 1 | [TRUE,FALSE] | Digitaler Reglerausgabewert Minus ( negative Stellgröße yminus(t) )
bCtrlOutputPlus | 1 | [TRUE,FALSE] | Digitaler Reglerausgabewert Plus ( positive Stellgröße yplus(t) )
nErrorStatus |  | ³ 0 | Fehlerstatus/Fehlercode des Reglers. Der Wert Null bedeutet fehlerfrei und ein Wert größer Null bedeutet einen speziellen Fehlercode (s. Tabelle).
bARWActive |  | [TRUE,FALSE] | ARW ("anti-reset-windup") aktiv/passiv. Die ARW-Maßnahmen dienen dazu, dass z.B. im Falle einer aktiven Stellgrößenlimitierung der I-Anteil in jeweils einer Richtung gesperrt wird, wohingegen sich der I-Anteil jederzeit in die entgegengesetzte Richtung verändern kann. Diese Maßnahme wirkt sich positiv auf das dynamische Verhalten des Reglers aus.
bMinLimit | 1 | [TRUE,FALSE] | Minimale Ausgabegrößenbeschränkung aktiv/passiv (Min-Stellgrößenlimitierung ).
bMaxLimit | 1 | [TRUE,FALSE | Maximale Ausgabegrößenbeschränkung aktiv/passiv (Max-Stellgrößenlimitierung).

Fehlercodes

Name | Beschreibung
nERR_NOERROR | Kein Fehler.
nERR_NOINIT | Regler Initialisierung fehlt. Der Regler muss einmalig durch ein Initialisierungsflag initialisiert werden. Dieses Flag muss genau für einen SPS-Zyklus beim erstmalige Aufruf des Reglers anstehen. Nach dem ersten Zyklus muss dieses Bit zurückgesetzt werden. Eine weitere Neuinitialisierung wird ebenfalls nötig, falls Reglerparameter geändert werden sollen.
nERR_INVALIDPARAM | Ungültige Reglerparameter. Ein oder mehrere Reglerparameter besitzen einen ungültigen Wert. Die Proportionalverstärkung Kp, die Nachstellzeit Tn, die VorhaltzeitTv und die Dämpfungszeit Td müssen größer gleich Null sein. Ebenfalls muss der 'DeadBand' Parameter, der die Totzone für die digitale Stellgröße festlegt, größer gleich Null sein. Die beiden Parameter 'InnerWindow' und 'OuterWindow' müssen zueinander aus Plausibilitätsgründen so gewählt werden, dass der Parameter 'InnerWindow' betragsmäßig immer kleiner gleich als der Parameter 'OuterWindow' ist.
nERR_INVALIDCYCLETIME | Ungültige Zykluszeit/Abtastzeit. Die Reglerzyklus muss echt größer 0.0s und kleiner 60.0s sein. Die physikalische Einheit der Zykluszeit ist Sekunden.


PwmOutput

Zur Erzeugung eines pulsweitenmodulierten Signals aus einem Analogsignal (REAL) steht der SPS-Baustein "PwmOutput" zur Verfügung. Normalerweise ist der PwmOutput Baustein einem Regler nachgeschaltet und erzeugt aus der skalierten analogen Stellgröße (REAL) eine digitale Ausgangsgröße (BOOL). Mit "fCtrlCycleTime" ist die Abtastzeit des Reglers gemeint, dem der PwmOutput Baustein nachgeschaltet ist. Die Zeit "fPlcCycleTime" ist die Zykluszeit der Task, die den PwmOutput Baustein aufruft.

Funktionsbaustein

Interface

VAR_INPUT
bInit : BOOL; (* initialization flag for first cycle *)
fPwmInput : REAL; (* controller output = PMW input [0.0 ... 100.0] *)
fCtrlCycleTime : REAL; (* controller cycle time in seconds [s] *)
fPlcCycleTime : REAL; (* PLC/PWM cycle time in seconds [s] *)
ND_VAR

VAR_OUTPUT
nErrorStatus : DINT; (* controller error output (0: no error; >0:error) *)
bPwmOutBit : BOOL; (* PWM output bit *)
nPwmOutDirection: DINT; (* PWM output direction -1, 0, +1 *)
EEND_VAR

Eingänge

Name | Einheit | Wertebereich | Beschreibung
bInit | 1 | [TRUE,FALSE] | Initialisierungsflag, das genau für den ersten Zyklus des Regleraufrufes anstehen muss (TRUE).
fPwmInput |  | [0.0 - 100.0] | Skaliertes analoges Eingangssignal. Eingangssignal muss auf den Bereich von 0.0 - 100.0 skaliert werden.
fCtrlCycleTime | s | >= fPlcCycleTime | Regler-Zykluszeit für zeitdiskrete Implementation. Dieser Parameter kann zur Einstellung untergeordneter Reglerzyklen verwendet werden. Bei Verwendung des nachgeschalteten PWM-Gliedes, wird üblicherweise ein ganzzahliges Vielfaches der "fPlcCycleTime" eingestellt. Ohne PWM-Glied muß der eingestellte Wert identisch mit "fPlcCycleTime" sein.
fPlcCycleTime | s | > 0 | PLC/Pwm-Zykluszeit für zeitdiskrete Implementation. Diese Zeit muss der eingestellten Task-Intervallzeit in s entsprechen.

Ausgänge

Name | Einheit | Wertebereich | Beschreibung
nErrorStatus |  | ³ 0 | Fehlerstatus/Fehlercode des Bausteins. Der Wert Null bedeutet fehlerfrei und ein Wert größer Null bedeutet einen speziellen Fehlercode (s. Tabelle).
bPwmOutBit |  | [TRUE,FALSE] | Ausgangsgröße des PWM-Bausteins als Bit.
nPwmOutDirection |  | -1,0,+1 | Zeigt das Vorzeichen der Variablen fPwmInput am Zyklusanfang.

Fehlercodes

Name | Beschreibung
nERR_NOERROR | Kein Fehler.
nERR_NOINIT | Baustein Initialisierung fehlt. Der PwmOutput-Baustein muss einmalig durch ein Initialisierungsflag initialisiert werden. Dieses Flag muss genau für einen SPS-Zyklus beim erstmalige Aufruf des Reglers anstehen. Nach dem ersten Zyklus muss dieses Bit zurückgesetzt werden.
nERR_INVALIDPARAM | Ungültige Parameter.
nERR_INVALIDCYCLETIME | Ungültige Zykluszeit/Abtastzeit. Die Reglerzyklus muss echt größer 0.0s und kleiner 60.0s sein. Die physikalische Einheit der Zykluszeit ist Sekunden.

Beispiel

Die obere Kurve der untenstehenden Abbildung zeigt den Verlauf eines Eingangg eines PID Reglerbausteins, die untere zeigt den entsprechenden Ausgang des Reglers. Ganz unten ist der Ausgang des PwmOutput Bausteins zu sehen.


Ctrl2PointWithHysteresis

Der vorliegende SPS-Funktionsbaustein "Ctrl2PointWithHysteresis" bildet eine allgemeine 2-Punkt-Kennlinie mit Hysterese für TwinCAT PLC. Diese 2-Punkt-Kennlinie ist so allgemein geschrieben, dass sich durch eine spezielle Wahl der Parameter verschiedenste Sonderfälle ergeben (s. Graphik).

Übersicht

Eine anschauliche Übersicht verschafft die folgende graphische Darstellung, die aufzeigt, durch welche Wahl der Parameter sich ein spezieller Kennlinienverlauf ergibt.

Funktionsbaustein

Interface

VAR_INPUT
bInit : BOOL; (* initialization flag for first cycle *)
(* controller input (deviation) *)
fCtrlInput : REAL; (* controller input (deviation=error) *)
(* controller values *)
fParamXOnOff : REAL; (* parameter x for threshold ON/OFF *)
fParamYGain : REAL; (* parameter y-gain *)
fParamYOffset : REAL; (* parameter y-offset *)
END_VAR

VAR_OUTPUT
nErrorStatus : DINT; (* controller error output (0: no error; >0:error) *)
fCtrlOutput : REAL; (* controller output command *)
END_VAR

Eingänge

Name | Einheit | Wertebereich | Beschreibung
bInit | 1 | [TRUE,FALSE] | Initialisierungsflag, das genau für den ersten Zyklus des Regleraufrufes anstehen muss (TRUE).
fCtrlInput |  | ± ¥ | Analoges Eingangssignal des Bausteins.
fParamXOnOff |  | ³ 0 | Ansprechschwelle der Hysterese. Wenn der Eingang 0.0 ist, findet keine Hysterese statt.
fParamYGain |  | ³ 0 | Verstärkung der Ausgangsgröße. Wenn der Eingang 0.0 ist, bleibt die Ausgangsgröße immer auf dem gleichen Wert unabhängig von der Eingangsgröße. Die Polarität ändert sich jedoch abhängig vom Wert des Offsets und der Hysterese.
fParamYOffset |  | ³ 0 | Offset der Ausgangsgröße zur Eingangsgröße.

Ausgänge

Name | Einheit | Wertebereich | Beschreibung
nErrorStatus |  | ³ 0 | Fehlerstatus/Fehlercode des Bausteins. Der Wert Null bedeutet fehlerfrei und ein Wert größer Null bedeutet einen speziellen Fehlercode (s. Tabelle).
fCtrlOutput |  | ± ¥ | Ausgangsgröße des Bausteins.

Fehlercodes

Name | Beschreibung
nERR_NOERROR | Kein Fehler.
nERR_NOINIT | Baustein Initialisierung fehlt. Der Baustein muss einmalig durch ein Initialisierungsflag initialisiert werden. Dieses Flag muss genau für einen SPS-Zyklus beim erstmalige Aufruf des Reglers anstehen. Nach dem ersten Zyklus muss dieses Bit zurückgesetzt werden.
nERR_INVALIDPARAM_HYSTERESIS | Ungültige Parameter. Der Wert für die Hysterese "fParamXOnOff" muss größer gleich Null sein.
nERR_INVALIDPARAM_SCALING | Ungültige Parameter. Die Werte für die Verstärkung "fParamYGain" und den Offset "fParamYOffset" müssen größer gleich Null sein.


Ctrl3PointWithHysteresis

Der vorliegende SPS-Funktionsbaustein "Ctrl3PointWithHysteresis" bildet eine allgemeine 3-Punkt-Kennlinie mit Hysterese für TwinCAT PLC. Diese 3-Punkt-Kennlinie ist so allgemein geschrieben, dass sich durch eine spezielle Wahl der Parameter verschiedenste Sonderfälle ergeben (s. Graphik).

Übersicht

Eine anschauliche Übersicht verschafft die folgende graphische Darstellung, die aufzeigt, durch welche Wahl der Parameter sich ein spezieller Kennlinienverlauf ergibt.

Funktionsbaustein

Interface

VAR_INPUT
bInit : BOOL; (* initialization flag for first cycle *)
(* controller input (deviation) *)
fCtrlInput : REAL; (* controller input (deviation=error) *)
(* controller values *)
fParamXOff : REAL; (* x-parameter for threshold OFF *)
fParamXOn : REAL; (* x-parameter for threshold ON *)
fParamYGain : REAL; (* y-parameter gain *)
fParamYOffset : REAL; (* y-parameter offset *)
END_VAR

VAR_OUTPUT
nErrorStatus : DINT; (* controller error output (0: no error; >0:error) *)
fCtrlOutput : REAL; (* controller output command *)
END_VAR

Eingänge

Name | Einheit | Wertebereich | Beschreibung
bInit | 1 | [TRUE,FALSE] | Initialisierungsflag, das genau für den ersten Zyklus des Regleraufrufes anstehen muss (TRUE).
fCtrlInput |  | ± ¥ | Analoges Eingangssignal des Bausteins.
fParamXOff |  | >= 0 und <= fParamXOn | Abschaltschwelle der Hysterese. Die Abschaltschwelle der Hysterese ist achsensymmetrisch zur Ausgangsgröße. Wenn diese Schwelle erreicht wird, wird die Ausgangsgröße zu Null bis zum Erreichen der Einschaltschwelle.
fParamXOn |  | >= 0 und >= fParamXOff | Einschaltschwelle der Hysterese. Die Einschaltschwelle der Hysterese ist achsensymmetrisch zur Ausgangsgröße. Wird diese Schwelle erreicht, nimmt die Ausgangsgröße einen Wert ungleich Null an, der durch die Parameter Offset und Verstärkung bestimmt wird.
fParamYGain |  | ³ 0 | Verstärkung der Ausgangsgröße. Wenn der Eingang 0.0 ist, bleibt die Ausgangsgröße immer auf dem gleichen Wert unabhängig von der Eingangsgröße. Die Polarität ändert sich jedoch abhängig vom Wert des Offsets und der Hysterese.
fParamYOffset |  | ³ 0 | Offset der Ausgangsgröße zur Eingangsgröße.

Ausgänge

Name | Einheit | Wertebereich | Beschreibung
nErrorStatus |  | ³ 0 | Fehlerstatus/Fehlercode des Bausteins. Der Wert Null bedeutet fehlerfrei und ein Wert größer Null bedeutet einen speziellen Fehlercode (s. Tabelle).
fCtrlOutput |  | ± ¥ | Ausgangsgröße des Bausteins.

Fehlercodes

Name | Beschreibung
nERR_NOERROR | Kein Fehler.
nERR_NOINIT | Baustein Initialisierung fehlt. Der Baustein muss einmalig durch ein Initialisierungsflag initialisiert werden. Dieses Flag muss genau für einen SPS-Zyklus beim erstmalige Aufruf des Reglers anstehen. Nach dem ersten Zyklus muss dieses Bit zurückgesetzt werden.
nERR_INVALIDPARAM_HYSTERESIS | Ungültige Parameter. Die Werte für "fParamXOn" und "fParamXOff" müssen größer gleich Null sein und "fParamXOff muss kleiner gleich "fParamXOn" sein.
nERR_INVALIDPARAM_SCALING | Ungültige Parameter. Die Werte für die Verstärkung "fParamYGain" und den Offset "fParamYOffset" müssen größer gleich Null sein.


Beispiel

Das Beispiel zeigt die Einbindung der Bibliothek in ein SPS Programm auf dem PC lauffähig:

Beispielprogramm für PC

Diese Beispiel zeigt die Einbindung der Bibliothek in ein SPS Programm auf dem BCxxxx lauffähig:

Beispielprogramm für BCxxxx