メインコンテンツ

カスタム ライブラリへのデータ ディクショナリのリンク

カスタム ブロック ライブラリを作成するとき、ブロック インターフェイスで使用するデータ オブジェクト (バス型や列挙型など) を定義する場合があります。これらのデータ型をライブラリにリンクされた Simulink® データ ディクショナリに保存することで、ライブラリ ユーザーはそれらのデータ型を利用できるようになります。ライブラリ ユーザーは、ライブラリからモデルにブロックをドラッグすると、ディクショナリに含まれているデータ型に自動的にアクセスできるようになります。

リンクされたデータ ディクショナリで定義されたデータ型をもつライブラリ ブロックの作成

データ ディクショナリでライブラリ ブロックのデータと型を定義するには、次のようにします。

  1. 新しいデータ ディクショナリを作成するか、既存のディクショナリを開きます。新しいディクショナリを作成するには、モデル エクスプローラーで、[ファイル][新規][データ ディクショナリ] を選択します。既存のディクショナリを開くには、[ファイル][開く] を選択し、ディクショナリを参照します。

  2. データ ディクショナリにデータと型 (バス オブジェクトなど) を追加します。

    View of Model Explorer. On the left, a data dictionary node is expanded in the Model Hierarchy pane. On the right, the Contents pane displays the two bus objects contained in the Design Data section of the dictionary.

  3. データ ディクショナリを保存します。

UI を使用することで、またはプログラムで set_param 関数を使用することで、ライブラリにデータ ディクショナリをリンクできます。

UI を使用してデータ ディクショナリをリンクするには、次のようにします。

  1. 次のいずれかのオプションを使用してライブラリのロックを解除します。

    • ライブラリ ウィンドウの左下隅にあるロック バッジをクリックします。

    • Simulink ツールストリップの [ライブラリ] タブの [保護] セクションで、[ロックされたライブラリ] をクリックします。

    • MATLAB コマンド ウィンドウで、set_param 関数を使用して、ライブラリの Lock パラメーターを設定します。

      set_param("myLibrary","Lock","off")

  2. Simulink エディターの [モデル化] タブで、[ライブラリ プロパティ] をクリックします。

  3. [ライブラリ プロパティ] ダイアログ ボックスの [外部データ] タブで、[参照] をクリックしてデータ ディクショナリを見つけて開きます。

  4. [OK] をクリックしてディクショナリをリンクします。

set_param 関数を使用してデータ ディクショナリをリンクするには、次のコマンドを使用します。

set_param('myLib','DataDictionary','myLibData.sldd');

ディクショナリをリンクし、ライブラリを保存すると、ディクショナリとその内容がライブラリの外部データ ソースとしてモデル エクスプローラーに表示されます。

View of Model Explorer. On the left, the library node is expanded in the Model Hierarchy pane. Under the library node, the External Data node is expanded to show the linked data dictionary. On the right, the Contents pane displays the two bus objects contained in the Design Data section of the dictionary.

ライブラリのブロックを開発するとき、[データ型] リストからライブラリ ディクショナリに含まれている型を選択できます。

On the left, the model canvas displays the contents of a subsystem library block. The Out block is selected. On the right, a block parameters dialog box displays the dictionary data types in the drop-down menu for Data type.

リンクされたデータ ディクショナリをもつライブラリからのブロックの使用

ライブラリからモデルにブロックをドラッグすると、モデルはそのライブラリにリンクされたディクショナリに含まれるデータ オブジェクトに自動的にアクセスできるようになります。モデル エクスプローラーでディクショナリを表示するには、Simulink エディターで、左下隅にあるモデル データ バッジ をクリックしてから、[外部データ] をクリックします。ディクショナリは、[From Libraries] ノードの下に、モデルの外部データ ソースとして表示されます。

View of Model Explorer. On the left, a model node is expanded in the Model Hierarchy pane. Under the model node, the External Data node is expanded. Under the External Data node, the From Libraries node is expanded to show the linked data dictionary. On the right, the Contents pane displays the two bus objects contained in the Design Data section of the dictionary.

