2016-03-10 168 views
0

假設我有從工作區進入SIMULINK模擬的變量ii,我想在滿足一些條件後爲它分配一個新值,並將該值保存到工作區中。變量的值可以在數組中定義,但是,數組長度不是預定義的。我看到塊「MATLAB函數」可能是有用的,但它是適當的方式來評估一個簡單的命令,如ii=ii+1如何在SIMULINK中評估MATLAB命令

在下面的圖片以ii=0開頭,我預計ii的值會增加一個,直到tout>2並且其值將被相應地保存。但是我只有2秒的時間內有兩個值ii1,時間> 2秒時只有0

simulink_scheme

回答

1

通常你可以使用簡單的操作,避免使用MATLAB Function Block。在你的情況下有不同的解決方案。例如這種方式: enter image description here

我從工作區加載ii變量,檢查Switch塊中的條件,並且具有相同名稱ii返回新變量的工作區。

但是!這裏的重要時刻是:通過From Workspace將數據加載到Simulink中,塊加載的數據必須採用特殊格式:時間序列,矩陣或結構。所以你不能只加載ii=1。和To Workspace塊一樣 - 它將數據返回到時間序列,數組或結構中的工作空間。這意味着你的模擬的每個時間步的值都是ii

您可以使用Decimation參數在To Workspace塊中解決此問題,則只能得到最後一個值爲ii。要得到沒有時間欄的ii的值只能使用Save format: ArrayTo Workspace塊選項。這可以讓你得到1個值,只要你願意。但是,現在您只能一次模擬您的程序:使用時間欄(因爲它需要From Workspace塊)加載ii並且只保存一個值。 Simulink目前無法加載ii,因爲現在它沒有時間欄!

所以解決方案取決於你想要的。

P.S.再給你一個建議:不要只用i變量! MATLAB有預定義變量i = 0.0000 + 1.0000i - 虛數單位。


我做了一些解決這一問題,並得到這個例子: enter image description here

其中subsystem是:

enter image description here

注意:爲工作區塊保存結果爲Array(避免時間列)。工作原理:在工作區中創建ii=0。開始模擬。在啓用子系統時(t<=2),它將以這種方式修改ii值:在每個時間步增加ii 1。我的意思是:

t = 0, ii = 1 
t = 1, ii = 2 
t = 2, ii = 3 
t = 3, ii = 3 ... 

在下一次模擬我們加載ii數組的最後一個值 - ii(end)並以同樣的方式繼續模擬。

+0

我已經嘗試過使用類似於你發佈的內容,但是當我想根據'switch'塊中的某些條件增加一個變量'ii'時,系統總是用舊的(未遞增的) ii',即使我通過「To Workspace」塊保存它。 – Dounchan

+0

假設我想使用'ii = ii + 1'而不是'常量'塊的值爲'2'。我該怎麼做? – Dounchan

+0

我在我的答案中添加了新的示例。希望它有幫助! –