MATLAB Simulink 中的结构数组

Array of structures in MATLAB Simulink

我试图在 Simulink 中创建一个结构数组,但遇到了一些问题。 首先,我尝试使用以下方法直接在 Simulink 中创建它:

function a = fcn(Dibhole, t , x, const)
%#codegen
%Output = zeros(10,10);
f1 = 'number';
f2 = 'move';
cube = struct(f1, 0, f2, 0);
a = repmat(cube, 20, 10);
for i = 1:20
    for j = 1:10
        a(i,j).number = 0;
        a(i,j).move   = 0;
    end
end

我收到了这个错误:

派生的输出是结构类型。 'Inherited type' 不受此支持 必须改用类型和定义的总线对象。点击 'a' 和 将 'a' 的数据类型设置为 'Bus: ',其中 '' 是 来自 MATLAB 工作区的总线对象的名称。

所以我找到了一些如何在 Matlab 中创建结构并将其接收到 Simulink 的示例:http://blogs.mathworks.com/seth/2011/12/05/initializing-buses-using-a-matlab-structure/ 效果很好,但我仍然不能用数组重复这个:

f1 = 'number';
f2 = 'move';
cube = struct(f1, 0, f2, 0);
myStruct2 = repmat(cube, 20, 10);
for i = 1:20
    for j = 1:10
        myStruct2(i,j).number = 1;
        myStruct2(i,j).move   = 1;
    end
end

busInfo = Simulink.Bus.createObject(myStruct2);

任何人都可以向我澄清问题是什么吗?或者可能有不同的方法在 Simulink 中创建结构数组?

米哈伊尔

Simulink 希望您将函数的输出定义为总线。

例如'Bus: My_test_bus'

看看 Simulink Bus Editor。您可以在菜单Edit->Bus Editor下的任何模型中找到它。

This would be a good start.

瑞克,我认为你是对的! 这个问题我试了很久,得到的结果是:

具有讽刺意味的是,我从来没有能够创建结构数组,但我用数组结构做到了! :D

我为此做了以下步骤:

  1. 要使用数组结构,我们需要在一些 MATLAB 函数中定义和初始化它。像这样:

    number = zeros(10,1);
    move   = zeros(10,1);
    
    for i = 1:10
    
        number(i,1) = i+1;
        move(i,1)   = i+2;
    end
    
    a = struct('numbers',number,'movement', move);
    
  2. 要处理这些数据,我们必须使用总线选择器。

所以我们在 "numbers" 和 "movement" 中有数组。

  1. 但是!开始吧,Rick:我们必须定义 MATLAB 函数的输出类型,例如 Bus!如何在 simulink 中执行此操作?我发现这样: 在 simulink 的模型属性中 Callbacks/PreLoadFcn 定义一些函数,并在与项目相同的文件夹中创建这样命名的 .m 文件刚刚定义的函数。 在此文件中创建数组结构并为其定义总线类型:

    number = zeros(10,1);
    move   = zeros(10,1);
    
    a = struct('numbers',number,'movement', move);
    
    busInfo = Simulink.Bus.createObject(a);
    

现在我们在第一次加载 simulink 模型时为我们的结构设置了总线类型。

  1. 最后一步:直接定义MATLAB函数输出类型。 在 Model Explorer 中选择您的 MATLAB 函数。选择输出变量。为其设置DataType:Bus:slBus1(这个Bus类型的名字你可以在matlab的wokspace中看到,因为它是一个全局变量)。

就是这样!现在可以使用了!

(试图添加图片,但我没有足够的声誉:( )

现在我的程序以这种方式工作,但我也尝试创建结构数组但仍然有问题。我试图为它创建 Bus,但无法将它传输到 Bus Selector - 它不知道如何处理结构......我还尝试添加一个 MATLAB 函数以从结构创建一些数据然后显示它, 但它也不起作用(