Предиктор Смита
В этом примере разрабатывается регулятор для объекта с временным запаздыванием по принципу внутренней модели, что в данном случае подразумевает использование предиктора Смита. Объект задается с помощью:
а архитектура управления выглядит следующим образом:
┌──────┐ ┌─────────────┐ r │ │ u │ │ ───+──+────────►│ C0 ├───────────┬─►│ P0*exp(-st) ├─┐y ▲ ▲ │ │ │ │ │ │ -│ │- └──────┘ │ └─────────────┘ │ │ │ │ │ │ │ ┌──────────┐ ┌──────┐ │ │ │ │ │ │ │ │ │ │ │ └─┤1-exp(-st)│◄───┤ P0 │◄──┘ │ │ │ │ │ │ │ │ └──────────┘ └──────┘ │ │ │ └──────────────────────────────────────────────────┘
Преимущество такого подхода заключается в том, что регулятор может быть спроектирован для номинального объекта без временного запаздывания и при этом корректно работать при наличии запаздывания. Также понятно, почему мы относимся к такому регулятору как к использованию «внутренней модели» — из-за наличия модели во внутреннем контуре обратной связи.
Настроим номинальную систему и ПИ-регулятор.
using ControlSystemsBase, Plots
P0 = ss(-1, 1, 1, 0) # Номинальная система
StateSpace{Continuous, Int64}
A =
-1
B =
1
C =
1
D =
0
Continuous-time state-space model
Мы проектируем ПИ-регулятор для номинальной системы с использованием placePI
. Для проверки размещения полюсов воспользуемся, например, dampreport(feedback(P0, C0))
.
ω0 = 2
ζ = 0.7
C0, _ = placePI(P0, ω0, ζ)
(TransferFunction{Continuous, ControlSystemsBase.SisoRational{Float64}}
1.7999999999999998s + 4.0
-------------------------
1.0s
Continuous-time transfer function model, 1.7999999999999998, 0.44999999999999996)
Затем настроим объект с запаздыванием и регулятор на основе предиктора Смита,
τ = 8
P = delay(τ) * P0
C = feedback(C0, (1.0 - delay(τ))*P0) # формируя внутренний контур обратной связи на приведенной выше диаграмме.
DelayLtiSystem{Float64, Float64}
P: StateSpace{Continuous, Float64}
A =
0.0 -2.0
2.0 -2.8
B =
2.0 -2.0
1.7999999999999998 -1.7999999999999998
C =
2.0 -1.7999999999999998
0.0 -1.0
D =
1.7999999999999998 -1.7999999999999998
0.0 0.0
Continuous-time state-space model
Delays: [8.0]
Теперь построим график откликов замкнутого контура. Передаточная функция от до имеет вид = feedback(P*C,1)
, а от возмущения по нагрузке, возникающего в , передаточная функция имеет вид = feedback(P, C)
using ControlSystems # Полная загрузка ControlSystems для моделирования систем с запаздыванием
G = [feedback(P*C, 1) feedback(P, C)] # Эталонный шаг в момент t = 0 и шаг возмущения от нагрузки в момент t = 15
fig_timeresp = plot(lsim(G, (_,t) -> [1; t >= 15], 0:0.1:40), title="τ = $τ")
Построим частотную характеристику части предиктора и сравним с отрицательным запаздыванием, которое будет представлять собой идеальный регулятор, который (как правило) не может быть реализован на практике (отрицательное запаздывание подразумевает предвидение).
C_pred = feedback(1, C0*(ss(1.0) - delay(τ))*P0)
fig_bode = bodeplot([C_pred, delay(-τ)], exp10.(-1:0.002:0.4), ls=[:solid :solid :dash :dash], title="", lab=["Smith predictor" "" "Ideal predictor" ""])
plot!(yticks=[0.1, 1, 10], sp=1)
plot!(yticks=0:180:1080, sp=2)
Взглянем на график Найквиста. Обратите внимание, что кривая Найквиста огибает -1 для τ > 2,99
fig_nyquist = nyquistplot(C * P, exp10.(-1:1e-4:2), title="τ = $τ")
Видеоруководство по системам с запаздыванием доступно здесь:
Дополнительные методы проектирования для систем с запаздыванием
Многие стандартные методы проектирования систем управления не работают для систем с запаздыванием или систем, не представленных в виде рациональной функции. Однако помимо использования предиктора Смита, описанного выше, существует несколько распространенных приемов, которые можно применить для использования этих методов.
-
Аппроксимируйте запаздывание с помощью приближения
pade
, в результате чего можно получить стандартную рациональную модель. К недостаткам можно отнести наличие нулей в правой полуплоскости и неспособность уловить экстремальную фазовую потерю задержки для высоких частот. -
Дискретизируйте систему с временем выборки, которое соответствует целому кратному времени запаздывания. Запаздывание можно представить точно в дискретном времени, но если время выборки невелико по отношению к времени запаздывания, будет введено большое количество дополнительных состояний.
-
Игнорируйте запаздывание и проектируйте регулятор с большими запасами устойчивости по фазе и запаздыванию. Возможно, это не слишком сложный, но, тем не менее, полезный практический метод.
-
Игнорируйте запаздывание, но моделируйте его как неопределенность. См. раздел о моделировании неопределенных временных запаздываний в пакете расширения RobustAndOptimalControl.jl. Эти сведения помогут вам понять запас, с которым следует проектировать регулятор, если вы проигнорировали моделирование запаздывания.
-
Частотно-ориентированные методы, такие как формирование контура вручную, и некоторые виды настройки, основанные на оптимизации, изначально работают с временными запаздываниями.
Независимо от того, какой метод используется для проектирования при наличии запаздываний, надежность и производительность проекта желательно проверять с использованием модели объекта, содержащую запаздывания, являющиеся неопределенными или нет.