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

时间:2016-04-12 18:35:46

标签: matlab simulink masking

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

此问题已经扩展到足以重新实现here

变体子系统是一种很好的方法,可以通过工作空间参数进行控制;
但是,我发现掩码参数不与变量子系统选择接口。

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

MWE

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

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

  • Source\One
  • Source\Two
  • Source\Three

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

Source也是一个蒙面子系统 其掩码包含Radio Button参数,其值为variantValue Radio Button参数的variantValue选项为:

  • 选择1
  • 选择2
  • 选择3

掩码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

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

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

1 个答案:

答案 0 :(得分:5)

要执行任何不通过基本工作空间的操作,首先需要设置"覆盖变体条件...",现在您可以选择带有代码的活动变体:

...
(u'session', u'docInfo', u'field', 0, '#text') = Jake Roberts
(u'session', u'docInfo', u'field', 1, u'@name') = Section
(u'session', u'docInfo', u'field', 1, u'@isOpen') = True
(u'session', u'docInfo', u'field', 1, u'@isMandotory') = False
(u'session', u'docInfo', u'field', 1, '#text') = 5
...

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