複数のモデルに対するデータ ストアの使用
この例では、ローカル データ ストアの使用とログの作成について示します。また、グローバル データ ストアを定義、使用、ログを作成することにより、参照モデル間でグローバル データを共有する方法も示します。
モデル例の検査
モデル例を開きます。最上位モデル sldemo_mdlref_dsm からモデル sldemo_mdlref_dsm_bot および sldemo_mdlref_dsm_bot2 が参照されます。[コンフィギュレーション パラメーター] ダイアログ ボックスの [データのインポート/エクスポート] ペインで、sldemo_mdlref_dsm のデータ ストアのログはオンになっています。

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

PositiveSS サブシステムには、入力信号が正の場合に信号を 5 増幅し、この信号の値をローカル データ ストア RefSignalVal に書き込むブロックが含まれています。

NegativeSS サブシステムには、入力信号が負の場合に信号を 2 増幅し、この信号の値をローカル データ ストア RefSignalVal に書き込むブロックが含まれています。

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

Simulink 信号オブジェクトを使用したグローバル データ ストアの定義
最上位モデルと両方の参照モデルが各モデルで ErrorCond という名前のデータ ストアに対して同じメモリを使用するということを Simulink® に対して指定するには、ErrorCond という名前の Simulink.Signal オブジェクトのインスタンスを各モデルで表示されるワークスペースまたはデータ ディクショナリに作成します。このオブジェクトは各モデルに可視であるため、そのスコープは個々のモデルを網羅し、モデル間で共有されるその名前のグローバル データ ストアが 1 つ存在することを意味します。3 つのモデルはどれも、ErrorCond のデータ ストア名をもつ Data Store Memory ブロックを含んでいません。いずれかのモデルがこのようなブロックを含んでいれば、そのブロックではそのモデルにローカルなデータ ストアが定義されることになり、グローバル データ ストアは隠されます。
ErrorCond オブジェクトではグローバル データ ストアが定義されるため、DataType、Complexity、Dimensions の各プロパティが、継承されない設定に明示的に定義されなければなりません。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.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 を参照する Model ブロック A への入力を表します。オレンジのラインは Switch ブロックの出力を表します。入力信号の大きさが範囲外になると、出力は切り替わります。

ログを作成された結果を表示
グローバル データ ストア ErrorCond とローカル データ ストア RefSignalVal はいずれも、書き込まれたすべての値がシミュレーション後にログが作成されるように設定されています。ログが作成されたこれらの結果は、変数 dsmout のベース ワークスペースに保存されています。
dsmout =
Simulink.SimulationData.Dataset 'dsmout' with 2 elements
Name BlockPath
____________ ________________________________________
1 [1x1 DataStoreMemory] ErrorCond ''
2 [1x1 DataStoreMemory] RefSignalVal ...dlref_dsm/A|sldemo_mdlref_dsm_bot/DSM
- Use braces { } to access, modify, or add elements using index.
ローカル データ ストアの保存データにアクセスするには、関数 getElement を使用して、RefSignalVal という名前に基づき正しいデータ ストア要素を取得します。
>> dsmout.getElement('RefSignalVal') Simulink.SimulationData.DataStoreMemory
Package: Simulink.SimulationData
Properties:
Name: 'RefSignalVal'
BlockPath: [1×1 Simulink.SimulationData.BlockPath]
Scope: 'local'
DSMWriterBlockPaths: [1×2 Simulink.SimulationData.BlockPath]
DSMWriters: [101×1 uint32]
Values: [1×1 timeseries]
データは Values フィールド内の timeseries に保存されています。
>> plot(dsmout.getElement('RefSignalVal').Values);
ある時間にデータ ストアがどのブロックによって書き込まれたのかを知るには、DSMWriters プロパティを使用します。この配列には、DSMWriterBlockPaths 配列へのインデックスの一覧が含まれています。たとえば、データ ストアに 5 番目の値を書き込んだ Data Store Write ブロックのブロック パスは、以下のように取得できます。
>> dsm = dsmout.getElement('RefSignalVal');
>> dsm.DSMWriterBlockPaths(dsm.DSMWriters(5)) 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 character vectors from this object.
参考
Data Store Memory | Data Store Read | Data Store Write