强制总线创建者只接受来自总线对象的信号

时间:2014-10-01 13:50:40

标签: matlab simulink

这是Matlab / Simulink R2007a。

我在总线编辑器中创建了一个名为“FOOBUS”的总线,其中包含三个元素,例如“FOO1,FOO2,FOO3”。

给定子系统的输入端口被强制接受 - 仅 - “FOO”型总线。该子系统与MAT文件一起保存在库中,其中定义了“FOO”Simulink.Bus对象。

现在,当涉及将子系统与其他块集成时:

- 如何强制Bus Creator向我展示构成FOO的元素?问题是,当构建FOO总线对象(通常使用配置为输出FOO总线对象的Bus Creator组成它)时,我看不到应该包含FOO总线对象的信号,并且必须潜入子系统(或者在总线编辑器中查看它有哪些元素,并在Bus Creator对话框中手写它们。

- 其他任何提案?目标是具有可以非常简单地调用的清晰接口定义,而不是在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

2 个答案:

答案 0 :(得分:3)

您需要以编程方式执行此操作。 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中对此进行了测试。

答案 1 :(得分:0)

修改@ MohsenNosratinia的解决方案,以便在 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));
end