Main Content

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

外部コード ベースにエクスポートするコンポーネント ソース コードの生成

Embedded Coder® ソフトウェアを使用している場合は、モデリング コンポーネントから関数のソース コードを生成して、外部コード ベースで使用できます。生成されるコードには、スケジューリング コード (ステップ関数など) のサポートは含まれません。Simulink® 環境外のロジックを制御するには、生成された関数コードを呼び出します。

モデリング オプション

以下のモデリング コンポーネント用にエクスポートする関数コードを生成できます。

  • エクスポート関数モデル (エクスポート関数モデルの概要で説明されている、Function-Call Subsystem、関数呼び出しの Model ブロック、またはその他のエクスポート関数モデルで排他的に構成される機能ブロックを含むモデル)

  • エクスポート関数サブシステム (Function-Call Subsystem を含むバーチャル サブシステム)

これらのモデリング コンポーネント用にコード ジェネレーターで生成されたコードをエクスポートするには、モデリング コンポーネントが特定の要件を満たしていなければなりません。

以前のリリースで設計したモデルの場合、コード ジェネレーターは Triggered Subsystem から関数をエクスポートできます。エクスポート関数サブシステムに対して指定されている要件は、Triggered Subsystem からの関数のエクスポートにも適用されますが、次の例外があります。

  • 最上位のバーチャル サブシステムで関数をエクスポートする Triggered Subsystem をカプセル化する。

  • Triggered Subsystem は、Function-Call Subsystem を含むバーチャル サブシステムで指定された要件や制限を満たす必要はない。

  • 絶対時間または経過時間を使用するエクスポート関数は、Triggered Subsystem からの関数のエクスポートには適用されない。

要件

  • モデル ソルバーは、固定ステップ離散ソルバーでなければなりません。

  • Function-Call Subsystem をトリガーする各ルートレベルの Inport ブロックを構成して、関数呼び出しトリガーが出力されるように構成しなければなりません。これらの Inport ブロックは Asynchronous Task Specification ブロックに接続できません。

  • モデルまたはサブシステムには、ルート レベルの次のブロックのみ含まれなければなりません。

    • Function-Call ブロック (ソルバー モデルのコンフィギュレーション パラメーター [タスクとサンプル時間オプション][周期的なサンプル時間の制約][サンプル時間に依存しない] に設定されている場合のルート レベルの Function-Call Subsystem、Simulink Function、S-Function および Function-Call Model ブロックなど)

    • Inport ブロックと Outport ブロック (端子)

    • Constant ブロック (Add など定数に解決されるブロックを含む)

    • サンプル時間が Inf のブロック

    • Merge ブロックおよび Data Store Memory ブロック

    • バーチャル接続ブロック (Function-Call Split、Mux、Demux、Bus Creator、Bus Selector、Signal Specification、およびこれらのブロックを含むバーチャル サブシステム)

    • Scope ブロックなどの信号ビューアー ブロック (エクスポート関数サブシステムのみ)

  • Constant ブロックがモデルまたはサブシステムの最上位に表示されている場合は、モデルまたは含まれているモデルのモデル コンフィギュレーション パラメーター [最適化][既定のパラメーター動作][インライン] に設定しなければなりません。

  • モデルまたはサブシステム内のブロックはコード生成をサポートしなければなりません。

  • 絶対時間または経過時間を使用するブロックは、対応する関数呼び出しのルートレベル Inport ブロックで指定された離散サンプル時間をもつ周期的な Function-Call Subsystem の内部になければなりません。絶対時間または経過時間を使用するエクスポート関数を参照してください。

  • エクスポート システム境界を越えるデータ信号はバーチャル バスにできず、Goto-From 接続として実装できません。エクスポート境界を越えるデータ信号は、スカラー、多重化または非バーチャル バスでなければなりません。

さらに、エクスポート関数モデルの場合は、エクスポート関数モデルの複数のインスタンスを含むレートベース モデルのコードは生成できません。たとえば、シミュレーション中に再利用可能なエクスポート関数モデルのスケジュールに使用するテスト ハーネス モデルのコードは生成できません。

エクスポート関数サブシステムの場合、以下の要件が追加適用されます。

  • エクスポート関数サブシステムの境界を越えるトリガー信号はスカラーでなければなりません。トリガーとして機能しない入力および出力データ信号はスカラーである必要はありません。

  • 定数信号がエクスポート関数サブシステムの出力端子を駆動する場合、信号でストレージ クラスを指定しなければなりません。

