Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

モデル間で共有されるライブラリ サブシステムからの再利用可能なコードの生成

再利用可能なライブラリ サブシステムとは

再利用可能なライブラリ サブシステムとは、ライブラリにインクルードされ、再利用できるように構成されたサブシステムです。モデル間でサブシステムを再利用するには、ライブラリでサブシステムを定義し、そのサブシステムを再利用できるように構成しなければなりません。

共通の機能を再利用するために、サブシステムの複数のインスタンスを以下のような範囲で含めることができます。

  • 最上位モデルまたはモデル参照階層の一部である単一のモデル内

  • モデル参照階層の複数の参照モデルにまたがる

  • Model ブロックを含む複数の最上位モデルにまたがる

  • Model ブロックを含まない複数の最上位モデルにまたがる

コード ジェネレーターはチェックサムを使用し、再利用可能であるかどうかを判断します。コード ジェネレーターがサブシステム コードを再利用できない場合があります。

インクリメンタルなコード生成では、再利用可能なライブラリ サブシステムが変更されると、それ自身とその親のリビルドが行われます。ビルド中、一致する関数が見つからない場合は、再利用可能な関数の新しいインスタンスが共有ユーティリティ フォルダーに生成されます。前回のビルドから異なる一致した関数が見つかった場合はその関数が使用され、新しい再利用可能な関数は発行されません。

その後のビルドでも、未使用のファイルが置き換えられたり、フォルダーから削除されたりすることはありません。モデルの開発中に共有ユーティリティ フォルダーに多数の旧式の共有関数が存在している場合は、フォルダーを削除してコードを再生成できます。再利用可能なライブラリ サブシステムのすべてのインスタンスがモデル参照階層から削除され、コードが再生成された場合であっても、旧式の共有関数は明示的に削除しない限り共有ユーティリティ フォルダーに残されています。

モデルが変更され、その変更によってサブシステムに異なるコードが生成される可能性がある場合には、再利用可能な関数が新しく生成されます。たとえば、モデル コンフィギュレーション パラメーターによってコードのコメントが変更されると、再利用可能なライブラリ サブシステムに変更がなかったとしても、サブシステムに異なるコードが生成される可能性があります。

Embedded Coder のユーザーは、再利用できるように構成されたサブシステムが含まれているライブラリからコードを生成できます。詳細については、Library-Based Code Generation for Reusable Library Subsystemsを参照してください。

再利用可能なライブラリ サブシステム コードの配置と命名

再利用可能なライブラリ サブシステムの生成コードは、モデルの生成コードからは独立しています。再利用可能なライブラリ サブシステムのコードは、モデル参照階層フォルダーではなく、共有ユーティリティ フォルダー slprj/target/_sharedutils に生成されます。サポートする型用の生成コードは .h ファイルに生成され、共有ユーティリティ フォルダーにも配置されます。

名前が一意になるように、再利用可能な関数の名前では、再利用可能なライブラリ サブシステム名の末尾にチェックサムが追加されます。たとえば、再利用可能なライブラリ サブシステム RLS にリンクされたサブシステム SS1 のコードおよびファイルは、次のようになります。

  • 関数名: RLS_mgdjlngd

  • ファイル名: RLS_mgdjlnd.c および RLS_mgdjlnd.h

再利用可能なライブラリ サブシステムを構成するには、以下に示したようにサブシステム パラメーターを設定します。

  • [Atomic サブシステムとして扱う] を選択します。

  • [コード生成] タブで以下のようにします。

    • [関数のパッケージ化][再利用可能な関数] に設定します。

    • 次の表に基づいて、[関数名オプション] パラメーターと [ファイル名オプション] パラメーターを設定します。この表では、コード ジェネレーターがどのようにコードを生成するのかをまとめ、再利用可能なライブラリ サブシステムからコードを生成できるようにする [ファイル名オプション] を太字で強調表示しています。この表の目的のため、Subsystem ブロックの名前は mySubsystem で、[ユーザー指定] オプションの [ファイル名] の値は myFunction であるものと仮定しています。

      関数名オプションファイル名オプション生成されるフォルダーの場所生成される関数名生成されるファイル名
      自動自動/slprj/target/_sharedutilsmySubsystem_checksummySubsystem_checksum.c, mySubsystem_checksum.h
      サブシステム名を使用/slprj/target/_sharedutilsmySubsystem_checksummySubsystem_checksum.c, mySubsystem_checksum.h
      関数名を使用/slprj/target/_sharedutilsmySubsystem_checksummySubsystem_checksum.c, mySubsystem_checksum.h
      ユーザー指定model_target_rtwmodel_SubsystemmyFile.h
      サブシステム名を使用自動model_target_rtwmodel_Subsystem生成コードは model.h に含まれる
      サブシステム名を使用/slprj/target/_sharedutilsmySubsystem_checksummySubsystem_checksum.c, mySubsystem_checksum.h
      関数名を使用/slprj/target/_sharedutilsmySubsystem_checksummySubsystem_checksum.c, mySubsystem_checksum.h
      ユーザー指定model_target_rtwmodel_SubsystemmyFile.h
      ユーザー指定自動 (この指定は、モデル内のサブシステムの一意の 1 つのインスタンスでサポートされます。)/slprj/target/_sharedutilsmyFunctionmyFunction.c, myFunction.h
      サブシステム名を使用model_target_rtwmyFunctionmySubsystem.c, mySubsystem.h
      関数名を使用 (この指定は、モデル内のサブシステムの一意の 1 つのインスタンスでサポートされます。)/slprj/target/_sharedutilsmyFunctionmyFunction.c, myFunction.h
      ユーザー指定 (この指定は、ユーザー指定の関数名とファイル名が同じ場合に、モデル内のサブシステムの一意の 1 つのインスタンスでのみサポートされます。)/slprj/target/_sharedutilsmyFunctionmyFunction.c, myFunction.h

