條件控制在C代碼中常用的諸如if-else, Switch-Case來表達(dá),那么:
在Simulink模型中是如何實(shí)現(xiàn)的呢?
又如何配置生成代碼呢?
點(diǎn)擊末尾的 “閱讀原文” 下載本文的案例模型
條件控制邏輯
要得到:
if (u1 > u2)
{
y1 = u1;
}
else
{
y1 = u2;
}
或者
switch (u1)
{
case 2:
y1 = u2;
break;
case 3:
u3;
break;
default:
y1 = u4;
break;
}
怎么做:
在Simulink框圖模型里使用Signal Routing以及Ports&Subsystem庫里對應(yīng)的模塊,如Switch;在Chart里則根據(jù)邏輯來構(gòu)造流程圖;而在MATLAB Function模塊里則直接寫m腳本。
if-else實(shí)例
1. 新建一個(gè)簡單的Simulink模型
如圖使用三種方式來實(shí)現(xiàn)條件判斷的算法:

如上圖,對于Simulink來說,if-else可以使用Signal Routing庫里的Switch模塊。而在Chart中,則畫出對應(yīng)的流程圖即可,如下圖:

MATLAB Function則更簡單,直接寫m腳本。

代碼生成基本配置
求解器:定步長—離散求解器
系統(tǒng)目標(biāo)文件:ert.tlc
3. 新建數(shù)據(jù)對象
打開Model Explorer,點(diǎn)擊菜單的Add,在Base Workspace里定義輸入、輸出信號同名的數(shù)據(jù)對象。通過數(shù)據(jù)對象來控制這些信號在將來生成C代碼時(shí)的定義和聲明。

4. 信號關(guān)聯(lián)
在信號線上右鍵,將信號與Base Workspace的數(shù)據(jù)對象關(guān)聯(lián)在一起。鼠標(biāo)操作的方式,可以參考之前的帖子里的菜單截圖。因?yàn)檫@里的信號略多,一條一條信號線的點(diǎn)擊鼠標(biāo),略麻煩,所以可以使用命令的方式來實(shí)現(xiàn):

此時(shí),第一張模型截圖中信號線上的藍(lán)色小叉子就會(huì)出現(xiàn),表示已經(jīng)關(guān)聯(lián)了。
5. 生成代碼
Ctrl+B,生成代碼。
如前面所設(shè)置的,三個(gè)模塊都會(huì)得到同樣的if-else的代碼:

接下來看Switch的情況。
Switch實(shí)例
1. MATLAB Function
比較簡單,跟之前一樣按照m語言的語法寫代碼即可。
2. Stateflow Chart
而對于Stateflow Chart來說,如果不熟悉流程圖的畫法,可以使用向?qū)ё詣?dòng)生成特定的邏輯結(jié)構(gòu),作為參考:

在向?qū)?yīng)的框內(nèi)填入內(nèi)容,然后自動(dòng)生成后邊的流程圖,可以根據(jù)自己的需要再進(jìn)行調(diào)整。Stateflow里面,中括號里的是條件判斷語句,大括號里的是執(zhí)行語句。

其實(shí)從結(jié)構(gòu)上來講,得到的流程圖和之前的if-else是類似,它其實(shí)也完全可以用 if-else if-else的C代碼來表示。而實(shí)際上,它生成的代碼也會(huì)是這樣:

只不過呢,因?yàn)橄聢D所示的選擇項(xiàng)是會(huì)默認(rèn)勾選上的:

所以生成的代碼就會(huì)變成Switch的模式:

Signal Routing里有個(gè)Multiport Switch可以用來表達(dá)Switch的效果。另外,還有來自Port & Subsystem庫里的Switch Case模塊。
下圖就是它們的用法。感興趣的可以下載模型生成代碼看看。

條件控制語句:
對于MATLAB Function,就是直接寫對應(yīng)的m腳本;
對于Stateflow,就是對應(yīng)不同形式的流程圖;
對于Simulink,就是使用對應(yīng)的模塊。
-
邏輯
+關(guān)注
關(guān)注
2文章
834瀏覽量
30138 -
C代碼
+關(guān)注
關(guān)注
1文章
90瀏覽量
15185
發(fā)布評論請先 登錄
講解C語言代碼的實(shí)現(xiàn)過程
分析嵌入式軟件代碼的漏洞-代碼注入
C語言單元測試在嵌入式軟件開發(fā)中的作用及專業(yè)工具的應(yīng)用
基于芯源CW32 MCU的LED閃爍示例及代碼分析
Airship研究:無代碼原生應(yīng)用體驗(yàn)使購買頻次翻倍(增長140%),為假日季盈利增長開辟新路徑
C語言的編程技巧
電壓放大器驅(qū)動(dòng)液滴微流控芯片關(guān)鍵功能實(shí)現(xiàn)研究
Perforce QAC產(chǎn)品簡介:面向C/C++的靜態(tài)代碼分析工具(已通過SO 26262認(rèn)證)
關(guān)于利用C代碼實(shí)現(xiàn)條件控制的分析和研究
評論