ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

複数のモデルに対するデータ ストアの利用

この例では、ローカル データ ストアの使用とログの作成について示します。また、グローバル データ ストアを定義、使用、ログを作成することにより、参照モデル間でグローバル データを共有する方法も示します。

モデル例を開く

モデル例を開きます。最上位モデル sldemo_mdlref_dsm からモデル sldemo_mdlref_dsm_bot および sldemo_mdlref_dsm_bot2 が参照されます。[コンフィギュレーション パラメーター] ダイアログの [データのインポート/エクスポート] ペインで、sldemo_mdlref_dsm のデータ ストアのログはオンになっています。

参照モデル sldemo_mdlref_dsm_bot で入力信号が (正の場合は 5、負の場合は 2 だけ) 増幅され、この信号の値がローカル データ ストア RefSignalVal に書き込まれます。このローカル データ ストアは、書き込まれた値がすべてシミュレーション後にワークスペースにログを作成されるように設定されています。このローカル データ ストアのログ パラメーターは、ブロック パラメーター ダイアログの [ログ] タブで制御されます。

参照モデル sldemo_mdlref_dsm_bot2 により、ErrorCond という名前のグローバル boolean データ ストアの値は、その入力信号の値が (-0.8, 0.8) の範囲外にある場合、true に設定されます。また、最上位モデルではデータ ストア ErrorCond and がモニターされ、2 つの参照モデルの出力が、このデータ ストアの値に応じて切り替えられます。

Simulink® 信号オブジェクトを使用したグローバル データ ストアの定義

最上位モデルと両方の参照モデルが各モデルで ErrorCond という名前のデータ ストアに対して同じメモリを使用するということを Simulink に対して指定するには、ErrorCond という名前の Simulink.Signal オブジェクトのインスタンスをベース ワークスペースに作成します。このオブジェクトは各モデルに可視であるため、そのスコープは個々のモデルを網羅し、モデル間で共有されるその名前のグローバル データ ストアが 1 つ存在することを意味します。3 つのモデルはどれも、ErrorCond のデータ ストア名をもつ Data Store Memory ブロックを含んでいません。いずれかのモデルがこのようなブロックを含んでいれば、そのブロックではそのモデルにローカルなデータ ストアが定義されることになり、グローバル データ ストアは隠されます。

ErrorCond オブジェクトではグローバル データ ストアが定義されるため、DataTypeComplexityDimensionsSamplingMode の各プロパティが、継承されない設定に明示的に定義されなければなりません。SampleTime および StorageClass は、継承された値のままにしても明示的に設定しても構いません。

この例には、ErrorCond という Simulink.Signal オブジェクトを含む sldemo_mdlref_dsm_data.mat という名前の MAT ファイルが含まれています。モデル sldemo_mdlref_dsm のプリロード関数によってこの MAT ファイルが読み込まれ、このオブジェクトがベース ワークスペースに読み込まれます。モデル エクスプローラーでベース ワークスペースを選択することにより、このオブジェクトを表示できます。MATLAB® コマンド プロンプトからこのオブジェクトを作成することもできます。以下のコマンドにより、この例で使用するオブジェクトが定義されます。

   ErrorCond = Simulink.Signal;
   ErrorCond.Description = 'Use to signal that subsystem output is invalid';
   ErrorCond.DataType = 'boolean';
   ErrorCond.Complexity = 'real';
   ErrorCond.Dimensions = 1;
   ErrorCond.SamplingMode='Sample based';
   ErrorCond.SampleTime = 0.1;
   ErrorCond.LoggingInfo.DataLogging = true;

グローバル データ ストアのログ

グローバル データ ストアに書き込まれた値のすべてのログを作成するには、Simulink.Signal オブジェクトの LoggingInfo プロパティの DataLogging プロパティを設定します。LoggingInfo プロパティを設定することにより、間引きや点の最大数といったその他のログ パラメーターも指定できます。

   Simulink.LoggingInfo (handle)
           DataLogging: 1
              NameMode: 0
           LoggingName: ''
          DecimateData: 0
            Decimation: 2
       LimitDataPoints: 0
             MaxPoints: 5000

モデルのシミュレーション

これで、sldemo_mdlref_dsm をシミュレートして出力を確認できます。参照モデル sldemo_mdlref_dsm_bot からデータ ストア ErrorCond への書き込みの間に、データ ストアから最上位モデル sldemo_mdlref_dsm への読み取りが行われます。青いラインは sldemo_mdlref_dsm_bot への入力を表し、緑のラインは Switch ブロックの出力を表します。入力信号の大きさが範囲外になると、出力は切り替わります。

ログを作成された結果を表示

グローバル データ ストア ErrorCond とローカル データ ストア RefSignalVal はいずれも、書き込まれたすべての値がシミュレーション後にログが作成されるように設定されています。ログが作成されたこれらの結果は、変数 dsmout のベース ワークスペースに保存されています。

dsmout = 

  Simulink.SimulationData.Dataset
  Package: Simulink.SimulationData

  Characteristics:
              Name: 'dsmout'
    Total Elements: 2

  Elements:
    1 : 'ErrorCond'
    2 : 'RefSignalVal'

  -Use 'get' or 'getElement' to access elements by index or name.
  -Use 'addElement' or 'setElement' to modify elements.

ローカル データ ストアの保存データにアクセスするには、関数 getElement を使用して、RefSignalVal という名前に基づき正しいデータ ストア要素を取得します。

   >> dsmout.getElement('RefSignalVal')
ans = 

  Simulink.SimulationData.DataStoreMemory
  Package: Simulink.SimulationData

  Properties:
                   Name: 'RefSignalVal'
              BlockPath: [1x1 Simulink.SimulationData.BlockPath]
                  Scope: 'local'
    DSMWriterBlockPaths: [1x2 Simulink.SimulationData.BlockPath]
             DSMWriters: [101x1 uint32]
                 Values: [1x1 timeseries]

データは Values フィールド内の timeseries に保存されています。

   >> plot(dsmout.getElement('RefSignalVal').Values);

ある時間にデータ ストアがどのブロックによって書き込まれたのかを知るには、DSMWriters プロパティを使用します。この配列には、DSMWriterBlockPaths 配列へのインデックスの一覧が含まれています。たとえば、データ ストアに 5 番目の値を書き込んだ Data Store Write ブロックのブロック パスは、以下のように取得できます。

   >> dsm = dsmout.getElement('RefSignalVal');
   >> dsm.DSMWriterBlockPaths(dsm.DSMWriters(5))
ans = 

  Simulink.SimulationData.BlockPath
  Package: Simulink.SimulationData

  Block Path:
    'sldemo_mdlref_dsm/A'
      'sldemo_mdlref_dsm_bot/PositiveSS/DSW'

  Use the getBlock method to access block path strings from this object.
この情報は役に立ちましたか?