絶対時間または経過時間を使用するエクスポート関数

絶対時間または経過時間を使用するブロックをもつモデリング コンポーネントの関数コードをエクスポートする場合、それらのブロックは次の Function-Call Subsystem 内になければなりません。

  • 周期的な実行用に構成している

  • 離散サンプル時間でルートレベルの Inport ブロックを構成している

周期的な実行用に Function-Call Subsystem を構成するには、次を行います。

  1. Function-Call Subsystem で Trigger ブロックを右クリックし、コンテキスト メニューから [ブロック パラメーター] を選択します。

  2. パラメーター [サンプル時間タイプ][周期的] に設定します。

  3. [サンプル時間] を関数呼び出しイニシエーターで (直接または継承により) 指定された同じ粒度に設定します。

  4. [OK] または [適用] をクリックします。

詳細については、絶対時間と経過時間の計算を参照してください。

関数呼び出しサブシステムの制限

  • Subsystem ブロックのパラメーターは、生成コードを含むファイルの名前を制御しません。ファイル名は、エクスポートされたサブシステムの名前から始まります。

  • Subsystem ブロックのパラメーターは、生成コードの最上位関数の名前を制御しません。各関数名には、関数をトリガーする信号の名前が反映されるか、(名前の付いていない信号の場合) 信号の発生元となるブロックが反映されます。

  • C++ クラスのコード インターフェイスのパッケージ化用の関数呼び出しシステムは、その関数の仕様が [既定の step メソッド] に設定されている場合に限りエクスポートできます。Interactively Configure C++ Interfaceを参照してください。エクスポート関数は、シングルスレッド実行と互換しません。共有信号の潜在的なデータ レース状況を回避するには、クラスのすべてのメンバーを同じ実行スレッドから呼び出します。

  • コード ジェネレーターは、その関数呼び出しイニシエーターがアクセラレータ モードで非インライン化されている場合に限り、SIL または PIL ブロックをアクセラレータ モードでサポートします。非インライン化イニシエーターの例として、Stateflow® チャートがあります。

  • レベル 2 の S-Function イニシエーター ブロック (Stateflow チャートまたは組み込みの Function-Call Generator ブロックなど) は SIL ブロックを駆動しなければなりません。

  • 非同期 (サンプル時間) function-call system をエクスポートできますが、ソフトウェアは、非同期システムの SIL または PIL ブロックをサポートしません。

  • エクスポート関数サブシステムにおいて、TLC 関数 LibIsFirstInit の使用は削除されました。

ワークフロー

エクスポートされた関数用のコードを生成するには、この表に示されているタスクを繰り返してください。

タスクアクション詳細
1外部コードの特性と統合要件の評価を確認します。外部コード統合ワークフローの選択
2エクスポートしているモデルまたはサブシステムが関数のエクスポート要件を満たしていることを確認します。要件
3モデルまたはサブシステムを変更して、データ インターフェイス要件に対応します。 外部 C/C++ コードと Simulink モデルまたは生成コード間のデータ交換
4必要に応じて、関数プロトタイプを構成します。Configure Entry-Point Function Interfaces for Simulink Function and Function Caller Blocks。固定ステップのレートベース モデルについては生成された C 関数インターフェイスをモデルのエントリポイント関数用に構成またはInteractively Configure C++ Interface
5必要に応じて、モデルを更新し、外部のアプリケーション固有のコードを生成されたシステム関数に配置します。 生成されたコードへの外部 C/C++ コードの配置
6シミュレーション中の関数の動作と実行が予想どおりであることを、テスト ハーネス モデルを作成および使用して確認します。テスト ハーネス モデルは、シミュレーション中の関数の実行をスケジューリングします。モデルの構成、コード生成およびシミュレーションSimulink Test™ ソフトウェアを使用している場合は、Test Authoring (Simulink Test)
7コード生成用のモデルまたはサブシステムを構成します。モデル コンフィギュレーション セットのカスタマイズ
8コードとコード生成レポートを生成します。コード生成
9生成コード インターフェイスと静的コード メトリクスを確認します。Analyze Generated Data Code InterfaceおよびStatic Code Metrics
10エクスポートされた関数コードを含む実行可能プログラムをビルドします。Simulink 環境外での統合コードの作成
11実行可能プログラムの動作と実行が予想どおりであることを確認します。 検証、テスト、および認定

