主要内容

删除代数循环

使用这些技术来移除模型中的代数循环。

引入延迟来移除代数循环

这个例子演示了如何通过在循环中的块之间引入延迟来删除模型中的代数循环。这是在较大的模型中删除代数循环的一种方法,这种循环可能由于原子子系统之间的反馈而发生。

考虑这个例子附带的模型。模型中有两个由原子子系统引起的代数循环

  • 黑盒一个->黑箱B->黑箱C->黑盒一个

  • 黑箱B->黑箱C->黑箱B

当您更新此模型时,Simulink®将检测循环金宝app黑盒一个->黑箱B->黑箱C->黑盒一个

因为您不知道这些子系统的内容,所以可以通过在子系统外部添加Unit Delay块来打破循环。有三种方法可以使用Unit Delay块来打破这些循环:

  • 添加一个单位延迟之间黑盒一个而且黑箱C

  • 添加一个单位延迟之间黑箱B而且黑箱C

  • 在两个代数循环中添加单元延迟块。

在两者之间添加一个单位延迟黑盒一个而且黑箱C

如果在子系统之间的反馈信号上添加一个单位延迟黑盒一个而且黑箱C,您向系统引入最小单元延迟数(1)。通过引入之前的延迟黑盒一个黑箱B而且黑箱C使用当前时间步长的数据。

在两者之间添加一个单位延迟黑箱B而且黑箱C

如果您在子系统之间添加一个单位延迟黑箱B而且黑箱C,你打破了之间的代数循环黑箱B而且黑箱C.此外,你打破了两者之间的循环黑盒一个而且黑箱C,因为这个信号完成了代数循环。通过在前面插入单元延迟块黑箱C黑箱C现在只处理前一个时间步骤中的数据。

在两个代数循环中都添加单元延迟

在这里的示例中,您插入Unit Delay块来打破这两个代数循环。在这个模型中,BlackBox_A和BlackBox_B使用前一个时间步骤中的数据。BlackBox_C使用当前时间步长的数据。

手动求解代数循环

如果仿金宝app真软件®不能解决代数循环,软件报告一个错误。使用以下技术之一手动解决循环:

  • 使用微分或坐标改变等技术重新构造底层dae。这些技术将dae置于代数循环求解器更容易求解的形式中。

  • 将dae转换为ode,这消除了任何代数循环。

  • 使用IC和代数约束块创建初始猜测

使用IC和代数约束块创建初始猜测

你的模型可能包含循环,如果没有对代数状态的良好的初始猜测,循环求解器就不能收敛。您可以为代数状态变量指定一个初始猜测,但是只有当您认为循环是合法的时才使用这种技术。

有两种方法来指定初始猜测:

  • 一个地方集成电路块在代数循环中。

  • 函数在代数循环中指定信号的初始猜测代数约束块。

如何金宝app消除人工代数循环

当你启用尽量减少代数循环的出现, 金宝appSimulink试图消除人工代数循环。在本例中,模型包含一个引起人工代数循环的原子子系统。

原子子系统的内容不是直接馈送,但是Simulink将原子子系统标识为直接馈送。金宝app

如果代数循环诊断设置为错误时,由于模型包含了涉及其原子子系统的人工代数循环,因此模拟模型会产生误差。

为了消除这个代数循环,

  1. 根据前面的图形创建模型,其中包含导致人工代数循环的原子子系统。

  2. 诊断窗格,设置“型号配置参数”代数循环参数警告没有一个

  3. 中显示此模型和原子子系统的块执行顺序调试选项卡上,选择信息覆盖>执行顺序

    回顾执行顺序可以帮助您理解如何消除人工代数循环。

    子系统中的所有块都在同一个级别上执行:1。(0是最低级别,表示第一个要执行的块。)

    请注意

    有关块执行顺序的详细信息,请参见控制和显示执行顺序

  4. 在顶层模型中子系统参数对话框,选择尽量减少代数循环的出现.该参数指示软件在模拟模型时尝试消除包含原子子系统的代数循环。

  5. 保存更改。

  6. 建模选项卡上,单击更新模型重新计算执行顺序。

    现在在子系统中有两个级别的执行顺序:1和2。

为了消除人工代数循环,软件尝试调整执行顺序,使子系统或模型参考没有直接的馈通。

当你模拟一个模型时,所有的块都按照这个顺序执行方法:

  1. mdlOutputs

  2. mdlDerivatives

  3. mdlUpdate

在最初的版本中模型,执行的mdlOutputs方法从植物块开始,因为植物块没有直接馈通。执行以Controller块结束。

有关这些方法的详细信息,请参见金宝app仿真软件模型

如果您启用尽量减少代数循环的出现参数,软件将子系统划分为两个原子单元。

这些条件是正确的:

  • 原子单元2没有直接馈通。

  • 原子单位1只有amdlOutputs方法。