ライブラリで定義されたデータ オブジェクトは、ベース ワークスペースや別のデータ ディクショナリに取り込まなくても、シミュレーションおよびコード生成のためにモデルで使用できます。

On the left, the model canvas displays a library block used in a model. The Out block is selected. On the right, a block parameters dialog box displays the dictionary data types in the drop-down menu for Data type.

モデルを更新または保存したときに、モデルにライブラリのブロックが含まれなくなった場合、ライブラリ ディクショナリはモデルで使用できなくなり、そのディクショナリは [From Libraries] ノードから削除されます。

ライブラリ ディクショナリを使用する場合の考慮事項

リンクされたデータ ディクショナリをもつライブラリを作成または使用する場合、いくつかの考慮事項があります。

  • ほとんどの場合、ライブラリ ディクショナリではバス型や列挙型を定義しますが、ライブラリ作成者は、オブジェクトをディクショナリに追加することで任意の型のオブジェクトをライブラリ ユーザーと共有できます。

  • ライブラリ ディクショナリ内の項目はスコープがグローバルであり、ライブラリ ディクショナリがモデルに直接接続されているかのように記号の関連付けが行われます。

  • ライブラリ リンクが破損すると、ライブラリに関連付けられたデータは利用できなくなります。データに再びアクセスできるようにするには、モデルにデータ ディクショナリを手動でリンクする必要があります。ディクショナリがリンクされると、データへのアクセスも復元します。

  • ライブラリにデータ ディクショナリを手動でリンクできない場合、ライブラリ ディクショナリのリンクに関する情報を含むキャッシュが破損している可能性があります。キャッシュをリセットするには、Simulink.LibraryDictionary.resetLibraryLinks 関数を呼び出します。この関数を呼び出した後、ライブラリにデータ ディクショナリを再びリンクできるようになりますが、以前にリンクされていたライブラリ ディクショナリに関する情報は失われます。

  • モデルの階層構造では、モデルは、ライブラリ ディクショナリに含まれるデータ オブジェクトを使用するために、そのディクショナリを直接または間接的に参照する必要があります。

  • Simulink では、ライブラリ ディクショナリの依存関係情報はユーザー基本設定フォルダーに保存されます。この情報は、MATLAB® セッション間で維持されます。ライブラリを別のフォルダーまたはマシンに移動した場合、あるいはライブラリの階層構造に変更を加えた場合、Simulink.LibraryDictionary.refresh 関数を使用して依存関係の分析を実行し、保存されている依存関係を更新できます。この依存関係の分析では計算量が多くなることがあるため、refresh 関数を呼び出すのは、見つからない依存関係がある場合のみにしてください。以前の依存関係の分析を消去するには、Simulink.LibraryDictionary.clear 関数を使用します。

  • ライブラリからモデルにブロックをドラッグすると、モデルはそのライブラリにリンクされたデータ ディクショナリにアクセスできるようになります。ただし、ブロックがサブライブラリからのものである場合、アクセスできるのは、そのサブライブラリにリンクされたデータ ディクショナリに限られます。この場合、モデルがブロックを使用するときにライブラリ ディクショナリとサブライブラリ ディクショナリの両方にアクセスできるようにするために、ライブラリ作成者は新しいサブシステムにサブライブラリ ブロックを含める必要があります。

  • ライブラリ ブロックをサブシステム ファイルに追加すると、そのライブラリにリンクされたデータ ディクショナリがサブシステム ファイルで使用できるようになります。Subsystem Reference ブロックを使用してモデルからサブシステム ファイルを参照する場合、ライブラリ ディクショナリは Subsystem Reference ブロックの境界内でのみ使用できます。

  • ライブラリを MATLAB のルート フォルダーに保存すると、ライブラリにディクショナリをリンクできますが、ライブラリからブロックを追加しても、モデルはディクショナリに自動的にアクセスできるようになりません。

  • Simulink は、リンクされたデータ ディクショナリをもつライブラリの未使用変数の検出をサポートしていません。

参考

| | |

トピック