Main Content

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

Atomic ボックスを使用した関数の再利用

"Atomic ボックス" は、グラフィカル関数、真理値表関数、MATLAB® 関数および Simulink® 関数を個別の名前空間にカプセル化する際に役立つグラフィカル オブジェクトです。Atomic ボックスは、Simulink モデルの Stateflow® チャートでのみサポートされます。Atomic ボックスでは以下のことが可能です。

  • 多くのステートまたは階層レベルをもつチャート内の関数に小さい変更を加えた後のシミュレーションが高速化する。

  • 同じ関数を複数のチャートやモデルで再利用する。

  • 同じチャートの異なる部分で作業するチームでの開発がしやすくなる。

  • チャート内の特定の関数で生成されたコードを手動で検査できる。

Atomic ボックスは不透明で、左上隅にラベル Atomic が表示されます。ライブラリにリンクされている Atomic ボックスを使用する場合は、ラベル Link が左上隅に表示されます。

Atomic ボックスの例

この例では、リンクされた Atomic ボックスを使用して、グラフィカル関数を複数のチャートおよびモデルで再利用する方法を説明します。

関数 GetTime は、ライブラリ モデル sf_timer_utils_lib 内のチャートで定義されます。グラフィカル関数は、等価の MATLAB® 関数 getSimulationTime が使用できない C チャートでシミュレーション時間を返します。

モデル sf_timer_function_calls は、同様の構造をもつ 2 つのチャートで構成されています。各チャートには、ステートのペア (AB) と、ライブラリ チャートからリンクされている Atomic ボックス (Time) が含まれています。ステート A の entry アクションが、関数 GetTime を呼び出し、その値を t0 として保存します。A から B への遷移を保護する条件が、関数を再度呼び出し、その出力をパラメーター T と比較します。

最上位モデル sf_timer_modelref は、複数の参照ブロック内でタイマー関数を再利用します。エクスポートされた関数がないため、最上位モデルにある参照ブロックのインスタンスを複数使用できます。

Atomic ボックスを使用する利点

Atomic ボックスは、通常のボックスと Atomic サブチャートの機能を組み合わせたものです。Atomic ボックスによって以下のことが実現します。

  • 複雑なチャートの整理と明確化。

  • ライブラリ リンクとしての使用のサポート。

  • 再利用可能なコードの生成のサポート。

  • 入力、出力、パラメーター、データ ストア メモリ、入力イベントのマッピングが可能。

Atomic ボックスには関数のみが含まれます。ステートを含めることはできません。Atomic ボックスにステートを追加すると、コンパイル時のエラーになります。

Atomic ボックス外の場所から Atomic ボックス内に存在する関数を呼び出すには、ドット表記を使用して絶対パスを指定します。

atomic_box_name.function_name
関数の呼び出しで絶対パスを使用すると、次のようになります。

  • リンクされた Atomic ボックス内の関数への依存関係が明確化されます。

  • グローバルな名前空間の汚損が回避されます。

  • 生成されたコードの効率性には影響しません。

Atomic ボックスの作成

Atomic ボックスを作成するには、既存のボックスを変換するか、ライブラリ モデルのチャートをリンクします。Atomic ボックスの作成後、Atomic ボックスを右クリックして [サブチャートのマッピング] を選択することにより、変数のマッピングを更新します。詳細については、Atomic サブチャートおよびボックスでの変数のマッピングを参照してください。

通常のボックスから Atomic ボックスへの変換

デバッグとコード生成のワークフローを高速化する、関数用のコンテナーを作成するには、既存のボックスを Atomic ボックスに変換します。チャート内で、通常のボックスを右クリックし、[グループとサブチャート][Atomic サブチャート] を選択します。ボックスの左上隅にラベル Atomic が表示されます。

変換プロセスでは、チャート内でアクセスするすべてのデータ オブジェクトの独自のコピーが Atomic ボックスに与えられます。ローカル データはデータ ストア メモリとしてコピーされます。入出力データを含むその他のデータのスコープは変わりません。

メモ

ステートやメッセージを含むボックスは、Atomic ボックスに変換できません。

ライブラリからの Atomic ボックスのリンク

