经典初始化模式
何时使用经典初始化
初始化模式控制了Simulink金宝app®为有条件执行的子系统处理初始化值。
经典
mode是在R2013b或之前创建的Simulink模型的默认初始化模式。金宝app你可以继续使用经典模式,如果:
该模型不包含任何受简化模式影响的建模元素。
简化模式的行为和要求不满足您的建模目标。
转换到简化模式所涉及的工作大于简化模式的好处。看到从经典初始化模式转换为简化初始化模式.
“初始化模式”设置为“经典”
设置经典初始化模式。
打开“配置参数”对话框。在建模选项卡和设置部分中,选择模型设置
.
在搜索框中输入未指定的初始化检测.
从下拉列表中选择
经典
.
经典的初始化问题和限制
使用经典初始化模式可能会导致以下一个或多个问题。您可以通过使用简化模式来解决这些问题。每个问题的描述包括经典模式下的行为示例、使用简化模式时的行为示例,以及使用简化模式时必须进行的更改的摘要。
包含相同子系统的条件子系统可以在第一次执行之前显示不同的初始值,如果下面两个都适用:
该模型采用经典初始化模式。
一个或多个相同的子系统输出到一个恒等转换块。
使用经典初始化模式的条件子系统,其输出连接到离散时间积分器块或S-Function块,会产生不一致的输出。
当连接到Merge块时,使用经典模式初始化的条件子系统的执行顺序可能会影响Merge块的输出。块执行顺序的更改可能会产生意想不到的结果。
当您重命名合并块源子系统块,初始输出的Merge块可以改变。
当两个或多个子系统向Merge块提供不同的初始输出值时,该Merge块不指定自己的初始输出值,重命名其中一个子系统会影响在经典初始化模式下Merge块的初始输出。
金宝appSimulink没有提供正确的一致性检查
金宝appSimulink没有为通过模型参考边界连接的两个输出端口块之间的设置提供正确的一致性检查。
有关将模型从经典模式转换为简化模式所涉及的任务的其他信息,请参见从经典初始化模式转换为简化初始化模式.
恒等转换可以改变模型的行为
包含相同子系统的条件子系统可以在第一次执行之前显示不同的初始值,如果下面两个都适用:
该模型采用经典初始化模式。
一个或多个相同的子系统输出到一个恒等转换块。
恒等转换块是不改变其输入信号值的块。识别转换块的例子是值为的信号转换块或增益块1
.
在ex_identity_transform_cl
模型中,子系统A和B是相同的,但是B输出到一个增益块,该增益块又输出到一个外港块。
在模拟模型时,的初始值一个
(Scope块中的顶部信号)为2
的初始值B
是0
尽管子系统是相同的。
如果您更新模型以使用简化初始化模式(参见ex_identity_transform_simpl
),模型看起来一样。转换所需的步骤ex_identity_transform_cl
来ex_identity_transform_simpl
是:
集未指定的初始化检测来
简化
.为外港在子系统A和B中的块,设置初始输出值的来源参数
输入信号
.的方法也可以获得相同的行为初始输出值的来源参数
对话框
和初始输出参数3.
.
模拟更新的模型时,恒等转换的连接不会改变结果。这两种情况下的输出是一致的。
与离散时间积分器或s函数块不一致的输出
使用经典初始化模式的条件子系统,其输出连接到离散时间积分器块或S-Function块,会产生不一致的输出。
在ex_discrete_time_cl
模型,所启用的子系统包括两个常量块,并输出到离散时间积分器块。启用的子系统输出到两个显示块。
在模拟模型时,两个显示块显示不同的值。
即使条件子系统被禁用,连接到离散时间积分器块的Constant1块也会执行。顶部的Display块显示了一个值2,这是Constant1块的值。Constant2块没有执行,所以底部的Display块显示的值为0。
如果您更新模型以使用简化初始化模式(参见ex_discrete_time_simpl
),模型看起来一样。更新后的模型通过使用简化模式纠正了输出不一致的问题。转换所需的步骤ex_discrete_time_cl
来ex_discrete_time_simpl
是:
集未指定的初始化检测来
简化
.为外港块Out1和Out2,设置初始输出值的来源参数
输入信号
.此设置显式地继承初始值,在本例中为2。的方法也可以获得相同的行为初始输出值的来源参数
对话框
和初始输出参数2
.
当您模拟更新的模型时,Display块显示相同的输出。输出值是2,因为两者都是外港块继承它们的初始值。
执行顺序影响合并块输出
使用经典模式初始化的条件子系统的执行顺序,当连接到合并块,会影响输出合并块。块执行顺序的更改可能会产生意想不到的结果。行为取决于如何设置禁用时的输出参数。
的ex_basic_merge_sorted_order_1_cl
模型有两个相同的已启用的子系统(Enable A和Enable B),它们连接到一个Merge块。当您模拟模型时,红色的数字显示块的排序执行顺序。
当您模拟模型时,范围Block看起来如下所示:
的ex_basic_merge_sorted_order_2_cl
型号与ex_merge_sorted_1_cl
,只是块执行顺序与默认执行顺序相反。修改执行顺序。
打开启用A子系统的属性对话框,并设置优先级参数
2
.设置优先级的启用B子系统
1
.
当你使用不同的执行顺序来模拟模型时,Scope块看起来如下所示:
执行顺序的改变会从相同的条件子系统产生不同的结果。
要更新模型以使用简化的初始化模式(请参阅ex_basic_merge_sorted_order_1_simpl
而且ex_basic_merge_sorted_order_2_simpl
):
集未指定的初始化检测来
简化
.
的初始输出参数是一个空矩阵,[]
,默认为。因此,初始输出值设置为该数据类型的默认初始值,即0。有关默认初始值的信息,请参见初始化信号值.当您模拟每个简化模式模型时,两个模型都会产生相同的结果。
当禁用参数设置为重置时使用输出
的ex_merge_sorted_1_cl
模型有两个已启用的子系统(Enable A和Enable B),它们连接到一个Merge块。当您模拟模型时,红色的数字显示块的排序执行顺序。
当你模拟模型时,Scope块看起来如下所示:
的ex_merge_sorted_2_cl
型号与ex_merge_sorted_1_cl
,只是块执行顺序与默认执行顺序相反。修改执行顺序。
打开启用A子系统的属性对话框,并设置优先级参数
2
.设置优先级的启用B子系统
1
.
当你使用不同的执行顺序来模拟模型时,Scope块看起来像这样:
执行顺序的改变会从相同的条件子系统产生不同的结果。
要更新模型以使用简化的初始化模式(请参阅ex_merge_sorted_1_simpl
而且ex_merge_sorted_2_simpl
):
集未指定的初始化检测来
简化
.为外港在“启用A”和“启用B”中设置禁用时的输出参数
举行
.不支持简化模式金宝app重置
为驱动Merge块的条件子系统的输出端口。
当您模拟每个简化模式模型时,两个模型都会产生相同的结果。
可调参数
许多块参数是可调的。一个可调参数是一个不需要重新编译模型就可以更改其值的参数(参见模型编译有关编译模型的更多信息)。例如,增益块的增益参数是可调的。你可以在模拟运行时改变块的增益。如果某个参数不可调优且模拟正在运行,则禁用设置该参数的对话框控件。
当您更改可调参数的值时,更改将在下一个时间步骤开始时生效。
状态
典型地,一些系统的当前值,因此模型,输出是时间变量先前值的函数。这样的变量称为状态。因此,从框图中计算模型的输出需要在当前时间步中保存状态值,以便在计算后续时间步中的输出时使用。此任务在对定义状态的模型进行模拟时执行。
在Simulink模型中可以出现两种状态:离散状态和连续状态。金宝app连续状态持续变化。连续状态的例子有汽车的位置和速度。离散状态是连续状态的近似,其中状态使用有限(周期或非周期)间隔更新(重新计算)。离散状态的一个例子是数字里程表上显示的汽车位置,它是每秒钟更新一次,而不是连续更新。在极限下,当离散状态时间间隔趋于零时,离散状态等价于连续状态。
块隐式地定义了模型的状态。特别是,一个需要部分或全部以前的输出来计算当前输出的块隐式定义了一组需要在时间步之间保存的状态。这样的块被称为有状态。
下面是一个具有状态的块的图形表示:
定义连续状态的块包括以下标准的Simulink块:金宝app
一个模型的状态总数是由它的所有块定义的所有状态的总和。确定关系图中的状态数量需要解析关系图,以确定它所包含的块的类型,然后聚合定义状态的块类型的每个实例所定义的状态数量。此任务在模拟的编译阶段执行。
金宝appSimulink没有提供正确的一致性检查
金宝appSimulink没有为通过模型参考边界连接的两个输出端口块之间的设置提供正确的一致性检查
金宝app当以下所有条件都为真时,Simulink要么抛出假警告,要么不抛出警告:
的选项未指定的初始化检测设置为
经典
.模型包含一个model块。
在上面模型块引用的子模型中,有一个根输出端口是由一个有条件执行的子系统直接(或间接通过虚拟块)驱动的。对于这个bug报告的其余部分,我们将把与有条件执行的子系统输出相对应的Outport块称为源外港。
回到顶层模型,由子模型中的源Outport块驱动的model块的输出端口依次驱动a目的地有条件执行子系统的输出端口块。
没有模型引用,也就是说,如果源和目标Outport块都在同一个模型中,如果设置金宝app初始输出而且禁用时的输出(如果适用)对于两个输出端口块是不同的。然而,在上面描述的模型引用的情况下,Simulink要么在两个Outport块实际上具有相同的设置时抛出错误警告,要么金宝app在它们不同时根本不抛出警告或错误。