繁体   English   中英

从PLC启动TwinCAT 3任务

[英]TwinCAT 3 Task Start/Stop from PLC

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM