ドキュメンテーション

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

インターフェイス設計

インターフェイス定義が重要である理由

C または MATLAB® コードの関数や Simulink® サブシステムなどのソフトウェア コンポーネントの "インターフェイス" を定義することは、他のユーザーがコンポーネントを使用する前の重要な第一歩です。それは次のような理由からです。

  • インターフェイスに関して合意することは、大規模なシステムの機能をサブコンポーネントに分割する方法を決定する際の有用な第一歩です。

  • いくつかのコンポーネント間のインターフェイスを定義すれば、それらのコンポーネントの開発を並行して行うことができます。インターフェイスが安定していれば、それらのコンポーネントを大規模なシステムに統合することは簡単です。

  • コンポーネント間のインターフェイスの変更にはコストがかかります。少なくとも 2 つのコンポーネント (ソースとシンク) と、テスト ハーネスの変更が必要になります。また、それらのコンポーネントの以前のすべてのバージョンと、現在および今後のバージョンとの互換性がなくなります。

インターフェイスを変更する必要がある場合、コンポーネントが構成管理内に格納されていると、変更はかなり簡単になります。互換性のあるコンポーネントのバージョンの構成を追跡して、互換性のないコンポーネントの組み合わせを回避できます。

インターフェイス設計の推奨事項

新規プロジェクトのコンポーネントのインターフェイスを定義する際の推奨事項を次に示します。

  • コンポーネントの境界は、対応する実際のシステムの境界に基づいて決定します。モデルに以下が含まれている場合は、特にこれが役立ちます。

    • 物理システム (プラントおよび環境) と制御システムの両方

    • 異なるレートで実行されるアルゴリズム

  • 今後のモデルの詳細化を考慮します。センサーのモデルを追加する意図がある場合は、信号をそのまま通過させたり、単位遅延や名前変換を実行する空のサブシステムとして最初からモデルを入れておきます。

  • 今後のコンポーネントの再利用を考慮します。

  • 信号の命名規則の使用を検討します。

  • 以下の目的でデータ オブジェクトを使用します。

    • コンポーネント インターフェイスの定義

    • データ属性の正確な制御

  • 信号をバスにグループ化することでインターフェイス設計を単純化します。信号バスは、大量の信号が行き来するが、利用可能なすべての信号を使用するわけではないコンポーネントを含む高水準のモデルでの使用に非常に適しています。バスを使用すると、コンポーネントへのインターフェイスの変更が簡単になります。たとえば、コンポーネントが使用する信号を追加または削除する必要がある場合、そのコンポーネントへの Inport または Outport を追加または削除するよりバスを変更するほうが簡単です。ただし、モデル参照の境界を越えるバスを使用するには、バス オブジェクトを使用する必要があります。

    Simulink バス信号およびバス オブジェクトを使用する際のベスト プラクティスは次のとおりです。

    • モデル参照コンポーネントの境界以外ではバスをバーチャルにします。

    • コンポーネント間のインターフェイスを定義するときは非バーチャル バスを使用します。ただし、これにはバスとバス オブジェクトを関連付ける必要があります。バス オブジェクトはバス上の信号のプロパティを完全に定義して、明確なインターフェイス定義を指定します。

      リビジョン コントロールにバス オブジェクトを配置するには、データ ディクショナリにバス オブジェクトを含めるか、バス オブジェクトを .mat または .m ファイルとして保存します。

    • 各コンポーネントに必要な信号のみを渡すことで、コストのかかる不必要なデータの受け渡しを削減します。信号バスによって完全な入出力信号セットを定義することができますが、必ずしもそれらを使用したり作成したりする必要はありません。

    • コンポーネントで使用するものをインターフェイスが正確に指定していることを確認します。

    • バス オブジェクトには厳密な命名規則を使用します。データ ディクショナリを使用しない場合、バス オブジェクトはベース ワークスペースに格納されます。

    • モデルの下位レベルでは、各信号の Inport および Outport の使用を検討します。モデルの下位レベルでは、コンポーネントは他のコンポーネントのコンテナーとして機能するのではなく通常はアルゴリズムを実装しているため、信号バスを使用せずにコンポーネントの個別の Inport と Outport を使用すると、可読性が向上します。ただし、この方法でインターフェイスを作成すると接続の問題のリスクが高まります。なぜなら、データ型やサイズ以外は接続の有効性を確認するのが困難だからです。

    • 外部 C コードで定義される struct の型定義に対応する構造体に信号またはパラメーターをパッケージ化するには、型をバス オブジェクトとしてインポートし、そのオブジェクトをバス信号と MATLAB 構造体のデータ型として使用します。オブジェクトを作成するには、関数 Simulink.importExternalCTypes を使用します。

