Просмотр полной версии : Вопрос по программированию ПЛК100
Подскажите как сначала выключить выход, а потом включить. Надеюсь ясно выражаюсь. К примеру если на входе 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 не даёт его заново включить... Подскажите, как решаются подобные задачи. Спс.
Из того что понял
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. И конечно же Валенок предложил более дельный совет, если это не вся программа :-)
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;
Что то я не понял. В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);
Что то я не понял. В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й входы ):
Powered by vBulletin® Version 4.2.3 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot