可以參考,能監控當前運行風機編號,狀態,以及加了停止動作
VAR
TimerRun : TON; // 運行計時器
TimerStop : TON; // 停止計時器
FanState : ARRAY[1..4] OF BOOL; // 風機狀態數組(TRUE-運行,FALSE-停止)
CurrentFan : INT; // 當前運行的風機編號(1-A,2-B,3-C,4-D)
FanOrder : ARRAY[1..4] OF INT := [1, 2, 3, 4]; // 風機排序數組,可以修改排序
EmergencyStop : BOOL; // 緊急停止按鈕狀態
SafetyInterlock : BOOL; // 安全聯鎖狀態
END_VAR
//初始化
IF NOT TimerRun.Q AND NOT TimerStop.Q AND NOT EmergencyStop AND SafetyInterlock THEN
FOR i := 1 TO 4 DO
FanState := FALSE; // 所有風機初始狀態為停止
END_FOR;
CurrentFan := FanOrder[1]; // 根據風機排序數組確定起始風機
TimerRun(IN:=TRUE, PT:=T#10s); // 設置運行計時器為10秒
END_IF
// 風機運行邏輯
IF NOT EmergencyStop AND SafetyInterlock THEN
IF TimerRun.Q THEN
// 當前風機正在運行或即將運行
IF NOT FanState[CurrentFan] THEN
// 啟動當前風機
FanState[CurrentFan] := TRUE;
// 這里加入控制當前風機啟動的代碼
END_IF
ELSE
// 運行時間到,停止當前風機
FanState[CurrentFan] := FALSE;
// 這里加入控制當前風機停止的代碼
TimerStop(IN:=TRUE, PT:=T#5s); // 設置停止計時器為5秒
END_IF
IF TimerStop.Q THEN
// 停止時間到,切換到下一個風機
CurrentFan := FanOrder[(CurrentFan MOD 4) + 1]; // 根據風機排序數組循環風機編號
TimerRun(IN:=TRUE, PT:=T#10s); // 重置運行計時器為10秒
END_IF
ELSE
// 緊急停止或安全聯鎖斷開,停止所有風機
FOR i := 1 TO 4 DO
FanState := FALSE;
END_FOR;
TimerRun(IN:=FALSE); // 停止運行計時器
TimerStop(IN:=FALSE); // 停止停止計時器
END_IF