Simulink:使用 Mask 控制变体子系统

Simulink: Control Variant Subsystems Using Mask

我想找到一个使用掩码参数在掩码下切换模型内部结构的简单过程。

这个问题已经足够扩展,以至于它已经被重新实现 here

变体子系统是一种很好的方法,可以通过工作区参数进行控制;
但是,我发现掩码参数无法与变体子系统选择交互。

This link 是关于如何使用掩码参数对系统内部的块进行更改的系列文章中的第一篇; 但是,该方法不像使用变体子系统和开关那样直观。
link 也是 2008 年的,我相信它可能在某个时候被取代了。

MWE

我制作了一个模型,其中包含一个标记为 Source 的系统。
它连接到显示其输出的 Display 块。

Source 是变体子系统。
它包含 3 个变体:

每个变体包含一个 Constant 块。
Constant 块的值与块标签同名。
例如, Source\Two 包含一个值为 2 的常量块。

Source 也是一个屏蔽子系统。
它的掩码包含一个 Radio Button 参数,其值标记为 variantValue.
variantValue 参数的 Radio Button 选项是:

掩码Initialization代码如下:

switch variantValue

case 'Choice 1'
set_param('Source','OverrideUsingVariant','One')
disp('One')

case 'Choice 2'
set_param('Source','OverrideUsingVariant','Two')

case 'Choice 3'
set_param('Source','OverrideUsingVariant','Three')

end

我已将变体设置为覆盖。 我无法设置掩码以允许库块修改内容,因为它是灰色的。

当作为变体子系统的掩蔽子系统工作时,我会将变体子系统从掩蔽子系统放到更深的层次结构中。

要执行任何不通过基础工作区的操作,您首先需要设置 "Overwrite variant conditions...",现在您可以使用代码选择活动变体:

set_param('untitled/Variant Subsystem','OverrideUsingVariant','Variant1')

剩下的就是创建一个掩码,只要掩码中的参数发生更改,它就会运行上面的行。这可以通过初始化命令完成。