PDA

Просмотр полной версии : помогите решить проблему с Pid



Andrupel
04.12.2009, 19:08
Здравствуйте.
При работе регулятора PID из библиотеки util.lib возникла не понятная ситуация.

Речь идет о регулировании скорости. Для вычисления скорости используется ФБ частотомер, предложенный у вас на форуме (http://www.owen.ru/forum/showthread.php?t=551&page=2) Он немного изменен - добавлено преобразование форматов WORD_TO_REAL на выходе и считает, не раз в секунду, а раз в полсекунды, а также нет выбора об/мин или об/сек - только об/мин. И полученное значение подается на вход ACTUAL PIDа. Задание должно осуществляться либо вручную ступенчатое воздействие, либо на вход должна задаваться диаграмма, которая работает по принципу прибавления/вычитания значений каждые 0,1 с. Диаграмма задается с ФБ - Avt.

При задании вручную ступенчатого воздействия регулятор прекрасно отрабатывает воздейсвие, ФБ частотомера отлично работает. НО при попытке задать диаграмму значений, ФБ частотомер перестает нормально считать обороты и выдает намного меньшее значение скорости, как будто не успевает посчитать. В результате PID загоняет выход в максимум и регулирования не происходит.
Помогите, пожалуйста, решить эту проблему!
Если неполно описал процесс или принцип работы, то спрашивайте - отвечу подробнее. Прикладываю программу с функциональными блоками Avt и freq_metr, а так же основную программу.

Малышев Олег
05.12.2009, 12:53
укажите точно с какой частотой следуют импульсы на вход частотомера. он не сможет считать считать быстрее 500 гц. т.к. частота плк -1 кгц. некоторые западные авторы пытаются заменить теорему котельникова теоремой найквиста-шеннона, что является очередной провокацией амерканского импереиализма, и отметается нами с негодованием. но если посмотреть в теорему то все станет понятно (с фб частотомера)

Andrupel
05.12.2009, 16:29
Использую датчик ВБ3C.18М.65.TR200.2П.1.K (http://straus-com.ru/catalog/page227.html). У него в характеристиках потолок 400 Гц.

UDP: в том то и дело, что когда на вход подается уставка регулятора N_manual, тогда работает все достаточно приемлемо (регулирует и держит уровень, отрабатывает возмущения), но когда уставка берется из ФБ Avt (переменная N_Avt), то ФБ частотомер перестает считать нормально, как будто не успевает.

Сегодня тестировал и получается, что если если значение N_avt подавать напрямую на выход без регулятора, то ФБ частотомера работает в общем-то как нужно, а если N_Avt брать с какого-либо ФБ, то частотомер перестает "успевать" считать. Не хватает опыта/знаний самому сделать вывод...

Малышев Олег
05.12.2009, 19:54
1) возможно и не успевает. в последних прошивках и таргетах есть расширенный модуль статистика. там можно посмотреть и реальную загрузку процессора. если она превышает время цикла - цпу захлебывается и получается такая ерунда
2) для оценки ситуации можно использовать инструмент трассировка... см. хелп кодесиса

Andrupel
06.12.2009, 13:54
В ближайшие дни всё попробую. В частности попробую увеличить параметр MinCycleLength в зависимости от реальных замеров времени циклов.

Andrupel
08.12.2009, 23:13
Что будет если значение MinCycleLength сделаю равным нулю? В домументации почему-то не освещено или не увидел. Только когда ставлю 0, тогда программа работает более-менее нормально.
При 1 мс (по-умолчанию стояло у меня) замеренное значение времени цикла составило 900-1000*0,1 ms и программа работает плохо как описано выше.
Увеличивал параметр до 50 мс. Программа считала все хуже и хуже-меньше данных обсчитывалось.
Когда выставил 0 мс, тогда программа стала считать частоту и значение времени цикла стало 6000*0.1 ms со скачками до 20000*0.1 ms.
В связи с этим еще вопрос. Сколько должно быть реальное значение времени цикла, например, для простенькой программы с одним регулятором?

lara197a
09.12.2009, 08:51
При значении 0-контроллер работает без контроля мин времени цикла и новый цикл вызывается сразу по окончании предидущего.
типовое время 1мс. В документации это описано.(PLC_Configuration_OWEN)
Скорее всего у Вас контроллер не успевает обрабатывать данные от входов.
Обычно для решения таких задач используют специализированные "быстрые "входы или счетные модули.
На ПЛК 110 есть быстрые входы.

Andrupel
09.12.2009, 09:21
контроллер уже стоит, там где и должен стоять. поменять его нет никакой возможности.
почему он не справляется? ведь в документации же написано, что аппаратный счетчик до 1 кгц. у меня эта цифра меньше в 2,5 раза. контроллер должен успевать. или еще есть какие-то ограничения по сложности и объему программы?

Малышев Олег
09.12.2009, 09:40
1) Уточните - какова загрузка ЦПУ - для этого есть модуль статистика.
2) Вы используете программный счетчик - а аппаратный - модуль Counter16( или 32) в PLC_Configuration
3) Уточните, что за контроллер используется - ПЛК 1хх, прошивка хххх, кодесис ххх

Andrupel
09.12.2009, 09:51
1) Написал выше "Когда выставил 0 мс, тогда программа стала считать частоту и значение времени цикла стало 6000*0.1 ms со скачками до 20000*0.1 ms."
2) Больше не буду путать.
3) ПЛК 154-УМ, прошивка 2.05.7, кодесис 2.3.9.9bOct 2008