PDA

Просмотр полной версии : PID регулятор в CoDeSys V3



liboyl
09.07.2013, 04:49
Приветствую участников форума. При использовании ПИД регулятора В CoDeSys V3 не получается переход с автоматического режима управления на ручной - "безударный режим". Как сделать чтоб переменная "Y_manual "(задание на клапан при ручном управлении) при переключении с автомата на ручной режим сравнивалась с переменной "Y"(Выход на клапан).

Sergey666
09.07.2013, 16:01
if Auto_mode(*режим регулятора не ручной*)then
Manual_level(*Переменная величина рег в ручном реж*):=Out_level(*Выход рег*)
end_if

liboyl
10.07.2013, 23:40
Спасибо. Принцип понял.

@ndrew
01.10.2013, 10:40
Приветствую, уважаемые коллеги.
Вылез неприятный момент с пид-регулятором, противоположный тому, что описал liboyl . Не могу понять, почему после перевода регулятора из ручного режима в автоматический, он начинает "плясать" не от текущего значения выхода, а от крайнего: допустим, если шкала выхода от 0 до 100%, а в ручном режиме выход был установлен на 50%, регулятор после перевода в автомат может начать регулировать как с 0, так и со 100%, в зависимости от того больше задание, чем текущее реальное значение, или меньше. Столкнулся с этим на СПК207...

liboyl
07.10.2013, 19:27
Приветствую, уважаемые коллеги.
Вылез неприятный момент с пид-регулятором, противоположный тому, что описал liboyl . Не могу понять, почему после перевода регулятора из ручного режима в автоматический, он начинает "плясать" не от текущего значения выхода, а от крайнего: допустим, если шкала выхода от 0 до 100%, а в ручном режиме выход был установлен на 50%, регулятор после перевода в автомат может начать регулировать как с 0, так и со 100%, в зависимости от того больше задание, чем текущее реальное значение, или меньше. Столкнулся с этим на СПК207...
Я тоже столкнулся с этим "неприятным моментом" -это получается после первого переключения с ручного на автомат (с момента включения прибора) при последующих переключениях все в норме....

Валенок
07.10.2013, 20:52
Патамушто во время перехода руч=>авто стопудово есть какая-то err, которая в паре с kp и стреляет. Учим матчасть. Вот сделайте в этот момент set = actual, и откроецца новая грань ПИДа. Нужно что-то безударное - пропустите выход пида через ramp_real

@ndrew
08.10.2013, 20:35
Валенок, а вот ребята из Emerson Process Management, например, не знают о таких "новых гранях", у них все как положено регулируется. Круто, да?
liboyl, спасибо. Хм, надо будет поэкспериментировать...

Валенок
08.10.2013, 20:57
Ну надо же. Это ж бубли... "Emerson Process Management !!!"
Друг, если у "ребят из EPM" при наличии set <> actual и Kp <> 0 выход пида НЕ делает скачок (пофигу куда) - то все просто. У них не ПИД. Разве только название похожее. Вот это действительно круто.

у них все как положено регулируется.
Кем положено, товарищ ? Высшими существами из .. ? Учим матчасть, в частности изучаем поведение П-составляющей. В отрыве от производителей чего-либо. Даже овена, да не убоюсь такого кощунства )))

@ndrew
08.10.2013, 21:14
Я вам не друг и не товарищ. Я ясно выразился? Изучение матчасти я завершил еще в конце прошлого века, и могу вас заверить, учили тогда совсем не так, как сейчас... гора-а-а-аздо лучше. И это не только у эмерсона, но и у сименса, и других "производителей с мировым именем". Это называется - адекватное и предсказуемое поведение ПИД-регулятора. Понятно, что там контроллеры стОят даже не в десять, а в сто раз дороже. Но хочется адекватности. Ошибку отыграть? Да ради бога, но с текущего значения выхода.

capzap
08.10.2013, 21:38
Если богатый опыт, почему самому не написать адекватный ПИД, исходников полно

BETEP
08.10.2013, 21:46
....при наличии set <> actual и Kp <> 0 выход пида НЕ делает скачок (пофигу куда) - то все просто. У них не ПИД. Разве только название похожее......
принцип пида один, а вот реализаций дофига.
Для безударного пуска, составляющие П и И должны передаваться на выход не как в учебнике, а как разница между периодами регулятора. тогда и пуск безударный, и из граничных состояний мгновенно выходит. Решается очень просто и это всё равно ПИД.

Валенок
08.10.2013, 21:55
Хорошо @ndrew. Давайте не будем производить замеры длительности времени от момента выхода из учебных заведений. Вне зависимости от производителя, времени, места и способа (включая логарифмическую линейку) вычисления ПИД он необязан быть равным текущему ручному выходу.

