【问题标题】:Simulink: Control Variant Subsystems Using MaskSimulink:使用掩码控制变体子系统
【发布时间】:2016-04-12 18:35:46
【问题描述】:

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

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

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

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

MWE

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

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

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

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

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

  • 选择 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

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

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

【问题讨论】:

    标签: matlab simulink masking


    【解决方案1】:

    要执行任何不通过基础工作区的操作,您首先需要设置“覆盖变体条件...”,现在您可以使用代码选择活动变体:

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

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

    【讨论】:

    • 它也应该适用于实时系统。我希望生成的代码只包含选定的变体。
    • @kando:我不希望有任何问题,试试吧。如果您遇到任何限制或错误,请提出新问题。
    • 我不确定你是如何定义你的掩码的,variantValue 真的是一个字符吗?我会期待双倍的。使用 switch 时,如果您希望它永远不会发生,则插入 otherwiseerror 通常是一种很好的做法。
    • 我刚刚尝试过并确认它可以正常工作。不确定您的问题出在哪里。
    • 我用switch 1 switch 2 试过了,它成功了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多