// 系统启停逻辑
V_CycleFlag := I_Start AND NOT I_Stop;
// 定时器触发:当前状态供水时长到,触发状态跳转
V_Timer(IN:=V_CycleFlag, PT:=T#10S); // 设定每组供水10秒,可修改
// 状态跳转逻辑:定时器到或当前状态无效,切换下一个状态
IF V_Timer.Q OR NOT (I_PipeEn[V_CurrentState+1] AND I_PipeEn[IF V_CurrentState=6 THEN 1 ELSE V_CurrentState+2]) THEN
V_CurrentState := V_CurrentState + 1;
IF V_CurrentState >=7 THEN
V_CurrentState := 0; // 状态循环:6→0
END_IF;
V_Timer(IN:=FALSE); // 定时器复位
END_IF;
// 电磁阀输出逻辑:根据当前状态,输出对应两路电磁阀
// 先复位所有电磁阀
FOR i:=1 TO 7 DO
Q_Solenoid := FALSE;
END_FOR;
// 按状态输出两路电磁阀(需两路均使能)
IF V_CycleFlag THEN
CASE V_CurrentState OF
0: // 状态0:1-2路供水
IF I_PipeEn[1] AND I_PipeEn[2] THEN
Q_Solenoid[1]:=TRUE; Q_Solenoid[2]:=TRUE;
END_IF;
1: // 状态1:2-3路供水
IF I_PipeEn[2] AND I_PipeEn[3] THEN
Q_Solenoid[2]:=TRUE; Q_Solenoid[3]:=TRUE;
END_IF;
2: // 状态2:3-4路供水
IF I_PipeEn[3] AND I_PipeEn[4] THEN
Q_Solenoid[3]:=TRUE; Q_Solenoid[4]:=TRUE;
END_IF;
3: // 状态3:4-5路供水
IF I_PipeEn[4] AND I_PipeEn[5] THEN
Q_Solenoid[4]:=TRUE; Q_Solenoid[5]:=TRUE;
END_IF;
4: // 状态4:5-6路供水
IF I_PipeEn[5] AND I_PipeEn[6] THEN
Q_Solenoid[5]:=TRUE; Q_Solenoid[6]:=TRUE;
END_IF;
5: // 状态5:6-7路供水
IF I_PipeEn[6] AND I_PipeEn[7] THEN
Q_Solenoid[6]:=TRUE; Q_Solenoid[7]:=TRUE;
END_IF;
6: // 状态6:7-1路供水
IF I_PipeEn[7] AND I_PipeEn[1] THEN
Q_Solenoid[7]:=TRUE; Q_Solenoid[1]:=TRUE;
END_IF;
END_CASE;
END_IF;