2017-04-05 36 views
0

Simulinkでこの単純なクラスを定義しました。このクラスの5x5マトリックスを作成して共有したいと思います。 MATLABで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 

、このコードは、私たちが知っているように5x5の

myGrid(5,5) = evidential_grid(); 

のマトリックスを作成するために動作します。 Simulinkは変数の動的割り当てを受け付けないため、まず変数を初期化する必要があります。そのために
は、私が「evidential_grid」タイプ

の変数を共有する

function fcn() 
%#codegen 
global MySharedVariable; 
coder.extrinsic('evidential_grid'); 
MySharedVariable(5,5) = evidential_grid(); 
  • Simulinkの
  • データストアメモリのブロックでMATLAB関数を作成した。しかし、私は、実行時に私の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に保存したい場合、これには2つの方法があります。 1つは、Simulinkでクラスを構造体/バス型にし、データストアの手法に従うことです。ここでは、バスオブジェクトに設定されたデータ型を持つsimulink.signalオブジェクトとしてデータストアタイプを定義する必要があります。 4つのフィールドしか表示されていない場合は、簡単なルートを4つの異なる変数に分け、それぞれに別々のデータストアメモリを持たせることです。

関連する問題