FLProg
Вход на сайт
Логин:
Пароль:
Категории раздела
Документация [14]
Блоки пользователей [114]
Цветовые темы [0]
Цветовые темы для программы FLProg предоставленные пользователями
Архив версий программы [169]
Поиск
...
Статистика

Онлайн всего: 17
Гостей: 14
Пользователей: 3
OJIEG555, Anydy, Shreder
Четверг, 29.06.2017, 18:53
Приветствую Вас Гость | RSS
Главная | Регистрация | Вход

Поиск по сайту


Каталог файлов
Главная » Файлы » Блоки пользователей

PID-регулятор для ИМ с дискретным и аналоговым управлением
[ · Скачать удаленно () ] 03.05.2016, 01:29
Данный самописный PID-регулятор с успехом используется в системах на ПЛК известного Российского производителя на промышленных объектах. Регулирует температуру и давление в трубопроводах посредством дискретных и аналоговых трехходовых кранов. Также управляет частотными преобразователями трехфазных двигателей по интерфейсу 0-5В (0-10В и 4-20мА с внешними блоками преобразования на ОУ).

Представлено 2 вида регуляторов ПИД и ПД.

*******************************************************************************************
ПИД имеет 2 выхода для работы с аналоговыми исполнительными механизмами (ИМ) или ТЭНами.
Структурная схема.
1. pwm (медленный ШИМ) - дискретный выход для подключения нагревателя/холодильника.
2. PWR - аналоговый выход, показывающий текущую мощность (0..1000).
Расчет мощности по формуле PWR = Kp*E(t)+Σ(E(t)/Ki)+Kd*∆E(t).
E(t) - рассогласование (уставка - вход),
∆E(t)- дельта рассогласования по сравнению с предыдущим измерением,
Kp,Ki,Kd - коэфф ПИД.

*******************************************************************************************
У ПД 3 выхода для работы с дискретными ИМ.
Структурная схема.
1. open (открыть, медленный ШИМ) - дискретный выход для открытия крана.
2. close (закрыть, медленный ШИМ) - дискретный выход для закрытия крана.
3. dPWR - аналоговый выход, показывающий текущее изменение мощности (-1000..+1000).
Расчет изменения мощности идет по формуле dPWR = Kp*E(t)+Kd*∆E(t).
E(t) - рассогласование (уставка - вход),
∆E(t)- дельта рассогласования по сравнению с предыдущим измерением,
Kp,Kd - коэфф ПД.

*******************************************************************************************

Просто о составляющих ПИД (для простоты в качестве регулируемого параметра возьмем температуру):

Ошибка регулирования = ("уставка" - "текущая температура").

Пропорциональная составляющая - мощность на выходе равна ("ошибка регулирования") * Kp,
чем больше коэфф. Kp, тем больше мощность. Если уставка = 40, температура = 30, Kp = 2, то мощность = 20%.
Если температура = уставке, то Пропорц = 0.

Интегральная составляющая - каждый период работы регулятора мощность на выходе будет увеличиваться
или уменьшаться на величину ("ошибка регулирования") / Ki, можно сказать, что интегр. составл. это
накопитель мощности и чем меньше коэфф. Ki, тем быстрее мощность будет возрастать или уменьшаться.
Если уставка = 40, температура = 30, Ki = 5, то мощность будет прибавляться на 2% каждый период.
Если температура = уставке, то мощность не меняется.

Дифференциальная составляющая - мощность на выходе равна:
("ошибка регулирования сейчас" - "ошибка регулирования в прошлом периоде") * Kd.
Этот параметр следит за скоростью изменения температуры. Если коэфф Kd = 6, сейчас ошибка регулирования = 5,
а в предыдущий период была = 10 (т.е. температура возросла на 5 градусов), то мощность на выходе будет
равна (-5*6) = -30%. Дифф составляющая уменьшила мощность, потому как температура очень сильно начала
подниматься. Если температура стабильна, то Дифф = 0.

Полная мощность ПИД-регулятора считается по формуле PWR = (пропорц + интегр + дифф).
Допустим мощность, накопленная в интегральной составляющей = 42%, тогда в нашем случае
PWR = 20+42-30 = 32%. Из этого примера видно, как "П" и "Д" оперативно помогают медленно меняющейся "И"
корректировать выходную мощность в зависимости от текущего состояния объекта регулирования.

Дискретные выходы pwm/open/close.
На данных выходах организован медленный ШИМ. Период ШИМа равен периоду работы ПИД(ПД) регулятора.
Пусть период ПИД и ШИМ равен 10 секунд, тогда длительности импульсов на выходе будут такими:
Мощность = 0%, выход отключен.
Мощность = 10%, импульс 1 секунда, пауза 9 секунд.
Мощность = 30%, импульс 3 секунды, пауза 7 секунд.
Мощность = 50%, импульс 5 секунд, пауза 5 секунд.
Мощность = 90%, импульс 9 секунд, пауза 1 секунда.
Мощность = 100%, выход включен.

*******************************************************************************************

Во всех регуляторах задается период работы медленных ШИМ (выходов pwm/open/close), он же является периодом измерения входного сигнала.

