條件控制在C代碼中常用的諸如if-else, Switch-Case來表達,那么:
在Simulink模型中是如何實現的呢?
又如何配置生成代碼呢?
點擊末尾的 “閱讀原文” 下載本文的案例模型
條件控制邏輯
要得到:
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庫里對應的模塊,如Switch;在Chart里則根據邏輯來構造流程圖;而在MATLAB Function模塊里則直接寫m腳本。
if-else實例
1. 新建一個簡單的Simulink模型
如圖使用三種方式來實現條件判斷的算法:
如上圖,對于Simulink來說,if-else可以使用Signal Routing庫里的Switch模塊。而在Chart中,則畫出對應的流程圖即可,如下圖:
MATLAB Function則更簡單,直接寫m腳本。
代碼生成基本配置
求解器:定步長—離散求解器
系統目標文件:ert.tlc
3. 新建數據對象
打開Model Explorer,點擊菜單的Add,在Base Workspace里定義輸入、輸出信號同名的數據對象。通過數據對象來控制這些信號在將來生成C代碼時的定義和聲明。
4. 信號關聯
在信號線上右鍵,將信號與Base Workspace的數據對象關聯在一起。鼠標操作的方式,可以參考之前的帖子里的菜單截圖。因為這里的信號略多,一條一條信號線的點擊鼠標,略麻煩,所以可以使用命令的方式來實現:
此時,第一張模型截圖中信號線上的藍色小叉子就會出現,表示已經關聯了。
5. 生成代碼
Ctrl+B,生成代碼。
如前面所設置的,三個模塊都會得到同樣的if-else的代碼:
接下來看Switch的情況。
Switch實例
1. MATLAB Function
比較簡單,跟之前一樣按照m語言的語法寫代碼即可。
2. Stateflow Chart
而對于Stateflow Chart來說,如果不熟悉流程圖的畫法,可以使用向導自動生成特定的邏輯結構,作為參考:
在向導對應的框內填入內容,然后自動生成后邊的流程圖,可以根據自己的需要再進行調整。Stateflow里面,中括號里的是條件判斷語句,大括號里的是執行語句。
其實從結構上來講,得到的流程圖和之前的if-else是類似,它其實也完全可以用 if-else if-else的C代碼來表示。而實際上,它生成的代碼也會是這樣:
只不過呢,因為下圖所示的選擇項是會默認勾選上的:
所以生成的代碼就會變成Switch的模式:
Signal Routing里有個Multiport Switch可以用來表達Switch的效果。另外,還有來自Port & Subsystem庫里的Switch Case模塊。
下圖就是它們的用法。感興趣的可以下載模型生成代碼看看。
條件控制語句:
對于MATLAB Function,就是直接寫對應的m腳本;
對于Stateflow,就是對應不同形式的流程圖;
對于Simulink,就是使用對應的模塊。
-
邏輯
+關注
關注
2文章
834瀏覽量
29729 -
C代碼
+關注
關注
1文章
90瀏覽量
14708
發布評論請先 登錄
三相異步電機直接轉矩控制的圓形磁鏈研究
三相異步電機模糊控制的研究
如何利用EPR分析USB PD?
永磁同步電機矢量控制策略分析
智能電動輪椅控制系統的研究與設計
分析C語言代碼結構的設計問題
怎么提升單片機代碼執行效率
Flexus X 實例 C#/.Net Core 結合(git 代碼管理、docker 自定義鏡像)快速發布部署 - 讓你的項目飛起來~

技術干貨驛站 ▏深入理解C語言:掌握C語言條件判斷,從if到switch的應用

評論