我在 Codesys V3.5 SP9 Patch 5 中遇到结构化文本问题。我想做的是能够在我创建的函数中使用计时器,该函数在 POU 中调用。我通过将计时器直接放入 POU 并在不使用函数的情况下完成了相同的操作,并且它正在工作。
我的函数声明:
FUNCTION AssignDOORStatus : USINT
VAR_INPUT
DDUC_ComSta_Dcux_x: BOOL; //No communication
DDUC_DCUxEmHdler_x: BOOL; //Emergency handler
END_VAR
VAR
Timer: TP; //Timer to do intermittence between current doors status and emergency handler
CurrentDoorStatus: USINT;
TONProcessTime: TIME := T#1S; //TONProcesTime
END_VAR
我的功能代码:
IF DDUC_ComSta_Dcux_x THEN
CurrentDoorStatus := 0;
ELSE
CurrentDoorStatus := 1;
END_IF
IF DDUC_DCUxEmHdler_x THEN
Timer(IN := NOT Timer.Q, PT := TONProcessTime); //Timer starts
Timer();
IF Timer.Q THEN //When TONProcessTime has gone by
IF AssignDOORStatus <> CurrentDoorStatus THEN
AssignDOORStatus := CurrentDoorStatus;
ELSE AssignDOORStatus := 10;
END_IF
END_IF
ELSE
AssignDOORStatus := CurrentDoorStatus;
END_IF
我在 POU main 中的代码:
testdoor := AssignDOORStatus(DDUC_ComSta_Dcu1_S1_T,DDUC_DCU1EmHdler_S1_T);
此代码用于根据变量“DDUC_ComSta_Dcux_x”为“AssignDOORStatus”分配 0 或 1,然后,当“DDUC_DCUxEmHdler_x”为真时,它使用计时器将“AssignDOORStatus”值从“0 或 1”翻转为 10。
我必须多次调用 POU 这个函数。
提前致谢!