PDA

Просмотр полной версии : как регулировать скорость изменения параметра?



Салихов Ильдар
03.07.2018, 15:19
Добрый день!

Есть термостол. Регулирую температуру через библиотеку OSCAT PID -регулятор. Тут вопросов нет. А кто подскажет как можно реализовать еще и регулирование скорости изменения температуры? Т.е. задаем как температуру регулирования, так и скорость изменения этой температуры (град/сек). Пока, что пришло в голову - это использование P-регулятора с изменяемым коэффициентом P в зависимости от скорости изменения температуры... :confused:

Спасибо..

Global
03.07.2018, 16:33
эээээ так у вас ПИД регулятор уже есть. Его и надо настраивать. Только нужен опытный автоматчик, способный снять переходную характеристику с объекта и рассчитать настройки регулятора согласно требуемой скорости изменения температуры

Осинский Алексей
03.07.2018, 16:33
Добрый день!

Есть термостол. Регулирую температуру через библиотеку OSCAT PID -регулятор. Тут вопросов нет. А кто подскажет как можно реализовать еще и регулирование скорости изменения температуры? Т.е. задаем как температуру регулирования, так и скорость изменения этой температуры (град/сек). Пока, что пришло в голову - это использование P-регулятора с изменяемым коэффициентом P в зависимости от скорости изменения температуры... :confused:

Спасибо..

Добрый день, Ильдар.
Если я правильно понял задачу, то Вам необходимо плавно изменять уставку ПИД-регулятора от У1 до У2 в течение некоторого времени.

В таком случае Вам подойдет ФБ LIN_TRAFO из библиотеки Util.lib
Интерфейс ФБ выглядит так:
37893

Для описанной выше задачи понадобится на входы IN_*** привязать все, что связано со временем, а на входы OUT_** все, что связано с уставкой.
Т.е.
IN_MIN - 0,
IN_MAX - время за которое уставка должна достичь максимума;
IN - время, прошедшее со старта изменения уставки

OUT_MIN - стартовое значение уставки (У1);
OUT_MAX - целевое значение уставки (У2);

Выход ERROR будет равен TRUE, если Вы задали нулевое время роста уставки или значение на входе IN выходит за диапазон IN_MIN .. IN_MAX.
А на выходе OUT будет содержаться текущее значение уставки.

Но хватит слов. Перейдем к делу:

Предположим есть 3 входных значения значения:


rStartValue : REAL; (* Стартовое значение параметра *)
rDesiredValue : REAL; (* Целевое значение параметра *)
timDesiredPeriod : TIME; (* Время, за которое должен измениться параметр *)

и выходное


rCurrent : REAL; (* Текущее значение параметра *)

Время старта хранится в переменной


m_timStartTime : TIME;

В таком случае расчет текущего значения параметра будет выглядеть так:


m_timExecutingBy := TIME() - m_timStartTime;
m_fb_CurrentValueCalc.IN := TIME_TO_REAL (m_timExecutingBy);
m_fb_CurrentValueCalc.IN_MIN := 0.0;
m_fb_CurrentValueCalc.IN_MAX := TIME_TO_REAL (timDesiredPeriod);
m_fb_CurrentValueCalc.OUT_MIN := m_rStartValue;
m_fb_CurrentValueCalc.OUT_MAX := m_rEndValue;
m_fb_CurrentValueCalc();
rCurrent := m_fb_CurrentValueCalc.OUT;



В приложении проект с реализованным ФБ SmoothValueChange на основе модели поведения Etrig (п. 5.1) (https://ftp.owen.ru/CoDeSys3/98_Books/plcopen_compliant_libraries_v10_ru.pdf).
Чтобы использовать в своем проекте:
1) Перенесите типы данных ERRORS и STATE со вкладки "Data types" в свой проект;
2) Перенесите ФБ SmoothValueChange в свой проект;
3) Объявите экземпляр ФБ SmoothValueChange;
4) Задайте значения входов в соответствии с их назначением;
5) По переднему фронту xExecute ФБ начнет плавное изменение параметра;
6) Добавьте в проект библиотеку Util.lib (если она еще не добавлена);
7) Выход "rCurrent" экземпляра ФБ SmoothValueChange подайте на вход "уставка" ПИД-регулятора.

Обратите внимание, что возможности прервать работу ФБ в такой реализации нет. Если она будет нужна - Вам понадобиться в соответствии с п. 5.2 документа выше добавить вход "xAbort".

Global
03.07.2018, 16:44
Если я правильно понял задачу, то Вам необходимо плавно изменять уставку ПИД-регулятора от У1 до У2 в течение некоторого времени.мне показалось, что Автор хочет ограничить "темп" регулирования температуры, то есть интенсивность нагрева

Осинский Алексей
03.07.2018, 17:00
мне показалось, что Автор хочет ограничить "темп" регулирования температуры, то есть интенсивность нагрева

Я сейчас вижу 2 варианта:
1) Автору необходимо ограничить "темп" нагрева т.е. чтобы скорость нагрева\охлаждения никогда не превышала, например, 1°С/сек.
В этом случае согласен с Вами - задача в настройке ПИД-регулятора

Upd: но если верен этот пункт, то автор все же хочет иметь возможность динамически изменять "темп" нагрева.
В таком случае, насколько я понимаю, простой настройкой это не решить.

2) Автору необходимо реализовать "плавный" нагрев объекта: например греем стол от 27°С до 200°С в течение 30 минут.
Как в нашем ТРМ251 (http://www.owen.ru/catalog/programmnij_pid_regulyator_oven_trm251/opisanie).
В таком случае сработает плавное изменение уставки.

Салихов Ильдар
03.07.2018, 18:43
Да, все верно - нужно реализовать плавный нагрев. LIN_TRAFO похоже то, что нужно. Алексей - спасибо!

upd: плавный нагрев с возможностью динамического изменения.Изучаю руководство по созданию библиотек.

Aleksandr
03.07.2018, 23:02
Посмотрите еще на функциональные блоки RAMP_INT и RAMP_REAL из библиотеки Util.lib. пару раз использовал их для плавного нарастания уставки.