【问题标题】:Simulink Mask Editor: replace blockSimulink Mask Editor:替换模块
【发布时间】:2017-05-02 03:21:59
【问题描述】:

我想在 Matlab/Simulink 2016b 中将子系统的一个模块更改为 built-in/Inportbuilt-in/Constant

disp(PortStat)
switch PortStat
   case 'off'
       if strcmp(get_param([gcb '/eng'],'BlockType'),'Inport')
          disp('replace inport to constant')
          replace([gcb '/eng'],'built-in/Inport','built-in/Constant')
          get_param([gcb '/eng'],'BlockType')
          replace_block([gcb '/eng'],'built-in/Inport','built-in/Constant')
          get_param([gcb '/eng'],'BlockType')
       end
   case 'on'
      if strcmp(get_param([gcb '/eng'],'BlockType'),'Inport')
         disp('inport already exist')
      end
      if strcmp(get_param([gcb '/eng'],'BlockType'),'Constant')
         disp('replace constant to inport')
         replace([gcb '/eng'],'built-in/Inport');
      end
end

切换复选框会导致以下输出:

on
inport already exist
off
replace inport to constant

ans =
myModel/Subsys/eng

ans =
Inport

ans =
Inport

BlockType 不会改变。但为什么呢?

更多信息:

  • Syubsystem 不是库对象。
  • 我运行set_param(gcb, 'MaskSelfModifiable', 'on');蒙版编辑器初始化窗格上的灰色字段允许库块修改其内容是已签出。

【问题讨论】:

    标签: matlab simulink


    【解决方案1】:

    对 replace_block 的调用不正确。 replace_block 采用块类型和发生替换的系统。对于您的情况,电话应该喜欢,

    replace_block(gcb, 'Inport', 'Constant');
    

    replace_block(gcb, 'Constant', 'Inport');
    

    对于相反的情况。 BlockType 是“Constant”或“Inport”,不包括您在显示中看到的“built-in”。此外,上述调用将替换 gcb 中具有源块类型的所有块。因此,如果您有多个具有相同块类型但只想替换其中一个的块,则不能使用此功能。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多