Engee 文档
Notebook

绘制系统反应

此示例显示如何绘制线性SISO和MIMO系统的时间和频率特性。

建筑时间特征

让我们创建一个三阶传递函数。

In [ ]:
Pkg.add(["RobustAndOptimalControl", "ControlSystems"])
In [ ]:
using ControlSystems
sys = tf([8, 18, 32],[1, 6, 14, 24])
Out[0]:
TransferFunction{Continuous, ControlSystemsBase.SisoRational{Int64}}
   8s^2 + 18s + 32
---------------------
s^3 + 6s^2 + 14s + 24

Continuous-time transfer function model

您可以使用以下方法绘制系统的瞬态和脉冲函数 step()impulse() 图书馆 ControlSystems.jl.

In [ ]:
plot(
    plot(step(sys,10),title="Реакция на ступенчатое воздействие"),
    plot(impulse(sys,10),title="Реакция на импульс"),
    layout=(2,1)
)
Out[0]:

您还可以使用以下命令模拟对任意信号(如正弦波)的响应 lsim(). 输入信号显示为灰色,系统响应显示为蓝色。[医]传真

In [ ]:
t = collect(0:0.001:4);
u = sin.(10*t);

plot(lsim(sys,u',t))
plot!(t,u)
Out[0]:

用于获得频率和时间特性的命令可与连续和离散信号或模型一起使用。 对于状态空间模型,也可以绘制系统从给定初始状态的反应。

In [ ]:
A = [-0.8 3.6 -2.1;-3 -1.2 4.8;3 -4.3 -1.1];
B = [0; -1.1; -0.2];
C = [1.2 0 0.6];
D = -0.6;
G = ss(A,B,C,D)

t1 = collect(0:0.001:18);
u1 = fill(0,(1, 18001))
x_0 = [-1.0; 0.0; 2.0]  # initial state
plot(lsim(G, u1, t1, x0 = x_0))
Out[0]:

频率特性

频域分析是了解控制系统稳定性和运行特性的关键。 Bode、Nyquist和Nichols图是构建和分析线性系统频率响应的三种标准方法。 您可以使用以下命令创建这些图形 ControlSystemsBase.bodeplot, ControlSystemsBase.nicholsplotControlSystemsBase.nyquistplot.

In [ ]:
bodeplot(sys, label="sys",title="Диаграмма Боде")
Out[0]:
In [ ]:
nyquistplot(
    sys, 
    unit_circle = true,
    Mt_circles = true,
    hz = true,
    label="sys",
    title="Диаграмма Найквиста"
)
Out[0]:
In [ ]:
ws = exp10.(range(-2,stop=2,length=200))
nicholsplot(sys,ws)
Out[0]:

极和零地图,根hodograph

系统的极点和零点包含有关其动力学、稳定性和性能限制的有价值的信息。 例如,考虑以下SISO控制环路中的反馈环路。

respdemo_07.png

这里:

要确定闭环系统的稳定性,可以构建极点和零点的映射。

In [ ]:
s = tf('s');
G = -(2*s+1)/(s^2+3*s+2);
k = 0.7;
T = feedback(G*k,1);

pzmap(T; hz = true)
Out[0]:

闭环的极点(用十字标记)位于左半平面,因此闭环系统在这种增益选择下是稳定的。

为了更好地理解闭环的加固如何影响稳定性。 您可以构建极点位置的图形,即具有命令的根hodograph rlocus().

In [ ]:
plot(rlocus(G,3))
Out[0]:

如果我们将光标悬停在hodograph与Oy轴的交点上,我们将在系统变得不稳定时看到系数的值。 因此,闭环的增益必须保持小于1.5以保证其稳定性。

系统响应的特点

响应图可以显示各种特性。 让我们用一个逐步效应的反应图的例子。

In [ ]:
result = step(T);
plot(result)
Out[0]:

要确定图形的特征,请使用函数 stepinfo. 它返回瞬态过程的所有特性,例如,稳态时间、过冲等。 这些信息可以写入变量,也可以用 plot.

In [ ]:
res1 = stepinfo(result)
Out[0]:
StepInfo:
Initial value:     0.000
Final value:      -0.538
Step size:         0.538
Peak:             -0.820
Peak time:         1.533 s
Overshoot:         52.21 %
Undershoot:        -0.00 %
Settling time:     5.986 s
Rise time:         0.438 s
In [ ]:
plot(stepinfo(result))
Out[0]:

MIMO系统分析

上面列出的所有命令都完全支持多输入输出(MIMO)系统。

让我们创建一个具有两个输入和两个输出的系统。 为此,请连接库 RobustAndOptimalControl.jl.

In [ ]:
import Pkg
Pkg.add("RobustAndOptimalControl")
   Resolving package versions...
  No Changes to `~/.project/Project.toml`
  No Changes to `~/.project/Manifest.toml`
In [ ]:
using RobustAndOptimalControl

让我们在状态空间中随机定义一个系统 ssrand. 让我们使用以下方法命名系统的输入、输出和状态 named_ss.

In [ ]:
sys = named_ss(ssrand(2,2,3), x=:x, u=:u, y=:y) 
Out[0]:
NamedStateSpace{Continuous, Float64}
A = 
 -0.6935858467597371  -0.032817470930895265  -0.3016581326344437
  0.5058765400071297  -1.6615260469669768     0.10945949288601392
 -1.247932807541346    0.7137077690752949    -0.5819319866343858
B = 
 -1.237448751523171   -0.3036661565073825
 -1.0848540704260157   1.6705711712602642
  1.2314535524207553   1.373228442496533
C = 
 -0.21514307560050283  1.4187348362176657  0.133664233314064
  0.7819036714282767   1.329056006320937   0.48281519607043166
D = 
 0.39388861160244376  0.003475472871380889
 2.133431314048057    2.2733658279516127

Continuous-time state-space model
With state  names: x1 x2 x3
     input  names: u1 u2
     output names: y1 y2
In [ ]:
sys.A .= [-0.5 -0.3 -0.2 ; 0 -1.3 -1.7; 0.4 1.7 -1.3]
sys
Out[0]:
NamedStateSpace{Continuous, Float64}
A = 
 -0.5  -0.3  -0.2
  0.0  -1.3  -1.7
  0.4   1.7  -1.3
B = 
 -1.237448751523171   -0.3036661565073825
 -1.0848540704260157   1.6705711712602642
  1.2314535524207553   1.373228442496533
C = 
 -0.21514307560050283  1.4187348362176657  0.133664233314064
  0.7819036714282767   1.329056006320937   0.48281519607043166
D = 
 0.39388861160244376  0.003475472871380889
 2.133431314048057    2.2733658279516127

Continuous-time state-space model
With state  names: x1 x2 x3
     input  names: u1 u2
     output names: y1 y2
In [ ]:
plot(step(sys,8))
Out[0]:

用于构建MIMO系统的其他有用图表。

*奇异值图(sigma)。 对于MIMO系统,奇异值曲线图示出了对应于频率响应矩阵的每个奇异值的曲线图上的最小线。
*每个I/O对的极点/零点显示。

例如,将sys的峰值增益绘制为频率的函数:

In [ ]:
sigmaplot(sys)
Out[0]:

系统比较

要比较不同系统的特性,您可以在单个图形上显示它们。 为每个系统分配特定的颜色、标记或线条样式,以便于比较。 使用上面的反馈示例,我们将针对三种不同颜色的轮廓增益k的三个值构造分步闭环响应。:

In [ ]:
k1 = 0.4;
T1 = feedback(G*k1,1);
k2 = 1;
T2 = feedback(G*k2,1);
plot(step([T T1 T2]), line=[:green :red :black])
Out[0]:

结论

在这个例子中,我们已经考虑了自行火炮的各种特征的构造。 有关分析控制系统的更多功能,请参阅[分析]部分(https://engee.com/helpcenter/stable/julia/ControlSystems/lib/analysis.html )。