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 如何在Simulink中从两个相同的总线信号中进行选择?_Matlab_Data Structures_Struct_Simulink_Bus - Fatal编程技术网

Matlab 如何在Simulink中从两个相同的总线信号中进行选择?

Matlab 如何在Simulink中从两个相同的总线信号中进行选择?,matlab,data-structures,struct,simulink,bus,Matlab,Data Structures,Struct,Simulink,Bus,我在Simulink中有两个相同的总线结构,具有不同的值。一个是来自真实车辆的(CAN)总线,另一个是Simulink中相同的模拟(CAN)总线。我想用它们组成一个混合的、相同的输出总线,其中一些信号来自第一条总线,另一些来自第二条总线,如图所示 我想使用第三条相同的总线进行切换,其中包含每个信号的值,用于确定将信号切换到总线1或总线2的输出。示意图上,它看起来像灰色部分: 如您所见,第一个信号(Rpm,3)来自车辆总线,第二个信号(Spd,6)来自模拟总线。就结构而言,输出总线与两条输入总线

我在Simulink中有两个相同的总线结构,具有不同的值。一个是来自真实车辆的(CAN)总线,另一个是Simulink中相同的模拟(CAN)总线。我想用它们组成一个混合的、相同的输出总线,其中一些信号来自第一条总线,另一些来自第二条总线,如图所示

我想使用第三条相同的总线进行切换,其中包含每个信号的值,用于确定将信号切换到总线1或总线2的输出。示意图上,它看起来像灰色部分:

如您所见,第一个信号(Rpm,3)来自车辆总线,第二个信号(Spd,6)来自模拟总线。就结构而言,输出总线与两条输入总线相同。原理图中的原理是可行的,但我有500多个信号,所以这种方法不再适用

如何在不必手动发送500个信号的情况下执行此操作?

我正在考虑一个MATLAB函数块,但欢迎您提出建议。

我找到了解决这个问题的方法。这几乎不是最优雅的方式,但它确实有效

由于总线在MATLAB功能块中作为结构处理,因此I for循环通过所有字段和元素,为输出总线中的每个元素选择所需的源,如下所示:

subbus = fieldnames(SLCT);
for i=1:+1:11
    signal = fieldnames(SLCT.(subbus{i}))
    for j=1:+1:5
        switch SLCT.(subbus{i}).(signal{j})
            case 0
                TRGT.(subbus{i}).(signal{j}) = SRCA.(subbus{i}).(signal{j});
            case 1
                TRGT.(subbus{i}).(signal{j}) = SRCB.(subbus{i}).(signal{j});
            otherwise
                TRGT.(subbus{i}).(signal{j}) = SRCC.(subbus{i}).(signal{j});
        end
    end
end

我确信一定有更好、更快的方法,但这是可行的,而且对于我的应用程序来说速度足够快。

我相信
MATLAB函数
块是最简单的方法。@PhilGoddard我是这么想的,但我真的不知道如何解决这个问题。总线信号在功能块中被解释为一个结构,因此通过所有元素的for循环可能是一个解决方案,但我不知道如何实现,也不认为这是有效的。看起来您应该能够使用
逻辑索引
来完成赋值,而不是循环。但无论如何,请注意,带有
MATLAB函数的代码正在转换为C并编译,它没有在解释器中运行,因此速度不应该是一个问题。