Python GEKKO для настройки PID

#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 оптимизация не выполняется.