来自 PLC 的 TwinCAT 3 任务 Start/Stop

TwinCAT 3 Task Start/Stop from PLC

每次 PLC 启动时,我都需要 运行 一些代码。此代码应该只 运行 一次,然后在 PLC 重新启动之前不会再出现。在允许主 PLC 运行 之前,我初始化了一些全局变量并验证了持久数据。这是因为如果其中一些变量设置不正确,机器的动作可能会造成损坏。

有没有办法 start/stop 其他 PLC 任务?我注意到 TwinCAT 不支持 PLC 任务的初始化和关闭中断。

我不知道 start/stop 单独 PLC 任务的方法。不过,您可以 start/stop 一次 运行。

但也许它可以像下面的代码一样简单,它只会在您的 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

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;