C代碼中常用的循環(huán)控制語句有諸如for 、while以及do while。那么,這種循環(huán)邏輯在Simulink模型中是如何實現(xiàn)的呢?
Simulink里有三種建模手段:
Simulink 框圖
Stateflow Chart
先來看看如何使用Simulink 框圖來表達這種循環(huán)邏輯。
點擊末尾的 “閱讀原文” 下載本文的案例模型
循環(huán)邏輯
要得到:
y1 = 0;
for(inx = 0; inx <10; inx++)
{
y1 = u1[inx] + y1;
}
或者
while(flag && (num_iter <= 100)
{
flag = func ();
num_iter ++;
}
怎么做:
在 Simulink的Port & Subsystem庫里,有IF-ELSE以及While模塊。
For循環(huán)實例
1. 新建一個簡單的Simulink模型
首先來看For循環(huán),這是從Port & Subsystem庫里拖出來的For Iterator模塊:
雙擊它,搭建內(nèi)部如下圖:
代碼生成之前所需要的配置、數(shù)據(jù)對象的構(gòu)造以及信號關(guān)聯(lián)等等,這些任務(wù)與之前所述一樣,此處就不再重復(fù)說了。
5. 生成代碼
Ctrl+B,生成代碼。
如前面所設(shè)置的,可以看到下圖所生成的For循環(huán)的C代碼:
While循環(huán)實例
在Port & Subsystem庫里的While Iterator模塊,實現(xiàn)while循環(huán)的功能。從這個模型的端口來看,在這個循環(huán)里根據(jù)輸入u2來計算輸出y2的值,如下圖。
在這個While Iterator子系統(tǒng)內(nèi)部,則是具體的while循環(huán)的內(nèi)容,如下圖。
While Iterator模塊,是這個循環(huán)的條件模塊,可以設(shè)置最大的循環(huán)次數(shù),同時cond為while的循環(huán)條件。而在上部的累加計算框圖,則是 while 循環(huán)的內(nèi)容。
生成代碼,如下圖。圖中的func函數(shù)就是框圖func子系統(tǒng)所生成的函數(shù)。內(nèi)部做了一些更新flag的計算。另外可以看到累加框圖生成的代碼:y2 += u2。
do while循環(huán)實例
這個就簡單了,直接把上圖中的 while Iterator 模塊雙擊設(shè)置為 do while 的模式就行了。
其他
生成代碼結(jié)束之后,如果繼續(xù)編譯鏈接生成 exe 文件時,會有一個有意思的錯誤如下。有興趣的可以去查看 math.h 的函數(shù)定義。
在Simulink的Port & Subsystem庫里,有IF-ELSE以及While相應(yīng)的子系統(tǒng)模塊實現(xiàn)循環(huán)算法。
-
邏輯
+關(guān)注
關(guān)注
2文章
833瀏覽量
29472 -
循環(huán)
+關(guān)注
關(guān)注
0文章
92瀏覽量
15976 -
C代碼
+關(guān)注
關(guān)注
1文章
89瀏覽量
14302
發(fā)布評論請先 登錄
相關(guān)推薦
評論