PDA

Просмотр полной версии : Имитация уменьшения/увеличения



mast_sup
24.04.2012, 16:10
Всем доброго времени суток. В Codesys совсем недавно, можно сказать зеленый =), мне бы хотелось узнать имеется ли в Codesys имитация увеличения/уменьшения уровня и увеличения/уменьшения температуры (в принципе одно и тоже), в целом уменьшение/увеличение параметра.
В Siemens (Step7 - Wincc), это реализовалась блоком имитация увеличения - INC_W, а уменьшения - DEC_W.
Собственно вопрос, имеется ли такая же реализация в Codesys, и подскажите как реализовать если что ?.
Цель: Имеется емкость, нужно открыть клапан и дождаться наполнения до 80% к примеру, потом открыть клапан2, и дождаться пока уровень опустится до 10%.
В наличии имеется сама Codesys 2.3 и "Режим эмуляции". Контроллера не какого не имеется.
Спасибо за ответ.
P.S
Желателен язык LD или FBD.

rovki
24.04.2012, 16:44
В качестве имитатора используйте счетчик CTN ,на счетные входа (+-) подайте импульсы со входов или генератора .

dr_gebbels
24.04.2012, 17:01
самый простой случай:

в визулизации Codesys 2.3 создаете объекты визулизации==>

1) столбчатый индикатор-будет имитировать уровень в емкости-это аналоговый сигнал
2) кнопки вкл/выкл. обоих клапанов- это дискретные сигналы

в свойствах этих объектов визулизации жестко привязываете переменные для переменных 1) и 2)

и останется самая малость ==> создать зависимость (т.е. алгоритм) скорости заполнения
емкости с момента открытия первого клапаночка,

если этого алгоритма НЕ создавать-тогда нужно создать исчо 1 объект визулизации==>
ползунок (вертикальный) -это будет задатчик уровня,который будет имитировать
уровень заполнения емкости==> чтобы проверить работу ==> второго клапаночка.

примерно так.

mast_sup
16.05.2012, 09:20
Спасибо, все попробую, вот тут еще вопрос, как можно мой проект зациклить? ну чтобы работа происходила по кругу.

Работа моя в Codesys 2.3

mast_sup
16.05.2012, 10:04
Не один из ваших 2-х способов не удалось мне реализовать,
rovki счетчик CTn не нашел, другие пробовал, чет не получается, ставил счетчик а как подачу импульса реализовать то? Пробовал R_TRIG и F_TRIG ставить, нечего не куда не идет, и увлечение или уменьшение не происходит.
dr_gebbels в твоем методе вообще чет я нечего не понял, создал столбчатый индикатор, кнопки и все (( приехал..

Опишу вообще весь процесс..
Открывает клапан К1, контролируем уровень L, если L=L1 то да, иначе нет (в этот момент как бы происходит наполнение уровня, L1=8000), потом закрыть клапан К-1, открыть К-2 и контролировать уровень L? Если L=L2 то да, иначе нет (происходит увлечение уровня, L2=12000), далее закрыть клапан К-2, включить мешалку, открыть клапан К-3 и контролировать температуру, если T=Tзад да, иначе нет (идет увлечение температуры Tзад=2000), далее закрыть клапан К-3, установить выдержку времени, контролировать время (ну тут со временем просто все, можно и не думать). далее Отключаем мешалку, открываем К-4 и контролируем уровень L, если L=0 то да, иначе нет (тут идет уменьшение уровня). далее закрыть клапан К-4 и сбросить температуру в 0.

Вот такой нужен в целом процесс.

mast_sup
16.05.2012, 11:37
я вот сделал через Blink что то, но как ему ограничить? Как остановить Blink чтобы при достижении нужного числа в CTU , нарастание прекратилось.

mast_sup
16.05.2012, 11:52
ЗЫ :) неуспел

если честно я на форуме, этот ролик от вас нашел =) , подскажите как прекратить рост в CTU при достижении требуемой величины ?

