连接模型
在本示例中,您将了解如何在 Engee 中建立 LTI 系统的连接模型。从简单的串行和并行连接到复杂的框图。
概述
Engee 提供了许多功能来帮助您创建 LTI 模型关联。这些功能包括
- 串行和并行连接 (
series
,parallel
) - 反馈连接 (
feedback
,feedback2dof
) - 输入和输出连接 (
[ , ]
,[ ; ]
,append
,array2mimo
) - 一般流程图 (
connect
)
为了说明这些示例,让我们连接必要的库,创建两个具有以下传递函数的系统:
Pkg.add(["RobustAndOptimalControl", "ControlSystems"])
using ControlSystems
H1 = tf(2,[1, 3, 0])
H2 = zpk([],[-5],5)
串行连接
例如,使用*
语句或series
函数串联 LTI 模型:

H = H2 * H1
H = series(H1,H2)
并行连接
例如,使用+
运算符或parallel
函数并行连接 LTI 模型:

H = H1 + H2
H = parallel(H1,H2)
连接反馈
带有负耦合的系统结构图的标准视图:

要定义封闭系统,请使用函数feedback
。
H = feedback(H1,H2)
请注意,默认反馈为负。要使反馈为正,请使用以下语法:
H = feedback(H1, H2, pos_feedback = true)
组合输入和输出
您可以通过输入来合并两个型号 H1 和 H2 的输入:
H = [H1 H2]
得到的模型有两个输入和一个输出,如下图所示:

同样,您也可以通过输入合并 H1 和 H2 的输出:
H = [ H1 ; H2 ]
合并后的模型 H 有两个输出和一个输入,对应于下面的流程图:

最后,您可以通过以下方法将两个模型的输入和输出结合起来:
H = append(H1,H2)
得出的模型 H 有两个输入和两个输出,并与结构图相对应:
您可以使用连接功能从基本的 SISO 模型建立 MIMO 模型,例如
[H1 -tf(10,[1, 10]); 0 H2]
您还可以使用函数array2mimo
。例如
P = ss(-1,1,1,0);
sys_array = fill(P, 2, 2) # Создает массив систем
mimo_sys = array2mimo(sys_array)
基于流程图建立模型
您可以使用函数和操作的组合来构建简单流程图的模型。例如,请看下面的流程图:

s = tf('s');
F = 1/(s + 1);
G = 100/(s^2 + 5*s + 100);
C = 20*(s^2 + s + 60)/s/(s^2 + 40*s + 400);
S = 10/(s + 10);
闭环系统从 r 到 y 的传递函数如下:
T = F * feedback(G*C,S)
plot(step(T,10))
但如果要绘制更复杂的方框图,请使用RobustAndOptimalControl.jl
库中的函数connect
。要使用connect
,请按以下步骤操作:
- 识别图中的所有块,包括求和块;
- 命名模块的所有输入和输出通道;
- 将系统模块的输出(输出)与模块的相应输入(输入)匹配起来。
让我们以下面的结构图为例,看看如何使用该函数。
导入并连接库RobustAndOptimalControl.jl
。
import Pkg
Pkg.add("RobustAndOptimalControl")
using RobustAndOptimalControl
使用功能named_ss
,为每个单元设置输入和输出信号的名称。
F1 = named_ss(F, x=:xF, u=:r, y=:u_f)
G1 = named_ss(G, x=:xG, u=:u, y=:y_m)
C1 = named_ss(C, x=:xC, u=:e, y=:u_c)
S1 = named_ss(S, x=:xS, u=:y_m, y=:y)
使用函数sumblock
指定加法器。
Sum1 = sumblock("e = r - y")
Sum2 = sumblock("u = u_f + u_c")
重要的是要仔细标记连接。连接的原则是一个程序块的输出连接到另一个程序块的输入。例如,信号е
是Sum1
的输出,但却是程序块C
的输入。
connections = [
:e => :e # output e Sum1 to input C
:y => :y # output y S to input Sum1
:u => :u # output u Sum2 to input G
:u_f => :u_f # output u_f F to input Sum2
:u_c => :u_c # output u_c C to input Sum2
:y_m => :y_m # output G to input S
]
定义输入信号w1
和输出信号z1
也很重要。
w1 = [:r]
z1 = [:y_m]
将所有计算数据输入connect
。您可以在 Julia System Integration 文档中了解有关所有函数参数的更多信息。
P = connect([F1, C1, G1, S1, Sum1, Sum2], connections; w1,z1,unique = false)
让我们来构建闭环系统的瞬态过程。
plot(stepinfo(step(P,5)))
结论
本文介绍了连接模型的方法。您可以在 Building Systems 中了解更多有关转换结构图的函数。