FB_CTRL_TRANSFERFUNCTION_1

FB_CTRL_TRANSFERFUNCTION_1 1:

Dieser Baustein berechnet eine diskrete Übertragungsfunktion mit der unten dargestellten 1. Standardform. Die Übertragungsfunktion kann hierbei von beliebiger Ordnung n sein.

In den Parameter-Arrays werden die Koeffizienten der folgenden Übertragungsfunktion abgelegt:

FB_CTRL_TRANSFERFUNCTION_1 2:

Beschreibung des Übertragungsverhalten:

Die obige Übertragungsfunktion wird nach einigen Umformungen in jedem Abtastschritt mit der 1. Standardform berechnet.

FB_CTRL_TRANSFERFUNCTION_1 3:

Um diesen Funktionsbaustein nutzen zu können, müssen vom Programmierer in der SPS die folgenden Arrays angelegt werden:

ar_fNumeratorArray     :
ARRAY[0..nOrderOfTheTransferfunction] OF FLOAT;
ar_DenominatorArray    : ARRAY[0..nOrderOfTheTransferfunction]
OF FLOAT;
ar_stTransferfunction1Data : ARRAY[0..nOrderOfTheTransferfunction]
OF ST_CTRL_TRANSFERFUNCTION_1_DATA;

In dem Array ar_fNumeratorArray werden die Koeffizienten b0 bis bn abgelegt. Diese müssen folgendermaßen angeordnet werden:

ar_fNumeratorArray[
0 ]     := b0;
ar_fNumeratorArray[ 1 ]     := b1;
...
ar_fNumeratorArray[ n-1 ]   := bn-1;
ar_fNumeratorArray[ n ]     := bn;

In dem Array ar_DenominatorArray werden die Koeffizienten a0 bis an abgelegt. Diese müssen folgendermaßen angeordnet werden:

ar_DenominatorArray
[ 0 ]    := a0;
ar_DenominatorArray [ 1 ]    := a1;
...
ar_DenominatorArray [ n-1 ]  := an-1;
ar_DenomiantorArray [ n ]    := an;

Die internen Daten, die der Baustein benötigt, werden in dem Array ar_stTransferfunction1Data abgelegt. Diese Daten dürfen innerhalb des SPS-Programms keinesfalls geändert werden. Diese Vorgehensweise wird auch in dem unten aufgeführten Beispielprogramm dargestellt.

VAR_INPUT

VAR_INPUT
    fIn         : FLOAT;
    fManValue       : FLOAT;
    eMode       : E_CTRL_MODE;
END_VAR

fIn : Eingang der Übertragungsfunktion.

fManValue : Eingang, dessen Wert im Manual-Mode am Ausgang anliegt.

eMode : Eingang, der die Betriebsart des Bausteins festlegt.

VAR_OUTPUT

VAR_OUTPUT
    fOut        : FLOAT;
    eState      : E_CTRL_STATE;
    bError      : BOOL;
    eErrorId        : E_CTRL_ERRORCODES;
END_VAR

fOut : Ausgang der Übertragungsfunktion.

eState : State des Funktionsbausteins.

eErrorId : Liefert bei einem gesetzten bError-Ausgang die Fehlernummer.

bError : Wird TRUE, sobald ein Fehler eintritt.

VAR_IN_OUT

VAR_IN_OUT
    stParams        : ST_CTRL_TRANSFERFUNCTION_1_PARAMS;
END_VAR

stParams : Parameterstruktur des Funktionsbausteins. Diese besteht aus den folgenden Elementen:

TYPE
ST_CTRL_TRANSFERFUNCTION_1_PARAMS:
STRUCT
    tTaskCycleTime        : TIME;      (* task
cycle time in seconds *)
    tCtrlCycleTime        : TIME := T#0ms; (*
controller cycle time *)
    nOrderOfTheTransferfunction   : USINT;
    pNumeratorArray_ADR       : POINTER TO FLOAT :=
0;
    nNumeratorArray_SIZEOF    : UINT;
    pDenominatorArray_ADR     : POINTER TO FLOAT :=
0;
    nDenomiantorArray_SIZEOF      : UINT;
    pTransferfunction1Data_ADR    : POINTER TO
ST_CTRL_TRANSFERFUNCTION_1_DATA;
    nTransferfunction1Data_SIZEOF : UINT;
END_TYPE

tTaskCycleTime : Zykluszeit, mit der der Funktionsbaustein aufgerufen wird. Diese entspricht der Task-Zykluszeit der aufrufenden Task, wenn der Baustein in jedem Zyklus aufgerufen wird.

