メインコンテンツ

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

Simulink モデルの変数とオブジェクトの保存場所の決定

Simulink® データはベース ワークスペースやデータ ディクショナリなどのワークスペースで作成するオブジェクトと変数です。Simulink データには以下のものがあります。

  • ブロック パラメーターの数値 (Simulink.Parameter オブジェクトや MATLAB® 変数など)

  • 信号 (Simulink.Signal オブジェクトなど)

  • Simulink.ValueType オブジェクトで定義される値のタイプ

  • データ型

  • モデル コンフィギュレーション セット

  • シミュレーションの入力と出力のデータ

モデルのデータは設計に適した場所で保存、分割および共有できます。選択するストレージの場所は以下によって異なる場合があります。

  • モデル化の目的

  • モデル アーキテクチャ (参照モデル、サブシステムやその他の分割方法) およびコンポーネントの構造体

  • 使用するデータの種類

データの種類

  • "シミュレーション データ" は、シミュレーション用の一連の入力データとシミュレーションによって生成される一連の出力データです。たとえば、シミュレーションで Inport ブロックによって取得される入力データを保存するために、変数を使用できます。また、Outport ブロック、To Workspace ブロック、およびログ記録された信号を使用して、出力データをエクスポートできます。シミュレーション データの読み込み、生成、保存についての詳細は、信号読み込みの手法の比較およびシミュレーション データの保存を参照してください。

  • "設計データ" は、モデルおよびその生成コードでブロック パラメーターおよび信号特性を指定するために使用する一連の変数およびデータ オブジェクトです。たとえば、設計データには、MATLAB の数値変数、値のタイプ オブジェクト、およびパラメーターと信号のデータ オブジェクトがあります。

    設計データは、ベース ワークスペース、モデル ワークスペース、MAT ファイル、またはデータ ディクショナリの [Design Data] セクションに保存できます。ローカルな設計データをモデルと共に永続的に保存するには、モデル ワークスペースを使用します。モデル間で設計データを共有する場合は、MAT ファイル、データ ディクショナリ、またはベース ワークスペースを使用します。MAT ファイルとデータ ディクショナリはデータを永続的に保存します。MAT ファイルにデータを保存して、そのファイルをモデルにリンクできます。データ ディクショナリを使用して、データを分割して可読性とメンテナンス性を向上させたり、変更を追跡したりすることができます。ベース ワークスペースを使用する場合、データを永続的に保存するためには、MAT ファイルにデータを保存するか、データを再生成できる MATLAB スクリプトを作成しなければなりません。

  • "アーキテクチャ データ" は、Simulink およびアーキテクチャ モデルで共有される端子インターフェイス、データ型、システム全体の定数とそのプラットフォーム プロパティなどのモデル インターフェイスで構成されます。

    Simulink データ ディクショナリの [Architectural Data] セクションでモデルのアーキテクチャ データを保存できます。このデータを追加、編集、または削除するには、Architectural Data Editorを使用できます。詳細については、Store Shared Data in Architectural Data Sectionを参照してください。オブジェクト API Simulink.dictionary.ArchitecturalData も使用できます。詳細については、Store Data in Architectural Data Section Programmaticallyを参照してください。設計データを [Architectural Data] セクションに移動するには、モデル エクスプローラーで設計データ オブジェクトを右クリックし、コンテキスト メニューから [アーキテクチャ データとして扱う] を選択します。

  • コンフィギュレーション

    • "コンフィギュレーション セット" はモデル コンフィギュレーション パラメーターのセットです。既定では、コンフィギュレーション セットはモデル ファイル内にあるため、モデルとは別に保存する必要はありません。ただし、これらのコンフィギュレーション セットを他のモデルと共有することはできません。

      モデル間でコンフィギュレーション セットを共有するためには、Simulink.ConfigSet オブジェクトを作成しなければなりません。それぞれのオブジェクトがスタンドアロンのコンフィギュレーション セットを表します。これらのオブジェクトはベース ワークスペースまたはデータ ディクショナリの [Configurations] セクションに保存できます。データ ディクショナリを使用する場合、各コンフィギュレーション セットのスコープの定義、異なるコンフィギュレーション セットの比較および変更の追跡を行うことができます。データ ディクショナリでは、コンフィギュレーション セットは他の種類のデータから分割されます。

    • "バリアント構成オブジェクト" には、バリアント コンフィギュレーション、バリアントのアクティブな設定と既定の設定、各コンフィギュレーションに関連付けられている制御変数の定義に関する情報が格納されます。バリアント マネージャーを使用して、データ ディクショナリまたはベース ワークスペース内のバリアント構成オブジェクトを作成および編集できます。詳細については、Variant Manager for Simulinkを参照してください。

