2011-02-07 177 views
3

我Simulink的另一個問題:Simulink的:仿真調試樣模式

是否有可能暫停在模擬過程中它的運行?建立通過「單位延遲」的幾個步驟後,我想先下一步驟(針對用戶顯示值,看看)做暫停我的模擬。之後 - 假設 - 單擊模擬應該繼續進行一步,重複該過程。 最後這應該有某種調試功能。

我不是很堅定這是如何實現的。我猜在模擬參數的某處,但是在哪裏以及如何?

回答

7

有三種方式,你可以去這個問題,我知道的。

方法1:根本不要暫停模擬。而應在適當的線上使用示波器來提供足夠的信息來了解模擬中發生的情況。

優點:您不會受到執行順序和模擬暫停導致混淆結果的影響。缺點:對你的腦中不同的範圍線進行「時間同步」可能會非常棘手,特別是如果不是所有人都執行每個模擬步驟。 (這部分是由於示波器塊圖顯示爲階梯函數,實際上它們是散點圖。

方法2:使用內置的Simulink調試器(不要讓自己的希望上升)。使用您正在使用的模型中的工具> Simulink Debugger菜單選項打開此工具。此工具允許您在某些模塊上設置斷點,一次一步或兩次組合。允許對模擬進行精細控制

缺點:在實踐中,我發現這個工具很容易混淆使用,並且容易導致Matlab崩潰。另外,請小心orde執行。

方法3:在模擬執行順序開始時創建一個嵌入式Matlab函數。這裏是一個例子:

function y = func(x); y = x;

在仿真開始時在信號線之一上放置此功能(強制執行順序)。然後在y = x上放一個調試點;線。現在,只要你的模擬點擊這條線,模擬病人被暫停等着你點擊在Matlab主編的「繼續」按鈕。

優勢:可靠,方便。

缺點:謹慎執行。

執行順序:

如果您不熟悉在Simulink中執行的順序,我建議你打開「格式>塊顯示>排序順序」從模型菜單。這將在每個塊上放置神祕的數字/字母代碼,以某種方式指示塊在您的模擬中執行的順序。取決於你的模型和佈局,這些數字/字母代碼可能很有意義,或者它們可能不是。我不建議在通常情況下使用此排序順序顯示。相反,我建議學習和了解Simulink如何確定分揀訂單/執行訂單。

要記住的重要一點是,調試點(使用Simulink的調試器或嵌入式MATLAB天氣)是執行訂單的一部分。這意味着當你點擊調試點時,該點之後的塊將不會更新它們的狀態。這多少是有道理的,但可能會令你感到驚訝的事情是,顯示器和範圍往往是一些過去的塊的更新狀態,即使他們迷上了信號由塊在執行年初採購線。即使這些顯示和範圍位於(非原子)子系統內部,並且您的調試點位於該子系統之外,情況也是如此。您可能最終出現的情況是顯示器或範圍中顯示的值可能來自仿真中的上一個時間步。

你如何解決此問題?將所有模擬放在原子系統內部,包括顯示和範圍。然後把你的調試點放在這個子系統之外。這將保證每當命中調試點時,所有塊(包括顯示和範圍)的狀態都是一致的。

如果任何這是沒有意義的,讓我知道。

+0

哇,謝謝您非常詳細的前面回答:)我想我必須嘗試一些你的建議。我想我會用「啓用子系統」建立我的模擬,這樣我就可以確定每個子系統何時處理。我認爲我必須測試方法2或方法3是否更舒適。唯一讓我困惑的是,爲什麼方法3強制執行任何順序,當我在每一行中放置這個函數?豎起大拇指給你真棒的答案! – poeschlorn 2011-02-08 07:10:27