ドキュメンテーション

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

Stateflow チャートでのカスタム構造体の統合

C コードでカスタム構造体を定義して、シミュレーションやコード生成を目的として Simulink® モデルの Stateflow® チャートに統合できます。たとえば、モデル sf_bus_demo は、カスタム C 関数を使用して出力構造体 outbus に書き込みます。カスタム コードとデータを共有することにより、Stateflow でサポートされている機能を拡張し、既存のコードを利用することができます。詳細については、Stateflow チャートでのカスタム コードの再利用Stateflow 構造体を介したバス信号へのアクセスを参照してください。

C コードでのカスタム構造体の定義

  1. C コードで、カスタム ヘッダー ファイルを作成することによって構造体を定義します。ヘッダー ファイルには、Stateflow 構造体を定義する Simulink.Bus オブジェクトのプロパティに一致する typedef 宣言が含まれています。たとえば、モデル sfbus_demo では、ヘッダー ファイル 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 アクション言語チャートを、カスタム C コードを含むように設定します。

  4. モデルをビルドして実行します。

Stateflow 構造体をカスタム コードに渡す

構造体ポインターを引数として取るカスタム コード関数を作成する場合は、Stateflow 構造体をアドレスで受け渡します。Stateflow 構造体またはそのフィールドの 1 つのアドレスをカスタム関数に渡すには、& 演算子とドット表記を使用します。

  • &outbus は、Stateflow 構造体 outbus のアドレスを提供します。

  • &outbus.inputsignal は、構造体 outbus のサブ構造体 inputsignal のアドレスを提供します。

  • &outbus.inputsignal.input は、サブ構造体 outbus.inputsignal のフィールド input のアドレスを提供します。

詳細については、サブ構造体とフィールドのインデックス付けを参照してください。

たとえば、モデル sfbus_demo には、構造体ポインターを引数として取るカスタム C 関数 counterbusFcn が含まれています。カスタム ヘッダー ファイルには、以下の関数宣言が含まれています。

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 に書き込みます。

参考

関連する例

詳細