Engee 文档
Notebook

使用对象模型为自动控制系统建模

自动控制系统(ACS)的模型以结构图的形式表示。它包含描述单个对象动态的模块。例如,执行器、传感器和控制器。本文将讨论自动控制系统模型的工作功能。我们将定义设置对象模型的方法、结构转换和时间特征构建的一些功能。


让我们来看看 ACS 的结构图,它包含过滤器$F(s)$ 、控制对象$G(s)$ 、控制器$C(s)$ 和传感器$S(s)$ 等模块。

controlsystemmodelingwithmodelobjectsexample_01.png

Engee 使用 ControlSystems.jl 库来处理控制系统。

In [ ]:
Pkg.add(["ControlSystems"])
In [ ]:
#Подключение библиотеки
using ControlSystems

每个系统组件都可以用对象模型来表示。例如,控制对象$G(s)$ 可通过函数zpk() 表示为 s=-1 的双极增益模型。标为$C(s)$ 的控制器可使用函数pid() 表示为 PID 控制器。可以使用tf() 将$F(s)$ 和$S(s)$ 模型指定为传递函数。

In [ ]:
G = zpk([], [-1, -1], 1)
Out[0]:
TransferFunction{Continuous, ControlSystemsBase.SisoZpk{Int64, Int64}}
       1
1--------------
 (s + 1)(s + 1)

Continuous-time transfer function model
In [ ]:
C = pid(2, 1.3, 0.3; Tf = 0.5)
Out[0]:
TransferFunction{Continuous, ControlSystemsBase.SisoRational{Float64}}
0.6s^2 + 2.0s + 1.5384615384615383
----------------------------------
     0.125s^3 + 0.5s^2 + 1.0s

Continuous-time transfer function model
In [ ]:
S = tf(5, [1, 4])
Out[0]:
TransferFunction{Continuous, ControlSystemsBase.SisoRational{Int64}}
  5
-----
s + 4

Continuous-time transfer function model
In [ ]:
F = tf(1, [1, 1])
Out[0]:
TransferFunction{Continuous, ControlSystemsBase.SisoRational{Int64}}
  1
-----
s + 1

Continuous-time transfer function model

指定的电路元件传递函数可以相互组合。例如,我们使用算子* 得出开环系统的传递函数。

In [ ]:
op = C*G*S
Out[0]:
TransferFunction{Continuous, ControlSystemsBase.SisoZpk{Float64, ComplexF64}}
                       (1.0s + 2.128916830187693)(1.0s + 1.2044165031456413)
24.0-------------------------------------------------------------------------------------------
    (1.0s^2 + 3.999999999999999s + 7.999999999999997)(1.0s)(1.0s + 1.0)(1.0s + 1.0)(1.0s + 4.0)

Continuous-time transfer function model

要构建闭环系统的传递函数,可使用函数feedback()

In [ ]:
cl = feedback(C*G,S)
Out[0]:
TransferFunction{Continuous, ControlSystemsBase.SisoZpk{Float64, ComplexF64}}
                          (1.0s + 4.000000000000038)(1.0s + 2.1289168301875057)(1.0s + 1.2044165031463534)(1.0s^2 + 1.9999999999994214s + 0.9999999999994851)
4.8----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
   (1.0s + 1.0)(1.0s + 1.0)(1.0s + 3.433002308222685)(1.0s^2 + 5.173461151904168s + 9.378541159192764)(1.0s^2 + 0.21173364799880784s + 1.6173060165378987)(1.0s + 1.1818028918743357)

Continuous-time transfer function model

考虑到滤波器$F$ ,我们来获取整个系统的传递函数。为此,请使用函数series()

In [ ]:
W = series(cl, F)
Out[0]:
TransferFunction{Continuous, ControlSystemsBase.SisoZpk{Float64, ComplexF64}}
                                (1.0s + 4.000000000000039)(1.0s + 2.1289168301875256)(1.0s + 1.2044165031460183)(1.0s^2 + 1.9999999999997238s + 0.9999999999997489)
4.8----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
   (1.0s + 1.0)(1.0s + 1.0)(1.0s + 1.0)(1.0s + 3.433002308222685)(1.0s^2 + 5.173461151904168s + 9.378541159192764)(1.0s^2 + 0.21173364799880784s + 1.6173060165378987)(1.0s + 1.1818028918743357)

Continuous-time transfer function model

所有获得的函数都可以使用 ControlSystems.jl 库进行分析。例如,我们来看看时间特性。让我们使用函数step() 建立系统的瞬态响应,并使用impulse() 建立脉冲响应。

In [ ]:
#Подключение библиотеки для построения графиков
using Plots

ht = step(W,30)
plot(ht, title="Переходная функция", label="h(t)")
Out[0]:
In [ ]:
#Построение импульсной характеристики
kt = impulse(W,30)
plot(kt, title="Импульсная функция", label="k(t)")
Out[0]:

ConrtrolSystems.jl 库中还有其他用于分析自动控制系统模型的函数。可以在 时间和频率响应分析 中进行学习。