簡體   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