#python #controls #pid #gekko
#python #элементы управления #pid #gekko
Вопрос:
Я работаю над (отлично!) Динамика процесса и курс управления на apmonitor.com и у меня есть вопрос об использовании GEKKO для моделирования (и оптимизации) параметров ПИД-регулирования.
Начиная с примера 14. PID_Control_Tuning Мне интересно, как работать с процессами, которые имеют физически ограниченный диапазон выходных данных (OP). (Например, нагреватель TCLab, мощность которого ограничена 0-100% от полной мощности.)
Если переменная «step» в примере изменена на:
step[40:] = 15.0 # Increase Step Size from 5.0 to 15.0
тогда (безразмерное) значение выходного сигнала (OP) в time = 40 равно 150.
График управления процессом GEKKO Python PID
Если я добавлю НИЖНЮЮ и ВЕРХНЮЮ границы к переменной OP с помощью:
#OP = m.Var(value=0.0) # Original
OP = m.Var(value=0.0, lb=0.0, ub=100.0)
модель не может решить и приводит к Exception: @error: Solution Not Found
Каков правильный способ моделирования процесса в GEKKO, который ограничен жесткими ограничениями (например, 0%-100%)?
Ответ №1:
В отличие от MPC, ПИД-регулятор не является алгоритмом, основанным на оптимизации. Если вы моделируете ПИД-регулятор, OP не является переменной решения, которая может быть ограничена «lb» и «ub».
Вы также можете захотеть использовать режим моделирования Gekko (imode = 4 или 7) при моделировании ПИД-регулятора.
Значение OP является результатом вычисления PID. Итак, вам нужно разрешить PID вычислять значение OP независимо от физического ограничения. Затем вы добавляете дополнительные условия для работы с физическими ограничениями, как показано ниже. Вам также необходимо добавить логику защиты от заводки (сброс интеграла).
if OP[i]>=100: # upper limit
OP[i] = 100.0
I[i] = I[i-1] # reset integral
if OP[i]<=0: # lower limit
OP[i] = 0.0
I[i] = I[i-1] # reset integral
Комментарии:
1. Спасибо за комментарий и код. Означает ли это, что не существует способа имитировать ПИД-контроль с помощью GEKKO?
OP[i]
Предоставленный вами код отсечения на основе индекса может быть применен послеm.solve()
, но любые изменения, внесенные в OP, сделают решение PV недействительным. Я неправильно понимаю здесь что-то основное?2. Уравнение PID всегда может вернуть значение OP, большее или меньшее, чем фактический размер регулирующего клапана, 0 -100%. Мы бы назвали это «насыщением клапана». Строки кода здесь (OP clipping) предназначены для имитации этой физической ситуации. Вот как работает ПИД-регулятор. Насыщение клапана может происходить чаще, когда настройка ПИД-регулятора неприемлема или не соответствует размеру клапана.
3. Вы можете использовать GEKKO для моделирования PID, как в примере кода, но вы можете делать это только в режиме моделирования Gekko, а не в режиме оптимизации, потому что в элементе управления PID оптимизация не выполняется.