可以参考,能监控当前运行风机编号,状态,以及加了停止动作
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