ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

Stateflow チャートでのカスタム コードの再利用

C または C++ で記述されたカスタム コードを、Simulink® モデルの Stateflow® チャートと統合できます。カスタム コードと Stateflow チャートの間でデータと関数を共有することにより、Stateflow の機能を拡張し、ソフトウェアを活用して既存のコードを利用することができます。

Stateflow チャートは、他の再利用可能な関数と同じ構文を使用して、カスタム コード関数を呼び出します。

return_val = function_name(arg1,arg2,...)

メモ

カスタム コードと Stateflow チャートの間では、固定小数点データは共有しないでください。カスタム コードから返されるデータの型は double でなければなりません。

シミュレーションに適した手順の選択

シミュレーションに適した手順を選択するには、強調表示されているブロックのうちで目的を最もよく表しているものをクリックします。

カスタム C コードを使用したグローバル定数の定義

この例では、カスタム C コードを使用して、モデル内の全チャートに適用される定数を定義する方法を説明します。

モデルには、1 つの入力をもつ Stateflow® チャートが含まれています。入力は、シミュレーション中にモデル内の手動スイッチを切り替えることによって 0 または 1 に設定できます。

チャートには 2 つのステート、AB が含まれています。この例では、値 1 と 0 を使用する代わりに、チャート内のステート間の遷移をガードするための、TRUE および FALSE という名前の 2 つの定数を定義しています。このようなカスタム定義により、チャート アクションの動作がわかりやすくなります。TRUEFALSE は、Stateflow のデータ オブジェクトではありません。

2 つの定数を定義するカスタム コードを入力するには、次を行います。

  1. [モデル コンフィギュレーション パラメーター] ダイアログ ボックスを開きます。

  2. [シミュレーション ターゲット] ペインを選択します。

  3. [ヘッダー ファイル] サブペインに、ステートメント #define および #include を入力します。たとえば、この例では、以下のコードでグローバル定数を定義します。

#define TRUE 1
#define FALSE 0

この 2 つのカスタム定義は生成されたマシンのヘッダー ファイル (sf_custom_code_global_constants_sfun.h) の先頭に配置されるので、このモデルに属しているすべてのチャートに TRUEFALSE を使用できます。

カスタム C コードを使用した定数、変数、関数の定義

この例では、カスタム C コードを使用して、モデル内の全チャートに適用される定数、変数、および関数を定義する方法を説明します。

モデルには、Sine Wave ブロックからの入力信号がある Stateflow チャートが含まれています。

チャートには、2 つのステート AB、および 3 つのデータ オブジェクト input_datalocal_dataout_data が含まれています。このチャートは my_global という名前のカスタム変数にアクセスし、my_function という名前のカスタム関数を呼び出します。

カスタム コードにアクセスするようにモデルを構成するには、次を行います。

  1. [モデル コンフィギュレーション パラメーター] ダイアログ ボックスを開きます。

  2. [シミュレーション ターゲット] ペインを選択します。

  3. [ヘッダー ファイル] サブペインに、ステートメント #define および #include を入力します。カスタム ヘッダー ファイルをインクルードする場合は、ファイル名を二重引用符で囲む必要があります。

  4. [インクルード ディレクトリ] サブペインに、カスタム コード ファイルを含むフォルダーの名前を入力します。モデル フォルダーのサブフォルダー内にあるカスタム コード ファイルにアクセスするには、.\subfolder_name という形式の相対パス名を使用します。

  5. [ソース ファイル] サブペインに、カスタム コードを含むソース ファイルの名前を入力します。モデル フォルダーのサブフォルダー内にあるソース ファイルにアクセスするには、.\subfolder_name\source_file.c という形式の相対パス名を使用します。

この例では、カスタム コードは、以下の構成を使用して、3 つの定数、1 つの変数、1 つの関数を定義します。

  • [ヘッダー ファイル] サブペインには次のステートメントが含まれます。#include "sf_custom_code_constants_vars_fcns_hdr.h"

  • [インクルード ディレクトリ] サブペインには、すべてのカスタム コード ファイルがモデルと同じフォルダー内にあることを示す単一のピリオド (.) が含まれます。

  • [ソース ファイル] サブペインには、次のファイル名が含まれます。sf_custom_code_constants_vars_fcns_src.c

カスタム ヘッダー ファイル sf_custom_code_constants_vars_fcns_hdr.h には、以下のように、3 つの定数の定義が含まれています。

#define TRUE 1
#define FALSE 0
#define MAYBE 2

このヘッダー ファイルには、変数 my_global と関数 my_function の宣言も含まれています。

extern int myglobal;
extern int my_function(int var1, double var2);

カスタム ソース ファイル sf_custom_code_constants_vars_fcns_src.c は、Stateflow で生成されたコードと一緒に、単一の S-Function MEX ファイルにコンパイルされます。

カスタム定義は生成されたマシンのヘッダー ファイル (sf_custom_code_constants_vars_fcns_sfun.h) の先頭に配置されるので、このモデルに属しているすべてのチャートでカスタム定義にアクセスできます。

関連するトピック