データ ストレージのタイプ

データ ストレージのタイプには以下のものがあります。

  • MATLAB ベース ワークスペース — 一時的なモデルで実験する間、変数を保存するためにベース ワークスペースを使用します。

  • モデル ワークスペース — モデルのローカルなデータを永続的に保存するためにモデル ワークスペースを使用します。

  • MATLAB ファイル — MAT ファイルは、グローバル データを永続的に保存してモデル間でデータを共有するために使用します。 (R2024b 以降)

  • データ ディクショナリ — グローバル データの永続的な保存、モデル間のデータ共有、データに対して行われた変更の追跡を行うためにデータ ディクショナリを使用します。

次の表では、それぞれのストレージの場所の特性を比較します。

データ ストレージのタイプファイル ストレージモデルとデータの分離ディスク上のソース ファイルとの同期モデルごとに異なるデータ可視性
ベース ワークスペース
  • MATLAB コード (.m)

  • MATLAB ファイル (.mat)

ありなしなしグローバル
モデル ワークスペースモデル ファイル (.slx)、.m、または .matオプションあり (モデルの初期化時に同期)ありローカル

MATLAB ファイル (R2024b 以降)

MAT ファイル (.mat)ありありあり共有
データ ディクショナリSimulink データ ディクショナリ ファイル (.sldd)ありありあり共有

MAT ファイルまたはデータ ディクショナリをモデルに関連付けることで、それらのモデル間でデータを共有できます。どちらを使用するかは、ニーズや基本設定に応じて選択できます。使いやすいのは MAT ファイルですが、データ ディクショナリでは以下が提供されます。

  • 変更の追跡

  • 要件のリンク

モデルによるワークスペースおよびワークスペース変数の操作方法の詳細については、記号の解釈を参照してください。

一時データ: ベース ワークスペース

一時的にデータを保存するためにはベース ワークスペースを使用します。

  • Simulink の使用方法を学習するとき

  • モデル化の手法を試す際にすばやく変数を作成する必要がある場合

  • データを永続的に保存する必要がない場合

ベース ワークスペース内に変数を作成するために、MATLAB コマンド プロンプトまたはモデル エクスプローラーを使用できます。既定では、ベース ワークスペース内に作成したデータは、開いているすべてのモデルで使用できます。モデルをカプセル化するために、ベース ワークスペースへのアクセスを無効にすることを選択できます (ベース ワークスペースでの共有データの継続使用を参照)。

モデル内のブロックの数値パラメーターを変数を使用して指定した場合、コマンド プロンプトでコマンドを使用することでシミュレーションの最中にパラメーター値をプログラムによって変更できます。

MATLAB セッションを終了する前にベース ワークスペースのデータを永続的に保存するには、データを MAT ファイルまたはスクリプト ファイルに保存します。後のセッションでファイルからデータを読み込むことができます。ただし、ベース ワークスペース内のデータに変更を行った場合は、再びデータをファイルに保存しなければなりません。MAT ファイルをモデルに外部データ ソースとしてリンクしてデータを永続的に保存することを検討してください。プロジェクトが大きくなったときは、代わりにモデル ワークスペースまたはデータ ディクショナリを使用することもできます。

