// 系統啟停邏輯
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;