Ошибку отыграть? Да ради бога, но с текущего значения выхода.
Ошибку не отыгрывают. Она таково - какая есть. Если только не прятать голову в песок от реальности.
Можно только, с помощью внешней, не имеющей никакого отношения к ПИДу примочкой, с заданной скоростью совмещать желаемое значение с реальным выходом ПИДа.
Один из способов я предложил - тупой ramp_real. Не лучший, но простейший и проглатывающий любые кривые коэффициенты. Можно также производить перевычисление интегральной суммы в "ручном" режиме, или еще что угодно, но это тоже будет внешнее относительно пида воздействие.

lara197a
08.10.2013, 22:01
Если богатый опыт, почему самому не написать адекватный ПИД, исходников полно

Это да, но зачем?
Мы здесь сидящие в подавляющем большинстве не программисты, а конфигураторы.
К сожалению у нас и у них разный подход к конечному результату.
И они в итоге нас побеждают...

capzap
08.10.2013, 22:05
Это да, но зачем?
Мы здесь сидящие в подавляющем большинстве не программисты, а конфигураторы.
К сожалению у нас и у них разный подход к конечному результату.
И они в итоге нас побеждают...

Я к тому что взять "классический" пид у того же оскат и добавить к нему жнлаемые навороты

Валенок
08.10.2013, 22:12
принцип пида один, а вот реализаций дофига.
Но сколько бы не было формул пида, ни одна из них не имеет коффициента - "ручной режим".
Ручной режим - это нештатное воздействие меняющее сам алгоритм/формулу/преобразование входных значений.

И еще я не понял связи между

учили тогда совсем не так, как сейчас... гора-а-а-аздо лучше.И это не только у эмерсона, но и у сименса, и других "производителей с мировым именем" и

Это называется - адекватное и предсказуемое поведение ПИД-регулятора.
Как может поведение ПИД'а зависеть от качества обучения ? 8( Мое аморальное поведение никак не повлияет на квадратный корень.
Если человек умеет считать (ну может быть в районе 7кл...2курс) - то выход любой формулы ПИДа предсказуем ПИДа, а не обратной связи. А адекватность это выхода - понятие несколько контекстное.

BETEP
08.10.2013, 23:23
По учебнику
выход регулятора = П+И+Д

А если правильно
выход регулятора = выход регулятора+ΔП+ΔИ+ΔД

lara197a
08.10.2013, 23:54
О вообще, перевод в ПИд рекомендуется после того, как значение устоялось в ручном режиме.
А остальное правильно, как Вы все уважаемые пишите.

lara197a
09.10.2013, 00:00
Кстати и у КДС пид неплох. Даже очень.
др.дело когда к примеру Овен его позиционирует как собственные многолетние наработки.
Ну и к примеру также у Unitroniks я не смог добиться стабильной работы с электронагревателем для вак системы. да же с их хваленой утилетой Пид сервер.
О чем писал в их тех поддержку.
Кстати(российкую) признанную лучшей в мире.

lara197a
09.10.2013, 00:01
У всех свои недостатки...( "в джазе только девушки")

Валенок
09.10.2013, 00:30
А если правильно
выход регулятора = выход регулятора+ΔП+ΔИ+Д
Только вот с таким как быть при переходе руч-авто
ручной выход регулятораi-1 = ручной выход регулятораi +ΔП+ΔИ+Д

BETEP
09.10.2013, 07:01
Что в ручном, что в автомате, выход регулятора это одна и та же переменная.
в ручном меняем её как нам нужно, при переходе в автомат, первый цикл пропускаем, т.к. дельты между периодами можем получить не ранее второго цикла. т.е. регулятор начинает молотить с текущих значений выхода,

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

я опечатку в том посте поправил. дельту перед Д забыл.

Валенок
09.10.2013, 14:19
Да с этим - неспорю. Только и я опечатался:
ручной выход регулятораi-1 = автовыход регулятораi +ΔП+ΔИ+ΔД
А так как г-н @drew хотел безударного выхода, то необходимо чтоб в момент перехода:
ΔП+ΔИ+ΔД стремилось к 0
Самое простое для этого:

О вообще, перевод в ПИд рекомендуется после того, как значение устоялось в ручном режиме
т.е. actual = setpoint

В пиде из утил предусмотрены необходимые (внешние относительно классик-пида) компенсации для безударного перехода РУЧН->АВТО при выполнение вышеуказанного условия.
Если у г-на @drew при этом происходит скачок, значит было actual <> setpoint. Что же должна делать П-часть в любом написании ПИДа? А раз при выходе из РУЧН err не стремился к нулю, значит проблемы были с руками. И зачем тогда было вообще входить в РУЧН ?
Выгнали водителя автобуса из-за руля, а попросили его обратно аккурат за полметра до бампера грузовика. Водитель автобуса несправился ? Он виноват !! Он неумеет !!

