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

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

Открыть пример в Engee

В этом примере разрабатывается система управления объекта с большой задержкой во времени. Для управления объектами с задержкой часто используют предиктор Смита, который может предсказать, какой сигнал должен появиться на выходе объекта до того, как он там появится на самом деле [1].

In [ ]:
using ControlSystemsBase, Plots
using ControlSystems # Библиотека для моделирования системы задержек

Объект управления задан уравнением: $P = P_0e^{-sτ}$, где $P_0 = {1 \over s+1}$.

In [ ]:
P0 = ss(-1, 1, 1, 0) # Объект управления без задержки
Out[0]:
StateSpace{Continuous, Int64}
A = 
 -1
B = 
 1
C = 
 1
D = 
 0

Continuous-time state-space model

Изменяя величину задержки τ, можно посмотреть, как система будет вести себя при различных запаздываниях.

In [ ]:
τ = 8 # Величина задержки
P = delay(τ) * P0 # Объект управления с задержкой
Out[0]:
DelayLtiSystem{Float64, Float64}

P: StateSpace{Continuous, Float64}
A = 
 -1.0
B = 
 1.0  0.0
C = 
 0.0
 1.0
D = 
 0.0  1.0
 0.0  0.0

Continuous-time state-space model

Delays: [8.0]

Структурная схема системы управления с предиктором Смита показана на рисунке ниже. Она содержит дополнительный внутренний контур обратной связи, в котором находится модель объекта управления $P_0$ . Дополнительный контур формирует сигнал, идентичный такому, который со временем появится на выходе системы и подает его на вход регулятора $C_0$ до тех пор, пока не появится сигнал от главной цепи обратной связи. [2]

image.png

В качестве регулятора $C_0$ используем ПИ-регулятор.

In [ ]:
ω0 = 2
ζ  = 0.7
C0, _ = placePI(P0, ω0, ζ) # ПИ-регулятор
Out[0]:
(TransferFunction{Continuous, ControlSystemsBase.SisoRational{Float64}}
1.7999999999999998s + 4.0
-------------------------
          1.0s

Continuous-time transfer function model, 1.7999999999999998, 0.44999999999999996)

Предиктор Смита $C$:

In [ ]:
C = feedback(C0, (1.0 - delay(τ))*P0) # Формирование внутренней обратной связи
Out[0]:
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]

Построим переходный процесс.

2.png

Передаточная функция по возмущающему воздействию f:

${Y \over F} = {P \over (1+PC)}$ = feedback(P, C).

Передаточная функция замкнутой системы :

${Y \over R} ={PC \over (1+PC)}$ = feedback(P*C, 1)

In [ ]:
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="τ = ")
Out[0]:

Построим логарифмическую амплитудно-фазовую частотную характеристику предиктора и сравним её с частотной характеристикой отрицательной задержки $e^{sτ}$, которая была бы идеальным контроллером (как правило, такой контроллер не может быть реализован на практике).

In [ ]:
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=["Предиктор Смита" "" "Идеальный контроллер" ""])
plot!(yticks=[0.1, 1, 10], sp=1)
plot!(yticks=0:180:1080, sp=2)
Out[0]:

Построим годограф Найквиста.

In [ ]:
fig_nyquist = nyquistplot(C * P, exp10.(-1:1e-4:2), title="τ = ")
Out[0]:

Вы можете повторить скрипт, меняя значение задержки τ в строке 4. Обратите внимание, что годограф описывает -1 при τ > 2,99.

Вывод

В данном примере мы изучили методы проектирования систем управления объектами с задержкой по времени с использованием предиктора Смита. Также мы рассмотрели различные методы анализа таких систем и их визуализацию.