FUNCTION_BLOCK FB333
VAR_INPUT
Duty1_Requested:BOOL;
Duty2_Requested:BOOL;
Duty3_requested:BOOL;
Duty4_Requested:BOOL;
Duty5_Requested:BOOL;
Duty6_Requested:BOOL;
Number_Of_Pumps_To_Run:INT;
Number_Of_Running_Pumps:INT;
END_VAR
VAR_OUTPUT
start_P1:BOOL;
start_p2:BOOL;
start_p3:BOOL;
start_p4:BOOL;
start_p5:BOOL;
start_p6:BOOL;
stop_P1:BOOL;
stop_p2:BOOL;
stop_p3:BOOL;
stop_p4:BOOL;
stop_p5:BOOL;
stop_p6:BOOL;
END_VAR
VAR
Running_pump:ARRAY[0..3] OF INT;
Available_Pumps:ARRAY[0..3] OF BOOL;
Pump_Duties_Input:ARRAY[0..3] OF INT;
Ready_Pumps_To_Run:ARRAY[0..3] OF INT;
END_VAR
Number_Of_Running_Pumps:= Running_pump[0] + Running_pump[1] + Running_pump[2] + Running_pump[3];
FB332.DB332(Available_Pumps := Available_Pumps // INOUT: ARRAY
,Pump_Duties_Input := Pump_Duties_Input // INOUT: ARRAY
);
Ready_Pumps_To_Run := DB332.Ready_Pumps_To_Run; // OUT: ARRAY
start_P1:=0;
start_p2:=0;
start_p3:=0;
start_p4:=0;
start_p5:=0;
start_p6:=0;
stop_P1:=1;
stop_p2:=1;
stop_p3:=1;
stop_p4:=1;
stop_p5:=1;
stop_p6:=1;
IF Duty1_Requested AND Number_Of_Pumps_To_Run>=1 THEN
CASE Ready_Pumps_To_Run[0] OF
1:
start_p1:=1;
stop_p1:=0;
2:
start_p2:=1;
stop_p2:=0;
3:
start_p3:=1;
stop_p3:=0;
4:
start_p4:=1;
stop_p4:=0;
END_CASE;
END_IF;
IF Duty2_Requested AND Number_Of_Pumps_To_Run>=2 THEN
CASE Ready_Pumps_To_Run[1] OF
1:
start_p1:=1;
stop_p1:=0;
2:
start_p2:=1;
stop_p2:=0;
3:
start_p3:=1;
stop_p3:=0;
4:
start_p4:=1;
stop_p4:=0;
END_CASE;
END_IF;
IF Duty3_Requested AND Number_Of_Pumps_To_Run>=3 THEN
CASE Ready_Pumps_To_Run[2] OF
1:
start_p1:=1;
stop_p1:=0;
2:
start_p2:=1;
stop_p2:=0;
3:
start_p3:=1;
stop_p3:=0;
4:
start_p4:=1;
stop_p4:=0;
END_CASE;
END_IF;
IF Duty4_Requested AND Number_Of_Pumps_To_Run>=4 THEN
CASE Ready_Pumps_To_Run[3] OF
1:
start_p1:=1;
stop_p1:=0;
2:
start_p2:=1;
stop_p2:=0;
3:
start_p3:=1;
stop_p3:=0;
4:
start_p4:=1;
stop_p4:=0;
END_CASE;
END_IF;
// Stopping the duty pumps
IF NOT Duty4_Requested AND Number_Of_Running_Pumps=4 THEN
CASE Ready_Pumps_To_Run[3] OF
1:
start_p1:=0;
stop_p1:=1;
2:
start_p2:=0;
stop_p2:=1;
3:
start_p3:=0;
stop_p3:=1;
4:
start_p4:=0;
stop_p4:=1;
END_CASE;
END_IF;
IF NOT Duty3_Requested AND Number_Of_Running_Pumps=3 THEN
CASE Ready_Pumps_To_Run[2] OF
1:
start_p1:=0;
stop_p1:=1;
2:
start_p2:=0;
stop_p2:=1;
3:
start_p3:=0;
stop_p3:=1;
4:
start_p4:=0;
stop_p4:=1;
END_CASE;
END_IF;
IF NOT Duty2_Requested AND Number_Of_Running_Pumps=2 THEN
CASE Ready_Pumps_To_Run[1] OF
1:
start_p1:=0;
stop_p1:=1;
2:
start_p2:=0;
stop_p2:=1;
3:
start_p3:=0;
stop_p3:=1;
4:
start_p4:=0;
stop_p4:=1;
END_CASE;
END_IF;
IF NOT Duty1_Requested AND Number_Of_Running_Pumps=1 THEN
CASE Ready_Pumps_To_Run[0] OF
1:
start_p1:=0;
stop_p1:=1;
2:
start_p2:=0;
stop_p2:=1;
3:
start_p3:=0;
stop_p3:=1;
4:
start_p4:=0;
stop_p4:=1;
END_CASE;
END_IF;
END_FUNCTION_BLOCK