2015-03-02 71 views
1

我需要一个想法如何使s功能作为总线选择器。我有一个结构作为s函数的输入。这个结构有283个元素(未来可能会更多),并且正在作为公共汽车提供。我想要S函数输出结构的各个元素(并因此像总线选择器一样)。 Ofcourse我可以手动打字很容易做到这一点:s功能作为总线选择器

y0[0]=u0->arguemtn; 
y0[0]=u0->speedx; % and so on till 283 

但后来我需要知道所有的结构元素的名称,还需要手动输入。有没有一种方法,我只需要使用一个简单的for循环,并将各个元素输入分配给s函数的输出。

你可以给我暗示,因为我只是在这里

UPDATE

卡住建议答案我试着写这样的事情后。

int number_of_elements,i; 
char field_name; 
number_of_elements= mxGetNumberOfFields(u0[0]); 

for(i=0;i<number_of_elements;i++) 
{ 
    field_name=mxGetFieldNameByNumber(u0[0], i); 
    yi[0]=u0->field_name; 
} 

但首先我该如何让y1 y2 y3等等作为循环的一部分。因为它是一个完全不同的变量,所以我不能写yi。我也写过这部分我写在s函数生成器的代码描述部分,我认为这是错误的。任何人都可以建议我该怎么做。

另一个重要的问题是我发送的结构数据类型不同(如uint8,uint16,single),因此我也需要确定输入数据类型。这怎么可能,以及我可以如何设置这个数据类型到我的输出循环?

回答

1

看起来您正在使用C代码S函数,在这种情况下,所有C-mex API例程都可用。

有多种功能用于询问结构,确定字段名称并操纵它们。有关链接,请参阅here,其中包括mxGetFieldmxGetNumberOfFields。首先查看并讨论here讨论的示例。

+0

我对此有疑问。因为我不知道在我的结构中的字段数量,因此我不知道在我的s函数生成器块中的输出数量,我如何使这种动态? – 2015-03-05 14:54:32

+0

在S函数初始化中,您使用适当的API函数来询问结构(输入为参数)以确定字段数量,然后使用其他适当的API函数来设置输出数量(以及其他属性)。 – 2015-03-05 15:00:49

+0

嘿我更新了我的问题。当我正在浏览s函数文档时,我发现了这一点。 S函数的局限性是它不支持总线信号http://de.mathworks.com/help/simulink/sfg/s-function-limitations.html所以任何想法如何解决这个问题? – 2015-03-06 07:45:21