这是Matlab / Simulink R2007a .
我在总线编辑器中创建了一个名为“FOOBUS”的总线,其中包含三个元素,例如“FOO1,FOO2,FOO3” .
给定子系统的输入端口被强制接受 - 仅 - “FOO”型总线 . 该子系统与MAT文件一起保存在库中,其中定义了“FOO”Simulink.Bus对象 .
现在,在将子系统与其他块集成时:
-
我如何强制Bus Creator向我展示构成FOO的元素?问题是,当构建FOO总线对象(通常使用配置为输出FOO总线对象的Bus Creator组成它)时,我看不到应该包含FOO总线对象的信号,并且必须潜入子系统(或者在总线编辑器中)查看它具有哪些元素,并在Bus Creator对话框中手写它们 .
-
还有其他提案吗?目标是具有可以非常简单地调用的清晰接口定义,而不是在Bus Creator块中手动重写它们 .
谢谢 .
Added
只是为了澄清一下,我主要想要的是创建子系统输入总线而不必手动添加项目(因为Bus Creator建议使用AFAIK) .
Answer for R2007a @MohsenNosratinia提供了答案的基础(原始答案在R2007A中不起作用,因为看起来像arrayfun不接受BusElements . 我使用普通阵列方法作为解决方法 .
function addSignalsToBusCreator(busDef)
busEls = busDef.Elements;
sigString = ' ';
for i = 1 : length(busEls)
sigString = [sigString busDef.Elements(i).Name ','];
end
set_param(gcb, 'Inputs', sigString(1:end-1));
end
2 回答
您需要以编程方式执行此操作 . Simulink没有提供在GUI中实现此目的的方法 . 你可以创建一个这样的函数:
将总线创建器添加到模型后,选择它并使用总线定义运行此功能
整个技巧是在总线创建器块的
'Inputs'
参数中 . 它可以采用两种不同类型的值 . 如果它是一个包含5的数字的字符串,它将把它解释为你选择了带有5个输入的'Inherit bus signal names from input signals'
选项 . 但是,如果它包含带逗号分隔的单引号名称的字符串,则会将其解释为您已选择'Require input signal names to match signals below'
. 在您的示例中,字符串将为'FOO1','FOO2','FOO3'
.我在R2011b测试了这个 .
修改@ MohsenNosratinia的解决方案以便在_1418569中工作: