首页 文章

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

提问于
浏览
2

这是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 回答

  • 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测试了这个 .

  • 0

    修改@ MohsenNosratinia的解决方案以便在_1418569中工作:

    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
    

相关问题