TwinCAT有一个'PlcTaskSystemInfo'结构,其中包含FirstCycle的布尔值。您可以使用它仅运行一次初始化代码。
VAR fbGetCurTaskIdx: GETCURTASKINDEX; (* Further example+explanation in Infosys *) fbGetCurTaskIdx(); IF _TaskInfo[fbGetCurTaskIdx.index].FirstCycle THEN (* Initialization code here *) ELSE (* Normal code here *) END_IF;
我不知道启动/停止单个PLC任务的方法。您可以启动/停止运行时。
但也许它可以像下面的代码一样简单,它只会在PLC启动时运行。
VAR initialized: BOOL := FALSE; IF NOT initialized THEN (* Run your initialization code here *) initialized := TRUE; END_IF (* Rest of your program here *)
编辑:
我在初始化代码中使用了一个状态机来帮助完成任务允许的时间问题。
例:
VAR Initialized : BOOL := FALSE; Init_State : UINT := 0; END_VAR IF NOT Initialized THEN (* Initialization State Machine *) CASE Init_State OF 0: (* First step in initialization *) Init_State := Init_State + 1; 1: (* Second step in initialization *) Init_State := Init_State + 1; . . . n: (* Last step in initialization *) Initialized := TRUE; END_CASE END_IF