2012-05-06 27 views
0

我需要下列情況的幫助。如何在simulink和matlab之間實現併發編程

我的項目是使用simulink來模擬機器人。simulink模型的輸出是robbot在每個時間步的位置和轉矩。我的問題是數據收集部分。我打算使用緩衝區來存儲simulink輸出,並使用antoher matalb函數訪問相同的緩衝區,以便將數據從緩衝區中取出以進行在線數據分析。要求是simulink模型和matlab數據分析功能需要同時運行。 matalb數據分析功能決定何時將數據從緩衝區中取出。這就像生產者 - 消費者問題,simulink是生產者,數據分析matlab函數充當消費者。

我的問題是如何保護緩衝區互斥。我不想使用To工作區塊,因爲它只在simulink暫停或停止時更新數據。我沒有發現像matalb或simulink提供的任何smeaphore或mutex結構。我曾嘗試以下方法來解決問題,但他們的非工作:

  1. 我曾嘗試使用隊列和緩衝塊在DSP工具箱中,這兩個區塊提供相互排斥,但對大小輸出數據在模擬期間改變。基本上,當matlab函數收集數據時,它將此時所有的數據存儲在緩衝區中。然後緩衝塊似乎在每個simulink timetep上逐個輸出。

  2. 我試圖通過嵌入式函數中的持久變量實現隊列。當matalb函數想要收集數據時,它會翻轉一個信號標誌,告訴simulink將數據輸出到工作區。但在這種方法中,matalb函數必須通過兩次調用來獲取數據。第一次調用翻轉標誌,然後返回。接下來,第二次調用用於搜索工作區以查找simulink輸出的數據。這種方法被我的顧問拒絕,因爲它不夠高雅。

我認爲RTW可以解決這個問題,但Simulink模型和分析MATALB功能代碼經常變化,所以爲了調試的目的,我打算到C/C不會改變SIMULINK ++。但是我想知道我是否可以使用C實現一個互斥體,並通過simulink和Matlab調用。如果答案是肯定的,那麼該怎麼做?

我真的很希望有人能幫助我。任何建議表示讚賞。順便說一句,我正在使用Linux系統。

回答