個別のサブシステムのコードと実行可能ファイルの生成
モデル内のサブシステムのコードを生成してスタンドアロン実行可能ファイルをビルドできます。個々のサブシステムのコードを生成する場合、コード生成とビルド プロセスでは、コード生成を使用し、ルート モデルのパラメーターをビルドします。
サブシステムをもつモデル (
rtwdemo_atomic
など) を開きます。open_system('rtwdemo_atomic')
Simulink® Coder™ または Embedded Coder® を開きます。
Embedded Coder を使用している場合は、[C コード] タブで、[コードの表示] をクリックして [コード ビュー] エディターを開きます。
Subsystem ブロックを右クリックします。コンテキスト メニューから [ブロック パラメーター (Subsystem)] をクリックします。[ブロック パラメーター: SS1] ウィンドウで [コード生成] タブを開きます。
[関数名オプション] と [ファイル名オプション] パラメーターを使用して、生成された関数とファイルの名前を制御します。[関数名オプション] パラメーターを
[Auto]
に設定して、コード ジェネレーターで生成されるファイル名にサブシステムの名前が使用されるようにします。Subsystem ブロックを右クリックします。コンテキスト メニューから [C/C++ コード]、[このサブシステムをビルド] を選択します。
サブシステムでブロック パラメーターとして参照される変数 (またはデータ オブジェクト) の名前、クラス、ストレージ クラスなどのプロパティを設定するには、サブシステムを Model ブロックに変換します。コード マッピング エディターでプロパティを設定します。
調整可能なパラメーターおよびインライン パラメーター、ストレージ クラスの詳細については、生成されたコードにおける調整可能なキャリブレーション パラメーターの作成を参照してください。
ビルド プロセスにより、MATLAB® コマンド ウィンドウにステータス メッセージが表示されます。ビルドが完了した時点で、生成された実行可能ファイルは作業フォルダーにあります。生成された実行ファイルの名前は、
(PC プラットフォームの場合) またはsubsystem
.exe
(The Open Group UNIX® プラットフォームの場合) です。ここで、subsystem
は、ソースの Subsystem ブロックの名前です。この例では、Subsystem ブロックの名前はsubsystem
SS1
です。生成コードは、
という名前のビルド サブフォルダーにあります。subsystem
_target
_rtw
はソースの Subsystem ブロックの名前で、subsystem
はターゲット コンフィギュレーションの名前です。target
サブシステムのビルドの制限
サブシステムのビルドには、次の制限が適用されます。
サブシステムのビルドでは、関数呼び出しのトリガー入力または関数呼び出し出力をもつサブシステムをサポートしません。
[データ型] パラメーターにバス オブジェクトを指定する Outport ブロックが含まれるサブシステムをビルドするときは、信号ラベルの設定によるエラーに対処しなければなりません。これらのエラーを表示するようにソフトウェアを構成するには、親モデルの [コンフィギュレーション パラメーター] ダイアログ ボックスの [診断] 、 [接続性] ペインで、[信号ラベルの不一致] パラメーターを
[エラー]
に設定します。サブシステムが Triggered Subsystem または Function-Call Subsystem にある場合、サブシステムのコードがサンプル時間非依存でないと、右クリックによるビルド プロセスが失敗する可能性があります。サブシステムがサンプル時間非依存であるかどうかを決定するには、次の手順に従います。
サブシステムのすべてのブロックを空のモデルにコピーします。
[コンフィギュレーション パラメーター] ダイアログ ボックスの [ソルバー] ペインで、
[タイプ] を
[固定ステップ]
に設定します。[周期的なサンプル時間の制約] を
[サンプル時間に依存しない]
に設定[適用] をクリックします。
モデルを更新します。モデルがサンプル時間依存の場合、Simulink では線図の更新プロセスでエラーが発生します。
サブシステムに右クリックによるビルド プロセスを使用すると、コード ジェネレーターは、生成されたコード ファイルにサブシステム名を使用しようとします。場合によっては、[ファイル名オプション] を
[関数名を使用]
、または [関数名オプション] を[サブシステム名を使用]
に設定した場合などに指定した名前と競合が生じることがあります。次のエラーが表示されます。The subsystem 'model/subsys' is trying to generate code to an reserved file (subsys) for the model 'subsys'...
このエラーを解決するには、競合しているファイルの名前のいずれかを変更して名前が一意になるようにします。
サブシステム ビルドの警告では、作成されたサブシステム ブロック パスのハイパーリンクは、実際のモデル ブロック パスではなく、一時モデル ブロック パスを参照しています。診断ビューアーで、サブシステム ハイパーリンクをクリックしてもブロックに移動しません。コマンド ウィンドウに、次のメッセージが表示されます。
... No system or file called 'subsystemName' found. ...
関連する例
- Generate Predictable Function Interface to Match Graphical Block Interface (Embedded Coder)
- サブシステム コードを別々の関数およびファイルとして生成