2017-04-05 51 views
0

我在Simulink中定義了這個簡單的類,我想創建並共享這個類的5x5矩陣。如何在simulink中初始化和分享用戶定義的變量?

classdef evidential_grid 
properties 
    Occ  
    Libr  
    Incert 
    Conf  
end 
methods 
    function obj = evidential_grid()  % Grid Constructor 
     obj.Occ = 0; 
     obj.Libr = 1;   
     obj.Incert = 0; 
     obj.Conf = 0; 
    end 
end 
end 

在MATLAB中,此代碼創建5x5的

myGrid(5,5) = evidential_grid(); 

正如我們所知道的矩陣。 Simulink不接受變量的動態分配,所以我應該首先初始化它。
對於這一點,我創建

function fcn() 
%#codegen 
global MySharedVariable; 
coder.extrinsic('evidential_grid'); 
MySharedVariable(5,5) = evidential_grid(); 
  • 在Simulink
  • 數據存儲內存塊的matlab函數共享「evidential_grid」型

的變量但是,當我執行我的simulink模型我得到了這些錯誤!

  • 全局聲明沒有解決通過端口和數據管理器中註冊的數據存儲內存塊 。解析MATLAB功能

請給我找一個解決方案的過程中出現

  • 錯誤, 謝謝。

  • 回答

    0

    您的代碼可能存在多個問題。首先,爲了使用來自MATLAB功能塊的全局變量,它們需要被映射到數據存儲器存儲器塊。請參閱https://www.mathworks.com/help/simulink/ug/using-global-data-with-the-matlab-function-block.html的幫助頁面。您可以通過打開「編輯數據」選項並添加全局變量並選擇類型作爲「數據存儲內存」來完成此操作。您也可以通過運行open_system([docroot,'/ toolbox/simulink/examples/dsm_demo'])來檢出示例dsm_demo。

    您仍然無法將外部函數的輸出存儲在此變量中。就你而言,我相信最好的情況是將對象數組也移動到外部函數中,並將其作爲全局數據或持久數據存儲在那裏,並作爲該函數的輸出訪問必要的屬性。

    如果你想保持simulink中的數據有兩種方法來處理這個問題。一種是在Simulink中將類變爲結構/總線類型,並遵循數據存儲方法。在這裏,您需要將數據存儲類型定義爲一個simulink.signal對象,其數據類型設置爲總線對象。如果您僅顯示4個字段,則更簡單的路徑是將它們分隔爲4個不同的變量,併爲每個變量分別存儲一個數據存儲器內存。