條件控制在C代碼中常用的諸如if-else, Switch-Case來(lái)表達(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庫(kù)里對(duì)應(yīng)的模塊,如Switch;在Chart里則根據(jù)邏輯來(lái)構(gòu)造流程圖;而在MATLAB Function模塊里則直接寫(xiě)m腳本。
if-else實(shí)例
1. 新建一個(gè)簡(jiǎn)單的Simulink模型
如圖使用三種方式來(lái)實(shí)現(xiàn)條件判斷的算法:

如上圖,對(duì)于Simulink來(lái)說(shuō),if-else可以使用Signal Routing庫(kù)里的Switch模塊。而在Chart中,則畫(huà)出對(duì)應(yīng)的流程圖即可,如下圖:

MATLAB Function則更簡(jiǎn)單,直接寫(xiě)m腳本。

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

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

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

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

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

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

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

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

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

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