Subsystem ブロック パラメーターの詳細については、Subsystem を参照してください。

再利用可能なライブラリ サブシステムを含むモデルの構成

モデルで再利用可能なライブラリ サブシステムを使用する場合は、モデルが参照モデルか、最上位モデルかによってモデルを異なる方法で構成しなければなりません。サブシステムが参照モデルの階層構造内にある場合は、コンフィギュレーション パラメーター 共有コードの配置[自動] に設定します。そうでない場合は、サブシステムを使用する各モデルに対して、モデル コンフィギュレーション パラメーター [共有コードの配置][共有場所] に設定します。

再利用可能なライブラリ サブシステムで共有のローカル データ ストアを使用し、モデル データ要素に対して既定のマッピングを構成している場合は、カテゴリ [Shared local data stores] の既定のストレージ クラス マッピングを [既定] に設定したままにします。

モデル参照階層において、再利用可能なライブラリ サブシステムのインスタンスが最上位モデルにある場合は、[コンフィギュレーション パラメーター] ダイアログ ボックスの [モデル参照] ペインで、[コード生成で固定サイズのスカラーのルート入力を値渡しで行う] パラメーターを選択しなければなりません。このパラメーターを選択しない場合には、最上位モデルの再利用可能なライブラリ サブシステムのインスタンスに別の共有関数が生成され、参照モデルのインスタンスに再利用可能な関数が生成されます。

再利用可能なライブラリ サブシステムがルートの出力端子に接続される場合は、ルートの出力端子に接続されていない同一のサブシステムでは再利用されません。ただし、[最適化] ペインで、[再利用可能なサブシステムの出力を渡す][個々の引数] に設定すれば、これらのサブシステム間で再利用が確実に行われるようになります。このパラメーターには Embedded Coder® のライセンスが必要です。

ライブラリの作成の詳細については、カスタム ライブラリを参照してください。再利用可能なライブラリ サブシステムの作成の例については、モデル間で共有されるサブシステムの再利用可能なコードの生成を参照してください。

モデル間で共有されるサブシステムの再利用可能なコードの生成

この例では、参照モデル間で共有されるサブシステムにおいて再利用可能なライブラリ サブシステムを構成し、再利用可能な関数を生成する方法を示します。結果として、再利用可能なサブシステムのコードが、共有ユーティリティ フォルダー (slprj/target/_sharedutils) に生成されます。

再利用可能なライブラリ サブシステムの作成

  1. Simulink エディターで、[シミュレーション] タブの [新規]、[ライブラリ] を選択します。[Simulink スタート ページ] ウィンドウから [空のライブラリ] を選択します。GeneratedCodeFunctionReuse を開きます。

  2. サブシステム SS1 をコピーし、ライブラリ エディターに貼り付けます。これにより、SS1 の変数がベース ワークスペースに読み込まれます。サブシステム ブロックの名前を RLS に変更します。

  3. Subsystem ブロックをクリックし、Ctrl+U を押して、サブシステム RLS の内容を表示します。

  4. サブシステムを構成するために、ライブラリ エディターで RLS を右クリックします。コンテキスト メニューで、[ブロック パラメーター (Subsystem)] を選択します。[Subsystem パラメーター] ダイアログ ボックスで、次のオプションを選択します。

    • [Atomic サブシステムとして扱う] を選択します。

    • [コード生成] タブで以下のようにします。

      • [関数のパッケージ化][再利用可能な関数] に設定します。

      • [関数名オプション][ユーザー指定] に設定し、[関数名]myfun に設定されていることを確認します。

      • [ファイル名オプション][自動] に設定します。

  5. [適用] をクリックし、[OK] をクリックします。

  6. 再利用可能なライブラリを ssreuselib として保存します。これによりファイル ssreuselib.slx が作成されます。

