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

モデル参照によるデータ管理の紹介

この例では、モデル参照によるデータ管理に関する基本概念を示します。

このトピックの詳細については、モデル参照によるデータ管理の詳細ワークフローを参照してください。

メモ:この例では、より詳細な例と同じモデルを使用します。そのため、このモデルには、この紹介例では説明されていない機能が使用されています。

例の要件

この例の実行中、Simulink® は、現在の作業ディレクトリに作成されるコード生成フォルダーにコードを生成します。このディレクトリにファイルを生成したくない場合 (あるいは生成できない場合) は、作業ディレクトリを変更してください。

モデル例を変更する予定がある場合は、以下の手順に従います。

1. 以下のファイルを、名前を変更せずに MATLAB® インストール ディレクトリから他のディレクトリにコピーすることで、この例を元の状態で保存しておきます。

toolbox/simulink/simdemos/simfeatures/modelreference/sldemo_mdlref_datamngt.slx
toolbox/simulink/simdemos/simfeatures/modelreference/sldemo_mdlref_datamngt_wsdata.m
toolbox/simulink/simdemos/simfeatures/modelreference/sldemo_mdlref_counter_datamngt.slx
toolbox/simulink/simdemos/simfeatures/modelreference/sldemo_mdlref_counter_datamngt_types.m
toolbox/simulink/simdemos/simfeatures/modelreference/sldemo_mdlref_counter_datamngt_wsdata.m

2. 現在の作業ディレクトリを、ファイルをコピーしたディレクトリに変更します。

3. 例を続けます。

モデル例を開く

open_system('sldemo_mdlref_datamngt')

例の内容

この例では、次の 3 つの Model ブロックを含んだ最上位モデル (sldemo_mdlref_datamngt) を使用します。これらは、Counter1、Counter2、Counter3 ブロックです。これらのブロックは、同じモデル (sldemo_mdlref_counter_datamngt) を参照します。

参照モデルは、次のような制限カウンター アルゴリズムを実装します。

  • 最初のトリガー入力が変化したら、カウンターをリセットする

  • 2 番目の入力が変化したら、指定した量だけカウンターをインクリメントする

  • 指定した上限および下限の間でカウンターを飽和する

参照モデルは、次の値を含むバス信号を出力します。

  • Count: カウンターの値 (8 ビット整数)

  • OverflowState: カウンターが上限、下限、または範囲内かを示す列挙値

例の概要

例の手順は、次のとおりです。

1. 外部インターフェイスで信号とパラメーターの構造体を使用する参照モデル (sldemo_mdlref_counter_datamngt) を準備します。

2.参照モデルを呼び出す最上位モデル (sldemo_mdlref_datamngt) を準備します。

3.最上位モデルをシミュレートし、結果を調べます。

参照モデル: パラメーターの設定

参照モデルには、モデルのブロックをパラメーター化する 2 つのモデル引数 (CounterParams、CounterICs) があります。モデル引数は、参照モデルの各インスタンスに異なるパラメーター値を指定します。このモデルでは、参照モデルに渡される引数の数を低減するために、引数がパラメーター構造体として定義されています。

モデル引数を定義するプロセスは、次のとおりです。

1. 参照モデル (sldemo_mdlref_counter_datamngt) を開きます。

2.MATLAB 構造体を定義して参照モデルをパラメーター化します。

CounterParams.Increment  = int8(1);
CounterParams.LowerLimit = int8(-10);
CounterParams.UpperLimit = int8(10);
CounterICs.Count         = int8(0);
CounterICs.OverflowState = SlDemoRangeCheck.InRange;

メモ: この例では、カウンターに 8 ビット整数を使用するため、数値フィールドにも 8 ビット整数を使用します。

3. MATLAB 構造体をモデル引数として使用します。

モデル引数は、参照モデルのモデル ワークスペースに変数として定義されています。モデル ワークスペースは、いくつかの異なるデータ ソースから初期化できます。この例では、MATLAB スクリプト (sldemo_mdlref_counter_datamngt_wsdata) を使用して、モデル引数のパラメーター構造体を作成します。MATLAB スクリプトを使用すると、モデルの外部で簡単にパラメーター構造体を作成、および変更することができます。さらに、インクリメント変更、バージョン管理、およびデータの差分操作も容易になります。

モデル ワークスペースのダイアログでデータ ソースを設定します。

モデル エクスプローラーを使用して、モデル ワークスペースの内容を表示して編集できます。

[引数] チェック ボックスをオンにして、変数をモデル引数として設定します。

参照モデル: 出力バス信号の形状の定義

参照モデルは、2 つの結果を生成し、バス信号にパッケージ化します。

  • Count: カウンターの値 (8 ビット整数)

  • OverflowState: カウンターが上限、下限、または範囲内かを示す列挙値

参照モデルのルート出力のバス型を定義するには

1. バス エディターを使用してバス オブジェクト (OutputType) を定義します。

または、MATLAB コマンド ラインでバス オブジェクトを作成することもできます。

