ドキュメンテーション

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

Simulink データ ディクショナリを使用するモデルの移行

Simulink® データ ディクショナリは、MATLAB® 変数、データ オブジェクト、データ型などのモデル データを永続的に保存します。データ ディクショナリの基本的な情報は、データ ディクショナリとはを参照してください。

ディクショナリを使用する単一モデルの移行

以下の例では、単一のスタンドアロン モデルを単一のデータ ディクショナリにリンクする方法を説明します。

メモ

Simulink は、Timeseries オブジェクトなどのシミュレーション データをデータ ディクショナリにインポートしません。

  1. 設計データをベース ワークスペースに読み込む f14 モデルを開きます。

  2. モデルのコピーを現在のフォルダーに保存します。コピーを開きます。

  3. Simulink エディターで、[ファイル][モデル プロパティ][データ ディクショナリへのリンク] をクリックします。

  4. [モデル プロパティ] ダイアログ ボックスで、[新規作成] をクリックしてデータ ディクショナリを作成します。

  5. データ ディクショナリに名前を付けて保存し、[適用] をクリックします。

  6. [データの移行] をクリックします。

  7. 参照された変数のコピーについてのメッセージに対して、[移行] をクリックします。

  8. (オプション) [ベース ワークスペースへのアクセスを有効にする] をオフにします。

  9. [OK] をクリックします。

  10. Simulink エディターで、左下隅にあるデータ ディクショナリ バッジ をクリックしてディクショナリを開きます。ディクショナリのコンテンツを検査するには、モデル エクスプローラーの [モデルの階層構造] ペインで、ディクショナリ ノードの下のノードを選択します。

ディクショナリを使用するモデル参照階層の移行

この例では、親モデルとその参照モデルすべてを単一のデータ ディクショナリにリンクする方法を示します。

  1. モデル例 sldemo_mdlref_datamngt を開きます。このモデルはモデル sldemo_mdlref_counter_datamngt を参照しています。

  2. モデルのコピーを現在のフォルダーに保存します。

  3. 最上位モデル sldemo_mdlref_datamngt を開きます。

  4. Simulink エディターで、[ファイル][モデル プロパティ][データ ディクショナリへのリンク] をクリックします。

  5. [モデル プロパティ] ダイアログ ボックスで、[新規作成] をクリックしてデータ ディクショナリを作成します。

  6. データ ディクショナリに名前を付けて保存し、[適用] をクリックします。

  7. まだディクショナリを使用していない参照モデルのリンクについてのメッセージに対して、[すべてのモデルを変更] をクリックします。

  8. [データの移行] をクリックします。

  9. 参照された変数のコピーについてのメッセージに対して、[移行] をクリックします。

  10. (オプション) [ベース ワークスペースへのアクセスを有効にする] をオフにします。

  11. [OK] をクリックします。

データ ディクショナリに移行する前の考慮事項

モデルをデータ ディクショナリにリンクした後、ベース ワークスペースからディクショナリにデータを移行することができます。データの移行を選択する場合、以下を考慮します。

データ読み込みコールバックのチェック

PreLoadFcn コールバックなどのモデル コールバックを使用して、モデルが読み込まれたときに設計データをファイルからベース ワークスペースに読み込むことができます。たとえば、次のコールバックは、MAT ファイル myData.mat から設計データを読み込みます。

load myData

データ ディクショナリに移行した後、これらのコールバックは継続して設計データをベース ワークスペースに読み込みます。モデルはその後、設計データをディクショナリから導出するため、これらのデータ読み込みコールバックを手動で削除するか、コメント アウトします。

Simulink マニフェスト ツールを使用して、データ読み込みコールバックを見つけることができます。モデル依存関係の解析を参照してください。

スクリプトのチェック

新しいモデルは既定でベース ワークスペースへのアクセスがありますが、データ ディクショナリにリンクしてもアクセスは失われません。モデルがベース ワークスペース、データ ディクショナリ、またはその両方にアクセスできるという前提で、スクリプトを記述しなければなりません。

スクリプトでハンドル base を使用して、ベース ワークスペースへの明示的な参照を作成する場合は、これらの参照の変更を検討してください。

次の例を考えてみます。ここで、スクリプトはベース ワークスペースで変数 sensor を検索し、sensor.noiseEnable の値に応じてパラメーター enable を設定します。

