Документация Engee

Предиктор Смита

В этом примере разрабатывается регулятор для объекта с временным запаздыванием по принципу внутренней модели, что в данном случае подразумевает использование предиктора Смита. Объект задается с помощью:

а архитектура управления выглядит следующим образом:

                ┌──────┐              ┌─────────────┐
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. Эти сведения помогут вам понять запас, с которым следует проектировать регулятор, если вы проигнорировали моделирование запаздывания.

  • Частотно-ориентированные методы, такие как формирование контура вручную, и некоторые виды настройки, основанные на оптимизации, изначально работают с временными запаздываниями.

Независимо от того, какой метод используется для проектирования при наличии запаздываний, надежность и производительность проекта желательно проверять с использованием модели объекта, содержащую запаздывания, являющиеся неопределенными или нет.