Если у "ребят из ЕРМ" и при этом не происходит скачка, значит АВТО - не АВТО, т.е. ПИД не ПИД, а ПИД+что-то. Специально заточенный под что-то там инструмент. Чтоб что-то там прогнозировать нужно как минимум видеть исходник.
В приложении к автобусу - вы думали что рулили. Водила попыхивая цигаркой, сидел на месте автоинструктора.

И из граничных условий утильный пид тоже и непринужденно выходит. Была целая тема ))

@ndrew
09.10.2013, 15:46
Уважаемый господин Валенок, мне кажется между нами возникло некоторое недопонимание. Попытаюсь проиллюстрировать свою мысль следующим рисунком.
10404
Мне хочется невозможного? Посмотрел бы я на ваш "правильный" ПИД-регулятор, управляющий скоростью прокатной клети... Только встал бы подальше...
(Амплитуду перерегулирования прошу считать одинаковой для обоих графиков, на рисунке она получилась разная... :D)

lara197a
09.10.2013, 16:50
Но ведь многое еще зависит от характеристик объекта.
А при слишком быстрой реакции ПИД есть вероятность перерегулирования. В этом случае вообще есть вероятность не попасть на уствку.
К примеру опять-же Unitronikc. Запускаешь утилиту ПИД сервер и видишь в реальном времени, что ПИД скачет вверх вниз вокруг уставки.
Не может мало инерционный объект отрегулировать.
Этот же объект ПИД ZENTEC регулирует "на ура", но очень медленно выходит на уставку. И к примеру паровой котел на нем при резких изменениях расхода будет сильно не догревать.
Есть такая притча про 13=й ПИД. Лучше не скажешь.

Валенок
09.10.2013, 17:07
попытаюсь проиллюстрировать свою мысль следующим рисунком.
А еще бы не помешал наложенный рисунок обратной связи и уставки.
Или хотите сказать, что выход просто-так - взял и скакнул.


. Только встал бы подальше..
Я б вышел из автобуса увидев как водителя отстраняют

BETEP
09.10.2013, 18:18
тот регулятор плохой, тот хороший но тут не пашет, а этот идеально подошёл здесь...

Если богатый опыт, почему самому не написать адекватный ПИД, исходников полно
вот это правильный выход, тем более на универсальном ПИД свет клином не сошёлся.Все эти бибки, просто универсальные решения со своими плюсами и недостатками, и грех на это жаловаться, бери напильник и затачивай под свои потребности.
Сейчас копаю чужой код, там есть регулятор, издали напоминающий помесь П и И составляющих, (хотя П с натяжкой), работает кстати неплохо под свою задачу.

@ndrew
09.10.2013, 21:14
А еще бы не помешал наложенный рисунок обратной связи и уставки.
Рисунок-то абстрактный, чтобы пояснить суть явления... Уставка не меняется, в момент переключения между уставкой и регулируемой величиной есть ошибка, регулируемая величина следует за выходом регулятора с учетом своей инерционности и запаздывания.

Или хотите сказать, что выход просто-так - взял и скакнул.
Именно так. А может не скакнуть до сотни, а упасть до нуля...
Да ладно, понял я уже, что Кодесис (а возможно - ОВЕН СПК207) так не умеет... Может фича, может баг, не знаю. Решили ограничить (тупо) выходы регуляторов узким рабочим диапазоном. По крайней мере, теперь при запуске котла регуляторы не пытаются после продувки (100% на выходе регуляторов в ручном режиме) остановить вентилятор и дымосос и начать их с нуля (с 25%, если быть точным) разгонять после запуска главных горелок (перевод регуляторов в автоматический режим).
BETEP, capzap, написать самому конечно можно. Тем более, опыт инженера-программиста (правда, в основном - под Windows) есть... Катастрофически нет времени. Когда на производстве работал, было время и поэкспериментировать, и своими делами позаниматься... А когда работаешь сам на себя, это становится непозволительной роскошью. Нужно еще и проектно-конструкторские вопросы решать, и организационные, и технические, и финансовые... да много чего еще. Вот как-то так.

Валенок
09.10.2013, 21:37
Рисунок-то абстрактный
Т.е. ни о чём. Зачем было колебания рисовать ? У пида выход вооще не падает - всегда 100% ("пиши больше, чего их супостатов жалеть"), а желаемое - сразу выходит на необходимое значение.

Именно так.
))) И это говорит технарь.
Коли время роскошь, зачем тогда с овеном ковырятся ? Есть ведь другие волшебные контроллеры которые "стОят".
PS
Стараюсь много отвечать. Мне ведь, не то что Вам - за каждую букофку платют. Этим и живу.

