條件控制在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模塊里則直接寫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中,則畫出對(duì)應(yīng)的流程圖即可,如下圖:
MATLAB Function則更簡(jiǎn)單,直接寫m腳本。
代碼生成基本配置
求解器:定步長(zhǎng)—離散求解器
系統(tǒng)目標(biāo)文件:ert.tlc
3. 新建數(shù)據(jù)對(duì)象
打開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ǔ)法寫代碼即可。
2. Stateflow Chart
而對(duì)于Stateflow Chart來(lái)說(shuō),如果不熟悉流程圖的畫法,可以使用向?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,就是直接寫對(duì)應(yīng)的m腳本;
對(duì)于Stateflow,就是對(duì)應(yīng)不同形式的流程圖;
對(duì)于Simulink,就是使用對(duì)應(yīng)的模塊。
-
邏輯
+關(guān)注
關(guān)注
2文章
834瀏覽量
29694 -
C代碼
+關(guān)注
關(guān)注
1文章
90瀏覽量
14667
發(fā)布評(píng)論請(qǐng)先 登錄
如何利用EPR分析USB PD?
基于STM32C8T6控制,F(xiàn)SR402壓力傳感器+oled屏幕顯示代碼
永磁同步電機(jī)矢量控制策略分析
智能電動(dòng)輪椅控制系統(tǒng)的研究與設(shè)計(jì)
如何利用MES系統(tǒng)進(jìn)行產(chǎn)能分析呢?

分析C語(yǔ)言代碼結(jié)構(gòu)的設(shè)計(jì)問(wèn)題
怎么提升單片機(jī)代碼執(zhí)行效率
Flexus X 實(shí)例 C#/.Net Core 結(jié)合(git 代碼管理、docker 自定義鏡像)快速發(fā)布部署 - 讓你的項(xiàng)目飛起來(lái)~

技術(shù)干貨驛站 ▏深入理解C語(yǔ)言:掌握C語(yǔ)言條件判斷,從if到switch的應(yīng)用

hex文件如何查看原c語(yǔ)言代碼
利用CLB實(shí)現(xiàn)基于硬件的同步整流控制

實(shí)現(xiàn)不失真測(cè)量應(yīng)滿足哪些條件
實(shí)現(xiàn)有源逆變必須滿足哪些條件
利用Swap模式實(shí)現(xiàn)代碼回滾操作

評(píng)論