複数のチャートおよびモデルで再利用するために関数のコレクションを作成するには、ライブラリ モデルからのリンクを作成します。ライブラリ モデル内のチャートをコピーして、別のモデル内のチャートに貼り付けます。ライブラリ チャートに関数のみが含まれていて、ステートが含まれていない場合は、リンクされた Atomic ボックスとして表示され、左上隅にラベル Link が付いています。

このモデリング方法の場合、再利用可能な関数の保守を最低限に抑えることができます。ライブラリで Atomic ボックスを変更すると、変更はすべてのチャートおよびモデルのリンクに伝播されます。

ライブラリ チャートにステートが含まれている場合は、リンクされた Atomic サブチャートとしてチャート内に表示されます。詳細については、Atomic サブチャート使用した再利用可能なサブコンポーネントの作成を参照してください。

Atomic ボックスから通常のボックスへの変換

Atomic ボックスを変換して通常のボックスに戻すと、サブチャートを親とするデータ オブジェクトを、マップ先であるチャートを親とするデータにマージすることにより、変数マッピングがすべて削除されます。

  1. Atomic ボックスがライブラリ リンクである場合は、Atomic ボックスを右クリックし、[ライブラリ リンク][リンクを無効にする] を選択します。

  2. Atomic ボックスを、サブチャート化されたボックスに変換するには、Atomic ボックスを右クリックし、[グループとサブチャート][Atomic サブチャート] チェック ボックスをオフにします。

  3. サブチャート化されたボックスを変換して通常のボックスに戻すには、サブチャートを右クリックし、[グループとサブチャート][サブチャート] チェック ボックスをオフにします。

  4. 必要に応じて、チャート内のグラフィカル オブジェクトを再配列します。

以下の場合は、Atomic ボックスを通常のボックスに変換できません。

  • Atomic ボックスが、単一の変数名以外の式に対してパラメーターをマップする場合。たとえば、パラメーター data1 を以下のいずれかの式にマップすると、Atomic ボックスから通常のボックスへの変換ができなくなります。

    • 3

    • data2(3)

    • data2 + 3

  • 以下の両方の条件が満たされている場合。

    • Atomic ボックスに、MATLAB 関数、または MATLAB をアクション言語として使用する真理値表関数が含まれている。

    • Atomic ボックスによる各変数のマップ先が、メイン チャート内の同じ名前の変数ではない。

Atomic ボックスを使用する場合

関数の段階的なデバッグ

関数のライブラリに対する一連の変更をテストすると仮定します。関数は、多数のステートまたは複数の階層レベルを含むチャートの一部であるため、チャート全体をコンパイルすると長時間かかる可能性があります。Atomic ボックス内で関数を定義すると、チャート全体ではなく、そのボックスに対してのみ再コンパイルが行われます。詳細については、チャートのコンパイル時間の短縮を参照してください。

関数の再利用

複数のチャートまたはモデルで使用する一連の関数があるとします。コンフィギュレーションを簡単に管理できるように、関数はライブラリ モデル内にあります。これらの関数を別のモデルで使用するには、次のいずれかを行います。

  • 関数をエクスポートしてモデル内のライブラリ チャートへのリンクを作成するように、ライブラリ チャートを設定します。

  • モデルのチャートごとに、ライブラリ チャートを Atomic ボックスとしてリンクします。

これらの関数を使用するモデルは、最上位モデル内に参照ブロックとして表示することができます。関数がエクスポートされている場合は、この参照ブロックのインスタンスは最上位モデルごとに 1 つだけ使用することができます。詳細については、モデル参照の要件と制限を参照してください。

Atomic ボックスを使用すると、この制限を回避できます。チャートにエクスポートされた関数がないため、最上位モデルにある参照ブロックのインスタンスを複数使用することができます。

複数の人が使用するチャートの開発

複数の人がチャートの別々の部分で作業していると仮定します。関数の各ライブラリをリンクされた Atomic ボックスに保存すると、チャートの他の部分に影響を与えることなく、複数の人が別々のライブラリで作業できます。詳細については、チャートの別単位への分割を参照してください。

生成コードの検証

Simulink Coder™ または Embedded Coder® で生成されたコードで、特定の関数を手動で検証すると仮定します。関連性のないコード内の検索を避けるために、Atomic ボックス用のコードを別ファイルで表示するように指定できます。詳細については、Atomic サブチャートからのコードの生成を参照してください。

関連するトピック