統合方法の選択

外部開発環境にエクスポートするための関数コードの生成については、複数の方法を利用できます。次の表では、方法を比較しています。統合要件に最適な方法を選択してください。エクスポート関数モデルの作成方法の詳細については、エクスポート関数モデルの概要を参照してください。Function Call Subsystem のコード生成の詳細については、外部コード ベースにエクスポートするコンポーネント ソース コードの生成を参照してください。

条件または要件使用詳細
  • モデル要素と生成コード間のトレーサビリティ

  • ローカル入力 (Inport ブロック) および出力 (Outport ブロック)

Function-Call Subsystem
  • 生成された関数プロトタイプの制御

  • 正式な入力引数 (Argument Inport ブロック) および出力引数 (Argument Outport ブロック)

  • ローカル入力 (Inport ブロック) および出力 (Outport ブロック)

Simulink Function ブロック
コードが初期化イベントに対応Initialize Function ブロック
コードがリセット イベントに対応Reset Function ブロック
コードには、コード ジェネレーターが既定で生成する範囲を超えたエントリポイント関数が含まれている (model_initializemodel_stepmodel_terminate)S-FunctionS-Function とコード生成
テスト ハーネスとして使用し、モデルの一部のために生成されたコードをエクスポートする単一モデルの実行フレームワークエクスポート関数サブシステム

エクスポート関数モデルの C 関数コードの生成

この例では、スケジューリング コードを生成せずに、個々の Simulink® Function ブロックおよび Function-Call Subsystem の関数コードをモデル内で生成する方法について説明します。

エクスポート用の関数コードを生成するには、次を行います。

  1. エクスポートする関数を含むモデルを作成します。

  2. シミュレーション中の関数の実行をスケジューリングするテスト ハーネス モデルを作成します。

  3. テスト ハーネス モデルを使用して関数を含むモデルをシミュレーションします。

  4. 関数を含むモデルのコードを生成します。

エクスポートする関数を含むモデルの作成

エクスポートする関数を含むモデルは、モデルのルート レベルでアーキテクチャの制約を満たさなければなりません。ルート レベルで有効なブロックは次のとおりです。

  • Inport

  • Outport

  • Function-Call Subsystem

  • Simulink Function

  • Goto

  • From

  • Merge

コード ジェネレーターは Function-Call Subsystem ブロックと Simulink Function ブロック、Initialize Function ブロックと Reset Function ブロックの関数コードを生成します。Function-Call Subsystem ブロックは、関数呼び出し信号をアサートするルートの Inport ブロックとブロックの入力端子を接続します。サブシステムは受信した関数呼び出し信号に基づいて実行されます。Simulink Function ブロックは、対応する Function Caller ブロックまたは Stateflow チャートの実行に応じて実行されます。Initialize Function ブロックは、モデル初期化イベントの発生時に実行されます。Reset Function ブロックは、ユーザー定義のリセット イベントの発生時に実行されます。

関数をエクスポートするために、モデル rtwdemo_functions には、エクスポートする関数用の 2 つの Function-Call Subsystem (f1_alg および f2_alg) と Simulink Function ブロック (f3) が含まれています。モデルには、Initialize Function ブロック (Initialize Function) と Reset Function ブロック (Reset Function) も含まれています。モデルの他の部分の状態によってブロックの初期条件を計算するために、State Writer ブロックが Initialize Function ブロックと Reset Function ブロックの内部で使用されます。

open_system('rtwdemo_functions')

Function Caller ブロックを含むモデルの作成

Function Caller ブロックを使用して Simulink Function ブロックを呼び出します。Function Caller ブロックは Simulink Function ブロックと同じモデル内に含まれていたり、別のモデル内に含まれることもあります。

複数の Function Caller ブロックで Simulink Function ブロックを呼び出すこともできます。Function Caller ブロックは Function-Call Subsystem の内部に配置できます。コード生成の最中に、コード ジェネレーターは Function-Call Subsystem から関数をエクスポートします。

モデル rtwdemo_caller は、Function Caller ブロックを含む Function-Call Subsystem をエクスポートします。

open_system('rtwdemo_caller')

シミュレーション用のテスト ハーネス モデルの作成

