雖然說基于模型的設(shè)計(Model Based Design,MBD)就是未來嵌入式控制開發(fā)的主流方法,但是很多工程師都是C代碼的高手,對Simulink并不是很熟悉,尤其是自動代碼生成。在進(jìn)行Simulink模型代碼自動生成的時候,也會習(xí)慣性的去想生成的代碼如何匹配腦子里所想的C代碼。
那么,Let's Go!
Typedef
要得到:typedef double float_64;
怎么做:用Simulink.AliasType數(shù)據(jù)對象。
實(shí)例一
因?yàn)槭堑谝粋€例子,過程會稍微介紹得詳細(xì)一些。
1. 建一個簡單的Simulink模型
給信號分別命名為u1和y1,Gain模塊的參數(shù)設(shè)置為k。

2. 代碼生成基本配置
求解器:定步長—離散求解器
系統(tǒng)目標(biāo)文件:ert.tlc
這時候Ctrl+B,可以生成代碼了。只不過此時u1,y1以及k都不是我們想要的定義方式。
3. 新建數(shù)據(jù)對象
打開Model Explorer,點(diǎn)擊菜單的Add,在base workspace里定義如圖三個數(shù)據(jù)對象。
新建Simulink.AliasType,名字為float_64,并把Base type設(shè)置為double。這樣,在生成代碼的時候,就會出現(xiàn)這一句:typedef double float_64。
新建Simulink.Signal,名字為u1;新建Simulink.Parameter命名為k。注意它們Data Type與Storage class的定義。

4. 將Simulink信號線與workspace的數(shù)據(jù)對象關(guān)聯(lián)
在信號線u1上右鍵,設(shè)置它的屬性,勾選Signal name must resolve to Simulink signal object,信號線上會出現(xiàn)如后圖的藍(lán)色小叉子。這樣這個信號u1就會使用它所關(guān)聯(lián)的數(shù)據(jù)對象u1所定義的方式來生成代碼。
除了這種關(guān)聯(lián)的方式之外,還可以直接設(shè)置信號的屬性。比如右鍵單擊信號y1,設(shè)置它的屬性如圖。

參數(shù)k不需要手動關(guān)聯(lián)。
顯示模塊端口的數(shù)據(jù)類型,得到如下圖的顯示。( 點(diǎn)擊模型的菜單Display -> Signal&Ports -> Ports Data Type)

5. 生成代碼查看結(jié)果
Ctrl+B生成代碼。
代碼生成報告打開,在模型名_types.h文件里,看得到了這句typedef。這是之前定義Simulink.AliasType得到的結(jié)果。

里面的real_T是E-Coder默認(rèn)的對double的typedef:

同時,可以看到模型中的u1,y1以及k的定義,這是之前將信號和參數(shù)綁定到數(shù)據(jù)對象而得到的結(jié)果。

總結(jié)
要得到:typedef double float_64;
怎么做:用Simulink.AliasType數(shù)據(jù)對象
-
數(shù)據(jù)
+關(guān)注
關(guān)注
8文章
7335瀏覽量
94774 -
信號
+關(guān)注
關(guān)注
12文章
2914瀏覽量
80138
發(fā)布評論請先 登錄
淘寶數(shù)據(jù)API:競爭對手分析,戰(zhàn)略調(diào)整!
matlab的算法部署在simulink中
關(guān)于使用Simulink.AliasType數(shù)據(jù)對象的分析和應(yīng)用介紹
評論