FB_CTRL_GET_TASK_CYCLETIME
Mit diesem Funktionsbaustein kann die Task-Zykluszeit eines Programms mit einer Auflösung von 1 ms bestimmt werden.
Korrekte Verwendung des Bausteins Die TaskCycleTime kann nur dann richtig bestimmt werden, wenn kein Breakpoint im Programm aktiv ist. Wenn Sie Zykluszeiten verwenden, die kleiner 1 ms sind oder die kein Vielfaches von 1 ms sind, diesen Baustein nicht verwenden |
VAR_INPUT
VAR_INPUT
eMode : E_CTRL_MODE;
END_VAR
Name | Typ | Beschreibung |
---|---|---|
eMode | E_CTRL_MODE | Eingang, der die Betriebsart des Bausteins festlegt. |
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 |
eState | E_CTRL_STATE | State des Funktionsbausteins |
eErrorId | E_CTRL_ERRORCODES | Liefert bei einem gesetzten |
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