関数をエクスポートする際に、生成コードにはスケジューラは含まれません。シミュレーション中のスケジューリングを処理するテスト ハーネス モデルを作成します。展開するコードを生成するためにテスト ハーネス モデルを使用しないでください。

モデル rtwdemo_export_functions はテスト ハーネスです。このモデルは次を行います。

  • rtwdemo_caller の Function Caller ブロックを含む Simulink Function ブロックをスケジュールします。

  • モデル初期化イベントとリセット イベントを含むモデルのコンテンツをスケジュールするために、関数呼び出し信号をこの例の他のモデルに提供します。

open_system('rtwdemo_export_functions')

テスト ハーネス モデルのシミュレーション

エクスポートする関数を含むモデルが予期したとおりに実行されることを、テスト ハーネス モデルのシミュレーションによって検証します。たとえば、rtwdemo_export_functions をシミュレーションします。

sim('rtwdemo_export_functions')

関数コードの生成

Embedded Coder アプリを開きます。次に、エクスポートする関数のコードを生成します。たとえば、rtwdemo_functions のコードを生成します。

slbuild('rtwdemo_functions')
### Starting build procedure for: rtwdemo_functions
### Successful completion of code generation for: rtwdemo_functions

Build Summary

Top model targets built:

Model              Action           Rebuild Reason                                    
======================================================================================
rtwdemo_functions  Code generated.  Code generation information file does not exist.  

1 of 1 models built (0 models already up to date)
Build duration: 0h 0m 10.23s

生成コードのレビュー

生成コードのレビュー

  • ert_main.c はモデル用の main プログラムの例 (実行フレームワーク) を示す。このコードは、エクスポートされた関数を呼び出す方法を示しています。また、このコードは生成済みのコードの初期化と実行の方法も示しています。

  • rtwdemo_functions.c は、モデルのコンポーネント f1_algf2_alg および f3 の初期化関数 (Initialize Function を含む) とエクスポート関数を呼び出す。

  • rtwdemo_functions.h はモデルのデータ構造と、エクスポートされたエントリポイント関数およびデータ構造のパブリック インターフェイスを宣言する。

  • f3.h は、Simulink 関数 f3 の呼び出しインターフェイスを宣言する共有ファイル。

  • rtwtypes.h は、生成コードが必要とするデータ型、構造体およびマクロを定義する。

インターフェイス コードの記述

コード インターフェイス レポートを開いてレビューします。実行フレームワークのインターフェイス コードを記述するために、このレポートの情報を使用します。

  1. 命令 #include rtwdemo_functions.h#include f3.h および #include rtwtypes.h を追加することによって、生成されたヘッダー ファイルをインクルードします。

  2. モデルの Inport ブロックの生成コードへの入力データを記述します。

  3. 生成されたエントリポイント関数を呼び出します。

  4. モデルの Outport ブロックの生成コードからデータを読み取ります。

入力端子:

  • 次元 1 の real_T 型の rtU.U1

  • 次元 1 の real_T 型の rtU.U2

エントリポイント関数:

  • エントリポイント関数の初期化、void rtwdemo_functions_initialize(void)。開始時にこの関数を一度呼び出します。

  • エントリポイント関数のリセット、void rtwdemo_functions_reset(void)。必要に応じてこの関数を呼び出します。

  • エクスポート関数、void f1(void)。必要に応じてこの関数を呼び出します。

  • エクスポート関数、void f2(void)。必要に応じてこの関数を呼び出します。

  • Simulink 関数、void f3(real_T rtu_u, real_T *rty_y)。必要に応じてこの関数を呼び出します。

出力端子:

  • 次元 [2] の int8_T 型の rtY.Accumulator1

  • 次元 [2] の int8_T 型の rtY.Accumulator2

  • 次元 1 の int8_T 型の rtY.TicToc10

詳細

モデル例を閉じる

bdclose('rtwdemo_export_functions')
bdclose('rtwdemo_functions')
bdclose('rtwdemo_caller')

エクスポート関数モデルの C++ 関数とクラス コードの生成

この例では、Function-Call Subsystem を含むエクスポート関数モデルの関数コードの生成方法を示します。コード ジェネレーターは、スケジューリング コードを含まない関数とクラス コードを生成します。