mast_sup
16.05.2012, 12:02
соединяется? ) хм, ну я на языке LD попробовал конечно поставить катушку сброса, и написать (к примеру L1 (R)) L1 на Reset, но он не сбрасывает. Может можно как то Запретить блинку импульсы подавать ? и тогда набор дальше не будет идти. Притом мне как нужно то, сначала до 8000 набираем, а потом с 8000 до 12000, а как я понял CTU всегда начинает набор с нуля. Как реализовать ? или я не так понял.

mast_sup
16.05.2012, 12:07
( CU := blk.OUT AND flag ; )
можно по подробнее, я малость нубоват в этой области

mast_sup
16.05.2012, 13:32
не. не выходит, в ST работает, вставляю в цепь пишет (назвал Nabor), Nabor должен содержать ровно 0 входов.

И еще, если делаю не в PLC_PRG, с другим названием, просто не хочет работать не в ST не в конвертированном виде.

Имеется ли в Codesys блок подобный CTU но чтоб не с 0 начинал, а к примеру с 50 до 200, и на уменьшение также, с 200 до 50.
Или это можно как то в CTU задать?

swerder
16.05.2012, 15:13
CTUD входы LOAD и PV

mast_sup
16.05.2012, 15:15
CTUD входы LOAD и PV

ага спасибо.

mast_sup
16.05.2012, 15:25
а кто нибудь может ответить то на мой вопрос , по поводу (http://www.owen.ru/forum/showpost.php?p=83088&postcount=4)

mast_sup
16.05.2012, 15:41
CTUD входы LOAD и PV

Походу не то, быть может я что то не так делаю.
Уточню подробно:
Мне нужно начать увеличение не с 0, а с 5 и до 10.
И уменьшение начать с 10 до 5, но не до 0.

capzap
я сделал остановку роста в CTU счетчика, конечно по другому) но все же, импульсы то подаются между Blink и CTU, но счет CTU не ведет :). Теперь задача, в 1 раз увеличение проходило к примеру до 5, а теперь надо не с 0, а с 5 и до 10.

swerder
16.05.2012, 15:53
Мне нужно начать увеличение не с 0, а с 5
перед началом подаете на вход пв вашу пятёрку, подаете тру на лоад, вуалая, на выходе уже 5

и до 10.
с этим сложнее. что должно быть по достижении?
придется сравнивать выход счетчика с числами и там уже плясать.


И уменьшение начать с 10 до 5, но не до 0.


аналогично.

вообще лучше написать все самому на st как надо.

mast_sup
16.05.2012, 15:57
перед началом подаете на вход пв вашу пятёрку, подаете тру на лоад, вуалая, на выходе уже 5

с этим сложнее. что должно быть по достижении?
придется сравнивать выход счетчика с числами и там уже плясать.


аналогично.

вообще лучше написать все самому на st как надо.

Это понятно, что на выходе сразу получится 5, но тут получается как PV стоит 5 и CV 5 и следовательно выход уходит в TRUE, а дальше что еще один блок CTU ставить? (как продолжить увеличение до 10 ?), после достижения 10, так следует пустить сигнал дальше, к примеру закрыть клапан 2.

swerder
16.05.2012, 17:18
следовательно выход уходит в TRUE
и что? нас интересует выход CV

а дальше что еще один блок CTU ставить?
зачем?

(как продолжить увеличение до 10 ?)
переключать вход CU

после достижения 10, так следует пустить сигнал дальше, к примеру закрыть клапан 2.
ну и привяжите на выход CV блок GE

swerder
16.05.2012, 17:30
вообще напишите пару строк, и все будет работать как захотите
if если_надо5 then
счетчик := 5;
else
счетчик := 10;
end_if;
if больше then
счетчик := счетчик +1;
end_if;
if меньше then
счетчик := счетчик -1;
end_if;
вкл_движок =: счетчик >= верхний_предел;
выкл_движок =: счетчик <= нижний_предел;

mast_sup
16.05.2012, 17:33
ST не мой профиль, я с LD лучше намного дружу)

