PDA

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



webage
05.12.2013, 16:30
Добрый день. Подскажите как решить задачу. Делаю дома управление светом. Необходимо чтобы при нажатии на выключатель кнопку 1 раз свет включался, 2 раз выключался. Так же на один выключатель который будет в коридоре сделать выключение всех групп света. Что удалось сделать:
1) Включение и выключение лампы с таймером задержки.

rt(CLK:=A);

IF rt.Q THEN
tm_start(IN:=TRUE , PT:=t );
END_IF

tm_start;

IF tm_start.Q AND NOT Y THEN
Y:=TRUE;
tm_start(IN:=FALSE , PT:=t );
ELSIF tm_start.Q AND Y THEN
Y:=FALSE;
tm_start(IN:=FALSE , PT:=t );
END_IF

Но не понятно, нужно делать такие обработки для каждой кнопки или можно унифицировать код.
2) не могу понять как реализовать выключение всех групп света при условии что я держу кнопку Y в течении 3-х секунд.

Sergey666
05.12.2013, 16:37
Оформить такой обработчик в виде функционального блока в проекте .
2.так-же через таймер и выключать все группы , код правильно написан , прямого присвоения нет.

webage
05.12.2013, 17:03
А как сделать чтобы не срабатывал первый таймер на 0,03 сек., ведь кнопка в коридоре должна включать и выключать свет в коридоре и выключать все группы освещения.

capzap
05.12.2013, 17:04
В оскат библиотеку сходите, там есть поу со всевозможными нажатиями

webage
05.12.2013, 22:01
Оформить такой обработчик в виде функционального блока в проекте .
2.так-же через таймер и выключать все группы , код правильно написан , прямого присвоения нет.

А как выглядит этот функционального блока, я просто только второй день этим занимаюсь и не все понимаю. Можно пример привести.

amn
05.12.2013, 23:23
Добрый день. Подскажите как решить задачу. Делаю дома управление светом. Необходимо чтобы при нажатии на выключатель кнопку 1 раз свет включался, 2 раз выключался. Так же на один выключатель который будет в коридоре сделать выключение всех групп света.


FUNCTION_BLOCK prim1
VAR_INPUT
in: BOOL; (*кнопка*)
off:BOOL; (*на этот вход подается выход off_all для отключения всех групп освещения*)
END_VAR
VAR_OUTPUT
Q: BOOL; (*лампочка*)
off_all:BOOL; (*выход для выключения всех лампочек*)
END_VAR
VAR
step: BYTE;
R_TRIG1: R_TRIG;
TON1: TON;
pt: TIME := t#3s;
END_VAR

----------------------------

TON1(IN:=in , PT:=pt , Q=> , ET=> ); (*таймер для отключения всего освещения*)
R_TRIG1(CLK:=in , Q=> );(*нужен для включения/выключения лампочки в коридоре*)

CASE step OF
0: (*шаг включение лампочки*)
IF R_TRIG1.Q THEN
Q:=TRUE;
step:=1;
END_IF
1: (*шаг отключения лампочки*)
IF R_TRIG1.Q THEN
Q:=FALSE;
step:=0;
END_IF
END_CASE

(*для отключения всего освещения*)
off_all:=TON1.Q;(*если кнопку держали 3 секунды отключаем все группы освещения*)
IF off THEN (*пришел сигнал на оключение всех групп освещения*)
Q:=FALSE;
step:=0;
END_IF

Sergey666
05.12.2013, 23:34
Получи и распишись.

webage
06.12.2013, 00:43
FUNCTION_BLOCK prim1
VAR_INPUT
in: BOOL; (*кнопка*)
off:BOOL; (*на этот вход подается выход off_all для отключения всех групп освещения*)
END_VAR
VAR_OUTPUT
Q: BOOL; (*лампочка*)
off_all:BOOL; (*выход для выключения всех лампочек*)
END_VAR
VAR
step: BYTE;
R_TRIG1: R_TRIG;
TON1: TON;
pt: TIME := t#3s;
END_VAR

----------------------------

TON1(IN:=in , PT:=pt , Q=> , ET=> ); (*таймер для отключения всего освещения*)
R_TRIG1(CLK:=in , Q=> );(*нужен для включения/выключения лампочки в коридоре*)

CASE step OF
0: (*шаг включение лампочки*)
IF R_TRIG1.Q THEN
Q:=TRUE;
step:=1;
END_IF
1: (*шаг отключения лампочки*)
IF R_TRIG1.Q THEN
Q:=FALSE;
step:=0;
END_IF
END_CASE

(*для отключения всего освещения*)
off_all:=TON1.Q;(*если кнопку держали 3 секунды отключаем все группы освещения*)
IF off THEN (*пришел сигнал на оключение всех групп освещения*)
Q:=FALSE;
step:=0;
END_IF


Получи и распишись.

Спасибо большое, а подскажите в каких случаях используется CASE, вообще какую роль он выполняет в сценарии?

amn
06.12.2013, 11:29
Про CASE можно почитать в документации CoDeSys_V23_RU.pdf стр 24. Его особенность в том, что в текущем цикле выполняются только те инструкции, которые соответсвуют значению переменной (в моем случае переменная step).