ローカル データ: モデル ワークスペース

各モデルには、変数値を保存するための独自のワークスペースが用意されています。モデル ワークスペースの変数は、モデルの範囲内でしか可視になりません。モデル ワークスペースは、モデル ファイル、MATLAB ファイル、またはモデル ファイルに保存されている MATLAB コードにすることができるデータ ソースから初期化されます。

関連付けられたモデル内でのみ使用するデータを保存するためにはモデル ワークスペースを使用します。このデータには次のものが含まれます。

  • ブロック パラメーターの値を指定するために使用する数値変数などのモデル パラメーター

  • パラメーターの特性を制御するために使用する Simulink.Parameter オブジェクトなどのデータ オブジェクト

  • モデルの引数

データをモデル ワークスペースに保存することにより、モデルの移植性を高めたり、データの所有権を確立したりできます。この場合、データはモデルのファイルに永続的に保存されます。

モデル参照階層内で、各モデル ワークスペースは一意の名前空間として機能します。このため、同じ変数名を複数のモデル ワークスペース内で使用できます。その後、モデルごとに異なる値を代入できます。

モデル エクスプローラーを使用してモデル ワークスペースのデータを操作できます。また、コマンド プロンプトやスクリプトをモデル ワークスペースのプログラム インターフェイスと共に使用することもできます。

モデル ワークスペースを使用してローカル データを保存する方法についての詳細は、モデル ワークスペースを参照してください。

グローバル データおよび共有データ: MATLAB ファイル

R2024b 以降

MAT ファイルにデータを保存して、そのファイルをモデルにリンクできます。MAT ファイルをモデルに直接リンクすると、データがモデルと共に永続的に保存されます。MAT ファイルを複数のモデルに関連付けることで、それらのモデル間でデータを共有できます。単一のモデルに複数の MAT ファイルをリンクすることもできます。

MAT ファイルは、一連の特定のモデル間で共有するデータを保存するために使用します。このデータには次のものが含まれます。

  • ブロック パラメーターの値を指定するために複数のモデルで使用される数値変数。

  • 複数のモデルのデータ型を同時に指定するために使用する Simulink.AliasType オブジェクトおよび Simulink.NumericType オブジェクト。

  • Auto 以外のストレージ クラスを使用する信号オブジェクト (Simulink.Signal など) を含むデータ オブジェクト。Simulink Coder™ のライセンスをお持ちの場合、これらのオブジェクトは生成コード内でグローバル変数として表現される信号および調整可能なパラメーターを表現できます。

  • 参照モデルなどのモデル オブジェクトのインターフェイスを定義するために使用する Simulink.ValueType オブジェクトおよび Simulink.Bus オブジェクト。

モデルに関連付けられた MAT ファイルのデータを表示および編集するには、モデル エクスプローラーを使用します。あるいは、コマンド プロンプトやスクリプトを外部データ ソースのプログラム インターフェイスと共に使用します。

モデルへの MAT ファイルのリンクの詳細については、Link MAT File to Model as External Data Sourceを参照してください。

グローバル データおよび共有データ: データ ディクショナリ

データ ディクショナリはデータを永続的に保存するスタンドアロンのファイルです。ヘッダー ファイルと同様に、データ ディクショナリでは、データ定義を保存して共有できる場所がモデルの外部に用意されています。データの分割、変更の追跡、アクセス制御、データ共有を行うためにベース ワークスペースの代わりにデータ ディクショナリを使用します。モデルをデータ ディクショナリにリンクした場合でも、モデルまたはデータ ディクショナリのいずれかからベース ワークスペースへのアクセスを構成することで、引き続きベース ワークスペースの変数を使用できます。ベース ワークスペースでの共有データの継続使用を参照してください。

