このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
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
に書き込みます。
参考
Simulink.Bus
(Simulink)