FB_CTRL_GET_TASK_CYCLETIME (nur auf einem PC-System)

FB_CTRL_GET_TASK_CYCLETIME (nur auf einem PC-System) 1:

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

FB_CTRL_GET_TASK_CYCLETIME (nur auf einem PC-System) 2:

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 Zykluszeiten verwendet werden, die kleiner 1 ms sind oder die kein Vielfaches von 1 ms sind, sollte dieser Baustein nicht verwendet werden.

VAR_INPUT

VAR_INPUT
    eMode    : E_CTRL_MODE;
END_VAR

eMode : Eingang, der die Betriebsart des Bausteins festlegt.

VAR_OUTPUT

VAR_OUTPUT
    tTaskCycleTime  : TIME;             (* resolution: 1ms *)
    bCycleTimeValid     : BOOL;
    eState      : E_CTRL_STATE;
    eErrorId        : E_CTRL_ERRORCODES;
    bError      : BOOL;
END_VAR

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

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

eState : State des Funktionsbausteins.

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

bError : 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;
    (* control loop *)
    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
(* call fb to get the task cycle time *)
fbCTRL_GET_TASK_CYCLETIME( eMode       :=
eCTRL_MODE_ACTIVE,
               tTaskCycleTime  =>
tTaskCycleTime,
               bCycleTimeValid =>
bCycleTimeValid,
               eState      =>
eCTRL_MODE_ACTIVE,
               eErrorId    => eErrorId,
               bError      => bError
              );
(* call control loop if the cycle time is valid *)
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
    (* call controller *)
    fbCTRL_PI( fActualValue   := fbCTRL_PT1.fOut,
           fSetpointValue := fSetpointValue,
           eMode      := eCTRL_MODE_ACTIVE,
           stParams       := stCTRL_PI_Params
          );
    (* call PT1 *)
    fbCTRL_PT1( fIn      := fbCTRL_PI.fOut,
        eMode    := eCTRL_MODE_ACTIVE,
        stParams := stCTRL_PT1_Params,
        fOut     => fActualValue
          );
END_IF

Voraussetzungen

Entwicklungsumgebung

Zielplattform

Einzubindende SPS Bibliotheken

TwinCAT v2.8

PC (i386)

TcControllerToolbox.lib