2015-07-02 43 views
0

我在simulink 中使用輸入端口「inp」和輸出端口「out」在simulink模型「Mod_Sim」中。 我想發送輸入到這個模型,模擬它,然後在每個採樣時間「Ts」取對應的輸出爲 。 我想用這種方式模擬這個模型的「N」個時間步長(以Ts爲單位)。如何以這種方式在Matlab M文件中運行Simulink模型?

更具體而言,我想以下實現:

在給定的時間步長的「k」,我將具有輸入u(k)的(來自其它來源)。 然後,我想將此輸入應用於Mod_Sim,並從模型中獲取相應的輸出y(k)。我想重複這個N次的步驟。

我該怎麼做這樣的實現?

我會很樂意提供幫助。

回答

1

在開始模擬之前,您需要將所有輸入定義爲MATLAB工作區中感興趣的時間跨度的時間函數。

假設你有tu在MATLAB工作空間中定義的,並且您的輸入端口inp是在模型的根級別,你需要配置你的模型使用utinp,如Import Data to Root-Level Input Ports描述。

完成之後,您可以run the simulation using the sim command,確保'SaveOutput'在模擬選項中打開。

例如,您可以在for循環中重複練習N次。真正關鍵的是在開始模擬之前在工作區中定義所有輸入。

編輯基於評論

這聽起來像你想的協同仿真,雖然你不說是什麼產生u(t),無論是另一個軟件或什麼的。無論如何,你有兩個選擇,我看到它:

  1. 寫的S函數與其他軟件產生u(t),以便它拉的u在每個時間步一個新的價值互動。這實際上很難做到,許多軟件供應商通過S函數(例如SimulationX)與Simulink提出某種形式的協同仿真。關於同一主題,另請參閱this other question

  2. 使用TCP/IP或UDP/IP在Simulink和第三方軟件之間進行通信。儀器控制工具箱提供了Send and Receive blocks for TCP/IP and UDP/IP。 TCP/IP應該比UDP/IP更可靠,請參閱this comparison

+0

我知道這個實現,這不是我想要的。我的實現將在線:t和u將隨着時間創建,因此u不能在一開始就被定義爲時間函數。 – user3489173

+0

你的問題不清楚(或者也許只是我)。無論如何,這聽起來像你想要共同模擬。這實際上很難做得很好,你需要編寫一個S函數來與其他軟件進行交互或者生成u(t)的任何東西,我不知道從哪裏開始。如果可能的話,另一種選擇是通過T​​CP/IP或UDP/IP發送數據。我會更新我的答案以反映這一點。 – am304

+0

我想要做的是如下(是的,它是聯合仿真)。有一個軟件「X」可以與Matlab耦合,但Simulink不可能。 X軟件中有一個「M」型號。我在Simulink中爲M設計了一個SISO控制器「K」。在耦合文件「Cm」(將X耦合到Matlab)中,我想在每個採樣時間k調用K以獲得u(k),然後將這個u k)通過Cm傳遞給M,並且在模擬M之後,我將通過Cm從X中的M獲得輸出y(k),最後我將把y(k)發送給K.我將很樂意瞭解如何執行它。謝謝。 – user3489173

相關問題