只有mdlDerivativesmdlUpdate原子单元2的方法需要原子单元1的输出。金宝appSimulink可以执行通常在mdlOutput的原子单元1的方法mdlDerivatives原子单元2的方法。

模型的新执行顺序是:

  1. mdlOutputs模型方法

    1. mdlOutputs原子单元2的方法

    2. mdlOutputs其他块的方法

  2. mdlDerivatives模型方法

    1. mdlOutputs原子单元1的方法

    2. mdlDerivatives原子单元2的方法

    3. mdlDerivatives其他块的方法

尽量减少代数循环的出现技术要成功,子系统或参考模型必须有一个直接连接到输入的非直馈模块,并且必须不包含任何指定为测试点的信号。然后该软件可以设置DirectFeedthrough属性的块导入到表示输入端口没有直接馈通。

消除由原子子系统引起的人工代数循环

如果原子子系统导致人工代数循环,则将原子子系统转换为虚拟子系统。当子系统是原子的并且您模拟模型时,Simulink调用代数循环求解器。金宝app求解器在一次迭代后终止。因为没有代数常数,所以代数循环是自动求解的。将子系统设为虚拟后,Simulink在模拟过程中不会调用代数循环求解器。金宝app

将原子子系统转换为虚拟子系统:

  1. 打开包含原子子系统的模型。

  2. 右键单击原子子系统并选择子系统参数

  3. 清除将其视为原子单位参数。

  4. 保存更改。

如果您将原子子系统替换为虚拟子系统,并且模拟仍然失败并出现代数循环错误,请检查以下模型之一:

  • 代数约束

  • 一个人工的代数循环,不是由这个原子子系统引起的

创建人工代数循环的捆绑信号

一些模型将信号捆绑在一起。这种捆绑可以使Simulink检测到一个代数循环金宝app,即使在不存在代数约束的情况下。如果您重定向一个或多个信号,您可能能够删除人工代数循环。

在这个例子中,a线性化了模型模拟了单泵供液双缸系统的动力学过程。在这个模型中:

  • 输出第一季度是流体从泵流入油箱的速率。

  • 输出h2是第二个容器中液体的高度。

  • 状态方程Block定义了储罐系统对泵运行的动态响应:

  • State-Space块的输出是一个向量,包含第一季度而且h2

如果你模拟这个模型代数循环参数设置为警告错误, 金宝appSimulink识别代数循环。

要消除这个代数循环:

  1. 改变C而且D矩阵如下:

  2. 通过第一季度直接到Scope,而不是通过State-Space块。

    现在,输入(第一季度)不会直接传递到输出(函数)D矩阵为0),因此状态空间块不再具有直接馈通。反馈信号现在只有一个元素,所以不再需要Selector块,如下所示模型

诊断和消除人工代数环的模型和块参数

当你认为你的模型有一个人工代数循环时,有两个参数需要考虑:

  • 尽量减少代数循环的出现参数-指定Simulink尝试消除任何人工代数循环金宝app:

    • 原子子系统—在“子系统参数”对话框中,选择尽量减少代数循环的出现

    • 模型块——对于引用的模型,在模型参考窗格,选择尽量减少代数循环的出现

  • 最小化代数循环参数-指定如果金宝app尽量减少代数循环的出现参数没有影响。

    最小化代数循环参数在诊断窗格的“配置参数”。此参数的诊断操作为:

    设置 模拟反应
    没有一个

    金宝appSimulink不采取任何行动。

    警告

    金宝appSimulink将显示一个警告尽量减少代数循环的出现参数没有影响。

    错误

    金宝appSimulink终止模拟并显示错误尽量减少代数循环的出现参数没有影响。

块约简和人工代数环

当您启用块减少在模型配置参数优化中,Simulink将某些块组折叠成单个更有效的块,或完全删除它们。金宝app启用块减少可以在模型模拟和生成代码时更快地执行。

启用块缩减还可以帮助Simulink解决人工代数循环。金宝app

考虑下面的例子模型

最初,块减少是关闭的。当你模拟这个时模型,原子单元子系统和增益和比较常数块是Simulink无法解决的代数循环的一部分。金宝app

如果启用了块减少和执行顺序,并再次模拟模型,Simulink将不会显示已减少的块的执行顺序。金宝app您现在可以快速看到哪些块被减少了。

比较常数和增益块已从模型中消除,因此它们不再产生代数循环错误。原子单元子系统生成一个警告:

警告:如果子系统“ex_aloop_block_reduction_errwarn/ Atomic Unit”的输入'ex_aloop_block_reduction_errwarn/ Atomic Unit/In1'涉及直接反馈,则存在代数循环,Simulink无法删除。金宝app考虑清除“最小化代数循环发生”参数以避免此警告。

提示

使用总线选择器块只向原子子系统传递所需的信号。

相关的话题