我們來聊聊結(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文章
7339瀏覽量
94830 -
數(shù)據(jù)類型
+關(guān)注
關(guān)注
0文章
237瀏覽量
14194 -
結(jié)構(gòu)體
+關(guān)注
關(guān)注
1文章
131瀏覽量
11379
發(fā)布評(píng)論請(qǐng)先 登錄
【產(chǎn)品介紹】Altair OptiStruct結(jié)構(gòu)分析優(yōu)化軟件
10個(gè)例子代碼,C語言結(jié)構(gòu)體的高級(jí)
一個(gè)經(jīng)典的結(jié)構(gòu)體和聯(lián)合體共用的實(shí)例
結(jié)構(gòu)體聲明與定義
typedef結(jié)構(gòu)體使用
共用體聲明
為什么不建議用匿名結(jié)構(gòu)體
使用typede的f優(yōu)勢(shì)介紹
C語言結(jié)構(gòu)體使用
定義IO初始化結(jié)構(gòu)體
滲壓計(jì)在混凝土結(jié)構(gòu)體中的安裝指南
關(guān)于如何定義結(jié)構(gòu)體的分析和介紹
評(píng)論