複数のモデルまたはシステム コンポーネントで共有されるデータを保存するためにデータ ディクショナリを使用します。このデータには次のものが含まれます。

  • ブロック パラメーターの値を指定するために複数のモデルで使用される数値変数。

  • 複数のモデルのデータ型を同時に指定するために使用する Simulink.AliasType オブジェクトおよび Simulink.NumericType オブジェクト。

  • Auto 以外のストレージ クラスを使用する信号オブジェクト (Simulink.Signal など) を含むデータ オブジェクト。Simulink Coder のライセンスをお持ちの場合、これらのオブジェクトは生成コード内でグローバル変数として表現される信号および調整可能なパラメーターを表現できます。

  • 参照モデルなどのモデル オブジェクトのインターフェイスを定義するために使用する Simulink.ValueType オブジェクトおよび Simulink.Bus オブジェクト。

  • 複数のモデルの間でコンフィギュレーション パラメーターの統一性を維持するために使用する Simulink.ConfigSet オブジェクト。

  • Simulink.data.dictionary.EnumTypeDefinition オブジェクトを使用して保存する列挙型の定義。

データ ディクショナリで定義されているデータを使用するには、そのデータ ディクショナリをモデルにリンクする必要があります。この関連付けを使用して、特定のモデル セット間でデータを共有できます。

データ ディクショナリを使用する場合、他の参照ディクショナリにデータを保存することによってデータを分割できます。階層内のデータ ディクショナリは同じ名前空間を共有するため、データ ディクショナリ階層内の各エントリは一意の名前を使用しなければなりません。同じシンボルの複数の定義が許可されるのは、そのクラス タイプおよびプロパティ値が同じである場合のみです。詳細については、モデルの階層構造におけるデータの整合性を参照してください。

また、データ ディクショナリを使用してデータをカスタム ブロック ライブラリに関連付けることもできます。ライブラリにリンクされているデータ ディクショナリでバスや列挙型などのデータ オブジェクトを定義した場合、ライブラリのユーザーは、ライブラリからモデルにブロックをドラッグすると、データ ディクショナリに含まれているデータ型に自動的にアクセスできます。詳細については、カスタム ライブラリへのデータ ディクショナリのリンクを参照してください。

モデル エクスプローラーを使用してディクショナリ データを編集します。あるいは、コマンド プロンプトやスクリプトをデータ ディクショナリのプログラム インターフェイスと共に使用します。

データ ディクショナリの詳細については、データ ディクショナリとはを参照してください。

カスタム外部ファイル ソース

Simulink.SimulationInput オブジェクトを使用して異なる変数セットでモデルをシミュレートする場合、それらの変数セットをカスタム外部ファイル ソースに保存できます。外部ファイルからデータを読み込むには、以下のようにします。

コード生成に関する考慮事項

モデルから C コードを生成する場合 (Simulink Coder)、以下の考慮事項に注意してください。

  • 生成コード内の信号またはブロックの状態の表示を制御するために、信号オブジェクト (Simulink.Signal など) に Auto 以外のストレージ クラスを適用する場合、オブジェクトをモデル ワークスペースに格納することはできません。ベース ワークスペース、MAT ファイル、またはデータ ディクショナリにオブジェクトを格納してください。信号および状態のストレージ クラスの詳細については、C Data Code Interface Configuration for Model Interface Elements (Simulink Coder)を参照してください。

  • パラメーター オブジェクト (Simulink.Parameter など) に Auto 以外のストレージ クラスを適用する場合は、オブジェクトをベース ワークスペース、モデル ワークスペース、MAT ファイル、またはデータ ディクショナリに格納できます。ただし、オブジェクトをモデル ワークスペースに格納する場合、上位モデルがパラメーターを所有しているとコード ジェネレーターは想定します。詳細については、パラメーター オブジェクトの保存場所のコード生成への影響 (Simulink Coder)を参照してください。

  • モデル ワークスペース内に AUTOSAR.Parameter オブジェクトを保存した場合、コード ジェネレーターはオブジェクトに対して指定したストレージ クラスを無視します。

