本系列教程是根據孫忠潇編著的<<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仿真入門到精通(十九) 總結回顧
5.1 模型的配置仿真
由各種子產品所建構的可視化邏輯連接配接,隻是模型的外在表現,模型仿真的核心驅動器是被稱作解算器(Solver)的元件,相當于Simulink仿真過程的心髒,驅動着模型仿真,它在每一個采樣時間點更新模型中所有的狀态和信号變量,并計算下一步的步長。除此之外,模型還具有一個參數配置集合(Configuration Parameter Set),它提供了一系列的參數,使用者通過這些參數可以選擇模型的解算方法,配置硬體目标,優化配置,設定異常響應及診斷,以及配置代碼聲稱等。參數設定集合相當于Simulink軟體各個環節的開關控制器,在細節處影響着模型的行為和表現方式。模型的可視化模組化方法,解算器及參數配置結合共同構成一個“有血有肉”的Simulink模型。
5.1.1 解算器
分類 | 步長可變否 | 離散連續性 | 顯式隐式 | 解算步長 | 階數 |
1 | 固定步長 | 離散 | 顯式 | 單步 | 單階 |
2 | 可變步長 | 連續 | 隐式 | 多步 | 多階 |
步長可變否
步長是前後兩個相鄰采樣點之間的時間間隔。
變步長:當子產品狀态值變化很快是減小步長,反之增大步長,可以根據誤差容限調整步長大小,使整個仿真過程中需要計算的采樣點數減少,進而使得仿真在較短時間内結束。
二者沒有絕對的優劣,在不同的應用場合酌情采用,但在生成嵌入式代碼并下載下傳到硬體中去執行時,解算器必須采用固定步長,因為實時硬體的時鐘源都是提供穩定頻率的時鐘源,無法提供變步長解算器的采樣時刻計算方式。
離散連續性
這兩種解算器都依賴于模型中的具有連續/離散狀态變量的子產品來工作。具有離散狀态變量的子產品負責在離散解算器作用下的每個采樣時間點計算離散狀态變量的值,具有連續狀态變量的子產品在連續解算器作用下使用連續數值積分方法求解連續狀态變量的值。
不具有連續狀态子產品的模型如果使用連續解算器仿真時,Simulink自動切換到離散解算器進行計算;具有連續狀态子產品的模型,如果選擇離散解算器進行仿真,會發生錯誤。
顯式隐式
這裡所說的顯式和隐式是指求解方程式是顯式或隐式的。
通常,隐式解算器用于求解剛性系統,顯式解算器用于求解非剛性系統。
所謂剛性系統,是指在時間間隔很小的情況下才會穩定,時間間隔稍大一點就不再穩定的系統。
相對于顯式解算器,隐式解算器對于震蕩行為的求解具有更高的穩定性;但是,由于解算過程中産生Jacobian矩陣,使用牛頓法在每一個采樣時刻計算代數方程,是以很費時間。
解算步長
單步解算器在計算y(t)時隻需要使用y(t-1),連續系統使用y(t-1),y(t-2),…,y(t-m)等多值來計算目前輸出y(t)。
階數
隐式變步長解算器ode15s可以使用1階到5階方程,顯式變步長解算器oed113可以使用1階到13階方程。
總結
變步長
固定步長
方法特點
解算器 | 應用場合 |
ode45(顯式) | 推薦用于模型的首次仿真,具有最好的普适性以及不錯的精度。 如果發現仿真速度極慢,可改為ode15s。 |
ode23(顯式) | 在誤差要求不是特别嚴格或模型中存在輕微剛性時比ode45具有更高的效率。 |
ode113(顯式) | 對于具有嚴格誤差容限和計算密集型的問題,此方法比oed45更合适更高效。 |
ode15s(隐式) | 基于數值差分方程(NDFs)求解,産生雅可比矩陣,通常從階數為2開始嘗試。 |
ode23s(隐式) | 一步解算器,在粗差問題上比ode15s更高效。 |
ode23t(隐式) | 适應于無數值阻尼的中性剛度模型求解。 |
ode23tb(隐式) | 跟ode23s類似,在粗差剛性模型中更高效。 |
5.1.2 參數的配置
解算器的參數設定
變步長解算器參數
參數名 | 作用說明 |
Max step size | 解算器可以采用的最大步長 |
Min step size | 解算器可以采用的最小步長 |
Initial step size | 解算器第一步采用的步長 |
Relative tolerance | 可接受的最大相對誤差容限 |
Absolute tolerance | 可接受的最大絕對誤差容限 |
Shape preservation | 開啟時可使用微分資訊提升積分的精确度 |
Number of consecutive min step | 當步長超出了最大步長或者小于最小步長時稱為步長違例。此選項用于設定連續出現步長違例的步數,一旦超過這個步數就報警或報錯。預設為1。 |
參數名 | 作用說明 |
zero-crossing control | 使能過零檢測功能,對大部分模型而言,可以提升仿真速度,因為精确定位過零點,便可以增大變步長解算器的步長。 UseLocalSettings表示根據子產品中是否設定開啟過零檢測功能來決定,EnableAll和DisableAll則表示全體開啟或全體關閉 |
Time telerance | 時間容限,規定過零檢測要在容限相關的時間範圍内檢測連續性,用于控制過零檢測發生頻度 |
Algorithm | 指定一種過零檢測的算法,分為自适應算法和非自适應算法 |
固定步長解算器參數
參數名 | 作用說明 |
Fixed-step size | 固定步長 |
參數名(僅ode14x使用) | 作用說明 |
Solver Jacobian method | 提供雅可比算法的4個選項 |
Extrapolation order | 設定外插階數,可設定1~4 |
Number of Newton's iterations | 設定牛頓疊代算法的疊代次數 |
方法:用于判斷所選的變步長解算器的仿真結果是否可以接受
将Relative tolerance由1e-3改為1e-4再次仿真,如果和之前的結果沒有明顯差異,應當對目前的解算方法和仿真結果抱有信心。
資料導入/導出的設定
導入:結合In子產品進行
導出:
标簽名 | 作用說明 |
Time | 儲存模型的仿真時間采樣 |
States | 儲存模型的狀态量 |
Output | 儲存模型的輸出量 |
Final states | 儲存模型仿真最後一個采樣時刻的狀态量 |
Format | 儲存的時間、狀态和輸出量存儲到工作空間時的資料格式選擇 |
Limit data points to last | 勾選後隻儲存最新N個采樣點的資料 |
Decimation | 每間隔多少個采樣點儲存一組資料 |
模型某次仿真後儲存的Final states參數,可以作為下一次仿真的Initial states參數來使用,進而将兩次分開的仿真首尾相接。
示例:
回到頂部
5.2 模型仿真資料記錄
5.2.1 信号日志
右擊模型中希望記錄過程的信号線,打開屬性對話框,勾選Log signal data。設定之後的信号上出現了一個淺藍色探針符号,表示此信号的資料記錄功能已開。
仿真後會在工作空間中得到名為logsout的變量。
1 2 3 4 5 6 7 8 9 10 11 | |
5.2.2 Simulinnk Data Inspector
Inspector需要與信号日志功能聯合使用,不僅可以一次記錄多個信号資料,還可以記錄多次仿真的資料過程。
選中信号線,單擊Log/Unlog Selected Signals也可以增設/删除信号日志功能點。
Inspect用于記錄信号,Compare用于比較信号的差别。
勾選Overwrite可使仿真資料被覆寫。
回到頂部
5.3 仿真過程的調試
5.3.1 Debugger的啟動
Simulink→Debug→Debug Model即可啟動。
Debug模式将仿真過程變得可控,單步或多步執行,或者全速執行到斷點停下來。過程中每個采樣時刻所執行的子產品及方法名都可以觀察到。
在Sorted List界面可以觀察到子產品的執行順序。
5.3.2 Debugger的單步方法
- step into the current method:單步進入目前方法的子方法。
- step over the current method:單步跨過目前方法。
- step out of the current method:單步跳出目前子方法。
- go to first method at start of next time step:運作至下一個采樣時間的首個方法。
- go to the next block method:運作至下一個子產品的方法。
- start/continue the debug:開始/繼續調試。
- pause the debug:暫停調試。
- stop the debug:停止調試。
當單步執行某個子產品的某個方法涉及資料的輸入輸出或狀态量的更新計算時,可以将其顯示出來。
1 2 3 4 5 6 7 | |
5.3.3 Debugger的斷點設定方法
無條件斷點
模型在調試模式下運作後,所執行的各種子方法通過标簽也羅列出來。模型名後有一列複選框控件,用來設定無條件斷點。
直接勾選對應方法就設定了斷點,每次運作到這個方法都會停止。
initialzationPhase和terminationPhase分别在模型初始化和結束階段執行一次,simulationPhase及内部的各個子方法在每個采樣時間都會執行一次。
條件斷點
使用BreakPoints控件來除法條件斷點。
- zero crossings:仿真過程中遇到非采樣過零檢測時會停止。
- Step size limited by state:仿真過程中如果采用變步長解算器并且遇到一個狀态會限制步長大小時會停止。
- Solver Error:當解算器遇到可以恢複的錯誤時會停止。
- NaN values:仿真過程中出現無窮大數或者溢出時會停止。
- Break at time:在仿真達到設定時間時會停止。
通過Simulink Debugger,可以更細緻地掌握模型運作的每一個步驟,進而精确找到問題發生的位置、時間以及問題出現之前模型中信号與子產品輸入輸出的變化趨勢。
5.4 仿真的加速
仿真速度慢的可能原因:
- 模型中包含Interpreted MATLAB Function子產品,這個子產品在每一個步長内都會調用MATLAB解釋器,可更換為Simulink内模組化塊。
- 模型中包含了M語言編寫的S函數子產品,可采用C mex S函數或者由基本子產品搭建的子系統來代替。
- 最大步長或誤差容限太小。
- 模型中存在Memory子產品。
- 模型中使用Random Number block作為Integrator的輸入,可使用Band-Limited White Noise代替。
- 模型中包含可以解算的代數環,應解除代數環。
- 模型中存在不是其他任何一個采樣速率整數倍的采樣速率,應采用成倍數的采樣時間組合,可以降低采樣數,縮短計算時間。