这是Matlab/Simulink R2007a。
我在总线编辑器中创建了一个名为"FOOBUS“的总线,其中包含三个元素,如"FOO1、FOO2、FOO3”。
给定子系统的输入端口被迫接受"FOO“类型的总线。这个子系统与一个MAT文件一起保存在一个库中,其中定义了"FOO“Simulink.Bus对象。
现在,当涉及到将子系统与其他块集成时:
-How我可以强迫总线创建者向我展示构成FOO的元素吗?问题是,当构建FOO总线对象(通常使用配置为输出FOO总线对象的总线Creator )时,我看不到应该包含FOO Bus对象的信号,必须深入子系统(或总线编辑器)来查看它有哪些元素,并在bus Creator对话框中手动编写它们。
-Any还有其他建议吗?其目的是拥有清晰的接口定义,可以非常简单地调用,而不是在Bus Creator块中手工重写它们。
谢谢。
添加了
为了澄清,我主要寻求的是创建子系统输入总线,而不必手动添加项(正如bus Creator建议的那样,AFAIK)。
给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发布于 2014-10-01 15:02:28
你需要用编程的方式去做。Simulink没有提供一种在GUI中实现这一目标的方法。您可以创建这样的函数:
function addSignalsToBusCreator(busDef)
elemNames = arrayfun(@(x) x.Name, busDef.Elements, 'uni', 0);
sigString = sprintf('''%s'',', elemNames{:});
set_param(gcb, 'Inputs', sigString(1:end-1));
end在将总线创建者添加到模型之后,选择它并使用总线定义运行此函数。
>> addSignalsToBusCreator(FOO)关键在于总线创建者块的'Inputs'参数。它可以采用两种不同类型的值。如果它是一个包含数字(例如5 )的字符串,它将把它解释为选择了具有5个输入的'Inherit bus signal names from input signals'选项。但是,如果它包含一个带有逗号分隔的单引号的字符串,它就会将其解释为您选择了'Require input signal names to match signals below'。在您的示例中,字符串将是'FOO1','FOO2','FOO3'。
我已经在R2011b上测试过这个。
发布于 2014-10-02 09:11:30
修改@ Modifying的解决方案,以便在Matlab R2007a中工作
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));
endhttps://stackoverflow.com/questions/26143010
复制相似问题