エクスポート用の関数コードを生成するには、次を行います。

  1. エクスポートする関数を含むモデルを作成します。

  2. シミュレーション中の関数の実行をスケジューリングするテスト ハーネス モデルを作成します。

  3. テスト ハーネス モデルを使用して関数を含むモデルをシミュレーションします。

  4. 関数を含むモデルのコードを生成します。

エクスポート用の関数と C++ クラス インターフェイスを含むモデルの作成

C++ モデル クラス インターフェイスを使用してエクスポートする関数を含むモデルは、モデルのルート レベルでアーキテクチャの制約を満たさなければなりません。C++ クラスの生成において、ルート レベルで有効なブロックは次のとおりです。

  • Inport

  • Outport

  • Function-Call Subsystem

  • Goto

  • From

  • Merge

メモ: C++ クラス インターフェイスを使用した Function-Call Subsystem のエクスポートは、Simulink Function ブロックをサポートしません。

コード ジェネレーターは Function-Call Subsystem ブロックの関数コードを生成します。Function-Call Subsystem ブロックは、関数呼び出し信号をアサートするルートの Inport ブロックとブロックの入力端子を接続します。サブシステムは受信した関数呼び出し信号に基づいて実行されます。

モデル rtwdemo_cppclass_functions には、関数をエクスポートするための Function-Call Subsystem f1f2f3 が含まれます。

open_system('rtwdemo_cppclass_functions')

シミュレーション用のテスト ハーネス モデルの作成

関数をエクスポートする際に、生成コードにはスケジューラは含まれません。シミュレーション中のスケジューリングを処理するテスト ハーネス モデルを作成します。展開するコードを生成するためにテスト ハーネス モデルを使用しないでください。

モデル rtwdemo_cppclass_export_functions はテスト ハーネスです。このモデルは、モデルのコンテンツをスケジュールするために、関数呼び出し信号をこの例の他のモデルに提供します。

open_system('rtwdemo_cppclass_export_functions')

テスト ハーネス モデルのシミュレーション

エクスポートする関数を含むモデルが予期したとおりに実行されることを、テスト ハーネス モデルのシミュレーションによって検証します。たとえば、rtwdemo_cppclass_export_functions をシミュレーションします。

sim('rtwdemo_cppclass_export_functions')

関数のコードとレポートの生成

エクスポートする関数のコードとコード生成レポートを生成します。たとえば、rtwdemo_cppclass_functions のコードを生成します。

slbuild('rtwdemo_cppclass_functions')
### Starting build procedure for: rtwdemo_cppclass_functions
### Successful completion of build procedure for: rtwdemo_cppclass_functions

Build Summary

Top model targets built:

Model                       Action                        Rebuild Reason                                    
============================================================================================================
rtwdemo_cppclass_functions  Code generated and compiled.  Code generation information file does not exist.  

1 of 1 models built (0 models already up to date)
Build duration: 0h 0m 14.616s

生成コードのレビュー

コード生成レポートで生成されたコードをレビューします。

  • ert_main.cpp はモデル用の main プログラムの例 (実行フレームワーク) を示す。このコードは、エクスポートされた関数を呼び出す方法を示しています。また、このコードは生成済みのコードの初期化と実行の方法も示しています。

  • rtwdemo_cppclass_functions.cpp は、モデル サブシステムのコンポーネント f1f2 および f3 の初期化関数 (Initialize Function を含む) とエクスポート関数を呼び出す。

  • rtwdemo_cppclass_functions.h はモデルのデータ構造と、エクスポートされたエントリポイント関数およびデータ構造のパブリック インターフェイスを宣言する。

  • rtwtypes.h は、生成コードが必要とするデータ型、構造体およびマクロを定義する。

インターフェイス コードの記述

コード インターフェイス レポートを開いてレビューします。実行フレームワークのインターフェイス コードを記述するために、このレポートの情報を使用します。

  1. 命令 #include rtwdemo_cppclass_functions.h および #include rtwtypes.h を追加することによって、生成されたヘッダー ファイルをインクルードします。

  2. モデルの Inport ブロックの生成コードへの入力データを記述します。

  3. 生成されたエントリポイント関数を呼び出します。

  4. モデルの Outport ブロックの生成コードからデータを読み取ります。

入力端子:

  • 次元 1 の real_T 型の rtU.U1

  • 次元 1 の real_T 型の rtU.U2

  • 次元 1 の real_T 型の rtU.U3

