FUNCTION_BLOCK pump
VAR_INPUT
c1: BYTE:=1; (* первый в очереди*)
c2: BYTE:=2; (* второй в очереди*)
c3: BYTE:=3; (* третий в очереди*)
c4: BYTE:=4; (* четвертый в очереди*)
c5: BYTE:=5; (* пятый в очереди*)
bSR: BOOL; (* 1 - старт, 0 - стоп/резет *)
bs: BOOL; (*сигнал на переключение (по заднему фронту)*)
END_VAR
VAR_OUTPUT
p1, p2, p3, p4, p5: BOOL; (* насосы *)
END_VAR
VAR
ft1: F_TRIG;
rt1: R_TRIG;
pm: ARRAY[0..5] OF BYTE;
nm: BYTE;
a: BYTE:=0;
b: BYTE:=1;
num: BYTE;
END_VAR
num:=0;
IF c1 > 0 THEN
num:=num+1;
pm[num]:=SHL(b,c1-1);
END_IF;
IF c2 > 0 THEN
num:=num+1;
pm[num]:=SHL(b,c2-1);
END_IF;
IF c3 > 0 THEN
num:=num+1;
pm[num]:=SHL(b,c3-1);
END_IF;
IF c4 >0 THEN
num:=num+1;
pm[num]:=SHL(b,c4-1);
END_IF;
IF c5 > 0 THEN
num:=num+1;
pm[num]:=SHL(b,c5-1);
END_IF;
IF NOT bSR THEN nm:=0; END_IF; (* стоп / резет*)
rt1(CLK:=bSR);
IF rt1.Q THEN nm:=1; END_IF; (* старт*)
ft1(clk:=bs);
IF ft1.Q AND num > 0 AND bSR THEN
nm:=(nm+1);
IF nm > num THEN nm:=1; END_IF;
END_IF;
a:=31 AND pm[nm];
p1:=a.0;
p2:=a.1;
p3:=a.2;
p4:=a.3;
p5:=a.4;