本系列教程是根據孫忠潇編著的<<Simulink仿真及代碼生成技術入門到精通>>學習筆記。
目錄
Simulink仿真入門到精通(一) Simulink界面介紹
Simulink仿真入門到精通(二) Simulink子產品
Simulink仿真入門到精通(三) Simulink信号
Simulink仿真入門到精通(四) Simulink子系統
Simulink仿真入門到精通(五) Simulink模型的仿真
Simulink仿真入門到精通(六) Simulink模型儲存為圖檔
Simulink仿真入門到精通(七) Simulink的回調函數
Simulink仿真入門到精通(八) M語言對Simulink模型的自動化操作及配置
Simulink仿真入門到精通(九) Simulink的流控制
Simulink仿真入門到精通(十) S函數
Simulink仿真入門到精通(十一) 子產品的封裝
Simulink仿真入門到精通(十二) Publish釋出M檔案
Simulink仿真入門到精通(十三) Simulink建立自定義庫
Simulink仿真入門到精通(十四) Simulink自定義環境
Simulink仿真入門到精通(十五) Simulink在流程工業中的仿真應用
Simulink仿真入門到精通(十六) Simulink基于模型設計的工業應用概述
Simulink仿真入門到精通(十七) Simulink代碼生成技術詳解
Simulink仿真入門到精通(十八) TLC語言
Simulink仿真入門到精通(十九) 總結回顧
4.1 Simulink子系統詳解
4.1.1 子系統概述
Simulink根據仿真特性将子產品的屬性分為兩種:虛拟子產品和非虛拟子產品。
非虛拟子產品在仿真過程中起到實際的作用,對其進行編輯或者增加删除操作會影響到模型運作和改變模型的結果。
虛拟子產品在仿真過程中不起實際作用,主要是為了從圖框上進行程式的層次性劃分以保持模型的圖形界面的整潔性。
4.1.2 Simulink模型的運作順序
Simulink模型的計算順序是基于時間采樣和信号流向的,即按照時間的順序執行。 每一個采樣點時間,模型中所有子產品的狀态和輸入/輸出值都要計算并更新一下,每個子產品的輸出值都通過信号線連接配接并傳遞給下一個子產品的輸入。系統采樣時間由解算器類型和步長共同決定,并且作為Simulink模型仿真的最小粒度。當系統采樣時刻到來時,每個子產品再根據自身所設定的采樣時間方式決定是否在目前這個采樣時刻進行計算。
允許使用者設定采樣時間的子產品在其參數對話框中都提供Sample Time這個屬性。對于子產品的Sample Time,常用的值有:
- -1:繼承輸入信号采樣時間,若沒有輸入信号,則繼承父層模型采樣時間,如果子產品無輸入并且本身處于頂層模型中,則繼承系統解算器的步長。
- 0:連續采樣時間。
- 非零正數:離散采樣時間。
- Inf:無窮大采樣時間,即不采樣。
- [Sampletime,offset]:Sampletime為上述一種,offset為相對于這個采樣時刻的時間偏移量。如[0.2,0.01]表示在0.01s、0.21s、0.41s等時刻進行計算。
Display→Blocks→Sorted Executed Order可以顯示子產品的執行順序。
标注格式為紅色的m:n,m表示子產品在模型中執行的優先度,n表示 在同一個采樣時刻,子產品所處的執行次序号。
4.1.3 各種子系統的特點與功能
1. 虛拟子系統
在執行仿真之前就展開子系統,實際上如同沒有建立子系統一樣。
2. 非虛拟/原子子系統
非虛拟原子子系統内的子產品作為一個單元執行,右擊虛拟子系統,在Block Parameter中勾選Treat as atomic unit,即可建立原子子系統。
(1)條件子系統
①使能子系統
在驅動子系統使能端口的輸入信号大于零時執行使能子系統。
使用者可以通過在虛拟子系統内放置Enable子產品的方式來建立使能子系統,并通過Enable子產品中的States when enabling參數配置子系統内的子產品狀态。
此外,如果子系統内部存在Out子產品,利用Out輸出子產品的Output when disabled參數可以把使能子系統的輸出端口配置成保持最後一個有效采樣時刻的輸出或複位為初始值。
②觸發子系統
觸發子系統隻有在驅動子系統觸發端口的信号上升沿或下降沿到來時才會執行,觸發信号沿方向由Trigger端口子產品中的Trigger type參數決定。
③觸發使能子系統
同時放置Trigger和enable。
(2)動作子系統
Action子系統必須由If子產品或Switch Case子產品執行,與這些子系統子產品連接配接的所有Action子系統必須具有相同的采樣時間。
使用者可以通過在子系統内部放置Action Port子產品的方式來建立Action子系統。
(3)選擇子系統
①可變子系統:内部包括多個子系統,當某條件成立時執行與之相應的子系統。每個子系統比對一個變量的值,每次仿真時根據這個變量的值決定内部哪一個子系統處于激活狀态。
②可配置子系統:用來代表使用者自定義庫中的任意子產品,隻能在使用者自定義庫中使用,動态表示自定義庫中的某一子產品。
回到頂部
4.2 Simulink子系統示例
4.2.1 虛拟和非虛拟子系統
右擊子系統,選擇Block parameters,勾選Treat as atomic unit,子系統即成為原子子系統,子系統圖示黑色外框加寬,此時子系統可以整體設定采樣時間。
4.2.2 使能子系統
僅在使能信号使能時執行一次。
1 | |
4.2.3 函數調用子系統(條件子系統)
這種子系統隻能被函數調用信号所觸發。
函數調用子系統的執行不是由Simulink引擎直接控制的,而是由調用它的S函數通過mdlOutputs/mdlUpdates子方法來決定的。
S函數構成的子產品具有兩個函數調用類型的輸出,根據輸入信号的奇偶值分别調用兩個函數調用子系統,兩個函數調用子系統的執行時間不重合,被Merge子產品合并到一個輸出,輸出為目前仿真時刻處于激活狀态的子系統輸出。
函數調用子系統1的内部為常數輸出,函數調用子系統2的内部為正弦波輸出。
4.2.4 While子系統(動作子系統)
(1)do-while
在這個模式下,While Iterator隻有一個輸入,即while條件輸入,它必須在while子系統内。
在每個采樣時間内,While Iterator子產品會執行一次子系統内的所有子產品,然後檢查while條件輸入是否為真,如果輸入為真,則While Iterator子產品再執行一次子系統内的所有子產品,隻要while條件輸入為真,而且循環次數小于或等于While Iterator子產品對話框中的Maximum number of iterations參數值時,這個循環過程會一直執行。
(2)while
在這個循環模式下,while Iterator子產品有2個輸入:while條件輸入和初始條件輸入(IC),初始條件信号必須在while子系統外提供。
在仿真開始時,如果IC輸入為真,While Iterator子產品會執行一次子系統内的所有子產品,然後檢查while條件輸入是否為真,如果輸入為真,則While Iterator子產品再執行一次子系統内的所有子產品,隻要while條件輸入為真,而且循環次數小于或等于While Iterator子產品對話框中的Maximum number of iterations參數值時,這個循環過程會一直執行。如果在仿真時間開始時IC輸入為假,那麼在該采樣時間内While Iterator子產品不執行子系統中的内容。
注意:當把While Iterator子產品放置到子系統中時,在給定條件為真的情況下,While子系統中所有子產品會在目前采樣時間反複執行子系統中的内容,即把多個疊代在一個采樣步長内進行處理。如果子系統不是原子子系統,那麼把While Iterator子產品放置到子系統中會使該子系統自動成為原子子系統。
上面模型的效果等價于以下代碼:
max_sum=100;
max_iterations=1000;
sum=0;
iteration_number=0;
cond=(max_sum>0);
while(cond~=0)
iteration_number=iteration_number+1;
sum=sum+iteration_number;
if(sum>max_sum || iteration_number>max_iterations)
cond=0;
end
end
也等于以下簡化的代碼:
for i=1:1000
sum_i=sum(1:i);
if(sum_i>100)
break;
end
end
4.2.5 可變子系統(選擇子系統)
可變子系統内裝了多個child子系統,其輸入/輸出端口不需要連線,每個child子系統都有一個對應的變量或表達式,某個child子系統的變量或表達式值為真時此子系統就被激活。Simulink的采樣時刻到來時最多隻有一個child子系統被激活,可以通過變量友善地控制其中某一個child子系統的執行。
右擊子系統,選擇Block parameters(subsystem)。
左側排列5個按鈕,第一個用來在可變子系統内建立child子系統,第二個用來在可變子系統内建立模型選擇框,第三個用來編輯激活child子系統的條件,第四個用來打開選中的child子系統,第五個用來更新資訊清單。
右側是一個清單框,第二列Variant control表示Condition的Simulink.Variant對象,其内部包含一個判斷條件condition,即是第三列參數,由使用者指定一個邏輯表達式,當條件滿足時,此條件所對應的child子系統會被激活。
在工作區輸入sel=2;則第二個child子系統被激活。第一個子系統設定增益2,第二個子系統設定增益3,仿真結果如下。
4.2.6 可配置子系統(選擇子系統)
可配置子系統隻能在使用者自定義的子產品庫中使用,可配置子系統的優點在于設計者可以任意切換子系統的内部子產品,快速比較出那種組合會滿足系統設計需求。
1.建立一個新的Library, 命名為mylib
2.從library Browser-> Simulink -> Ports&Subsystems 中 選擇Configurable Subsystem, 拖拽到建立好的mylib裡面,并建立3個子系統(包含一個gain子產品和一個輸入輸出端口)
3.輕按兩下Configurable Subsystem,左邊清單裡的三個子系統全部勾上,并儲存好自定義庫mylib
4.從自定義庫中選中Configure subsystem, 複制到建立好的simulink 模型mymodel中,在in端接入一個constant子產品,out端連一個display子產品
5.右鍵Configure subsystem選擇Block Choice->subsystem,并運作模型display顯示1
6.右鍵Configure subsystem選擇Block Choice->subsystem1,并運作模型display顯示2
7.右鍵Configure subsystem選擇Block Choice->subsystem2,并運作模型display顯示3