主要内容

このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。

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

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

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

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

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

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

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

原子ボックスの例

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

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

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

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

原子ボックスを使用する利点

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

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

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

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

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

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

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

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

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

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

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

原子ボックスの作成

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

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

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

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

メモ

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

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

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

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

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

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

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

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

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

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

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

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

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

    • 3.

    • data2 (3)

    • data2 + 3

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

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

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

原子ボックスを使用する場合

関数の段階的なデバッグ

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

関数の再利用

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

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

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

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

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

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

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

生成コードの検証

万博1manbetx仿真软件编码器™または嵌入式编码器®で生成されたコードで,特定の関数を手動で検証すると仮定します。関連性のないコード内の検索を避けるために,原子ボックス用のコードを別ファイルで表示するように指定できます。詳細については,原子サブチャートからのコードの生成を参照してください。

関連するトピック