Stateflow チャートのカスタム構造体の統合
この例では、Stateflow® チャートのカスタム コードの構造体を使用する方法を説明します。構造体型のデータを C コードで定義し、Stateflow 構造体および Simulink® バスと統合できます。カスタム コードとデータを共有することにより、Stateflow でサポートされている機能を拡張し、既存のコードを利用することができます。詳細については、Stateflow チャートでのカスタム コードの再利用を参照してください。
この例では、Stateflow チャートは Simulink バスからのデータを処理し、その結果を別の Simulink バスに出力します。入力バスと出力バスの両方が オブジェクト Simulink.Bus (Simulink)COUNTERBUS により定義されます。チャートでは、Simulink バスは Stateflow 構造体 inbus および outbus とインターフェイスをとります。チャートはカスタム C 関数を呼び出して出力構造体 outbus に書き込みます。

C コードでのカスタム構造体の定義
1. C コードで、カスタム ヘッダー ファイルを作成することによって構造体を定義します。ヘッダー ファイルには、このカスタム構造体のプロパティを定義する typedef 宣言が含まれています。たとえば、このモデルでは、ヘッダー ファイル counterbus.h は次の 3 つのカスタム構造体を宣言します。
...
typedef struct {
int input;
} SIGNALBUS;typedef struct {
int upper_saturation_limit;
int lower_saturation_limit;
} LIMITBUS;typedef struct {
SIGNALBUS inputsignal;
LIMITBUS limits;
} COUNTERBUS;
...2.型エディターで、各カスタム構造体の typedef 宣言に一致する Simulink.Bus オブジェクトを定義します。各 Simulink.Bus オブジェクトの [ヘッダー ファイル] フィールドに、一致する typedef 宣言を含むヘッダー ファイルの名前を入力します。

3. カスタム コードの構成の説明に従って、カスタム C コードを含むように Stateflow チャートを構成します。
4. モデルをビルドして実行します。
カスタム コードへの Stateflow 構造体の引き渡し
構造体ポインターを引数として取るカスタム コード関数を呼び出す場合は、Stateflow 構造体をアドレスで受け渡します。Stateflow 構造体またはそのフィールドの 1 つのアドレスをカスタム関数に渡すには、& 演算子とドット表記を使用します。
&outbusは、Stateflow 構造体outbusのアドレスを提供します。&outbus.inputsignalは、構造体outbusのサブ構造体inputsignalのアドレスを提供します。&outbus.inputsignal.inputは、サブ構造体outbus.inputsignalのフィールドinputのアドレスを提供します。
詳細については、Stateflow 構造体へのインデックス付けと値の割り当てを参照してください。
たとえば、この例には、構造体ポインターを引数として取るカスタム C 関数 counterbusFcn が含まれています。カスタム ヘッダー ファイル counterbus.h には、以下の関数宣言が含まれています。
extern void counterbusFcn(COUNTERBUS *u1, int u2, COUNTERBUS *y1, int *y2);
チャートは、以下の関数呼び出しを使用して、アドレスを Stateflow 構造体 counterbus_struct および outbus に渡します。
counterbusFcn(&counterbus_struct, u2, &outbus, &y2);

関数は、チャート入力 u2 の値とローカル構造体 counterbus_struct を読み取ります。また、チャート出力 y2 および出力構造体 outbus に書き込みます。

カスタム コードのバス制限
カスタム コードで定義されたバスに多次元配列が含まれている場合、そのバスをインポートすることはできません。
多次元配列を含むバスをカスタム コードで使用するには、Stateflow でバスを定義し、そのバスをカスタム コードに渡します。
参考
Simulink.Bus (Simulink)