在Matlab / Simulink中,我试图通过inports和相应的From
- 父块中的块来替换非虚拟子系统中的所有From
- 块。我想出了一个递归检查系统是否包含子系统的函数,如果是,则将其自身应用于每个子系统。如果不是(边缘条件),它检查系统是否是非虚拟的,在这种情况下替换From
- 块(如果有的话)。代码:
function void = replace_FROM_blocks_in_system(system)
subsystems = find_system(system,'blocktype','SubSystem')
if (length(subsystems) > 1)
for subsys = subsystems
replace_FROM_blocks_in_system(subsys);
end
else
if strcmp('off', get_param(system,'IsSubsystemVirtual'))
#% code to replace all from-blocks
else
return;
end
end
end
length(subsystems) > 1
是因为find_system(system,'blocktype','SubSystem')
(奇怪地)除了可能的子系统之外还发现system
本身。
当使用包含两个子系统作为参数的系统启动该函数时,它永远不会到达函数的else
部分并达到递归限制。我认为Matlab使变量system
全局可见,从而阻止函数像它应该的那样工作。有没有办法明确禁止Matlab这样做,就像它为R建议的那样
here? (或许我在这里错过了其他的东西。)