C代碼中常用的循環(huán)控制語句有諸如for 、while以及do while。那么,這種循環(huán)邏輯在Simulink模型中是如何實(shí)現(xiàn)的呢?
Simulink里有三種建模手段:
Simulink 框圖
Stateflow Chart
先來看看如何使用Simulink 框圖來表達(dá)這種循環(huán)邏輯。
點(diǎ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)實(shí)例
1. 新建一個(gè)簡單的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)實(shí)例
在Port & Subsystem庫里的While Iterator模塊,實(shí)現(xiàn)while循環(huán)的功能。從這個(gè)模型的端口來看,在這個(gè)循環(huán)里根據(jù)輸入u2來計(jì)算輸出y2的值,如下圖。
在這個(gè)While Iterator子系統(tǒng)內(nèi)部,則是具體的while循環(huán)的內(nèi)容,如下圖。
While Iterator模塊,是這個(gè)循環(huán)的條件模塊,可以設(shè)置最大的循環(huán)次數(shù),同時(shí)cond為while的循環(huán)條件。而在上部的累加計(jì)算框圖,則是 while 循環(huán)的內(nèi)容。
生成代碼,如下圖。圖中的func函數(shù)就是框圖func子系統(tǒng)所生成的函數(shù)。內(nèi)部做了一些更新flag的計(jì)算。另外可以看到累加框圖生成的代碼:y2 += u2。
do while循環(huán)實(shí)例
這個(gè)就簡單了,直接把上圖中的 while Iterator 模塊雙擊設(shè)置為 do while 的模式就行了。
其他
生成代碼結(jié)束之后,如果繼續(xù)編譯鏈接生成 exe 文件時(shí),會(huì)有一個(gè)有意思的錯(cuò)誤如下。有興趣的可以去查看 math.h 的函數(shù)定義。
在Simulink的Port & Subsystem庫里,有IF-ELSE以及While相應(yīng)的子系統(tǒng)模塊實(shí)現(xiàn)循環(huán)算法。
-
邏輯
+關(guān)注
關(guān)注
2文章
834瀏覽量
29786 -
循環(huán)
+關(guān)注
關(guān)注
0文章
92瀏覽量
16329 -
C代碼
+關(guān)注
關(guān)注
1文章
90瀏覽量
14777
發(fā)布評論請先 登錄
技術(shù)干貨驛站 ▏深入理解C語言:嵌套循環(huán)與循環(huán)控制的底層原理

可靠性溫度循環(huán)試驗(yàn)至少需要幾個(gè)循環(huán)?

邏輯異或和邏輯或的比較分析
關(guān)于LRU(Least Recently Used)的邏輯實(shí)現(xiàn)

評論