OutputType = Simulink.Bus;
OutputType.Elements = Simulink.BusElement;
OutputType.Elements(1).Name = 'Count';
OutputType.Elements(1).DataType = 'int8';
OutputType.Elements(2) = Simulink.BusElement;
OutputType.Elements(2).Name = 'OverflowState';
OutputType.Elements(2).DataType = 'Enum: SlDemoRangeCheck';

2. 参照モデルのルートの出力端子を設定して、このバス オブジェクト (OutputType) に基づいて非バーチャルのバス信号を出力します。

参照モデル: バス出力の初期値の設定

一般的に、バス信号と状態の開始値は、'0' と指定することができます。この場合、バスのすべての要素がゼロ (またはそれぞれのグラウンド値) に初期化されます。ただし、バス信号および状態にゼロ以外の開始値を指定することが望ましい場合があります。この例では、カウンターの初期状態を調整できるため、出力信号の開始値を常に設定しなければなりません。

参照モデルの出力の開始値を指定するには

1. 初期化するバス信号と互換性があるパラメーター構造体を作成します。モデル引数の 1 つ (CounterICs) は、出力信号の形状と一致するパラメーター構造体です。この構造体は、次のように定義されています。

CounterICs.Count         = int8(0);
CounterICs.OverflowState = SlDemoRangeCheck.InRange;

2. ルートの Outport のダイアログ ボックスを開き、[初期出力] フィールドに構造体の名前 (CounterICs) を入力します。

メモ: 一般的に、バス信号または状態を初期化する場合、パラメーター構造体がバス型と正確に一致する必要はありませんが、そのフィールドがバス オブジェクトの要素のサブセットでなければならず、これらのフィールドの属性がバス オブジェクトの要素と一致しなければなりません。

参照モデル: 参照モデルのマスク

通常、参照モデルをマスクしてユーザー インターフェイスをカスタマイズすると便利です。モデルにマスクを作成し、それを Model ブロックから参照できます。モデルをマスクするには、モデルのモデル エクスプローラーの [モデル ワークスペース] セクションで [モデル マスクの作成] をクリックします。

マスクしたモデルを Model ブロックから参照すると、Model ブロックにマスクが自動的に生成されます。詳細については、「マスクしたモデルの作成と参照」のトピックを参照してください。

最上位モデル: Model ブロックのパラメーター化

参照モデルは、そのモデル引数の構造体を受け入れるように設定されています。この例では、パラメーター値の異なる参照モデルの各インスタンスを呼び出します。

1. 最上位モデル (sldemo_mdlref_datamngt) を開きます。

2.参照モデルで定義されたモデル引数と同じ "形状" のパラメーター構造体を作成します。

Param1.Increment  = int8(1);
Param1.LowerLimit = int8(-20);
Param1.UpperLimit = int8(20);
Param2 = Param1;
Param2.Increment  = int8(2);
IC1.Count         = int8(0);
IC1.OverflowState = SlDemoRangeCheck.InRange;
IC2 = IC1;
IC2.Count = int8(-10);

3. これらのパラメーターを使用するように、マスクした Model ブロックのマスク パラメーターを設定します。

たとえば、最初の Model ブロック ('sldemo_mdlref_datamngt/Counter1') のパラメーターは次のように設定されています。

  • カウンター パラメーターParam1

  • 初期条件IC1

最上位モデル: 参照モデルの呼び出しのスケジューリング

前述のように、参照モデルは、2 つのトリガー入力の制限カウンター アルゴリズムを実装します。このアルゴリズムは、トリガー入力の "立ち上がりエッジ" を検出して、次のように動作します。

  • 最初のトリガー入力が変化したら、カウンターをリセットする。

  • 2 番目の入力が変化したら、指定した量だけカウンターをインクリメントする。

この例では、Stimulus サブシステムにより生成される同じトリガー入力で、カウンター アルゴリズムの 3 つのインスタンスのすべてを駆動します。トリガー入力の周期とサンプル時間は、Stimulus サブシステムのマスク パラメーターに入力された値によって定義されます。

  • カウンターを 4 秒ごとにリセットする。

  • カウンターを毎秒 5 回インクリメントする (周期 = 0.2 秒)。

  • サンプル時間は 0.1 秒である。

メモ: リセット周期とインクリメント周期は、サンプル時間の 2 倍以上でなければなりません。

最上位モデルのシミュレーション

1. 参照モデルを保存するか、閉じます。

最上位モデルで参照モデルを使用するには、参照モデルを保存する必要があります。または、参照モデルを閉じ、この例に提供されている元のバージョンのモデルを使用できます。

2. [シミュレーション][実行] を選択して、最上位モデルのシミュレーションを実行します。

sim('sldemo_mdlref_datamngt')

メモ:最上位モデルをシミュレートすると、参照モデルのシミュレーション ターゲットが自動的に生成されます。

3. Scope ブロックに表示されたシミュレーション結果を確認します。