PID-регулятор
Правила форума
Рекомендации по размещению блоков:
Автор блока создает подробное описание блока, отличие от подобных(если есть на данный момент).Сложные блоки очень желательно с примерами.
При выходе новых версий редактирует/дополняет свой первый пост с указанием даты, версии, причины.
В каждой теме обсуждается только выложенный автором блок - баги, возможность (или предложение) доработки и прочие хотелки.
Свои блоки, переработанные, с другими библиотеками, протоколами и т.д.- размещаем либо сами отдельно, либо обсуждаем и дорабатываем в форуме Разработка блоков.
Пользователи улучшив блок автора и проверив его работоспособность - могут обратиться к автору или модераторам с просьбой добавить их версию блока в первое сообщение темы.
Рекомендации по размещению блоков:
Автор блока создает подробное описание блока, отличие от подобных(если есть на данный момент).Сложные блоки очень желательно с примерами.
При выходе новых версий редактирует/дополняет свой первый пост с указанием даты, версии, причины.
В каждой теме обсуждается только выложенный автором блок - баги, возможность (или предложение) доработки и прочие хотелки.
Свои блоки, переработанные, с другими библиотеками, протоколами и т.д.- размещаем либо сами отдельно, либо обсуждаем и дорабатываем в форуме Разработка блоков.
Пользователи улучшив блок автора и проверив его работоспособность - могут обратиться к автору или модераторам с просьбой добавить их версию блока в первое сообщение темы.
- Boroda
- Капитан
- Сообщения: 836
- Зарегистрирован: 01 май 2016, 01:04
- Откуда: Коломна
- Имя: Станислав
- Контактная информация:
PID-регулятор
Данный самописный PID-регулятор с успехом используется в системах на ПЛК известного Российского производителя на промышленных объектах. Регулирует температуру и давление в трубопроводах посредством дискретных и аналоговых трехходовых кранов. Также управляет частотными преобразователями трехфазных двигателей по интерфейсу 0-5В (0-10В и 4-20мА с внешними блоками преобразования на ОУ).
Представлено 2 вида регуляторов ПИД и ПД.
*******************************************************************************************
ПИД имеет 2 выхода для работы с аналоговыми исполнительными механизмами (ИМ) или ТЭНами.
[spoiler title=Структурная схема] [/spoiler]
Входы:
1.Value - текущее значение
2. Set - уставка (задатчик)
3. Kp - коэфф пропорциональной составляющей
4. Ki - коэфф интегральной составляющей
5. Kd - коэфф дифф составляющей
6. MaxPow - максимальная мощность на выходе
7. MinPow - минимальная мощность на выходе
8. MinPulse - минимальная разрешенная длительность импульса на выходе PWM
Выходы:
1. pwm (медленный ШИМ) - дискретный выход для подключения нагревателя/холодильника.
2. PWR - аналоговый выход, показывающий текущую мощность (0..1000).
Расчет мощности по формуле PWR = Kp*E(t)+Σ(E(t)/Ki)+Kd*∆E(t).
E(t) - рассогласование (уставка - вход),
∆E(t)- дельта рассогласования по сравнению с предыдущим измерением,
Kp,Ki,Kd - коэфф ПИД.
*******************************************************************************************
У ПД 3 выхода для работы с дискретными ИМ.
[spoiler title=Структурная схема] [/spoiler]
Входы:
1.Value - текущее значение
2. Set - уставка (задатчик)
3. Kp - коэфф пропорциональной составляющей
4. Kd - коэфф дифф составляющей
5. MaxPow - максимальная мощность на выходе
6. MinPulse - минимальная разрешенная длительность импульса на выходе PWM
Выходы:
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 - температуру держит хорошо!
[spoiler title=Фото процесса тестирования] [/spoiler]
В архиве блоки пользователя PID_V2, PD_V2, примеры проектов на Pro Mini и график работы ПИД-регулятора при поддержании температуры нагревателя.
Архив обновлен 12.04.2017
Представлено 2 вида регуляторов ПИД и ПД.
*******************************************************************************************
ПИД имеет 2 выхода для работы с аналоговыми исполнительными механизмами (ИМ) или ТЭНами.
[spoiler title=Структурная схема] [/spoiler]
Входы:
1.Value - текущее значение
2. Set - уставка (задатчик)
3. Kp - коэфф пропорциональной составляющей
4. Ki - коэфф интегральной составляющей
5. Kd - коэфф дифф составляющей
6. MaxPow - максимальная мощность на выходе
7. MinPow - минимальная мощность на выходе
8. MinPulse - минимальная разрешенная длительность импульса на выходе PWM
Выходы:
1. pwm (медленный ШИМ) - дискретный выход для подключения нагревателя/холодильника.
2. PWR - аналоговый выход, показывающий текущую мощность (0..1000).
Расчет мощности по формуле PWR = Kp*E(t)+Σ(E(t)/Ki)+Kd*∆E(t).
E(t) - рассогласование (уставка - вход),
∆E(t)- дельта рассогласования по сравнению с предыдущим измерением,
Kp,Ki,Kd - коэфф ПИД.
*******************************************************************************************
У ПД 3 выхода для работы с дискретными ИМ.
[spoiler title=Структурная схема] [/spoiler]
Входы:
1.Value - текущее значение
2. Set - уставка (задатчик)
3. Kp - коэфф пропорциональной составляющей
4. Kd - коэфф дифф составляющей
5. MaxPow - максимальная мощность на выходе
6. MinPulse - минимальная разрешенная длительность импульса на выходе PWM
Выходы:
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 - температуру держит хорошо!
[spoiler title=Фото процесса тестирования] [/spoiler]
В архиве блоки пользователя PID_V2, PD_V2, примеры проектов на Pro Mini и график работы ПИД-регулятора при поддержании температуры нагревателя.
Архив обновлен 12.04.2017
У вас нет необходимых прав для просмотра вложений в этом сообщении.
PID-регулятор
если 1 уставка то работает хорошо...
если несколько начинает врать и сходить с ума
например я держал 5 минут температуру 30 градусов, а когда уставка сменмлась на 62 , то спад начался аж в 72 гр.прошло минут 10 покапид начал держать 62 гр.
если несколько начинает врать и сходить с ума
например я держал 5 минут температуру 30 градусов, а когда уставка сменмлась на 62 , то спад начался аж в 72 гр.прошло минут 10 покапид начал держать 62 гр.
PID-регулятор
.
Последний раз редактировалось Nikan 23 мар 2023, 19:52, всего редактировалось 1 раз.
- Boroda
- Капитан
- Сообщения: 836
- Зарегистрирован: 01 май 2016, 01:04
- Откуда: Коломна
- Имя: Станислав
- Контактная информация:
PID-регулятор
ПИДы для систем ГВС и отопления в котельных иногда по 5-6 часов настраиваются. А бывает и через несколько дней подъезжаешь и еще перенастраиваешь.
PID-регулятор
уверен что так и есть ...поставил те что в примере и мне понравилось для одной температуры , работает четко с предсказанием про наростанние и спад ...Boroda писал(а): 29 янв 2018, 01:08ПИДы для систем ГВС и отопления в котельных иногда по 5-6 часов настраиваются. А бывает и через несколько дней подъезжаешь и еще перенастраиваешь.
но он накапливает данные по ошибкам одной температуры , подсунув ему другую он опирается на старые данные и чудит..
хотел его в пивоварню, а там точность в градусах и паузы по 5-60 минут, и пока устаканится ферменты сдохнут ...хотя как придет запасной датчик сделаю макетку и побалуюсь с коэффициентами
надо на новый форум инструкцию по настройке пидов , что подключать и куда , какие схемы подойдут и какие режимы пида и какие опто к ним
- Sancho
- Полковник
- Сообщения: 4066
- Зарегистрирован: 25 дек 2015, 17:32
- Откуда: Ярославль.
- Имя: Александр
- Поблагодарили: 5 раз
- Контактная информация:
PID-регулятор
Как-то выкладывал. Давно.
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.
- Boroda
- Капитан
- Сообщения: 836
- Зарегистрирован: 01 май 2016, 01:04
- Откуда: Коломна
- Имя: Станислав
- Контактная информация:
PID-регулятор
[ref]dizzyy[/ref], ну значит неправильно настроен. Накопление интеграла процесс медленный, и пока он накапливается, главную роль играет П составляющая. Поставьте P=50, I=0, D=0 и сразу все станет ясно (на каждый градус рассогласования будет приходиться 50% мощности). Самогонный аппарат и на чистом П-регуляторе с бешенным коэффициентом может работать, чуть не добирая температуру (1-2 градуса).
Последний раз редактировалось Boroda 29 янв 2018, 20:07, всего редактировалось 3 раза.
PID-регулятор
спасибо, как раз нашел здесь блок Virtuino и там можно график делать , вот им и займусь , но жду блютуз модули ..
попробую , я просто смотрел в сторону сброса накопления при изменении уставкиBoroda писал(а): 29 янв 2018, 19:44[ref]dizzyy[/ref], ну значит неправильно настроен. Накопление интеграла процесс медленный, и пока он накапливается, главную роль играет П составляющая. Поставьте P=50, I=0, D=0 и сразу все станет ясно (на каждый градус рассогласования будет приходиться 50% мощности). Самогонный аппарат и на чистом П-регуляторе с бешенным коэффициентом может работать, чуть не добирая температуру (1-2 градуса).
код вырастет , мне Александр и так помог облегчить код, но вылизывая до того как должно быть и так код растет, я уже не помещаюсь даже с remotexyAlias писал(а): 29 янв 2018, 19:57А если отдельные блоки со своими уставками для разных термопауз сделать?
[ref]Boroda[/ref], может перенести такие вопросы по блокам в отдельный топик ?
-
- Лейтенант
- Сообщения: 338
- Зарегистрирован: 11 фев 2018, 13:07
- Имя: Сергей
- Благодарил (а): 5 раз
- Поблагодарили: 1 раз
PID-регулятор
Вопрос по ПИД регулятору.
Как отключать ПИД регулятор? В моменты, когда система остановлена, интегральная составляющая накапливает ошибку, и в итоге, когда система запускается, на выходе 100% мощности за счет накопившейся до этого интегральной. Получается сильное перерегулирование при старте. Входа EN в блоке ПИД нет, отсюда и вопрос.
Как отключать ПИД регулятор? В моменты, когда система остановлена, интегральная составляющая накапливает ошибку, и в итоге, когда система запускается, на выходе 100% мощности за счет накопившейся до этого интегральной. Получается сильное перерегулирование при старте. Входа EN в блоке ПИД нет, отсюда и вопрос.
- Sancho
- Полковник
- Сообщения: 4066
- Зарегистрирован: 25 дек 2015, 17:32
- Откуда: Ярославль.
- Имя: Александр
- Поблагодарили: 5 раз
- Контактная информация:
PID-регулятор
Ставь на отдельную плату, выполняющуюся по условию. При выключении/включении платы вычисления продолжатся с того-же места...Serg_Grn писал(а): 28 апр 2018, 12:10Вопрос по ПИД регулятору. (ПИД - автор Boroda).
Как отключать ПИД регулятор? В моменты, когда система остановлена, интегральная составляющая накапливает ошибку, и в итоге, когда система запускается, на выходе 100% мощности за счет накопившейся до этого интегральной. Получается сильное перерегулирование при старте. Входа EN в блоке ПИД нет, отсюда и вопрос.
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.
-
- Лейтенант
- Сообщения: 338
- Зарегистрирован: 11 фев 2018, 13:07
- Имя: Сергей
- Благодарил (а): 5 раз
- Поблагодарили: 1 раз
PID-регулятор
Попробовал добавить вход "en" в блок ПИД. Так как в написании кода ничего не смыслю, прошу знатоков проверить правильность.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
- Boroda
- Капитан
- Сообщения: 836
- Зарегистрирован: 01 май 2016, 01:04
- Откуда: Коломна
- Имя: Станислав
- Контактная информация:
PID-регулятор
[ref]Serg_Grn[/ref], если Вы отключите вход EN в момент, когда на PWM или PWR будет единица, то она так и останется там. Надо добавить ELSE.
Код: Выделить всё
If (En)
{
*PID*
}
else
{
ok = false; pwm = false; PWR = 0; Integ = 0;
}
Последний раз редактировалось Boroda 29 апр 2018, 11:48, всего редактировалось 2 раза.
-
- Лейтенант
- Сообщения: 338
- Зарегистрирован: 11 фев 2018, 13:07
- Имя: Сергей
- Благодарил (а): 5 раз
- Поблагодарили: 1 раз
PID-регулятор
Это понятно, спасибо. А еще меня интересует накопленная интегральная: как сбрасывать накопленные значения при отключении блока? Чтобы они не оказывали влияние потом.
-
- Лейтенант
- Сообщения: 338
- Зарегистрирован: 11 фев 2018, 13:07
- Имя: Сергей
- Благодарил (а): 5 раз
- Поблагодарили: 1 раз
PID-регулятор
[ref]Boroda[/ref], спасибо!
Отправлено спустя 6 часов 43 минуты 55 секунд:
[ref]Boroda[/ref], если Вам не сложно, проясните один момент: я при настройке пид-регулятора столкнулся с тем, что при включении интегральной составляющей начинается перерегулирование, причем даже если вводить в Ki огромные значения - все равно.
Открыл редактор блока и оказалось, что интегральная ограничена (MinPow * 10), (MaxPow * 10), в то время как пропорциональная и дифференциальная имеют ограничения (+/-1000). Почему такое ограничение у интегральной? Просто у меня мин.мощность 40% (меньше нельзя), выходит, что и интегральная не может быть меньше, отсюда и перерегулирование, как мне кажется...
Отправлено спустя 6 часов 43 минуты 55 секунд:
[ref]Boroda[/ref], если Вам не сложно, проясните один момент: я при настройке пид-регулятора столкнулся с тем, что при включении интегральной составляющей начинается перерегулирование, причем даже если вводить в Ki огромные значения - все равно.
Открыл редактор блока и оказалось, что интегральная ограничена (MinPow * 10), (MaxPow * 10), в то время как пропорциональная и дифференциальная имеют ограничения (+/-1000). Почему такое ограничение у интегральной? Просто у меня мин.мощность 40% (меньше нельзя), выходит, что и интегральная не может быть меньше, отсюда и перерегулирование, как мне кажется...
Последний раз редактировалось Serg_Grn 29 апр 2018, 22:50, всего редактировалось 1 раз.
-
- Лейтенант
- Сообщения: 338
- Зарегистрирован: 11 фев 2018, 13:07
- Имя: Сергей
- Благодарил (а): 5 раз
- Поблагодарили: 1 раз
PID-регулятор
Ещё вопрос к знатокам)
Заметил, что диф.составляющая, если ставить большой Kd, при малых значениях разности ошибок (вблизи уставки) начинает раскачивать, так как коэффициент очень велик. Но если коэффициент снизить, то ее не хватает при старте и разгоне системы - недостаточно снижает мощность. В этой связи вопрос, а что если формулу немного изменить: Kd умножать не на разность ошибок между двумя периодами, а на квадрат этой разности? Тогда диф.составляющая будет иметь мизерный эффект при малых значениях разности ошибок (0,1 - 1), но эффект ее будет сильно возрастать когда разность ошибок становится больше (2-3... единиц за период). Как Вы думаете, такой вариант возможен?
Заметил, что диф.составляющая, если ставить большой Kd, при малых значениях разности ошибок (вблизи уставки) начинает раскачивать, так как коэффициент очень велик. Но если коэффициент снизить, то ее не хватает при старте и разгоне системы - недостаточно снижает мощность. В этой связи вопрос, а что если формулу немного изменить: Kd умножать не на разность ошибок между двумя периодами, а на квадрат этой разности? Тогда диф.составляющая будет иметь мизерный эффект при малых значениях разности ошибок (0,1 - 1), но эффект ее будет сильно возрастать когда разность ошибок становится больше (2-3... единиц за период). Как Вы думаете, такой вариант возможен?
- Alias
- Лейтенант
- Сообщения: 481
- Зарегистрирован: 27 ноя 2017, 13:15
- Откуда: Rus44
- Имя: Michael
- Контактная информация:
PID-регулятор
А можно и мне свой вопросик повторить здесь? Извиняюсь за вторжение. Я его уже озвучил в http://forum.flprog.ru/viewtopic.php?p=46251#p46251
Спасибо!
Спасибо!
- Boroda
- Капитан
- Сообщения: 836
- Зарегистрирован: 01 май 2016, 01:04
- Откуда: Коломна
- Имя: Станислав
- Контактная информация:
PID-регулятор
Т.к. расчеты ведутся в ИНТах, в программе сделаны некоторые ограничения, чтоб не вываливаться за диапазон +-32767.Serg_Grn писал(а): 29 апр 2018, 21:38Открыл редактор блока и оказалось, что интегральная ограничена (MinPow * 10), (MaxPow * 10), в то время как пропорциональная и дифференциальная имеют ограничения (+/-1000). Почему такое ограничение у интегральной?
1. Ограничение П и Д (+-1000) - это ограничение до +-100,0% выходной мощности (можно в принипе сделать до +-10000).
2. Ограничение И - это ограничение до MinPow/MaxPow выходной мощности, если сделать больше, то при долгом неравенстве SET<>VALUE интеграл убежит далеко за пределы минимальной или максимальной мощности и потом долго будет возвращаться и все это время будет наблюдаться перерегулирование. Такая хрень постоянно возникала у ПИД-регулятора в Codesys, поэтому пришлось от него отказаться.
Отправлено спустя 10 минут 31 секунду:
В принципе можно попробывать, тут даже может и не квадрат получиться, а куб или 1,5.Serg_Grn писал(а): 29 апр 2018, 21:44Kd умножать не на разность ошибок между двумя периодами, а на квадрат этой разности?
Очень быстро набирается мощность и происходит выбег? Значит снижайте Кп.Serg_Grn писал(а): 29 апр 2018, 21:44то ее не хватает при старте и разгоне системы - недостаточно снижает мощность
Я обычно ставлю Кд = Кп*(1...2).
А вообще лучше сначала убрать дифф и без него попробовать. А потом при необходимости добавить.
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя