FB_CTRL_GET_TASK_CYCLETIME (nur auf einem PC-System)
Mit diesem Funktionsbaustein kann die Task-Zykluszeit eines Programms mit einer Auflösung von 1 ms bestimmt werden.
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 |