对信号求积分

您所在的位置:网站首页 e2zdz积分 对信号求积分

对信号求积分

2024-06-10 16:54| 来源: 网络整理| 查看: 265

打开实时脚本

当一个使能子系统中的 Integrator 模块需要使用另一个使能子系统中的 Integrator 模块的状态时,可以使用状态端口来防止创建代数环。

打开模型 EnabledSubsystemStatesAlgLoop。该模型包含两个使能子系统,即 A 和 B。Constant 模块为每个子系统提供第一个输入。子系统 A 的输出是子系统 B 的另一个输入。子系统 B 的输出是子系统 A 的另一个输入。Pulse 模块为两个子系统提供使能信号。Pulse 模块直接使能子系统 B。使用 Logical Operator 模块反转 Pulse 模块输出,为子系统 A 创建使能信号。因此,随着 Pulse 模块输出值的变化,使能子系统的执行在子系统 A 和子系统 B 之间交替进行。

mdl = "EnabledSubsystemStatesAlgLoop"; open_system(mdl);

每个使能子系统包含一个 Integrator 模块,该模块使用输入端口为模块提供初始条件。每个子系统中的 Enable 模块配置为在每次子系统执行时重置状态。当重置 Integrator 模块的状态时,初始值来自初始条件输入端口,该端口连接到另一个子系统中 Integrator 模块的输出。将状态从一个子系统传递给另一个子系统便于信号的持续集成,同时在子系统之间交替执行。

但是,要计算子系统 B 的输出值,求解器需要子系统 A 的输出,反之亦然。将一个 Integrator 模块的输出连接到另一个 Integrator 模块的输入会产生代数环。要查看模型中的代数环,请使用 Simulink.BlockDiagram.getAlgebraicLoops 函数。代数环查看器打开,显示模型包含一个真实代数环。

Simulink.BlockDiagram.getAlgebraicLoops(mdl);

代数环在模型中突出显示。

为了避免产生这种代数环,您可以使用状态端口(而不是输出端口)将一个子系统中 Integrator 模块的状态传递给另一个子系统中 Integrator 模块的初始条件。求解器在每个时间步的较早点处计算模块状态值,因此子系统 B 的输出不再依赖子系统 A 的输出,反之亦然。

要查看此解,请打开模型 EnabledSubsystemStates。输入、使能和输出信号是相同的,但子系统 A 的输出不再作为子系统 B 的第二个输入,反之亦然。

mdl2 = "EnabledSubsystemStates"; open_system(mdl2)

软件不支持将 Integrator 模块的状态端口连接到使能子系统的输出端口。子系统 A 中 Integrator 模块的状态端口使用具有全局可见性的 GoTo 和 From 模块连接到子系统 B 中 Integrator 模块的初始条件端口。子系统 B 中 Integrator 模块的状态端口使用相同的策略连接到子系统 A 中 Integrator 模块的初始条件端口。

要验证使用状态端口是否解决了代数环,请再次使用 Simulink.BlockDiagram.getAlgebraicLoops 函数。

Simulink.BlockDiagram.getAlgebraicLoops(mdl2);No algebraic loops were found.

对模型进行仿真。要查看结果,请双击 Scope 模块。示波器窗口显示每个子系统的使能信号和输出信号。

out = sim(mdl2);

有关在使能子系统之间传递状态值的系统的另一个示例,请参阅Building a Clutch Lock-Up Model。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3