capzap
09.10.2013, 21:44
BETEP, capzap, написать самому конечно можно. Тем более, опыт инженера-программиста (правда, в основном - под Windows) есть... Катастрофически нет времени. Когда на производстве работал, было время и поэкспериментировать, и своими делами позаниматься... А когда работаешь сам на себя, это становится непозволительной роскошью. Нужно еще и проектно-конструкторские вопросы решать, и организационные, и технические, и финансовые... да много чего еще. Вот как-то так.
Это вообще ни в какие ворота не лезет, Вы либо правите сами под себя, иначе все Ваши хотелки будут делать другие я так думаю за определенную сумму, потому что не Вы один у кого нет времени

@ndrew
09.10.2013, 22:03
Хех, все традиционно скатилось во флуд.

Т.е. ни о чём. Зачем было колебания рисовать ? У пида выход вооще не падает - всегда 100% ("пиши больше, чего их супостатов жалеть"), а желаемое - сразу выходит на необходимое значение.
Сами-то поняли, что написали?
capzap, время будет - "поковыряю" эту тему, а сейчас времени нет. И да, я не просил никого из уважаемых форумчан взять и написать "за меня", "абсолютно безвоздмездно" и т. д. - интересно было выслушать соображения по этому поводу.

capzap
09.10.2013, 22:14
так мнение прозвучало уже давно, на законы регулирования ни как не влияют факторы перехода из ручного в автомат и наоборот, неправильно настроенные коэффициенты могут давать иллюзию, что после Вашего ручного вмешательства происходит некий сбой в автомате.
По теории всегда бессмысленно что то предлагать в таком вопросе, нужно быть самому на реальном объекте и принимать соответствующее решение

petera
10.10.2013, 01:12
По крайней мере, теперь при запуске котла регуляторы не пытаются после продувки (100% на выходе регуляторов в ручном режиме) остановить вентилятор и дымосос и начать их с нуля (с 25%, если быть точным) разгонять после запуска главных горелок (перевод регуляторов в автоматический режим).

Лихо Вы котел разжигаете:rolleyes:
Получается, что сначала Вы в ручном режиме задали скорость вращения двигателей вентилятора и дымососа 100%, если используются ЧП, или открыли направляющие аппараты на 100%, если ЧП нет. И после вентиляции топки разжигаете горелки, не уменьшив скорости вращения двигателей? А где же интервал подготовки к розжигу, при котором скорости вращения двигателей должны быть ~10-15%. При 100% скоростях вращения двигателей сигнал обратной связи с датчиков давления воздуха и разрежения будет в разы больше уставки нужной в рабочем режиме, а тем более в режиме розжига.
И Вы хотите в этой ситуации при переводе регуляторов в автомат не получить скачек управляющего сигнала в сторону нуля???
Лучше бы Вы продолжали заниматься программированием под Windows

Тем более, опыт инженера-программиста (правда, в основном - под Windows) есть...

@ndrew
10.10.2013, 07:25
Уважаемый (-ая?) petera, а Вы увидели, между двух строк, что там не снижается скорость нагнетателей? А как вы определили при какой скорости создается необходимое давление воздуха/разрежение в топке (с учетом дырявых воздуховодов/дымоходов)? К вашему сведению, не стоит гонять асинхронный мотор на 10-15% оборотов, если только он не с принудительным охлаждением...
Продолжайте заниматься промбезопасностью, у Вас это, надеюсь, лучше получается.

petera
10.10.2013, 10:09
К сожалению между строк я ничего не увидел, как Вы написали
По крайней мере, теперь при запуске котла регуляторы не пытаются после продувки (100% на выходе регуляторов в ручном режиме) остановить вентилятор и дымосос и начать их с нуля (с 25%, если быть точным) разгонять после запуска главных горелок (перевод регуляторов в автоматический режим)
так я и прочитал.
Моя деятельность в области промбезопасности как раз и заключается в автоматизации горелок и котлов. И я не разу не видел автоматики с таким алгоритмом розжига котла.
В Вашем случае нужно было бы, пока идет вентиляция и регуляторы находятся в ручном режиме, все время приравнивать уставку регуляторов к значению от датчиков обратной связи, т.е actual = setpoint.
А в момент перехода из ручного режима в автомат запускать ramp_real для setpoint от значения actual до требуемого значения в рабочем режиме работы. И будет плавный выход на уставку.
Это если упрощенно, а на практике должно быть два таких перехода с помощью ramp_real -первый после вентиляции топки к значению нужному для розжига, второй после стабилизации горения к значению заданному для рабочего режима.