2015-03-02 68 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