FB_CTRL_GET_TASK_CYCLETIME

FB_CTRL_GET_TASK_CYCLETIME 1:

Mit diesem Funktionsbaustein kann die Task-Zykluszeit eines Programms mit einer Auflösung von 1 ms bestimmt werden.

FB_CTRL_GET_TASK_CYCLETIME 2:

Korrekte Verwendung des Bausteins

Die TaskCycleTime kann nur dann richtig bestimmt werden, wenn kein Breakpoint im Programm aktiv ist.
Die Task-Zykluszeit wird nur einmal bestimmt. Wenn einer der Ausgänge bCycleTimeValid oder bError TRUE ist, werden keine weiteren Messungen mehr durchgeführt.

Wenn Sie Zykluszeiten verwenden, die kleiner 1 ms sind oder die kein Vielfaches von 1 ms sind, diesen Baustein nicht verwenden

FB_CTRL_GET_TASK_CYCLETIME 3: VAR_INPUT

VAR_INPUT
    eMode : E_CTRL_MODE;
END_VAR

Name

Typ

Beschreibung

eMode

E_CTRL_MODE

Eingang, der die Betriebsart des Bausteins festlegt.

FB_CTRL_GET_TASK_CYCLETIME 4: VAR_OUTPUT

VAR_OUTPUT
    tTaskCycleTime   : TIME;
    bCycleTimeValid  : BOOL;
    eState           : E_CTRL_STATE;
    eErrorId         : E_CTRL_ERRORCODES;
    bError           : BOOL;
END_VAR

Name

Typ

Beschreibung

tTaskCycleTime

TIME

Dieser Ausgang gibt die aktuelle Task-Zykluszeit mit einer Auflösung von 1ms an.

bCycleTimeValid

BOOL

Wenn dieser Ausgang TRUE ist, ist die am Ausgang tTaskCycleTime angegebene Zeit gültig.

eState

E_CTRL_STATE

State des Funktionsbausteins

eErrorId

E_CTRL_ERRORCODES

Liefert bei einem gesetzten bError-Ausgang die Fehlernummer.

bError

BOOL

Wird TRUE, sobald ein Fehler eintritt.

Beispiel:

PROGRAM PRG_GET_TASK_CYCLETIME_TEST
VAR
    tTaskCycleTime     : TIME;
    bCycleTimeValid    : BOOL;
    eState             : E_CTRL_STATE;
    eErrorId           : E_CTRL_ERRORCODES;
    bError             : BOOL;
    fbCTRL_GET_TASK_CYCLETIME : FB_CTRL_GET_TASK_CYCLETIME;
    bInit              : BOOL := TRUE;
    fSetpointValue     : FLOAT := 45.0;
    fActualValue       : FLOAT;
    fbCTRL_PI          : FB_CTRL_PI;
    stCTRL_PI_Params   : ST_CTRL_PI_PARAMS;
    fbCTRL_PT1         : FB_CTRL_PT1;
    stCTRL_PT1_Params  : ST_CTRL_PT1_PARAMS;
END_VAR
fbCTRL_GET_TASK_CYCLETIME( eMode    := eCTRL_MODE_ACTIVE,
                           tTaskCycleTime  => tTaskCycleTime,
                           bCycleTimeValid => bCycleTimeValid,
                           eState          => eCTRL_MODE_ACTIVE,
                           eErrorId        => eErrorId,
                           bError          => bError );
IF fbCTRL_GET_TASK_CYCLETIME.bCycleTimeValid
THEN
    IF bInit
    THEN
        stCTRL_PT1_Params.tTaskCycleTime := fbCTRL_GET_TASK_CYCLETIME.tTaskCycleTime;
        stCTRL_PT1_Params.tCtrlCycleTime := T#100ms;
        stCTRL_PT1_Params.fKp := 1.0;
        stCTRL_PT1_Params.tT1 := T#10s;
        stCTRL_PI_Params.tTaskCycleTime := fbCTRL_GET_TASK_CYCLETIME.tTaskCycleTime;
        stCTRL_PI_Params.tCtrlCycleTime := T#100ms;
        stCTRL_PI_Params.fKp := 0.5;
        stCTRL_PI_Params.tTn := T#5s;
        stCTRL_PI_Params.fOutMaxLimit := 100.0;
        stCTRL_PI_Params.fOutMinLimit := 0.0;
        bInit := FALSE;
END_IF
fbCTRL_PI( fActualValue := fbCTRL_PT1.fOut,
         fSetpointValue := fSetpointValue,
         eMode := eCTRL_MODE_ACTIVE,
         stParams := stCTRL_PI_Params );
fbCTRL_PT1( fIn := fbCTRL_PI.fOut,
            eMode := eCTRL_MODE_ACTIVE,
            stParams := stCTRL_PT1_Params,
            fOut => fActualValue );
END_IF