Для тестирования собрал схему из реле, нагрузочного резистора 10W и термодатчика DS18B20 - температуру держит хорошо!

Фото процесса тестирования.

В архиве блоки пользователя PID_V2, PD_V2, примеры проектов на Pro Mini и график работы ПИД-регулятора при поддержании температуры нагревателя.

Архив обновлен 12.04.2017
Категория: Блоки пользователей | Добавил: Boroda | Теги: Pid
Просмотров: 5278 | Загрузок: 1505 | Комментарии: 49 | Рейтинг: 5.0/4
Всего комментариев: 491 2 3 4 »
avatar
2
1
Обновил архив. PID+ШИМ нагревателя+ШИМ трехходового крана.
avatar
1
2
Обновил архив. Переписал все на СИ, объединил блоки ПИД и ШИМ.
avatar
2
3
Вот графики работы "гибридного" ПД-регулятора и обычного ПИД-регулятора в режиме управления нагревателем с выхода PWM. Реле, подключенное на выход PWM, включает нагрузочный резистор на 5ом/10W, датчик MCP9700A измеряет его температуру. Реакция на изменение уставки и внешнее воздействие на объект регулирования.

Графики
avatar
2
4
Т.к. Ардуино плохо относится к типу данных Float, было принято решение перевести регуляторы с формата Float на Int и Long. Все входные параметры должны быть в 10 раз больше, чтоб получить шаг 0,1. Блоки добавил в архив.
avatar
0
5
Просьба подробно объяснить принцип работы схем.Куда вводить константу нужной температуры и т.д.(не особо понимаю) Хочу переоборудовать тепловой пункт многоквартирного дома. можно ли управлять по температурному графику(пища для размышления)?
avatar
0
6
Ну там же все есть, просто в версии FLProg 1,11,1 описание пользователя не показывается. Добавьте блок в библиотеку и нажмите редактировать, внутри есть описание работы и описание всех входов/выходов.
График уставки задается с помощью стандартного блока Scale или "Нелинейное масштабирование".
А лучше взять ТРМ32 и не мучиться. Надежнее будет. Да 10 т.р., но если зимой промерзнут трубы во всем доме, то...
avatar
0
7
Подскажите пожалуйста, а возможно ли как то сбросить процесс расчета вашего ПИД и снова заставить считать с нуля, будто бы он только запущен?
avatar
0
8
А зачем сбрасывать составляющие ПИД? Набегает интеграл?
avatar
0
9
Например в системе 2 мотора, если в процессе регулирования один выходит из строя, мне нужно запустить второй и при этом начать расчет регулирования сначала, а не продолжить с того момента на котором сломался первый.
avatar
1
10
Т.е. частотник один, после него два пускателя и два мотора. И частотник используется для регулировки и одновременно как плавный пуск?

Регулируете посредством П или И составляющей?
Если И сделать достаточно динамичную (маленький коэффициент Ки), то пяти секунд должно хватить на следующие действия: произошла авария мотора, мы заметили ее, отключили контактор и сразу же обнулили уставку. Далее ждем 5 секунд, для успокоения процессов, которыми управлял мотор, за это время ПИД упадет в 0 или около того. Далее включаем контактор резервного мотора и увеличиваем уставку до прежнего уровня. Все просто: уставка = 0, когда все контакторы отключены!

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

П.П.С. можно еще обнулить вход Max_I (ограничение максимума интеграла), если мощность накапливается в нем, а после пуска контактора Max_I обратно приравнять к максимальной мощности.
avatar
0
11
В общем в результате все таки решил использовать ПИД, который на базе ардуиновской библиотеки сделан. Где то на форуме его блок даже есть. Там вместо того, чтобы колдовать с параметрами регулятора, можно четко задать параметр Output, когда ПИД переведен в ручной режим. В итоге перевел в ручной - сбросил на то значение, какое нужно, снова включил и регулируем дальше.
avatar
1
12
Ну мы такое хренью не занимаемся, если есть резервирование моторов, то резервируется вся цепь. Контактор, частотник, мотор. Да и частотники имеют функцию плавного пуска до уставки.
Отключил контактор и снял сигнал управления с частотника. При повторном разрешении работы, частотник плавно выходит на уставку. Надо только в мозгах его поковыряться.
avatar
0
13
Можете создать блок пользователя на библиотеке PID_v1.h? Просто есть на С код. Хочу в FLprog перенести, но там используется PID_v1 регулятор. Даже если он будет хуже ваших регуляторов нестрашно. Для автора программы мой опыт станет полезным при добавление в программу ПИД регулятрора.
http://bigbarrel.ru/arduino_pid/
https://github.com/br3ttb/Arduino-PID-Library/blob/master/README.txt
http://brettbeauregard.com/blog....duction
avatar
0
14
А как в Int версии PID регулятора коэфициенты Kp, Ki, Kd водить, они же должны быть с запятой все?  А у блока входы подсвечивает как Int
1-10 11-20 21-30 31-40
avatar
FLProg © 2017
Яндекс.Метрика