if evalin('base','sensor.noiseEnable')
	enable = 'Enabled';
else
	enable = 'Disabled';
end 

データ ディクショナリに移行するときは、次のように、base への明示的な参照を置き換えます。

if Simulink.data.evalinGlobal(myExampleModel,...
'sensor.noiseEnable')
	enable = 'Enabled';
else
	enable = 'Disabled';
end 
関数 Simulink.data.evalinGlobal は指定したモデルのグローバル スコープ内の式を評価します。ここで、モデルがディクショナリにリンクされていない場合、グローバル スコープはデータ ディクショナリまたはベース ワークスペース内の範囲であると考えられます。

コード生成の調整可能なパラメーターのチェック

  • モデルがデータ ディクショナリにリンクされていて、モデルがベース ワークスペースにアクセスできない場合 (ベース ワークスペースでの共有データの継続使用を参照)、Simulink は、[モデル パラメーター設定] ダイアログ ボックスで指定されているストレージ クラス情報を無視します。

  • Simulink インターフェイスを使用してデータ ディクショナリを使用するモデルを移行して、ベース ワークスペース データの移行を選択する場合、Simulink はモデルのストレージ クラス情報も移行します。モデルにベース ワークスペース内の変数のストレージ クラス情報が含まれる場合、Simulink は移行時にこれらの変数を Simulink.Parameter オブジェクトに変換します。次に、Simulink はモデルのストレージ クラス情報を使用して、これらの Simulink.Parameter オブジェクトのストレージ クラスを設定します。

  • このモデルをベース ワークスペースに再度移行する場合、Simulink はモデルのストレージ クラス情報を復元しません。これらの変数のストレージ クラスを保持するには、データ ディクショナリのパラメーター オブジェクトを使用します。モデルのストレージ クラス情報を手動でリセットすることもできます。

  • コマンド ラインからモデルの DataDictionary プロパティを設定する場合、関数 tunablevars2parameterobjects を使用して、調整可能な変数を Simulink.Parameter オブジェクトに変換できます。

モデル参照で使用されるデータ

モデル参照を使用して、大規模なシステムから小規模なコンポーネントとサブコンポーネントにモデルを分割する場合、データ ディクショナリを作成して "設計データ" を分離できます。設計データは、ブロック パラメーターと信号の特性を指定するためにモデルが使用するワークスペース変数のセットです。

モデル参照階層内のモデルは通常、データを共有します。データの所有者、共有される変数の数、共有方法の複雑度は、ディクショナリの使用方法に影響する場合があります。

データ定義の重複は、以下の条件において、モデル参照階層内で存在することができます。

  • 階層内の各モデルが 1 つの定義のみ参照できる。

  • 階層内ではモデル間で定義は同じでなければならない。

詳細については、Simulink モデルの変数とオブジェクトの保存場所の決定を参照してください。

有効な設計データ クラス

booleanint32 や Simulink データ ディクショナリの [Design Data] セクション内の構造など Simulink がサポートするデータ型を使用する MATLAB 変数をインポート、格納、または作成できます。また、これらのクラスのオブジェクトやこれらのクラスをサブクラス化するほとんどのクラスのオブジェクトを使用することもできます。

  • Simulink.AliasType

  • Simulink.Bus

  • Simulink.NumericType

  • Simulink.Parameter

  • Simulink.LookupTable

  • Simulink.Breakpoint

  • Simulink.Signal

  • Simulink.Variant

  • Simulink.data.dictionary.EnumTypeDefinition

  • embedded.fi

  • embedded.fimath

  • numlti

さらに、Simulink データ ディクショナリの [コンフィギュレーション] セクションで、次のクラスの構成オブジェクトをインポート、格納、作成できます。

無効なその他のデータ クラス

以下を除いて、Simulink データ ディクショナリの [その他のデータ] セクションにある多くの組み込みクラスおよびカスタム クラスまたはデータ型のデータ オブジェクトのインポート、格納、または作成を行うことができます。

  • 組み込みクラスまたはカスタム クラスから作成されたオブジェクトの配列

  • 以下のいずれかの名前のプロパティをもつカスタム クラス:

    • LastModified

    • LastModifiedBy

    • DataSource

    • Status

    • Variant

From Workspace ブロックによる移行

