多个模型的时域响应
本例演示了如何使用step
在一张图上比较多个模型的阶跃响应。该示例比较了带有闭环和两个不同 PI 控制器的非受控对象的阶跃响应。您可以将类似方法用于其他响应命令,如impulse
或lsim
,以获得多个模型的响应图。
在此示例中,您可以获取两个需要比较其时间特性的模型,并将它们绘制在一起。例如,您可以比较三阶系统 G 和带有控制器 C1 的闭环系统 G 的响应。
In [ ]:
Pkg.add(["ControlSystems"])
In [ ]:
import Pkg;
Pkg.add("ControlSystems")
In [ ]:
using ControlSystems
In [ ]:
G = zpk([], [-5, -5, -10], 100)
Out[0]:
In [ ]:
C1 = pid(0, 4.4; form=:parallel)
Out[0]:
In [ ]:
CL1 = feedback(G*C1)
Out[0]:
函数step
将系统描述作为输入,并生成一个ControlSystemsBase.SimResult
类型的对象作为输出。如果将此对象传递给函数plot
,将绘制出瞬态图。
In [ ]:
step(CL1)
Out[0]:
In [ ]:
plot([step(G), step(CL1)], label=["G" "CL1"])
xlims!(0,7)
hline!([1], linecolor=:black, style=:dash, label=:false)
Out[0]:
如果将多个对象作为plot
的输入参数传送给函数step
,则单个图形将显示指定模型的响应。如果未指定绘图的时间范围,step
将尝试选择一个能说明模型动态的时间范围。
将带有反馈的模型阶跃响应与另一个控制器的响应进行比较。为每个响应指定颜色和绘图样式。
In [ ]:
C2 = pid(2.9, 7.1; form=:parallel)
CL2 = feedback(G * C2)
plot(step(G,7), label="G", color=:blue)
plot!(step(CL1,7), label="CL1", color=:green)
plot!(step(CL2,7), label="CL2", color=:red)
hline!([0.4, 1], linestyle=:dash, color=:black, label=:false)
Out[0]:
您可以通过更改参数linestyle
和color
为每个瞬态指定自己的颜色和图表样式。