Atomic サブチャート使用した再利用可能なサブコンポーネントの作成
"Atomic サブチャート" は、Stateflow® チャートで独立したサブコンポーネントを作成する際に役立つグラフィカル オブジェクトです。Atomic サブチャートは、MATLAB® 内のスタンドアロンの Stateflow チャートではサポートされません。
Atomic サブチャートには以下のことが可能です。
同じステートまたはサブチャートを複数のチャートやモデルで再利用する
多くのステートまたは階層レベルをもつチャートに小さい変更を加えた後のシミュレーションが高速化する
複数の人が同じチャートの異なる部分で作業する場合にチームでの開発がしやすくなる
チャート内の特定のステートまたはサブチャートで生成されたコードを手動で検査できる
Atomic サブチャートは不透明で、左上隅にラベル "Atomic" が表示されます。ライブラリにリンクされている Atomic サブチャートを使用した場合は、ラベル "Link" が左上隅に表示されます。
Atomic サブチャートの例
次の例では、通常のサブチャートと Atomic サブチャートの違いを説明します。
Air Controller チャートでは、PowerOff
は通常のサブチャートで、PowerOn
は Atomic サブチャートです。どちらのサブチャートも不透明ですが、PowerOn
には、左上隅にラベル "Atomic" が表示されます。
Atomic サブチャートを使用する利点
Atomic サブチャートは、ステート、通常のサブチャート、および Atomic サブシステム (Simulink)の機能を組み合わせたものです。Atomic サブチャートによって以下のことが実現します。
独立したチャートとして動作する。
ライブラリ リンクとしての使用のサポート。
再利用可能なコードの生成のサポート。
入力、出力、パラメーター、データ ストア メモリ、入力イベントのマッピングが可能。
Atomic サブチャートでは、以下へのアクセスはサポートされていません。
チャート階層の各レベルにあるデータ。
Atomic サブチャートのスコープの外にあるイベントのブロードキャスト。
Atomic サブチャートでは、サンプル時間の明示的な仕様はサポートされていません。
Atomic サブチャートの作成
Atomic サブチャートを作成するには、既存のステートまたはサブチャートを変換するか、ライブラリ モデルのチャートをリンクします。Atomic サブチャートの作成後、Atomic サブチャートを右クリックして [サブチャートのマッピング] を選択することにより、変数のマッピングを更新します。詳細については、Atomic サブチャートおよびボックスでの変数のマッピングを参照してください。
ステートまたは通常のサブチャートから Atomic サブチャートへの変換
デバッグとコード生成のワークフローを高速化する独立コンポーネントを作成するには、既存のステートまたはサブチャートを Atomic サブチャートに変換します。チャート内で、ステートまたは通常のサブチャートを右クリックして、[グループとサブチャート] 、 [Atomic サブチャート] を選択します。サブチャートの左上隅にラベル "Atomic" が表示されます。
新しい Atomic サブチャートには、チャート内でアクセスするすべてのデータ オブジェクトのコピーが含まれます。ローカル データはデータ ストア メモリとしてコピーされます。入出力データを含むその他のデータのスコープは変わりません。
ステートまたはサブチャートを Atomic サブチャートに変換すると、ステートまたはサブチャートに出入りするスーパートランジションは、入口端子または出口端子に接続する遷移に自動的に置き換えられます。入口端子と出口端子を使用すると、Atomic サブチャートに出入りするためのロジックを分離し、チャートが Stateflow 階層の境界を越えて遷移できるようになります。詳細については、ステートの境界を越える入口および出口接続の作成および再利用可能なコンポーネントを使用したロボットの軌跡の計画を参照してください。
ステートまたはサブチャートを Atomic サブチャートに変換できない場合に原因として考えられる問題の一覧については、Atomic サブチャートに変換する際の制限を参照してください。
ライブラリからの Atomic サブチャートのリンク
複数のチャートおよびモデルで再利用するサブコンポーネントを作成するには、ライブラリ モデルからのリンクを作成します。ライブラリ モデル内のチャートをコピーして、別のモデル内のチャートに貼り付けます。ライブラリ チャートにステートが含まれている場合は、リンクされた Atomic サブチャートとして表示され、左上隅にラベル "Link" が付いています。
このモデリング方法の場合、類似したステートの保守を最低限に抑えることができます。ライブラリで Atomic サブチャートを変更すると、変更はすべてのチャートおよびモデルのリンクに伝播されます。
ライブラリ チャートに関数のみが含まれていて、ステートが含まれていない場合は、リンクされた Atomic ボックスとしてチャート内に表示されます。詳細については、Atomic ボックスを使用した関数の再利用を参照してください。
Atomic サブチャートから通常のサブチャートへの変換
Atomic サブチャートを変換してステートまたは通常のサブチャートに戻すと、その変数マッピングがすべて削除されます。この変換により、サブチャートを親とするデータ オブジェクトが、マップ先であるチャートを親とするデータにマージされます。
Atomic サブチャートがライブラリ リンクである場合は、Atomic サブチャートを右クリックして [ライブラリ リンク] 、 [リンクを無効にする] を選択します。
Atomic サブチャートを変換して通常のサブチャートに戻すには、Atomic サブチャートを右クリックして、[グループとサブチャート] 、 [Atomic サブチャート] チェック ボックスをオフにします。
サブチャートを変換してステートに戻すには、サブチャートを右クリックして、[グループとサブチャート] 、 [サブチャート] チェック ボックスをオフにします。
必要に応じて、チャート内のグラフィカル オブジェクトを再配列します。
以下の場合は、Atomic サブチャートを通常のサブチャートに変換できません。
Atomic サブチャートが、単一の変数名以外の式に対してパラメーターをマップする場合。たとえば、パラメーター
data1
を以下のいずれかの式にマップすると、Atomic サブチャートから通常のサブチャートへの変換ができなくなります。3
data2(3)
data2 + 3
以下の両方の条件が満たされている場合。
Atomic サブチャートに、MATLAB 関数、または MATLAB をアクション言語として使用する真理値表関数が含まれている。
Atomic サブチャートによる各変数のマップ先が、メイン チャート内の同じ名前の変数ではない。
Atomic サブチャートを使用する場合
ステート ロジックの再利用
同じステートまたはサブチャートを繰り返し再利用して、大規模なモデリングを進めると仮定します。
Atomic サブチャートを使用しない場合は、サブコンポーネントのコピーをそれぞれ手動で維持する必要があります。たとえば、以下のチャートには、同様の構造をもつ 2 つのステートが含まれています。2 つのステートの唯一の違いは変数の名前です。ステート A
でロジックの変更を行った場合は、ステート B
でも同じ変更を行わなければなりません。
リンクされた Atomic サブチャートを使用してサブコンポーネントの再利用を有効にするには、ステート A
のコピーを 1 つ作成し、ライブラリ モデル内にチャートとして格納します。そのライブラリから、チャート内で Atomic サブチャートのコピーと貼り付けを 2 回行います。その後、必要に応じてサブチャート変数のマッピングを更新します。
ライブラリで Atomic サブチャートを変更すると、変更はすべてのライブラリ リンクに伝播されます。詳細については、チャートでのステートの複数回再利用を参照してください。
チャートの段階的なデバッグ
多数のステートまたは複数の階層レベルを含むチャート内の一連の変更をテストすると仮定します。
Atomic サブチャートを使用しない場合、チャートの一部に小さい変更を加えてシミュレーションを開始すると、チャート全体に対する再コンパイルが発生します。チャート全体の再コンパイルは時間がかかる可能性があるため、テスト前に複数の変更を加えることにします。ただし、エラーが見つかった場合は、すべての変更を手順を追って確認し、エラーの原因を特定しなければなりません。
一方で、Atomic サブチャートを変更すると、チャート全体ではなくそのサブチャートに対してのみ再コンパイルが行われます。シミュレーションのインクリメンタル ビルドにより、再コンパイルに必要な時間が短縮されます。このコンパイル時間の短縮により、複数の変更を一度にテストするまで待つことなく、個々の変更をそれぞれテストすることができます。各変更を個別にテストすることにより、エラーの原因となった変更をすばやく特定できます。詳細については、チャートのコンパイル時間の短縮を参照してください。
複数の人が使用するチャートの開発
複数の人々がチャートのさまざまな部分で作業しているため、チャートをサブコンポーネントに分割すると仮定します。
Atomic サブチャートを使用しない場合、モデルを編集できるのは一度に 1 人だけです。誰かがチャートの一部を編集している間に、他の誰かが同じチャートの別の部分を編集した場合は、提出時にこれらの変更をマージしなければなりません。
これに対して、チャートのさまざまな部分をリンクされた Atomic サブチャートとして格納することができます。Atomic サブチャートは独立したオブジェクトとして動作するため、チャートの他の部分に影響することなく、複数の人がチャートの別々の部分で作業できます。変更が別々のモデルに存在するため、提出時にマージする必要はありません。詳細については、チャートの別単位への分割を参照してください。
生成コードの検証
チャートの特定の部分に関して、Simulink® Coder™ または Embedded Coder® で生成されたコードを手動で検証すると仮定します。
Atomic サブチャートを使用しない場合は、モデル全体のコードを 1 つのファイル内で生成します。チャートの特定の部分のコードを見つけるには、ファイル全体に目を通す必要があります。
これに対して、Atomic サブチャートのコードが別のファイルになるように指定することができます。このコード生成方法を使用すると、チャートの特定部分の単体テストを行うことができます。関係のないコードを検索することなく、関心があるコードだけに集中できます。詳細については、Atomic サブチャート用の個別コードの生成を参照してください。
参考
Atomic Subsystem (Simulink)