swerder
16.05.2012, 17:40
извините, но реализовывать этот алгоритм на LD тот еще изврат

smk1635
16.05.2012, 21:44
На форуме уже выкладывал пример, правда по другому вопросу. Может подойдет, если ручной режим не напрягает. С имитировать уменьшение или увеличение получится.

mast_sup
17.05.2012, 08:05
Ладно, всем спасибо буду пытаться, ну а пока еще один вопрос стоит открытым с 4 сообщения, вот он (http://www.owen.ru/forum/showpost.php?p=83088&postcount=4)

mast_sup
17.05.2012, 12:55
Нет, я понял что в ПЛК он будет в цикле, а в режиме эмуляции как повтор сделать, мне нужно чтоб программа работала по кругу в режиме модуляции ), т.к. контроллера уж точно использоваться не будет.

Yegor
17.05.2012, 12:57
В режиме эмуляции тоже по кругу выполнение идёт.

mast_sup
17.05.2012, 12:58
Вот как раз таки нет, он доходит до конца и все. Я пробовал ставил пере направление на начало, но все равно не получается.

mast_sup
17.05.2012, 13:07
я обычно нажимаю F5 старт, и потом ctrl+F7
Даже если просто F5 нажать, то цикл происходит 1.

mast_sup
17.05.2012, 13:31
Ну я в сообщение приложил мой проект, можете там глянуть.

И еще с CTU я разобрался, там на PV подается нужное значение и CV растет до него, а вот с CTD чет не могу, подают на PV нужное значение, Blink дает импульс, но уменьшение не происходит (( почему то выход сразу на TRUE идет.

Yegor
17.05.2012, 14:38
А, вон вы о чём. Ну, это не похоже на самую оптимальную реализацию светофора. Очередное сборище таймеров. А вообще по светофорам SFC плачет.

mast_sup
17.05.2012, 14:48
А, вон вы о чём. Ну, это не похоже на самую оптимальную реализацию светофора. Очередное сборище таймеров. А вообще по светофорам SFC плачет.

Сборище таймеров, предполагалось в задании ).

P.S
кто подскажет на счет CTD

mast_sup
17.05.2012, 16:05
Ну вот , при такой связке (когда стоит TRUE на Load) он не уменьшает, подскажите что я не так делаю тут?

capzap в вашем примере, происходит постоянное мигание желтого цвета ) это спецом задумано, для "Мол вот часть, дальше сами додумаете?"

swerder
17.05.2012, 16:25
не видно ничего

mast_sup
17.05.2012, 16:29
Вот приложил оригинал

swerder
17.05.2012, 16:52
так а как же он у вас будет работать, коль вы его в каждом цикле насильно приравниваете к значению pv?
p.s. реактор у вас, надеюсь, не атомный? :)

capzap не это, blink выдает импульсы со всеми нужными фронтами

swerder
17.05.2012, 16:58
там не проект, а картинка большая, посмотрите

mast_sup
17.05.2012, 17:11
так а как же он у вас будет работать, коль вы его в каждом цикле насильно приравниваете к значению pv?
p.s. реактор у вас, надеюсь, не атомный? :)

capzap не это, blink выдает импульсы со всеми нужными фронтами

Да реактор, просто слили, смешали, вылили и все =) (это своего рода лабораторная работа), делалась она на LD в Simense , а мне надо её в другом сделать (в моем случаи Codesys, опять же на LD).

А откуда мне тогда завести значение PV, в 1 случаи надо с 12 сбросить в 0, а во втором с 3 в 0.

mast_sup
17.05.2012, 17:26
Всем спасибо, зацикливание прошло успешно. С реактором тоже разобрался и с 1 и с 2.

Далее если буду возникать вопросы по другим делам, буду спрашивать здесь же

P.S тему не закрывайте, хоть и главный вопрос решен, у меня впереди может возникнуть многовато вопросов и чтоб не засорять уж форум, буду писать все в одной теме.