Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 强制总线创建者仅接受来自总线对象的信号_Matlab_Simulink - Fatal编程技术网

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

Matlab 强制总线创建者仅接受来自总线对象的信号,matlab,simulink,Matlab,Simulink,这是Matlab/Simulink R2007a 我在总线编辑器中创建了一个名为“FOOBUS”的总线,它包含三个元素,比如“FOO1,FOO2,FOO3” 给定子系统的输入端口被迫只接受“FOO”型总线。该子系统与定义“FOO”Simulink.Bus对象的MAT文件一起保存在库中 现在,当涉及到将子系统与其他模块集成时: -如何强制总线创建者向我显示构成FOO的元素?问题是,在构建FOO总线对象时(通常使用配置为输出FOO总线对象的总线创建者来构成它),我看不到应该构成FOO总线对象的信号,

这是Matlab/Simulink R2007a

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

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

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

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

-还有其他建议吗?其目的是要有清晰的接口定义,可以非常简单地调用,而不是手动在总线创建者块中重新编写它们

多谢各位

已添加

只是澄清一下,我主要寻求的是创建子系统输入总线,而不必手动添加项(正如总线创建者建议的AFAIK)

R2007a的答案 @MohsenNosratinia提供了答案的基础(原始答案在R2007A中不起作用,因为arrayfun似乎不接受总线元素。我使用普通阵列方法作为解决方法

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

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)
整个技巧都在bus creator块的
'Inputs'
参数中。它可以接受两种不同类型的值。如果它是一个包含数字的字符串,比如说5,它将解释它,就像您选择了带有5个输入的
'Inherit bus signal names from input signals'
选项一样。但是,如果它包含逗号分隔的字符串单引号名称它将其解释为您选择了
“需要输入信号名称来匹配下面的信号”
。在您的示例中,字符串将是
“FOO1”、“FOO2”、“FOO3”


我已经在R2011b中对此进行了测试。

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

您可以展示您的模型吗?对不起,我不允许发布模型。但它主要是一个子系统,其输入接受“FOO”总线类型(其元素在Simulink.bus对象中定义良好)。我不想为了创建“FOO”而手动输入总线元素(在“总线创建者”对话框中)键入的bus。恐怕你会发现很难得到有用的答案。我相信你可以创建一个带有虚拟数据/对象的答案。@Manex你应该将你的答案作为一个单独的答案发布,并用R2007aIf标题,这有助于清晰,完成。感谢你的反馈。这在R2007a中不起作用,因为arrayfun不接受BusElements、 不过,这为解决方案奠定了基础(见问题),谢谢!