PDA

Просмотр полной версии : регулятор напряжения



ohwow
12.01.2016, 12:48
Здравствуйте. Имеется модуль ввода параметров электрической сети МЭ110-220.3М, который подключен к контроллеру ОВЕН ПЛК100. Модуль измеряет напряжение каждую секунду, и если напряжение выше 230 В, то контроллер подает сигнал на включение контактора, если в течении 10 секунд напряжение ниже 230 В, контроллер подает сигнал на отключение этого контактора. Подскажите каким образом реализовать этот алгоритм?

kolyan
12.01.2016, 13:14
Навскидку, может быть, так:


VAR
out: BOOL; (*Выход управления контактором*)
in: REAL; (*Вход измерения напряжения*)
tp1: TP; (*Таймер*)
END_VAR


TP1(IN:=(in<230) , PT:=t#10s);
out:= (in>230) OR (in<230) AND tp1.Q;

Ну, а там можно и усложнять (гистерезис и.т.д.).

kolyan
13.01.2016, 07:54
Или, если ещё проще:
__________________________________________________ ____________________

VAR
TON1: TON;
in: REAL;
out1: BOOL;
END_VAR
__________________________________________________ ____________________

TON1(IN:=(in<230), PT:=t#10s );
out1:=NOT ton1.Q;

__________________________________________________ ____________________

Yegor
13.01.2016, 08:08
tof1(IN := in >= 230, PT := T#10s, Q => out1);

kolyan
13.01.2016, 08:14
+1000!
Вот самый оптимальный код!!!

ohwow
13.01.2016, 08:57
На языке CFC собрал вот такую цепь21724
Если u1>u то через 10 секунд на out будет подан сигнал true. Если после этого u1<u, то запустится таймер TOF и на out будет сигнал true еще 10 секунд, после чего out изменится на false. Но если значение u1 становится больше u (u1>u) когда уже запущен таймер TOF, то сигнал на out пропадет на некоторое время (разница между t2 и t3) и затем снова появится. Как избежать такой ситуации, когда пропадает сигнал с out?

Yegor
13.01.2016, 10:01
Я честно пытался понять, что вам требуется, но вынужден сдаться.
Модуль измеряет напряжение каждую секундуЧто делать с этой информацией? Это часть алгоритма?
и если напряжение выше 230 В, то контроллер подает сигнал на включение контактораНо во втором сообщении вы почему-то включаете его только через 10 секунд после возникновения такой ситуации.
если в течении 10 секунд напряжение ниже 230 В, контроллер подает сигнал на отключение этого контактораВ течение этих 10 секунд подаёт сигнал? Или через 10 секунд его подаёт? Русский мой родной язык, и я не могу разобрать это полу-предложение.
разница между t2 и t3Это тоже частью алгоритма должно быть или вы просто наблюдаете по этим переменным?

Циклограммы в студию, кароч. Иначе фиг поймёшь.

kolyan
13.01.2016, 12:00
На языке CFC собрал вот такую цепь21724
Если u1>u то через 10 секунд на out будет подан сигнал true. Если после этого u1<u, то запустится таймер TOF и на out будет сигнал true еще 10 секунд, после чего out изменится на false. Но если значение u1 становится больше u (u1>u) когда уже запущен таймер TOF, то сигнал на out пропадет на некоторое время (разница между t2 и t3) и затем снова появится. Как избежать такой ситуации, когда пропадает сигнал с out?

Вам же Yegor самый простой пример привел:

VAR
tof1: TOF;
out: BOOL;
u1: REAL:=235;
tim: TIME:=t#10s;
END_VAR

ohwow
13.01.2016, 14:14
Все верно, пример, который предложил Yegor действительно работает. Теперь же условие усложнилось и нужно сделать следующее:


Циклограммы в студию, кароч. Иначе фиг поймёшь.
u1 изменяется каждую секунду и сравнивается со значением 230, значение out:=true. Если u1<230 в течении 10 секунд (допустим 225,226,225,222,...,226), то на выходе таймера out:=false, иначе счетчик обнуляется и значение out остается прежним out:=true. Если u1>=230 в течении 10 секунд (допустим 235,236,235,232,...,236), то на выходе таймера out:=true, иначе счетчик обнуляется и на выходе таймера значение out:=false.

Прошу прощения за мое корявое описание алгоритма, я только начинаю знакомиться с программированием.

Владимир Ситников
13.01.2016, 14:30
График напряжения от времени нарисуйте.
И график желаемого значения на выходе.
И не просто какой-то, а чтобы там были случаи скачков напряжения туда-сюда и т.п.

Прогаммировать нужно после того, как стало понятно как должна вести себя система.

ohwow
13.01.2016, 16:13
Диаграмма напряжения u от времени и значения на выходе out21734

В 1 варианте c 8 по 18 секунды напряжение больше 230 в течение 10 секунд - значение на выходе становится true;
Во 2 варианте с 25 по 35 секунды напряжение ниже 230 в течение 10 секунд - значение на выходе становится false;
В 3 варианте с 36 по 40 секунды напряжение выше 230 в течение 4 секунд - значение на выходе остается false;
в 4 варианте с 41 по 51 секунды напряжение выше 230 в течение 10 секунд - значение на выходе становится true;
в 5 варианте с 55 по 60 секунды напряжение выше 230 в течение 5 секунд - значение на выходе остается true.

petera
13.01.2016, 20:35
Диаграмма напряжения u от времени и значения на выходе out21734

В 1 варианте c 8 по 18 секунды напряжение больше 230 в течение 10 секунд - значение на выходе становится true;
Во 2 варианте с 25 по 35 секунды напряжение ниже 230 в течение 10 секунд - значение на выходе становится false;
В 3 варианте с 36 по 40 секунды напряжение выше 230 в течение 4 секунд - значение на выходе остается false;
в 4 варианте с 41 по 51 секунды напряжение выше 230 в течение 10 секунд - значение на выходе становится true;
в 5 варианте с 55 по 60 секунды напряжение выше 230 в течение 5 секунд - значение на выходе остается true.
Например так
21737

Владимир Ситников
13.01.2016, 20:41
картинка

О, совсем другой разговор.

Теперь вопрос: почему кратковременное падения напряжения после 3 го фрагмента не срабатывает сигнал?

По-вашему как должно быть, если 9 секунд напряжение 240, потом 1 секунду 220, и так в цикле?

petera
13.01.2016, 21:37
О, совсем другой разговор.

Теперь вопрос: почему кратковременное падения напряжения после 3 го фрагмента не срабатывает сигнал?

По-вашему как должно быть, если 9 секунд напряжение 240, потом 1 секунду 220, и так в цикле?
Откуда я знаю, как должно быть.
Сделал как просили если напряжение больше 230 в течение 10с и более, то Out:=TRUE. 9 секунд меньше 10, по этому Out:=FALSE.

Владимир Ситников
13.01.2016, 23:25
Откуда я знаю, как должно быть

Этот вопрос у меня к ohwow был.

ohwow
14.01.2016, 09:31
Теперь вопрос: почему кратковременное падения напряжения после 3 го фрагмента не срабатывает сигнал?

По-вашему как должно быть, если 9 секунд напряжение 240, потом 1 секунду 220, и так в цикле?

Отвечаю:
1. После 3 фрагмента значение u меняет знак (его стоило бы тоже выделить). Этот фрагмент схож с фрагментом 5 — там также в момент, когда u становится меньше 230, запускается таймер. Так как u меньше 230 всего 2 секунды, таймер сбрасывается и сигнал остается прежним.

2. Если установлен out:=false, 9 секунд напряжение 240, а потом 1 секунду 220, то счетчик сбрасывается и остается прежним out:=false.


Например так
21737
petera, спасибо, пример работает как надо.

Всем спасибо за помощь.