Просмотр полной версии : Настройка ПИД, помогите новичку
Здравствуйте! Возникла проблема, реализовать на ПЛК100 пид-управление,
я в этом вопросе АБСОЛЮТНЫЙ новичек. Взял овенувскую библиотеку Pid_regulator, но к моему большому сожалению, не нашел в ней функции ручной корректировки пид-коэффициентов, тогда выбор пал на OSCAT, но не могу настроить! алгоритм примерно таков : Подбираем Kp, до получения автоколебаний ( при Ti = Td=0), далее по методу Николса-Зигеля. Но вот не задача , я не могу даже вывести объект на автоколебания, при значении 100<=Kp<=1000, все время получаются колебания приблизительно одинаковой амплитуды ( без ярко выраженного затухания или расхождения) , разница лишь в том что график несколько смещается относительно уставки. Уважаемые, кто умеет пид настраивать, подскажите , куда копать?
Александр Приходько
12.12.2011, 09:08
Здравствуйте. Наши Пид регуляторы есть двух типов - с авто настройкой и те в которых коэф-ты вы подбираете сами. Если Пид с авто настройкой, то к сожалению коэф-ты в ручную вы не поменяете. А вот если без, то тогда подбираете сами.
Выставляете интеграл и дифференциал в 0 и настраиваете пропорциональную составляющую, чтоб регулятор выводил объект на уставку или чуть ниже ее. Далее подбираете интеграл, чтоб ПИД выходил на уставку и держал ее. и в зависимости от рода внешних факторов подбираете дифференциал, чтоб система адекватно реагировала на резкие изменения температуры.
Александр Приходько
12.12.2011, 09:09
Можете попробовать использовать родной пид из Codesys. Его описание есть в справке.
Алексей Дмитриев
12.12.2011, 09:29
Вы имеете в виду из библиотеки util.lib?
Он неадекватно отрабатывает интеграл. Здесь на форуме есть нормальный самописаный регулятор - он рулит.
http://www.owen.ru/forum/attachment.php?attachmentid=3873&d=1302694685
Не верно выразился, исправляюсь - автоколебания получаются приблизительно одинаковой амплитуды при , коэффициенте пропорциональности от 100 до 1000, разница лишь в том что график несколько смещается относительно уставки, а как найти границу устойчивости для применения метода Николса-Зигеля ?
На счет Util.lib, нормальная библиотека, и интеграл адекватный там, но просто мне больше понравилась oscat.de.
Ладно еще раз :
Выставляете интеграл и дифференциал в 0 и настраиваете пропорциональную составляющую, чтоб регулятор выводил объект на уставку или чуть ниже ее.
т.е. нужно подобрать Kp такой , что бы все гармоники графика находились под уставкой или лишь не много пересекали ее, я правильно понял ?
с выхода мву8 ( 4-20) , сигнал подается на ЭПП ну и с него воздух на клапан
Все , всем спасибо разобрался, вкралась ошибка в программную реализацию, пид управление лежало в отдельном PRG, который отрабатывал раз в секунду, уменьшил время до 500ms, а также уменьшил время опроса входной величины - расход ( так же в отдельном PRG) и все заработало, коэффициенты подобрал за час, еще раз всем огромное спасибо!
PS
ПЛК100 + oscat.de - РУЛИТ
Интересно, а у меня при добавлении библиотеки Oscat и последующей компиляции, выскакивает ошибка "превышено допустимое количество POU".
И как с этим бороться?
А не подскажете поподробнее, как это сделать?
Например, для того же ПИД - регулятора?
открываете два экземпляра КДС, в одном свой проект, в другом биб-ку оскат, если решили использовать CTRL_PID, в своем проекте создаете ФБ с таким же именем и копируете из оскат, коментарии можно не копировать на мой взгляд лучше не копировать, а экспортировать, а в свой проект импортировать... ИМХО
Алексей Дмитриев
16.12.2011, 22:28
На счет Util.lib, нормальная библиотека, и интеграл адекватный там, но просто мне больше понравилась oscat.de.
Интегратор там уходит в заоблачную даль при долгом рассогласовании в одну сторону (при разогреве до заданной уставки). При смене знака рассогласования он также долго возвращается, при этом на выходе регулятора мощность 100%! а уже давно перегрев! Жесть!:eek:
Судя по кол-ву высказываний про это, лично для Вас открою страшную тайну - нужно всего лишь устанавливать Y_MIN/MAX.
позволю себе не согласиться, приведу пример ( гипотетический ) , предположим в некой печке есть тен, и при помощи его мы поддерживаем заданную температуру, тен сгорел и мы его пол дня меняем но при этом ПЛК включен и находиться в режиме работа, что будет происходить с интегральной составляющей ? она будет, все эти пол дня, неуклонно расти ( Y_MIN/MAX - накладывает ограничение на выход пид алгоритма, но не на интегральную составляющаю) , за тем мы тен починили и подсоединили к ПЛК, что произойдет ? в полне возможно он сгорит по новой, потому что интегральная состовляющая выросла "до небес" и пока она опуститься ого-го , сколько пройдет времени !
как с эти бороться ? если посмотреть FB PID_CTRL то там есть строка кода вычесляющая интеграл
i := (IN + in_last) * 5.0E-7 * KI * tc + i;
заменит константу 5.0E-7 ну например на 1, тогда "из за облочных далей" будет возвращаться быстрее, другой способ , банальный reset для ПИДа, ну если кому интересно расскажу и третий ...:)
Для ПИД'ов из util - интегральная сумма неограничена ТОЛЬКО при Y_MIN = Y_MAX
на сколько я понял, речь шла про oscat.de, по сему все мои высказывания касаются только oscat
Алексей Дмитриев
18.12.2011, 23:50
Судя по кол-ву высказываний про это, лично для Вас открою страшную тайну - нужно всего лишь устанавливать Y_MIN/MAX.
И все. Заоблачных далей не будет.
Устанавливаю, как вы догадались. На выходе действительно максимум, а интегратору на него глубоко по барабану.:D
nik9999 в этом вопросе прав.
Ну вот, благодаря многоуважаемому Валенку, разобрался во многих аспектах, реализации PID алгоритма, под итожу , имеем Util.lib, замечания внесенные Валенком, абсолютно верны, т.е. если наложить ограничения Y_MIN/Y_MAX, то интегральная составляющая перестает расти при достижении Y-ком, вышеуказанных величин, для этого была написана программа эмулятор PID регулятора ( кстати полезна будет новичкам ) , вот результаты ее работы ( зел- регулируемая велечина , син - мощность, красн - интегр.составляющая)
5255
сам исходник для КДС
5256
Алексей Дмитриев
20.12.2011, 20:15
Пример у Вас красивый, только почему-то знак интегратора не в ту сторону. Попробовал в эмуляторе, ограничивает, конечно значение, но непонятно как это связано с Y_MAX? Реально значение больше в несколько раз.:rolleyes:
Алексей Дмитриев
21.12.2011, 19:48
Вот из-за такого нетривиального решения и пришлось отказаться от этого регулятора, так-как перегревал он у меня объект не по детски, раза в два, чуть ТЭНы не спалил. :D
Алексей Дмитриев
23.12.2011, 21:26
Не знаю - моя реализация при смене знака рассогласования сразу начинает снижать мощность, только с разной скоростью, в зависимости от коэффициента. Это корректно, а все остальное от лукавого.;)
Цитата:
при смене знака рассогласования сразу начинает снижать мощность
Это не ПИД. Это П
Это не П , а уж ПИ как минимум , если бы это был П, то при смене знака ( переходе через уставку SET Point) мощность бы не снижалаcь, а становилось бы нулем , уважаемый Алесей Дмитриев, не могли бы график показать ...
Но и не ПИ.
Это Д.
либой регулятор как ПИ, ПД или ПИД может дать не нулевую мощность при смене знака рассогласования! На мой взгляд, проблема Алексея Дмитриева, в банально, не верно подобранных коэффициентах
Алексей Дмитриев
25.12.2011, 12:56
либой регулятор как ПИ, ПД или ПИД может дать не нулевую мощность при смене знака рассогласования! На мой взгляд, проблема Алексея Дмитриева, в банально, не верно подобранных коэффициентах
Я же не говорю о нулевой мощности, при смене знака, я говорю только о том, что интеграл при смене знака начинает путь вниз, но при этом мощность на выходе вниз не начинает идти, что, на мой взгляд неправильно. Мощность в течении долгого времени остается 100%, так-как значение интегральной составляющей в несколько раз выше, чем 100%.:rolleyes:
Алексей Дмитриев
25.12.2011, 22:05
из util.lib:D
Я же не говорю о нулевой мощности, при смене знака, я говорю только о том, что интеграл при смене знака начинает путь вниз, но при этом мощность на выходе вниз не начинает идти, что, на мой взгляд неправильно. Мощность в течении долгого времени остается 100%, так-как значение интегральной составляющей в несколько раз выше, чем 100%.
Попробуйте обнулить И составляющаю ( для Util.lib TN:=1E-37 ), Д - тоже в ноль,а пропорциональную увеличить в двое, и посмотрите как ведет себя регулятор
Так же ВАЖНО, понимать что ограничения Y_MAX,Y_MIN не только ограничивают значение на выходе регулятора, но и меняют его свойства
Алексей Дмитриев
28.12.2011, 18:00
Попробуйте обнулить И составляющаю ( для Util.lib TN:=1E-37 ), Д - тоже в ноль,а пропорциональную увеличить в двое, и посмотрите как ведет себя регулятор
Собсно, так и сделал. При перегреве в 5 градусов - сброс, на х.. И до сих пор так и работает. Заказчик сказал, что устраивает, но я, как чел. понимающий о чем речь - не могу смириться с этим маразмом. Посему написал нормально работающий регулятор, но туда не внедрил. Ну работает и х. с ним.:D
Посему написал нормально работающий регулятор..
..а все остальное от лукавого..
Вот здорово!
А где можно взять эти исходники (библиотека oscat.de)? На каком языке они запрограммированы?
www.oscat.de
ST
открываете два экземпляра КДС, в одном свой проект, в другом биб-ку оскат, если решили использовать CTRL_PID, в своем проекте создаете ФБ с таким же именем и копируете из оскат,
Возможно раньше было так, или я не так делал, но в бибилиотеке oscat_basic_333 текста с исходным кодом нет, только кубик и ничего не копируется...
Возможно раньше было так, или я не так делал, но в бибилиотеке oscat_basic_333 текста с исходным кодом нет, только кубик и ничего не копируется...
Нужно открыть библиотеку (одну ее) как проект.:)
В этом случае библиотека выглядит как проект с набором POU, входящих в библиотеку.
Нужно открыть библиотеку (одну ее) как проект.:)
А, понял :)
Собственно по "не слепой" настройке ПИД не всё понятно. Помимо распостраненного Зиглера-Николса есть ещё несложный, но более адекватный по точности метод CHR. http://www.cta.ru/cms/f/374303.pdf
Но не совсем понятно по его практическому применению.
Нужен регулятор который выведет объект на уставку, затем уставка меняется. Снимается график изменения температуры во времени, по нему находятся коэффициенты а и L, затем по таблицам определяются коэф. ПИД регулятора. Вопрос в том, что это должен быть за регулятор, с какими коэффициентами? Кто вообще как настраивает?
PID_Regulator фирмы Овен. Как программно менять .INTEGRAL1, .INTEGRAL2, .dMeas Пробую p1.INTEGRAL1:=0; пишет ошибку 4020, Как можно это сделать?
Rednaxel
22.09.2020, 21:13
.... для этого была написана программа эмулятор PID регулятора ( кстати полезна будет новичкам ) , вот результаты ее работы ( зел- регулируемая велечина , син - мощность, красн - интегр.составляющая). 5255
сам исходник для КДС 5256
Не скачивается вложение, видно завалилось куда-то за пыльный шкаф на сайте ;-)
Может у кого сохранился экземпляр?
Powered by vBulletin® Version 4.2.3 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot