循環(huán)邏輯
要得到:
y1 = 0;
for(inx = 0; inx <10; inx++)
{
y1 = u1[inx] + y1;
}
或者
while(flag && (num_iter <= 100)
{
flag = func ();
num_iter ++;
}
怎么做:
Stateflow 有相應(yīng)的流程圖向?qū)Э梢灾苯邮褂?,自?dòng)生成對(duì)應(yīng)的流程圖結(jié)構(gòu)。
For循環(huán)
1. 模型
在 Stateflow 里有各種控制流的構(gòu)造向?qū)?,如下圖。如果對(duì) Stateflow 的流程圖構(gòu)建不熟悉的話(huà),可以使用它來(lái)自動(dòng)生成,再在它的基礎(chǔ)上進(jìn)行修改:
從而得到所需要的框圖:
2. 數(shù)據(jù)
定義 Stateflow 模塊的端口和本地變量,輸入端口 u1,輸出端口 yy1,以及本地變量 inx 如下:
在 Base Workspace 里定義輸入輸出信號(hào) u1,yy1 的 Data Object:
3. 關(guān)聯(lián)
在信號(hào)線(xiàn)上右鍵,設(shè)置信號(hào)屬性,勾選 “Signal name must resolve to Simulink signal object”,將信號(hào)與 Base Workspace 的數(shù)據(jù)對(duì)象關(guān)聯(lián)在一起。關(guān)聯(lián)輸入輸出信號(hào)后,會(huì)看到如圖的藍(lán)色小叉子:
4. 代碼
Ctrl+B,它所自動(dòng)生成的代碼:
While循環(huán)
1. 模型
下圖就通過(guò)向?qū)?gòu)造的,得到跟 for 循環(huán)類(lèi)似的流程圖:
這里的func作為一個(gè) 事件Event ,觸發(fā)外面的 function call 子系統(tǒng) func 計(jì)算flag:
2. 數(shù)據(jù)
Stateflow 內(nèi)的數(shù)據(jù)定義如下圖,輸入端口名稱(chēng) u1,輸出端口名稱(chēng) yy2,本地變量 num_iter。flag 由外部函數(shù) func 來(lái)更新而作為輸入。另外, func 事件觸發(fā)調(diào)用外部的 func 函數(shù)。( inx 這里沒(méi)有用)
在 Base Workspace 里定義相應(yīng)的數(shù)據(jù)對(duì)象。因?yàn)檫@個(gè) Simulink 模型的信號(hào)線(xiàn)上已經(jīng)命名為 u2,所以定義的數(shù)據(jù)對(duì)象名稱(chēng)要跟信號(hào)線(xiàn)的名字一致: u2,yy2,flag。
并設(shè)置 flag 的初始值為 true。將數(shù)據(jù)對(duì)象與 Simulink 信號(hào)線(xiàn)關(guān)聯(lián)。
3. 生成代碼
Ctrl+B,生成的代碼如下圖所示。設(shè)置了 func()子系統(tǒng)的屬性,把它變成一個(gè)子函數(shù)來(lái)調(diào)用。沒(méi)有截圖顯示,但是func() 函數(shù)里修改了全局變量 flag 的值。
代碼正常生成,但此時(shí)會(huì)得到如下的警告:
也就是說(shuō),我們之前對(duì)數(shù)據(jù)對(duì)象 flag 所設(shè)置的初始值是沒(méi)用的,會(huì)被模型中 func 子系統(tǒng)的輸出端口 Out1 的初始值所覆蓋。
默認(rèn)情況下 Out1 端口的初始值為 0 ,所以看下圖的初始化函數(shù)里, flag 被初始化為 false,我們之前所設(shè)置的初始值 true 沒(méi)有發(fā)生作用。
主程序里的 while(flag&(inx<100)) 都不會(huì)被執(zhí)行。這個(gè)問(wèn)題,通過(guò)仿真也會(huì)測(cè)出來(lái)。
所以,需要雙擊 func 子系統(tǒng)的 Out1 端口,設(shè)置初始值為 true,仿真才能得到正確的結(jié)果。同時(shí),也會(huì)最后得到下面的初始化代碼。
do while循環(huán)
使用流程圖的向?qū)?,選擇 do while 模式,把 Chart 里面的流程圖改改就行了。另外,被調(diào)用的 func 函數(shù),也可以寫(xiě)在 Chart 里面。
Stateflow 有相應(yīng)的流程圖向?qū)Э梢灾苯邮褂?,自?dòng)生成對(duì)應(yīng)的流程圖結(jié)構(gòu)。
-
輸出信號(hào)
+關(guān)注
關(guān)注
0文章
280瀏覽量
11858 -
初始化
+關(guān)注
關(guān)注
0文章
50瀏覽量
11850
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論