А Вы точно пишите на LD?
Элементарно обозвать катушку.
Вид для печати
А Вы точно пишите на LD?
Элементарно обозвать катушку.
Просто нужно использовать "Элемент с EN"
В качестве элемента - MOVE
Вложение 33983
Таким способом можно и вычисления делать, там где MOVE писать ADD, SUB, ... Или условия проверять.
Или ФБ вызывать
Скрытый текст:
Граждане! Помогите. Не работает таймер в функциональном блоке.
Вложение 34004
FUNCTION_BLOCK gws_upr_pumps
VAR_INPUT
auto1: BOOL; (*Переключатель 1 насоса в автомате*)
man1: BOOL; (*Переключатель 1 насоса в ручном*)
auto2: BOOL; (*Переключатель 2 насоса в автомате*)
man2: BOOL; (*Переключатель 1 насоса в ручном*)
num: BOOL; (*Основной насос false - 1, true - 2*)
k1: BOOL; (*Контакт пускателя 1 насоса*)
k2: BOOL; (*Контакт пускателя 2 насоса*)
rdd: BOOL; (*Перепад на насосной группе*)
END_VAR
VAR_OUTPUT
out1: BOOL; (*Насос 1*)
out2: BOOL; (*Насос 2*)
al1: BOOL; (*Авария насоса 1*)
al2: BOOL; (*Авария насоса 2*)
END_VAR
VAR
g: BYTE;
gp1: pump;
gp2: pump;
t1: TON := (pt := t#10s);
g1, g2: BOOL;
END_VAR
IF man1 OR man2 THEN g := 0; (*Если хоть один насос включен в ручном режиме*)
ELSIF auto1 AND NOT auto2 THEN g := 1; (*Если включен в работу только 1 насос*)
ELSIF NOT auto1 AND auto2 THEN g := 2; (*Если включен в работу только 2 насос*)
ELSIF auto1 AND auto2 AND NOT num THEN g := 12; (*Если включены насосы 1 и 2 и 1 основной*)
ELSIF auto1 AND auto2 AND num THEN g := 21; (*Если включены насосы 1 и 2 и 2 основной*)
ELSE
g := 0;
END_IF;
CASE g OF
0: g1 := FALSE;
g2 := FALSE;
t1.IN := FALSE;
1: g1 := auto1 AND NOT al1;
g2 := FALSE;
t1.IN := FALSE;
2: g2 := auto2 AND NOT al2;
g1 := FALSE;
t1.IN := FALSE;
12: g1 := auto1 AND NOT al1;
t1.IN := al1;
g2 := auto2 AND NOT al2 AND t1.Q;
21: g2 := auto2 AND NOT al2;
t1.IN := al2;
g1 := auto1 AND NOT al1 AND t1.Q;
ELSE
out1 := FALSE;
out2 := FALSE;
END_CASE;
gp1(en := g1, res_alarm := NOT auto1 AND NOT man1, k := k1, rdd := rdd, out=> out1, alarm=> al1);
gp2(en := g2, res_alarm := NOT auto2 AND NOT man2, k := k2, rdd := rdd, out=> out2, alarm=> al2);
Так он, таймер, нигде не вызывается. Зачем ему работать. ему и так хорошо.
В кейсах входу IN таймера присваивается некое значение, но сам таймер не вызывается.
Почему тогда здесь работает?
VAR
p1: pump;
p2: pump;
p3: pump;
t1: TON := (pt := t#10s);
t2: TON := (pt := t#10s);
pp1, pp2, pp3: BOOL;
END_VAR
CASE num OF
0: (*Не включен ни один насос*)
pp1 := FALSE;
pp2 := FALSE;
pp3 := FALSE;
t1.IN := FALSE;
t2.IN := FALSE;
(************************************************* ************************************************** *)
1: (*Работает только сетевой-1*)
pp1 := NOT al1;
pp2 := FALSE;
pp3 := FALSE;
t1.IN := FALSE;
t2.IN := FALSE;
(************************************************* ************************************************** *)
2: (*Работает только сетевой-2*)
pp2 := NOT al2;
pp1 := FALSE;
pp3 := FALSE;
t1.IN := FALSE;
t2.IN := FALSE;
(************************************************* ************************************************** *)
3: (*Работает только сетевой-3*)
pp3 := NOT al3;
pp1 := FALSE;
pp2 := FALSE;
t1.IN := FALSE;
t2.IN := FALSE;
(************************************************* ************************************************** *)
12: (*Включены 1 и 2*)
pp1 := NOT al1;
t1.IN := al1;
pp2 := NOT al2 AND t1.Q;
pp3 := FALSE;
(************************************************* ************************************************** *)
23: (*Включены 2 и 3*)
pp2 := NOT al2;
t1.IN := al2;
pp3 := NOT al3 AND t1.Q;
pp1 := FALSE;
(************************************************* ************************************************** *)
13: (*Включены 1 и 3*)
pp1 := NOT al1;
t1.IN := al1;
pp3 := NOT al3 AND t1.Q;
pp2 := FALSE;
(************************************************* ************************************************** *)
31: (*Включены 3 и 1*)
pp3 := NOT al3;
t1.IN := al3;
pp1 := NOT al1 AND t1.Q;
pp2 := FALSE;
(************************************************* ************************************************** *)
123: (*Включены 1 и 2 и 3*)
pp1 := NOT al1;
t1.IN := al1;
pp2 := NOT al2 AND t1.Q;
t2.IN := al1 AND al2;
pp3 := NOT al3 AND t2.Q;
(************************************************* ************************************************** *)
132: (*Включены 1 и 3 и 2*)
pp1 := NOT al1;
t1.IN := al1;
pp3 := NOT al3 AND t1.Q;
t2.IN := al1 AND al3;
pp2 := NOT al2 AND t2.Q;
(************************************************* ************************************************** *)
213: (*Включены 2 и 1 и 3*)
pp2 := NOT al2;
t1.IN := al2;
pp1 := NOT al1 AND t1.Q;
t2.IN := al1 AND al2;
pp3 := NOT al3 AND t2.Q;
(************************************************* ************************************************** *)
231: (*Включены 2 и 3 и 1*)
pp2 := NOT al2;
t1.IN := al2;
pp3 := NOT al3 AND t1.Q;
t2.IN := al2 AND al3;
pp1 := NOT al1 AND t2.Q;
(************************************************* ************************************************** *)
312: (*Включены 3 и 1 и 2*)
pp3 := NOT al3;
t1.IN := al3;
pp1 := NOT al1 AND t1.Q;
t2.IN := al3 AND al1;
pp2 := NOT al2 AND t2.Q;
(************************************************* ************************************************** *)
321: (*Включены 3 и 2 и 1*)
pp3 := NOT al3;
t1.IN := al3;
pp2 := NOT al2 AND t1.Q;
t2.IN := al3 AND al2;
pp1 := NOT al1 AND t2.Q;
ELSE
out1 := FALSE;
out2 := FALSE;
out3 := FALSE;
END_CASE;
p1 (en:= pp1, res_alarm:= res1, k:= k1, rdd:= rdd, out=> out1, alarm=> al1);
p2 (en:= pp2, res_alarm:= res2, k:= k2, rdd:= rdd, out=> out2, alarm=> al2);
p3 (en:= pp3, res_alarm:= res3, k:= k1, rdd:= rdd, out=> out3, alarm=> al3);
Вложение 34006 Пожалуйста. С тремя насосами работает, с двумя нет.