Simulink雜談之一

2021-08-21 16:03:01 字數 1264 閱讀 1912

使用sumulink進行**時,有時會發現**時間「走的太慢」,甚至有時候程式跑幾個小時還沒有結束,原因是在simulink中預設使用了「變步長」的設定(圖1),

圖1這樣,有些程式在執行時simulink取樣的資料會非常之多,導致程式要執行很長時間。如果我們需要快速地知道**的結果,我麼可以使用「固定步長「,如在上圖中將slover options選項的type改為fixed-step,並更改取樣時間(fixed-step size),如果我們將起始時間設定為0,終止時間設定為30s,取樣時間設定為0.01s,我們一共可以得到3001(30/0.01+1)個點(圖2)。

圖2當然最後**的實際效果也是和設定的取樣時間有關的,不能將取樣時間設定的過大,這樣雖然**速度很快但是這是以犧牲取樣點資料為代價的,所以在**時,在能夠接受的**耗時之內應該盡量縮短取樣時間,這樣得到的**效果也會更好。

1、關於代數環(algebraic loop),在數字計算中,輸入訊號決定輸出訊號,同時輸出訊號也決定輸入訊號,由於數字計算的時序性,導致沒有輸出訊號無法計算輸入訊號,沒有輸入訊號又反過來無法計算輸出訊號,形成死迴圈,這就是代數環。簡單地說,代數環其實就是乙個輸入訊號包含輸出訊號,同時輸出訊號也包含輸入訊號的特殊反饋迴路。在simulink中,這是由於直通模組(無延時的模組)的原因造成的,simulink中大部分的模組都是直通模組,因此很容易形成代數環。在整個迴路中,只包含直通模組就會形成代數環,反饋迴路有延時模組就會消除代數環。解決方案:我們可以通過在反饋迴路中加入「延時」環節(在「continuous」模組中),讓輸出訊號做出一定時間的延遲,這樣就可以達到消除代數環的問題。

2、關於"實向量"問題,可能在**的過程中出現如下問題,during flag=3 call must be a real vector of length 「***」,這一問題的出現是由於控制器的設計或者某些引數的設定有錯誤,相應地,在matlab視窗中可能出現了類似nan,或者inf等提示資訊,遇到這種情況我們需要檢查控制器的設計或者更改某些引數,舉個栗子,有一次我遇到了這樣的情況,經過排查我發現在s函式中有類似這樣的矩陣,c2 = [6/t,0,0;0,10/(3*t-10),0;0,0,1]; 而我設定的**時間t是從0開始的,這樣導致在**一開始的時候c2中就有元素出現「0作除數」的錯誤。於是處理辦法如下:將**時間 t 設定從0.01開始,這樣就消除了錯誤。

Simulink與CAPL(一)概述

capl語言是vector公司的一種物件導向程式設計語言,類似c 結合vector公司的硬體平台,在使用canoe 或者canlyzer等 時,開發者可以利用capl開發出lin can匯流排通訊的測試介面,方便開發者做除錯和故障檢測等方面的工作。最近在用canoe做整車系統除錯時,發現除了使用ca...

架構雜談《一》

典型的單體架構分為三個層級,web層 業務邏輯層和資料儲存層,每個層的指責分別如下 將不同的模組化元件聚合後執行在通用的應用伺服器上。單體架構已經對企業級應用的整體架構進行了邏輯分層,包括了上面提到的web層 業務邏輯層和資料儲存層,不同的層級有自己的職責,並從功能型別上劃分層級,每個層級的職責單一...

盤點雜談 一

很多人在建立盤點憑證的時候會凍結當前的庫存,以保證庫存的盤點的正確性.建立乙個sap的盤點憑證式mi01 posting block 和freeze book invntory 都是凍結庫存的選擇項,在開始建立之前,勾選即可凍結庫存.但是這兩個有什麼區別?簡單說一下.posting block 表示...