プロジェクト用のデータ ストレージの管理

小規模なプロジェクトでは、ベース ワークスペースが、設計データを保存する便利な手段になることがあります。特に、ベース ワークスペースは以下の場合に適しています。

  • 略式ワークフロー

  • ラピッド プロトタイピング

  • クイック パラメーター調整

  • 開発者が 1 人のプロジェクト

ベース ワークスペースは、アクセスのしやすさとグローバルな可視性を提供します。ただし、ベース ワークスペースのデータ ストレージは一時的なものであるため、セッション間でデータを保持するには、それをスクリプトまたは MAT ファイルに保存する必要があります。

小規模のプロジェクトにおける他のオプションには以下のものがあります。

  • モデル ワークスペース — モデル内に永続的な設計データ ストレージを提供することで、スタンドアロン モデルの移植性を向上させます。

  • MATLAB ファイルとデータ ディクショナリ — モデル外に永続的な設計データ ストレージを提供します。

ベース ワークスペースを使用するモデルに、同時にモデル ワークスペースを使用したり MAT ファイルやデータ ディクショナリをリンクしたりできます。そうすることで、プロジェクトの複雑度が増大したときに、データをベース ワークスペースから移行するための架け橋が提供されます。

ベース ワークスペースはユーザーが 1 人のみの小規模なプロジェクトやラピッド プロトタイピングの場合に便利な手段となりますが、このソリューションは、カプセル化、分散型開発、およびスコープ内のデータを必要とする複雑なプロジェクトでは適切に拡張されません。複雑なプロジェクトでは、参照モデルやサブシステム参照の階層が必要になります。階層に含まれているモデルのタイプに関係なく、データの意図した可視性に基づいて設計データを分散できます。スケーラブルなシステムをビルドするには、データ可視性をできる限りローカルに維持するという目的で設計データを分散します。

次の表では、設計データとコンフィギュレーション セットを保存、分割および管理するために使用できる手法について説明します。

モデル化のシナリオシナリオの説明ストレージの場所と手法

ラピッド プロトタイピングおよびモデルの実験

Simulink の使用方法を学びながら、一時的なデータ (ブロックの数値パラメーターを指定する変数など) を作成します。

モデル化手法を試します。

作成したデータを永続的に保存する必要はありません。

データをすばやく作成したり変更したりできるようにベース ワークスペースにデータを保存します。

スタンドアロン モデル

他のシステムのデータに依存していない単一のモデルがあります。より大きなシステムの一部ではないため、モデルはスタンドアロンです。

モデル ワークスペースにデータを保存し、モデルの移植性を向上します。モデル ワークスペースに保存できないデータを保存するためにデータ ディクショナリを使用します。

あるいは、MAT ファイルにデータを保存して、そのファイルを外部データ ソースとしてリンクします。MAT ファイルに保存できないデータの保存にはデータ ディクショナリを使用します。

複数のモデルに分解されたシステム

大規模システムが参照モデルの階層で複数のモデルに分解されます。データ定義は親モデルと子モデル間で共有されます。

ローカルなモデル データをそれぞれのモデル ワークスペースに保存します。

一般的な型、パラメーター、定数などのシステム全体の定義を MAT ファイルに保存して、そのファイルをすべてのモデルで外部データ ソースとしてリンクします。あるいは、すべてのモデルによって (直接、または別のデータ ディクショナリを介して) 参照されるデータ ディクショナリを使用します。

モデルが共有するデータ (バス オブジェクトやコンフィギュレーション セットなど) をデータ ディクショナリに保存します。階層内のすべてのモデルをデータ ディクショナリにリンクします。

複数コンポーネントのシステム

ライブラリやモデル参照などの再利用可能なコンポーネントが、チームまたは組織横断で頻繁に再利用できるように設計されます。