ベース ワークスペース内の変数を参照する From Workspace ブロックがモデルに含まれている場合、そのモデルをデータ ディクショナリに移行できます。ただし、ブロックが参照する変数の性質に応じて、移行プロセスは異なるアクションを実行します。

  • 変数の値が timeseries オブジェクトではない場合、移行プロセスは変数をデータ ディクショナリの [Design Data] セクションにインポートします。ブロックは引き続き変数を参照できます。

  • 変数の値が timeseries オブジェクトの場合 (データ ディクショナリでは格納できない)、移行プロセスは変数をインポートしません。その場合、ブロック線図を更新またはモデルをシミュレートしようとすると、From Workspace ブロックは変数を特定できず、エラーを発行します。このような場合は、関数 evalin を使用してベース ワークスペース変数を参照するようにブロックを構成できます。データ ディクショナリでの使用を参照してください。

データ ディクショナリの制限

  • Simulink は、非アクティブなバリアント モデルのみが使用する変数をデータ ディクショナリに自動的に移行できません。

  • meta クラス オブジェクトおよび timeseries オブジェクトなどの特定の種類の設計データをデータ ディクショナリの [Design Data] セクションにインポートできません。

  • Simulink では、データ ディクショナリにリンクされたモデルで暗黙的な信号の関連付けは使用できません。データ ディクショナリを使用するには、モデル コンフィギュレーション パラメーターの [信号の関連付け][明示的のみ] または [なし] に設定します。

  • モデル参照階層がデータ ディクショナリに既にリンクされている場合、その階層の一部である参照モデルを保護できます。ただし、保護されたモデルが含まれるモデル参照階層を移行する場合は、シミュレーションが失敗します。

    つまり、モデルを保護する前に、データ ディクショナリを使用するモデルを移行します。

ベース ワークスペースでの共有データの継続使用

共有データを継続してベース ワークスペースに格納して、以下を行うことにより、モデル固有のデータをディクショナリに格納します。

  • モデルに対してベース ワークスペースへのアクセスを有効にする。

  • データ ディクショナリからベース ワークスペースへのアクセスを有効にする。

モデルに対してベース ワークスペースへのアクセスを有効にするには、[モデル プロパティ] ダイアログ ボックスの [データ] タブで [ベース ワークスペースへのアクセスを有効にする] をオンにします。新規のモデルでは、このチェック ボックスは既定でオンになっています。モデルがデータ ディクショナリにリンクされていない場合、このオプションをオンにしなければなりません。

データ ディクショナリからベース ワークスペースへのアクセスを許可することもできます。既存のディクショナリの場合は、モデル エクスプローラーで [ベース ワークスペースへのアクセスを有効にする] をオンにします。

データ ディクショナリからベース ワークスペースのアクセスを許可する場合、次の制限および影響が考えられます。

  • 一般的に、ディクショナリを介してベース ワークスペース データを操作することはできません。

    • ディクショナリのコンテンツをモデル エクスプローラーで検査する場合、ベース ワークスペース データは表示できません。ベース ワークスペース データを操作するには、[モデルの階層構造] ペインで、[Base Workspace] ノードを選択します。

    • データ ディクショナリのプログラム インターフェイスを使用して (プログラムによるディクショナリへのデータの格納を参照) ベース ワークスペース データを操作するために、Simulink.data.dictionary.Section オブジェクトでは以下の関数のみ使用できます。

      • assignin

      • exist

      • evalin

      代わりに Simulink.data.assigninGlobal などの関数を使用することを検討してください。データ ディクショナリの使用への移行を参照してください。

  • ディクショナリ エントリへの変更を表示したり元に戻したりする機能といった変更追跡機能 (ディクショナリのエントリの変更表示と変更取り消しを参照) は、ベース ワークスペース データには適用されません。

  • ディクショナリからデータをエクスポートする場合 (ディクショナリ データのインポートとエクスポートを参照)、Simulink はベース ワークスペース データを無視します。

  • Simulink は、ベース ワークスペースおよびディクショナリを単一のワークスペースとして扱います。ただし、2 つの変数 (1 つはベース ワークスペース内でもう 1 つはディクショナリ内) に同じ名前を定義することはできます。この場合、変数は同一でなければならず、ディクショナリの変数が使用されます。

共有データをもつ複雑なモデルの階層構造の移行

例については、データ ディクショナリを使用したモデル参照階層用のデータ分割を参照してください。

参考

|

関連するトピック