Vector 在总线中发送矢量数据

Vector 在总线中发送矢量数据,vector,simulink,bus,Vector,Simulink,Bus,我有一个向量数据(一个数组变量,例如float32 mydata[5];)。在总线中传输单个基本数据非常简单 inside_data=Simulink.BusElement; inside_data.Name='somename'; inside_data.SampleTime = -1; inside_data.datatype='single'; 此元素可以使用 Bus=Simulink.Bus; Bus.Elements=inside_data; 但是,当输入是基元时,这就起作用了。但

我有一个向量数据(一个数组变量,例如
float32 mydata[5];
)。在总线中传输单个基本数据非常简单

inside_data=Simulink.BusElement;
inside_data.Name='somename';
inside_data.SampleTime = -1;
inside_data.datatype='single';
此元素可以使用

Bus=Simulink.Bus;
Bus.Elements=inside_data;
但是,当输入是基元时,这就起作用了。但如果我的数据是一个向量呢。如
float32a[5]那么如何在总线中发送此数据元素

更新 因此,我尝试使用一个名为a的常量块,其中数据类型为single,其中输入部分我将其更改为[1 2 3],这是一个向量输入。 另一个元素是具有uint8数据类型的b

我使用s函数生成器只是为了检查该模型的工作情况。我已经设置好了一切(总线模式打开,数据类型为总线类型等)。在输出部分,我使用了如下内容:

y0[0]=u0->a[0];
y0[1]=u0->a[1];
y0[2]=u0->a[2];
y1[0]=u0->b;
但它也会抛出错误

c:\program files (x86)\matlab_v7111_r10bsp1\extern\include\matrix.h(313) : error C2061: syntax error : identifier 'mxLogical' 
c:\program files (x86)\matlab_v7111_r10bsp1\extern\include\matrix.h(313) : error C2059: syntax error : ';' 
我的最终目标是将其用于s_函数

如果我在s_func中声明一个变量

real32_T *a_output[5]=(real32_T *)ssGetOutputPortRealSignal(S,0); 
然后我有一个结构(因为我用总线传输数据,所以总线头文件有这个结构),以及如何声明输入并将其分配给输出

a_output[0]=my_struct->a_input[0];
a_output[1]=my_struct->a_input[1];
a_output[2]=my_struct->a_input[2];
a_output[3]=my_struct->a_input[3];
a_output[4]=my_struct->a_input[4];

但问题在于宣言。它给我的错误是无法从real32\u T转换为real32\u T*

主要思想是创建所需类型的总线。 我是这样做的:

num = zeros(15,15,15);
move   = zeros(15,15,15);
a = struct('number',num,'movement', move);

busInfo = Simulink.Bus.createObject(a);
您可以看到,可以创建任何数据结构、数组、向量,然后创建相同类型的总线信号

我在callbacks/Preload FCN(Model Explorer)中使用它在工作区中定义此类型,它创建slBus1变量(其总线信号为我的类型),因此我只需要定义任何块(如有必要)的输出(或输入),如slBus1。然后使用总线选择器处理数组数据

这对你有帮助吗

添加新信息

这取决于你想要什么。 例如:我为反馈系统创建了s函数。它使用我的结构如下:

function a = fcn(BusSignal)
%#codegen
num = zeros(15,15,15);
move   = zeros(15,15,15);
%...some math actions with num and move...
a = struct('number',num,'movement', move);
%...and some action with a structure... for example:
if (c>b)
    a.number(1,2,3) = 15;
    a.movement(1,2,3)   = 42;
else
    a = BusSignal;
end
看看这个-我在入口和出口使用总线信号,并使用总线选择器处理数据。
记住将输入和输出数据定义为总线信号

你能告诉我如何在s_函数中使用这个吗???@ArunKumar我在回答中为你添加了一些信息,看看这个。在我的示例中,我在预加载中创建总线信号,然后在任何s函数中使用它。我面临的问题不是为向量创建总线……我只需要向元素添加维度(2D),它就变成了向量。但当我为这个向量数据编写s函数时,我面临着一个问题。当我试图检索这个向量的单个元素并将其复制到输出时,它不会在范围中正确显示值。我认为我的方法是错误的,但内存分配似乎有问题。不管怎样,我必须自己解决,而不是发帖。但我无论如何都会接受你的答案,我认为你是对的——simulink有一些特定的内存分配。我通过仔细描述数据类型来避免所有这些问题:看看我的示例-我不会在函数的开头写
a=BusSignal
!每次我在使用变量之前为每个变量设置所有的维数-所有这些都是零。试试这个!