我們來聊聊結(jié)構(gòu)體。
E-Coder 在做自動(dòng)代碼生成的時(shí)候,在默認(rèn)情況下,它會(huì)把所有的輸入信號(hào)定義為一個(gè)結(jié)構(gòu)體_U,把所有的輸出信號(hào)定義為另一個(gè)結(jié)構(gòu)體_Y,把所有的參數(shù)定義為一個(gè)結(jié)構(gòu)體_P。雖然這樣的結(jié)構(gòu)體不一定是我們想要的,但至少,說明自動(dòng)代碼生成是支持結(jié)構(gòu)體的。
本文并不解決“哪些情況下應(yīng)該使用結(jié)構(gòu)體”這個(gè)問題,這里來說說:
怎么實(shí)現(xiàn)我想要的結(jié)構(gòu)體?
從之前的文章中我們說到,自動(dòng)生成代碼時(shí),想讓各種信號(hào)、參數(shù)定義和聲明采用什么樣的方式,都是通過數(shù)據(jù)對(duì)象 (Data Object) 來實(shí)現(xiàn)的。那,如果我希望把信號(hào) a ,b,c 或者參數(shù) k1,k2,k3 定義為一個(gè)結(jié)構(gòu)體,該怎么實(shí)現(xiàn)呢?
構(gòu)造結(jié)構(gòu)體
要得到:
typdef struct {
double k1;
double k2;
double k3;
} kk_type;
kk_type kk={2.0,3.0,4.0};
怎么做:
設(shè)置數(shù)據(jù)對(duì)象的Storage Class屬性為 Struct
或者使用Simulink Bus來定義新的結(jié)構(gòu)體類型 outyy
舉個(gè)例子
1.新建如下的簡(jiǎn)單模型并生成代碼
先看一下 “正常的” 不使用結(jié)構(gòu)體的情況:
看下面這張圖,定義好了對(duì)應(yīng)的信號(hào)數(shù)據(jù)對(duì)象 (Simulink.Signal) u1、u2、u3、yy1、yy2、yy3,與參數(shù)數(shù)據(jù)對(duì)象(Simulink.Parameter) k1、k2、k3。
通過名字對(duì)應(yīng)以及關(guān)聯(lián)操作,實(shí)現(xiàn)關(guān)聯(lián),也就是上圖中的藍(lán)色小叉子。具體如何操作以前介紹過。
Ctrl + B,生成代碼:
2.把參數(shù) k1、k2、k3 放在指定的結(jié)構(gòu)體 kk 里
選中數(shù)據(jù)對(duì)象 k1,k2,k3,把 StorageClass 都設(shè)置為 Struct(Custom),并指定結(jié)構(gòu)體名字為 kk。這樣在自動(dòng)生成代碼時(shí),這幾個(gè)參數(shù)會(huì)自動(dòng)放入結(jié)構(gòu)體 kk 中。
看到,在生成的代碼里,得到一個(gè)新的結(jié)構(gòu)體類型 kk_type:
并且,根據(jù)這幾個(gè)參數(shù)的值,得到了結(jié)構(gòu)體變量 kk:
3.把信號(hào) yy1、yy2、yy3 也放在一個(gè)輸出結(jié)構(gòu)體里
剛才的參數(shù)結(jié)構(gòu)體是通過設(shè)置數(shù)據(jù)對(duì)象的 StorageClass 為 Struct 來實(shí)現(xiàn)的。而現(xiàn)在,以信號(hào)為例,使用另一種方式來實(shí)現(xiàn)這個(gè)目的: Simulink Bus。
a.首先,通過 Simulink Bus 來定義一個(gè)新的結(jié)構(gòu)體數(shù)據(jù)類型 outyy:
定義這個(gè) Bus 的結(jié)構(gòu),里面的成員名就是最后出現(xiàn)在代碼里的名字:
那么此時(shí),一個(gè)新的數(shù)據(jù)類型就構(gòu)造好了。將來在生成代碼時(shí),這個(gè)新的結(jié)構(gòu)體類型就是這樣:
數(shù)據(jù)類型定義好了,接著,我們就要來用它了。
b. 把 Simulink 的三個(gè)輸出信號(hào)使用 Bus Creator 模塊變成總線信號(hào),取名叫 outStruct:
設(shè)置這個(gè) Bus Creator 模塊的數(shù)據(jù)類型為剛定義好的結(jié)構(gòu)體 outyy。另外,還得勾選它為非虛擬總線。那么這樣,它在生成代碼時(shí),就會(huì)被當(dāng)做結(jié)構(gòu)體來看:
c. 如同之前每一個(gè) double\single 類型的信號(hào)一樣,接著,也為 outStruct信號(hào)定義一個(gè)同名的數(shù)據(jù)對(duì)象 outStruct。
在 Simulink 模型上的 outStruct 信號(hào)線的屬性界面上勾選關(guān)聯(lián)到這個(gè)數(shù)據(jù)對(duì)象,得到藍(lán)色小叉子。
4. 最后生成代碼
-
數(shù)據(jù)
+關(guān)注
關(guān)注
8文章
7254瀏覽量
91779 -
數(shù)據(jù)類型
+關(guān)注
關(guān)注
0文章
237瀏覽量
13889 -
結(jié)構(gòu)體
+關(guān)注
關(guān)注
1文章
130瀏覽量
11106
發(fā)布評(píng)論請(qǐng)先 登錄
推進(jìn)電機(jī)端蓋結(jié)構(gòu)的抗沖擊分析及優(yōu)化
滲壓計(jì)在混凝土結(jié)構(gòu)體中的安裝指南

LASCAD應(yīng)用:動(dòng)態(tài)多模分析和調(diào)Q運(yùn)轉(zhuǎn)模擬
GLAD應(yīng)用:體全息光柵模擬
C語言中結(jié)構(gòu)體與聯(lián)合體的深度解析:內(nèi)存布局與應(yīng)用場(chǎng)景
連接器元件的定義和結(jié)構(gòu)特點(diǎn)
JCMsuite應(yīng)用:散射體的光學(xué)手性響應(yīng)
鎂合金微觀結(jié)構(gòu)分析:EBSD制樣技術(shù)的應(yīng)用與經(jīng)驗(yàn)探討

JCMsuite應(yīng)用:散射體的光學(xué)手性響應(yīng)
VirtualLab Fusion應(yīng)用:用于抑制高衍射級(jí)次的角濾波體光柵
等離子體的定義和特征
結(jié)構(gòu)體成員的順序會(huì)影響結(jié)構(gòu)體的大小嗎
EMC(電磁兼容性)結(jié)構(gòu)設(shè)計(jì)基礎(chǔ)
帶你認(rèn)識(shí)貼片一體成型電感的材料結(jié)構(gòu)

評(píng)論