Simulink データ ディクショナリを使用するモデルの移行
Simulink® データ ディクショナリは、MATLAB® 変数、データ オブジェクト、データ型などのモデル データを永続的に保存します。データ ディクショナリの基本的な情報は、データ ディクショナリとはを参照してください。
ディクショナリを使用する単一モデルの移行
単一のスタンドアロン モデルを単一のデータ ディクショナリにリンクするには、以下のようにします。
設計データをベース ワークスペースに読み込むモデルを開きます。
モデルのコピーを現在のフォルダーに保存します。コピーを開きます。
Simulink エディターの [モデル化] タブにある [設計] の下で、[データ ディクショナリへのリンク] をクリックします。
[モデル プロパティ] ダイアログ ボックスで、[新規] をクリックしてデータ ディクショナリを作成します。
データ ディクショナリに名前を付けて保存し、[適用] をクリックします。
[データの移行] をクリックします。
参照された変数のコピーについてのメッセージに対して、[移行] をクリックします。
(オプション) [モデルからベース ワークスペースへのアクセスを有効にする] をオフにします。
[OK] をクリックします。
ディクショナリを開くには、Simulink エディターで、左下隅にあるモデル データ バッジ をクリックしてから、[外部データ] リンクをクリックします。ディクショナリのコンテンツを検査するには、モデル エクスプローラーの [モデルの階層構造] ペインで、[外部データ] ノードの下にあるディクショナリ ノードを展開します。
メモ
Simulink は、Timeseries オブジェクトなどのシミュレーション データをデータ ディクショナリにインポートしません。
ディクショナリを使用するモデル参照階層の移行
この例では、親モデルとその参照モデルすべてを単一のデータ ディクショナリにリンクする方法を示します。
ex_SystemModel
モデルを開きます。openExample('ex_SystemModel')
ex_SystemModel
モデルはPlant
とController
を参照します。最上位モデル
ex_SystemModel
を開きます。Simulink エディターの [モデル化] タブにある [設計] の下で、[データ ディクショナリへのリンク] をクリックします。
[モデル プロパティ] ダイアログ ボックスで、[新規] をクリックしてデータ ディクショナリを作成します。
データ ディクショナリに名前を付けて保存し、[適用] をクリックします。
まだディクショナリを使用していない参照モデルのリンクについてのメッセージに対して、[すべてのモデルを変更] をクリックします。
[データの移行] をクリックします。
参照された変数のコピーについてのメッセージに対して、[移行] をクリックします。
(オプション) [モデルからベース ワークスペースへのアクセスを有効にする] をオフにします。
[OK] をクリックします。
データ ディクショナリに移行する前の考慮事項
モデルをデータ ディクショナリにリンクした後、ベース ワークスペースからディクショナリにデータを移行することができます。データの移行を選択する場合、以下を考慮します。
データ読み込みコールバックのチェック
PreLoadFcn
コールバックなどのモデル コールバックを使用して、モデルが読み込まれたときに設計データをファイルからベース ワークスペースに読み込むことができます。たとえば、次のコールバックは、MAT ファイル myData.mat
から設計データを読み込みます。
load myData
データ ディクショナリに移行した後、これらのコールバックは継続して設計データをベース ワークスペースに読み込みます。モデルはその後、設計データをディクショナリから導出するため、これらのデータ読み込みコールバックを手動で削除するか、コメントアウトします。
依存関係アナライザーを使用して、データ読み込みコールバックを見つけることができます。モデル依存関係の解析を参照してください。
スクリプトのチェック
新しいモデルは既定でベース ワークスペースへのアクセスがありますが、データ ディクショナリにリンクしてもアクセスは失われません。モデルがベース ワークスペース、データ ディクショナリ、またはその両方にアクセスできるという前提で、スクリプトを記述しなければなりません。
スクリプトでハンドル 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
オブジェクトに変換できます。
有効な設計データ クラス
boolean
と int32
や Simulink データ ディクショナリの [データの設計] セクション内の構造など Simulink がサポートするデータ型を使用する MATLAB 変数をインポート、格納、または作成できます。また、これらのクラスのオブジェクトやこれらのクラスをサブクラス化するほとんどのクラスのオブジェクトを使用することもできます。
Simulink.AliasType
Simulink.Bus
Simulink.NumericType
Simulink.Parameter
Simulink.LookupTable
Simulink.Breakpoint
Simulink.Signal
Simulink.ValueType
Simulink.VariantExpression
Simulink.data.dictionary.EnumTypeDefinition
embedded.fi
embedded.fimath
numlti
さらに、Simulink データ ディクショナリの [コンフィギュレーション] セクションで、以下のクラスの構成オブジェクトをインポート、格納、作成できます。
無効なその他のデータ クラス
以下を除いて、Simulink データ ディクショナリの [その他のデータ] セクションにある多くの組み込みクラスおよびカスタム クラスまたはデータ型のデータ オブジェクトのインポート、格納、または作成を行うことができます。
組み込みクラスまたはカスタム クラスから作成されたオブジェクトの配列
以下のいずれかの名前のプロパティをもつカスタム クラス:
LastModified
LastModifiedBy
DataSource
Status
Variant
From Workspace ブロックによる移行
ベース ワークスペース内の変数を参照する From Workspace ブロックがモデルに含まれている場合、そのモデルをデータ ディクショナリに移行できます。ただし、ブロックが参照する変数の性質に応じて、移行プロセスは異なるアクションを実行します。
変数の値が
timeseries
オブジェクトではない場合、移行プロセスは変数をデータ ディクショナリの [Design Data] セクションにインポートします。ブロックは引き続き変数を参照できます。変数の値が
timeseries
オブジェクト (データ ディクショナリでは格納できない)、または timeseries オブジェクトと同一のフィールドをもつ構造体の場合、移行プロセスは変数をインポートしません。その場合、ブロック線図を更新またはモデルをシミュレートしようとすると、From Workspace ブロックは変数を特定できず、エラーを発行します。このような場合は、関数evalin
を使用してベース ワークスペース変数を参照するようにブロックを構成できます。詳細については、From Workspace を参照してください。
データ ディクショナリの制限
Simulink は、非アクティブなバリアント モデルのみが使用する変数をデータ ディクショナリに自動的に移行できません。
matlab.metadata.Class
オブジェクトおよびtimeseries
オブジェクトなどの特定の種類の設計データをデータ ディクショナリの [Design Data] セクションにインポートできません。Simulink では、データ ディクショナリにリンクされたモデルで暗黙的な信号の関連付けは使用できません。データ ディクショナリを使用するには、モデル コンフィギュレーション パラメーターの [信号の関連付け] を
[明示的のみ]
または[なし]
に設定します。モデル参照階層がデータ ディクショナリに既にリンクされている場合、その階層の一部である参照モデルを保護できます。ただし、保護モデルが含まれるモデル参照階層を移行する場合は、シミュレーションが失敗します。
つまり、モデルを保護する前に、データ ディクショナリを使用するモデルを移行します。
データ ディクショナリに保存される Simulink 変数またはデータ型を含む式の評価はサポートされない可能性があります。
ベース ワークスペースでの共有データの継続使用
共有データを継続してベース ワークスペースに格納して、以下を行うことにより、モデル固有のデータをディクショナリに格納します。
モデルに対してベース ワークスペースへのアクセスを有効にする。
データ ディクショナリからベース ワークスペースへのアクセスを有効にする。
モデルに対してベース ワークスペースへのアクセスを有効にするには、[モデル プロパティ] ダイアログ ボックスの [外部データ] タブで [ベース ワークスペースへのアクセスを有効にする] をオンにします。新規のモデルでは、このチェック ボックスは既定でオンになっています。モデルがデータ ディクショナリにリンクされていない場合、このオプションをオンにしなければなりません。
データ ディクショナリからベース ワークスペースへのアクセスを許可することもできます。既存のディクショナリの場合は、モデル エクスプローラーで [ディクショナリからベース ワークスペースへのアクセスを有効にする] をオンにします。
データ ディクショナリからベース ワークスペースのアクセスを許可する場合、次の制限および影響が考えられます。
一般的に、ディクショナリを介してベース ワークスペース データを操作することはできません。
ディクショナリのコンテンツをモデル エクスプローラーで検査する場合、ベース ワークスペース データは表示できません。ベース ワークスペース データを操作するには、[モデルの階層構造] ペインで、[Base Workspace] ノードを選択します。
データ ディクショナリのプログラム インターフェイスを使用して (プログラムによるディクショナリへのデータの格納を参照) ベース ワークスペース データを操作するために、
Simulink.data.dictionary.Section
オブジェクトでは以下の関数のみ使用できます。assignin
exist
evalin
代わりに
Simulink.data.assigninGlobal
などの関数を使用することを検討してください。データ ディクショナリの使用への移行を参照してください。
ディクショナリ エントリへの変更を表示したり元に戻したりする機能といった変更追跡機能 (ディクショナリのエントリの変更表示と変更取り消しを参照) は、ベース ワークスペース データには適用されません。
ディクショナリからデータをエクスポートする場合 (ディクショナリ データのインポートとエクスポートを参照)、Simulink はベース ワークスペース データを無視します。
Simulink は、ベース ワークスペースおよびディクショナリを単一のワークスペースとして扱います。ただし、2 つの変数 (1 つはベース ワークスペース内でもう 1 つはディクショナリ内) に同じ名前を定義することはできます。この場合、変数は同一でなければならず、ディクショナリの変数が使用されます。
共有データをもつ複雑なモデルの階層構造の移行
例については、データ ディクショナリを使用したモデル参照階層用のデータ分割を参照してください。