Engee 文档
Notebook

史密斯的预测器

在这个例子中,正在开发具有长时间延迟的对象管理系统。 为了控制具有延迟的对象,经常使用Smith预测器,它可以预测哪个信号应该出现在对象的输出端,然后才实际出现在那里[1]。

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

控制对象由等式定义: ,在哪里 .

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

通过改变延迟值t,可以看到系统在不同延迟下会如何表现。

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]

Smith预测器控制系统的框图如下图所示。 它包含一个额外的内部反馈回路,其中包含控制对象的模型。 一个额外的电路产生一个与最终出现在系统输出端的信号相同的信号,并将其送入调节器的输入 直到有来自主反馈电路的信号。 [2]

image.png

作为监管机构 我们使用PI控制器。

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)

史密斯的预测器 :

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:

= feedback(P, C).

封闭系统的传递函数 :

= 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]:

让我们构造预测器的对数幅度-相位频率响应,并将其与负延迟的频率响应进行比较。 这将是一个理想的控制器(作为一项规则,这样的控制器不能在实践中实现)。

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行。 注意,hodograph描述了τ>2.99处的-1。

结论

在这个例子中,我们研究了使用Smith预测器设计延时对象管理系统的方法。 我们还回顾了分析此类系统及其可视化的各种方法。