雖然說基于模型的設(shè)計(jì)(Model Based Design,MBD)就是未來嵌入式控制開發(fā)的主流方法,但是很多工程師都是C代碼的高手,對Simulink并不是很熟悉,尤其是自動代碼生成。在進(jìn)行Simulink模型代碼自動生成的時(shí)候,也會習(xí)慣性的去想生成的代碼如何匹配腦子里所想的C代碼。
那么,Let's Go!
Typedef
要得到:typedef double float_64;
怎么做:用Simulink.AliasType數(shù)據(jù)對象。
實(shí)例一
因?yàn)槭堑谝粋€(gè)例子,過程會稍微介紹得詳細(xì)一些。
1. 建一個(gè)簡單的Simulink模型
給信號分別命名為u1和y1,Gain模塊的參數(shù)設(shè)置為k。
2. 代碼生成基本配置
求解器:定步長—離散求解器
系統(tǒng)目標(biāo)文件:ert.tlc
這時(shí)候Ctrl+B,可以生成代碼了。只不過此時(shí)u1,y1以及k都不是我們想要的定義方式。
3. 新建數(shù)據(jù)對象
打開Model Explorer,點(diǎn)擊菜單的Add,在base workspace里定義如圖三個(gè)數(shù)據(jù)對象。
新建Simulink.AliasType,名字為float_64,并把Base type設(shè)置為double。這樣,在生成代碼的時(shí)候,就會出現(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)色小叉子。這樣這個(gè)信號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生成代碼。
代碼生成報(bào)告打開,在模型名_types.h文件里,看得到了這句typedef。這是之前定義Simulink.AliasType得到的結(jié)果。
里面的real_T是E-Coder默認(rèn)的對double的typedef:
同時(shí),可以看到模型中的u1,y1以及k的定義,這是之前將信號和參數(shù)綁定到數(shù)據(jù)對象而得到的結(jié)果。
總結(jié)
要得到:typedef double float_64;
怎么做:用Simulink.AliasType數(shù)據(jù)對象
-
數(shù)據(jù)
+關(guān)注
關(guān)注
8文章
7256瀏覽量
91860 -
信號
+關(guān)注
關(guān)注
11文章
2852瀏覽量
78280
發(fā)布評論請先 登錄
評論