PDA

Просмотр полной версии : Вопрос по программированию ПЛК100



neoarey
18.03.2011, 22:14
Подскажите как сначала выключить выход, а потом включить. Надеюсь ясно выражаюсь. К примеру если на входе 1 true, то горит выход 3 1,5 сек, потом выключается и ещё через 1,5 включается заново.

PROGRAM PLC_PRG
VAR
tim1: TP;
tim2: TON;
END_VAR

IF in1 THEN
tim1(IN:=TRUE, PT:=t#1.5s, Q=>out3);
tim2(IN:=TRUE, PT:=t#3s, Q=>out3);
ELSE
tim1(IN:=FALSE);
tim2(IN:=FALSE);
END_IF;

Tim1 выключает, tim2 включает. Во всяком случае должен :( . По отдельности (выключение с задержкой и включение) всё прекрасно работает. А так, видимо, tim1 не даёт его заново включить... Подскажите, как решаются подобные задачи. Спс.

Gans
19.03.2011, 08:30
Из того что понял

VAR
blnInPut1:BOOL:=FALSE;
blnOutPut3:BOOL;
TON1: TON;
TP1: TP;
END_VAR

(*Сама программа*)
TON1(IN:=blnInPut1, PT:=t#1.5s);
TP1(IN:=TON1.Q, PT:=t#1.5s);
blnOutPut3:=NOT TP1.Q;

P. S. Тут надо уточнить какое состояние выхода 3 при длительном false на входе 1. И конечно же Валенок предложил более дельный совет, если это не вся программа :-)

kolyan
19.03.2011, 11:22
А, может вот так:

neoarey
20.03.2011, 11:54
to Валенок

А вы уверены что при новом п.фронте in1 ваш блинк начнет с нуля ?

Он и должен начинать с нуля...


Суть такова: если есть определённая комбинация сигналов на входах, выполняется одна программа включения и выключения выходов, поменялась комбинация - выполняется другая. Т. е. если убрать сигнал с какого нибудь входа, условие не выполняется и программа тоже...

Подскажите как мне перевести это в конструкцию If ... THEN:

tim1(IN :=in1, PT:=t#1.5s);
tim2(IN:= in1, PT:=t#3s);
out3:=in1 AND (NOT tim1.Q OR tim2.Q);

К примеру вот это выглядит так:

tim1(IN := in1, PT := T#3s);
out3:=tim1.Q;

IF in1 THEN
tim2(IN:=TRUE, PT:=t#3s, Q=>out3);
ELSE
tim2(IN:=FALSE);
END_IF;

neoarey
20.03.2011, 15:54
Что то я не понял. Вcё работает нормально:

IF in1 THEN
tim2(IN:=TRUE, PT:=t#3s, Q=>out3);
ELSE
tim2(IN:=FALSE);
END_IF;

Если убрать это, то сигнал остаётся на выходе:

ELSE
tim2(IN:=FALSE);

А IF нужно для разных комбинаций... Т.е. примерно так:

IF in1 AND in2 AND in5 AND in7 AND NOT in3 AND NOT in4 AND NOT in6 AND
ПРОГРАММА 1
END_IF;

IF in1 AND in2 AND in7 AND NOT in3 AND NOT in4 AND NOT in5 AND NOT in6
ПРОГРАММА 2
END_IF;

...

IF in1 AND in2 AND in5 AND NOT in3 AND NOT in4 AND NOT in6 AND NOT in7
ПРОГРАММА N
END_IF;

Разве IF не является селектором? Так как мне всё таки это перевести:

tim1(IN :=in1, PT:=t#1.5s);
tim2(IN:= in1, PT:=t#3s);
out3:=in1 AND (NOT tim1.Q OR tim2.Q);

kolyan
22.03.2011, 20:11
Что то я не понял. Вcё работает нормально:

IF in1 THEN
tim2(IN:=TRUE, PT:=t#3s, Q=>out3);
ELSE
tim2(IN:=FALSE);
END_IF;

Если убрать это, то сигнал остаётся на выходе:

ELSE
tim2(IN:=FALSE);

А IF нужно для разных комбинаций... Т.е. примерно так:

IF in1 AND in2 AND in5 AND in7 AND NOT in3 AND NOT in4 AND NOT in6 AND
ПРОГРАММА 1
END_IF;

IF in1 AND in2 AND in7 AND NOT in3 AND NOT in4 AND NOT in5 AND NOT in6
ПРОГРАММА 2
END_IF;

...

IF in1 AND in2 AND in5 AND NOT in3 AND NOT in4 AND NOT in6 AND NOT in7
ПРОГРАММА N
END_IF;

Разве IF не является селектором? Так как мне всё таки это перевести:

tim1(IN :=in1, PT:=t#1.5s);
tim2(IN:= in1, PT:=t#3s);
out3:=in1 AND (NOT tim1.Q OR tim2.Q);


У меня громоздко получилось, но работает ( первые Ваши 2 условия: первая программа - включены 1,2,5 и 7й входы; 2 программа -включены 1,2,7й входы ):