モデル例の作成

  1. ssreuselib から RLS のインスタンスを 1 つ含むモデルを作成します。このサブシステムに SS1 という名前を付けます。サブシステムをもう 1 つ追加し、SS2 という名前を付けます。モデルに ex_model1 という名前を付けます。

  2. ssreuselib から RLS のインスタンスを 1 つ含むモデルをもう 1 つ作成します。このサブシステムに SS1 という名前を付けます。サブシステムをもう 1 つ追加し、SS3 という名前を付けます。モデルに ex_model2 という名前を付けます。

  3. ex_model1ex_model2 を参照する 2 つの Model ブロックをもつ最上位モデルを作成します。最上位モデルを ex_mdlref_ssreuse という名前で保存します。

最上位モデルのコンフィギュレーション パラメーターの設定

  1. モデル ex_mdlref_ssreuse を Simulink® エディターで開き、[C コード] タブで [設定] をクリックし、[コンフィギュレーション パラメーター] ダイアログ ボックスを開きます。

  2. [ソルバー] ペインで [タイプ][固定ステップ] に指定します。

  3. [モデル参照] ペインで、省略記号をクリックして詳細設定パラメーターを表示します。次に、[コード生成で固定サイズのスカラーのルート入力を値渡しで行う] を選択します。

  4. [コード生成]、[レポート] ペインで、[コード生成レポートを作成] および [レポートを自動的に開く] を選択します。

  5. [コード生成]、[インターフェイス] ペインで、共有コードの配置[共有場所] に設定します。

  6. [コード生成]、[識別子] ペインで、[識別子の最大の長さ]256 に設定します。このステップはオプションです。

  7. [適用] をクリックし、[OK] をクリックします。

コンフィギュレーション参照の作成と伝播

  1. Simulink エディターの [モデル化] タブで、[モデル エクスプローラー] をクリックしてモデル エクスプローラーを開きます。モデル エクスプローラーの左側のナビゲーション列で、ex_mdlref_ssreuse ノードを展開します。

  2. ex_mdlref_ssreuse ノードの下で [コンフィギュレーション] ノードを選択します。[コンテンツ] ペインで [コンフィギュレーション] を右クリックし、[コンフィギュレーション参照に変換] を選択します。

  3. [アクティブなコンフィギュレーションを参照に変換] ダイアログ ボックスで、[OK] をクリックします。これにより、モデル コンフィギュレーション セットがコンフィギュレーション参照 Simulink.ConfigSetRef に変換され、コンフィギュレーション参照オブジェクト configSetObj がベース ワークスペースに作成されます。

  4. 左側のナビゲーション列で、[Reference (Active)] を右クリックし、[参照モデルへ伝播] を選択します。

  5. [参照モデルへのコンフィギュレーション参照の伝播] ダイアログ ボックスで、リスト内の参照モデルを選択します。[伝播] をクリックします。

これで、最上位モデルおよび参照モデルは、同一のコンフィギュレーション参照 Reference (Active) (モデル コンフィギュレーション参照オブジェクト configSetObj をポイント) をベース ワークスペースで使用するようになります。モデルを保存する際には、configSetObj を MAT ファイルにエクスポートする必要もあります。

コードを生成して表示します。

  1. コードを生成するには、Simulink エディターで、Ctrl+B を押します。コードが生成されると、コード生成レポートが開きます。

  2. 参照モデルのコード生成レポートを表示するには、左側のナビゲーション ペインの [参照モデル] セクションで、ex_model1 を選択します。コード生成レポートに ex_model1 で生成されたファイルが表示されます。

  3. 左側のナビゲーション ペインで [共有ファイル] を展開します。コード ジェネレーターは、再利用可能なライブラリ サブシステム名を使用します。サブシステム SS1 のコードは、myfun.cmyfun.h に記述されます。

  4. [戻る] をクリックして、コード生成レポート ex_model2 に戻ります。ex_model2 では、ex_model1 のコードと同じ myfun.cmyfun.h のソース コードが使用されています。実際のサブシステム関数およびファイルの名前はこれとは異なります。

関連するトピック