tCtrlCycleTime : Zykluszeit, mit der der Regelkreis bearbeitet wird. Diese muss größer oder gleich der TaskCycleTime sein. Der Funktionsbaustein berechnet mit dieser Eingangsgröße intern, ob die Zustands- und Ausgangsgrößen im aktuellen Zyklus aktualisiert werden müssen.

nOrderOfTheTransferfunction : Ordnung der Übertragungsfunktion [0... ]

pNumeratorArray_ADR : Adresse des Arrays mit den Zählerkoeffizienten.

nNumeratorArray_SIZEOF : Größe des Arrays mit den Zählerkoeffizienten in Byte.

pDenominatorArray_ADR : Adresse des Arrays mit den Nennerkoeffizienten.

nDenominatorArray_SIZEOF : Größe des Arrays mit den Nennerkoeffizienten in Byte.

pTransferfunction1Data_ADR : Adresse des Daten-Arrays.

nTransferfunction1Data_SIZEOF : Größe des Daten-Arrays in Byte.

TYPE
ST_CTRL_TRANSFERFUNCTION_1_DATA:
STRUCT
    Interne Struktur. Auf diese darf nicht schreibend
zugegriffen werden.
END_STRUCT
END_TYPE

Beispiel:

PROGRAM PRG_TRANSFERFUNCTION_1_TEST
VAR CONSTANT
    nOrderOfTheTransferfunction : USINT := 2;
END_VAR
VAR
    ar_fNumeratorArray     :
ARRAY[0..nOrderOfTheTransferfunction] OF FLOAT;
    ar_DenominatorArray    :
ARRAY[0..nOrderOfTheTransferfunction] OF FLOAT;
    ar_stTransferfunction1Data :
ARRAY[0..nOrderOfTheTransferfunction] OF
ST_CTRL_TRANSFERFUNCTION_1_DATA;
    eMode     : E_CTRL_MODE;
    stParams      : ST_CTRL_TRANSFERFUNCTION_1_PARAMS;
    eErrorId      : E_CTRL_ERRORCODES;
    bError    : BOOL;
    fbTansferfunction : FB_CTRL_TRANSFERFUNCTION_1;
    bInit     : BOOL := TRUE;
    fIn       : FLOAT := 0;
    fOut      : FLOAT;
    b_0, b_1, b_2   : FLOAT;
    a_0,a_1,a_2     : FLOAT;
END_VAR
IF bInit
THEN
    (* set values in the local arrays *)
    ar_fNumeratorArray[0] := 1.24906304658218E-007;
    ar_fNumeratorArray[1] := 2.49812609316437E-007;
    ar_fNumeratorArray[2] := 1.24906304658218E-007;
    ar_DenominatorArray[0] := 0.998501124344101;
    ar_DenominatorArray[1] := -1.99850062471888;
    ar_DenominatorArray[2] := 1.0;
    (* set values in the parameter struct *)
    stParams.tTaskCycleTime        := T#2ms;
    stParams.tCtrlCycleTime        := T#2ms;
    stParams.nOrderOfTheTransferfunction   :=
nOrderOfTheTransferfunction;
    (* set the mode *)
    eMode := eCTRL_MODE_ACTIVE;
    bInit := FALSE;
END_IF
(* set the addresses *)
stParams.pNumeratorArray_ADR       := ADR(
ar_fNumeratorArray);
stParams.nNumeratorArray_SIZEOF    := SIZEOF(
ar_fNumeratorArray);
stParams.pDenominatorArray_ADR     := ADR( ar_DenominatorArray
);
stParams.nDenominatorArray_SIZEOF      := SIZEOF(
ar_DenominatorArray );
stParams.pTransferfunction1Data_ADR    := ADR(
ar_stTransferfunction2Data );
stParams.nTransferfunction1Data_SIZEOF := SIZEOF(
ar_stTransferfunction2Data );
(* call the function block *)
fbTansferfunction ( fIn       := fIn,
            eMode     := eMode,
            stParams  := stParams,
            fOut      => fOut,
            eErrorId  => eErrorId,
            bError    => bError
            );

Voraussetzungen

Entwicklungsumgebung

Zielplattform

Einzubindende SPS Bibliotheken

TwinCAT v2.8

PC (i386)

TcControllerToolbox.lib

TwinCAT v2.9 ab Build 947

BC

TcControllerToolbox.lb6

TwinCAT v2.9 ab Build 956

BX

TcControllerToolbox.lbx