データの分割

コンポーネントのデータのスコープを厳密に制御します。いくつかの手法を次に示します。

  • グローバル パラメーター — 自動車業界で一般的な方法は、パラメーターのストレージの問題をモデルのストレージと完全に分けることです。モデルのパラメーターはキャリブレーション データのデータベースに由来していて、使用される特定のキャリブレーション ファイルは構成の一部になります。キャリブレーション データはグローバル データとして扱われ、ベース MATLAB ワークスペースに配置されます。さらに制御するために、ベース ワークスペース データをデータ ディクショナリに移行できます。

  • グローバルではないパラメーター — 独自のパラメーター データを何らかの方法で格納するいくつかのコンポーネントを組み合わせると、パラメーター名が競合するリスクが生じます。パラメーターの命名規則や、固有のパラメーター名と定義のリストを使用しない場合、2 つのコンポーネントが、異なる意味をもつ同じ名前のパラメーターを使用するリスクがあります。

    ローカル パラメーターのデータを格納する方法には次のようなものがあります。

    • コンポーネントごとに、データを分割して参照ディクショナリを作成します。

    • モデル参照により、モデル ワークスペースを使用できます。

    • パラメーター ファイル (.m または .mat) および個々の Simulink モデルのコールバック (たとえば関数 preload) を使用します。

      プロジェクトのショートカットを使用して、必要なデータを自動的に読み込むこともできます。

    • マスク初期化関数を使用するかどうかにかかわらずワークスペースをマスクします。

    • サブシステムの場合は、[サブシステム パラメーター]、[階層の関連付けを許可] ダイアログ ボックスを使用してサブシステムのデータのスコープを制御できます。

コンポーネントのデータ インターフェイスの構成

大きなシステムをコンポーネントに分割するために参照モデルまたはサブシステムを使用しているかに関係なく、コンポーネントは信号データを Inport ブロックと Outport ブロックを使用して交換できます。インターフェイスの設計属性 (データ型や数値の実数/複素数など) を明示的に構成して、モデリング エラーを回避し、コンポーネントの統合を容易にすることができます。

Inport ブロックと Outport ブロックを作成した後に、モデル データ エディターとインターフェイスの表示を使用して、ブロックの設計属性 (データ型や数値の実数/複素数など) を構成できます。この手法を使用してコンポーネントのインターフェイス全体を一度に表示し、内部ブロック アルゴリズムにおける使用ポイントに対するインターフェイスの各部分を追跡します。また、この手法を使用して、内部アルゴリズムを開発する前にコンポーネントのインターフェイスを構成することもできます。この場合、コンポーネントには、接続されていない Inport ブロックと Outport ブロックが含まれます。

モデル例 sldemo_fuelsys_dd には、参照モデルである次の 2 つのコンポーネントが含まれます。

  • プラント コンポーネント sldemo_fuelsys_dd_plant

  • コントローラー コンポーネント sldemo_fuelsys_dd_controller

モデル データ エディターとインターフェイスの表示を使用して、プラント コンポーネントのインターフェイスを調べて構成します。

  1. プラント コンポーネントを開きます。

    sldemo_fuelsys_dd_plant

  2. [情報表示][インターフェイス] を選択します。

  3. [ツール表示][モデル データ エディター] を選択します。

    既定では、モデル データ エディターで [入力端子/出力端子] タブが選択されます。テーブルの各行は Inport ブロックまたは Outport ブロックを表します。既定では、[ビューの変更] ドロップダウン リストは [設計] に設定されます。

    ヒント

    モデルのルート レベルに Inport ブロックと Outport ブロックのみを表示する (サブシステム内のブロックは除外する) には、[スコープの変更] ボタンを非アクティブにします。

  4. モデル データ エディターの列を使用して、インターフェイスの設計属性を明示的に構成します。たとえば、[Min] 列と [Max] 列を使用して各 Inport ブロックと Outport ブロックの最小値と最大値を指定します。

コントローラー コンポーネントのインターフェイスのコード生成設定を構成するには、モデル データ エディターで、[ビューの変更] ドロップダウン リストを [コード] に設定します。

インターフェイス表示の使い方の詳細については、インターフェイスの表示を使用した接続の追跡を参照してください。モデル データ エディターの詳細については、モデル データ エディターを使用したデータ プロパティの設定を参照してください。

関連する例

詳細