ローカルのモデル データをモデル ワークスペースに保存します。

マスク パラメーターまたはモデル引数を使用してライブラリ ブロックまたはモデル ブロックをパラメーター化します。

再利用可能なコンポーネントごとに、そのコンポーネントのインターフェイスで必要なデータ型を別個のデータ ディクショナリに保存し、モデルまたはライブラリをそのデータ ディクショナリに関連付けます。

モデルの階層構造におけるデータの整合性

モデルの階層構造内のデータ ディクショナリには、同じシンボルの複数の定義が含まれている場合があります。モデルを更新するには、単一のモデルに認識される (ベース ワークスペース、接続された Simulink データ ディクショナリ、または認識されるライブラリ ディクショナリから得られる) 重複したシンボル定義は一貫していなければなりません。シンボル定義が一貫しているのは、そのシンボル名、クラス タイプ、およびプロパティ値が同じである場合です。

たとえば、モデル M1 が 2 つのストレージの場所にある変数 K の定義を認識できるとします。この場合、K の定義が一貫している必要があります。

Model M1 with a definition of k in two storage locations

同じシンボルの定義が一貫している場合は、モデルをノーマル モード、アクセラレータ モード、およびラピッド アクセラレータ モードでシミュレートし、そのモデルのコードを生成できます。インターフェイス ディクショナリまたはアーキテクチャ モデルにリンクされているデータ ディクショナリで定義されている重複するシンボルはサポートされません。

メモ

モデルでシンボルの一貫性のある定義を複数認識できる場合、それらの定義のうち 1 つのみがモデル データ エディターによって表示され、Simulink.findVars によって返されます。この定義がシミュレーション中にモデルによって使用されます。

単一のモデルで認識される重複したシンボルが一貫している限り、モデル プロパティ EnforceDataConsistencyoff に設定することで、モデルの階層構造内の現在のモデルとその配下のモデルについて、同じ名前で異なる値をもつシンボルを使用できます。[モデル プロパティ] ダイアログ ボックスの [外部データ] タブで、[参照モデル全体で一貫したデータ定義を適用] チェック ボックスをオフにします。あるいは、関数 set_param を使用して、このパラメーターを off にプログラムで設定することもできます。

set_param(bdroot,'EnforceDataConsistency','off');

たとえば、モデル M2 および M3 のそれぞれに変数 K の単一の定義が含まれているが、モデルの階層構造内に K の複数の定義があるとします。モデル M1 でデータ整合性チェックをオフにすることで、モデル M2 および M3 は変数 K に別の値を保持できます。

A model hierarchy. Model M1 has 2 submodels, M2 and M3, each with a different definition of variable K.

データ整合性チェックをオフにすることで、変数に同じような名前を使用している別のベンダーからのコンポーネントを統合できます。データ整合性チェックをオンのままにすることで、1 つの組織内のコンポーネントを統合し、コンポーネントが同じ条件下で確実に動作するようにすることができます。

既定では、EnforceDataConsistency パラメーターは on に設定されています。すべての参照モデルおよびそのバリアントでも EnforceDataConsistencyon に設定されていない限り、モデルの EnforceDataConsistencyon に設定することはできません。

次の場合、EnforceDataConsistencyoff に設定するとエラーになります。

  • コード生成

  • ソフトウェアインザループ (SIL) シミュレーションとプロセッサインザループ (PIL) シミュレーション

  • 保護モデルのシミュレーション

モデル参照シミュレーション ターゲット (シミュレーション時にアクセラレータ モードとラピッド アクセラレータ モードで使用) を作成する際、シンボルの一貫性のある定義が複数あると、Simulink はデータ ディクショナリ名とシンボル名を連結してシンボルの一意の識別子を生成します。この生成された識別子が許容される最大長の 64 文字を超える場合、Simulink は EnforceDataConsistency の設定に関係なくデータの一貫性を強制的に適用します。

参考

トピック