エントリポイント関数:

  • エントリポイント関数の初期化、void initialize(void)。開始時にこの関数を一度呼び出します。

  • エクスポート関数、void t_1tic_A(void)。必要に応じてこの関数を呼び出します。

  • エクスポート関数、void t_1tic_B(void)。必要に応じてこの関数を呼び出します。

  • エクスポート関数、void t_1tic_C(void)。必要に応じてこの関数を呼び出します。

出力端子:

  • 次元 [2] の int8_T 型の rtY.TicToc1

  • 次元 [2] の int8_T 型の rtY.TicToc2

  • 次元 1 の int8_T 型の rtY.TicToc10

詳細

モデル例を閉じる

bdclose('rtwdemo_cppclass_export_functions')
bdclose('rtwdemo_cppclass_functions')

エクスポート関数サブシステムのコード生成

エクスポート関数サブシステムのコードを生成するには、以下を行います。

  1. コードを生成しているサブシステムがエクスポートの要件を満たしていることを確認します。

  2. [コンフィギュレーション パラメーター] ダイアログ ボックスで、以下の操作を実行します。

    1. パラメーター [システム ターゲット ファイル]ert.tlc などの ERT ベースのシステム ターゲット ファイルに設定します。

    2. 検証のために生成コードで SIL ブロックが必要な場合は、モデル コンフィギュレーション パラメーター [ブロックの作成][SIL] に設定します。

    3. [OK] または [適用] をクリックします。

  3. サブシステム ブロックを右クリックし、コンテキスト メニューから [C/C++ コード]、[関数のエクスポート] を選択します。

    この操作によって、元のサブシステムのコンテンツを含む新しいモデル subsystem.slx が作成およびビルドされ、Model ブロックを含む ScratchModel が作成されます。このブロックは新しく作成された subsystem.slx モデルを参照します。

    コード ジェネレーターはコードを生成し、そのコードを作業フォルダーに配置します。

    手順 2b で [ブロックの作成][SIL] に設定した場合、Simulink は生成コードを表す S-Function ブロックを含む新しいウィンドウを開きます。このブロックのサイズ、形状、コネクタは元のサブシステムと同じです。

これでコード生成とオプションのブロック作成が完了しました。生成された ERT コードと S-Function ブロック用に実行するときに、コードとオプションのブロックをテストおよび使用できます。オプションのワークフロー タスクについては、カスタム初期化関数名の指定カスタムの説明の指定を参照してください。

カスタム初期化関数名の指定

エクスポートされた関数のカスタム初期化関数名を、slbuild コマンドの引数として指定できます。コマンドの形式は次のようになります。

blockHandle = slbuild('subsystem', 'Mode', 'ExportFunctionCalls',..
             'ExportFunctionInitializeFunctionName', 'fcnname')

fcnname は関数名を指定します。たとえば、名前 'myinitfcn' を指定する場合、ビルド プロセスは次のようなコードを出力します。

/* Model initialize function */
void myinitfcn(void){
...
}

カスタムの説明の指定

Inport ブロックの [ブロック プロパティ] ダイアログ ボックスを使用して、エクスポートする関数についてのカスタムの説明を入力できます。

  1. コードをエクスポートしているサブシステムの制御端子を駆動する Inport ブロックを右クリックします。

  2. [プロパティ] を選択します。

  3. [一般] タブの [説明] フィールドに説明テキストを入力します。

関数のエクスポート中、入力したテキストは Inport ブロックのヘッダーの生成コードに出力されます。たとえば、プログラム例 rtwdemo_exporting_functions を開き、端子 t_1tic_A の [ブロック プロパティ] ダイアログ ボックスに説明を入力した場合、コード ジェネレーターは次のようなコードを生成します。

/*
 * Output and update for exported function: t_1tic_A
 *
 *  My custom description of the exported function
*/
void t_1tic_A(void)
{
...
}

エクスポート関数サブシステム用に生成されたコードの最適化

エクスポート関数サブシステム用に生成されたコードを最適化するには、サブシステムの境界を越える入力信号および出力信号ごとに別々のストレージ クラスを指定します。

エクスポートしている各 Function-Call Subsystem に対して、以下を行います。

  1. サブシステムを右クリックします。

  2. コンテキスト メニューから [ブロックのパラメーター (Subsystem)] を選択します。

  3. [コード生成] タブを選択します。

  4. [関数のパッケージ化][自動] に設定します。

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

関連するトピック