Main Content

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

再利用のための Stateflow 関数のエクスポート

チャート レベルの関数をエクスポートすると、関数のスコープが Simulink® モデルの他のブロックへ拡大されます。例は、Simulink と Stateflow での関数の共有を参照してください。以下の関数をエクスポートできます。

  • グラフィカル関数

  • MATLAB® 関数

  • 真理値表

チャートレベルの関数をエクスポートする方法

  1. 関数の配置されているチャートを開きます。

  2. プロパティ インスペクターで、[詳細設定] セクションを開きます。

  3. [チャート レベルの関数をエクスポート] を選択します。

  4. 関数がライブラリ チャート内に配置されている場合は、そのチャートをメイン モデルにリンクします。

[チャート レベルの関数をエクスポート] を選択すると、 Simulink Caller ブロックでドット表記 chartName.functionName を使用して、エクスポートした関数を呼び出すことができます。エクスポートした関数を任意の Stateflow® ブロックまたは Simulink Caller ブロックからモデル全体で呼び出すには、[エクスポートされた関数をグローバルに可視として扱う] を選択します。これらの関数の呼び出しにはドット表記を使用しないでください。複数の関数を同じ名前でエクスポートすることはできません。

Simulink 関数は Simulink キャンバスで直接定義することもできます。詳細については、Simulink Functionを参照してください。

チャートレベルの関数をエクスポートする場合のルール

 ライブラリ チャートをメイン モデルにリンクしてチャートレベルの関数をライブラリからエクスポートする

 サポートされていない入出力を含むチャートレベルの関数はエクスポートしない

 Simulink 関数をエクスポートしない

 モデル参照の境界を越えて関数をエクスポートしない

チャート レベルの関数をエクスポート

この例では、ライブラリ チャート内の関数をメイン モデルにエクスポートする方法について説明します。

  1. 以下のオブジェクトを作成します。

    • main_model という名前のモデルを modChart という名前のチャートに追加します。

    • lib1 という名前のライブラリ モデルを lib1Chart という名前のチャートに追加します。

    • lib2 という名前のライブラリ モデルを lib2Chart という名前のチャートに追加します。

  2. これらのグラフィカル関数をライブラリ チャートに作成します。

    • lib1Chart に対して、以下のグラフィカル関数を追加します。

    • lib2Chart に対して、以下のグラフィカル関数を追加します。

    • モデル エクスプローラーで、関数の入出力、ab および c のそれぞれで以下のプロパティを設定します。

      • Size1

      • ComplexityOff

      • Typedouble

  3. modChart の場合、グラフィカル関数とデフォルト遷移に lib1_func アクションを追加します。

  4. チャートごとに、以下の手順に従います。

    1. モデル エクスプローラーで、関数の入出力、ab および c のそれぞれで以下を設定します。

      • Size1

      • ComplexityOff

      • Typedouble

    2. [チャート] プロパティ ダイアログ ボックスを開きます。

    3. [チャート] プロパティ ダイアログ ボックスで、[チャート レベルの関数をエクスポート] および [エクスポートされた関数をグローバルに可視として扱う] をオンにします。

    4. [OK] をクリックします。

  5. lib1Chartlib1 から、また lib2Chartlib2 から、main_model にドラッグします。メイン モデルは、以下のようになります。

    これで各チャートに、main_model 内の任意のチャートから呼び出しできるグラフィカル関数を定義したことになります。

  6. モデル エクスプローラーを開きます。

  7. モデル エクスプローラーの [モデルの階層構造] ペインで、main_model に移動します。

  8. データ xy を Stateflow マシンに追加します。

    1. [追加][データ] を選択します。

    2. [名前] 列に x と入力します。

    3. [初期値] 列に 0 と入力します。

    4. 他の x プロパティについては既定の設定を使用します。

    5. [追加][データ] を選択します。

    6. [名前] 列に y と入力します。

    7. [初期値] 列に 1 と入力します。

    8. 他の y プロパティについては既定の設定を使用します。

    こうすると、入出力データがグローバルに定義され、エクスポートされたグラフィカル関数がサポートされるようになります。

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

  10. [モデル コンフィギュレーション パラメーター] ダイアログ ボックスで、[ソルバー] ペインに移動します。

  11. [ソルバーの選択] セクションで、以下の変更を行います。

    1. [タイプ] には [固定ステップ] を選択します。

    2. [ソルバー] には [離散 (連続状態なし)] を選択します。

  12. [ソルバーの詳細] セクションで、以下の変更を行います。

    1. [固定ステップ サイズ]1 と入力します。

    2. [OK] をクリックします。

    このステップにより、モデルのシミュレーション時に離散ソルバーの使用が確実になります。詳細については、ソルバーの比較を参照してください。

シミュレーション中に実行されること

モデルをシミュレートすると、各タイム ステップ中に以下のことが実行されます。

フェーズオブジェクト呼び出すグラフィカル関数そのグラフィカル関数の実行内容
1modChartlib1_func2 つの入力引数 x および y が読み込まれる
2lib1_funclib2_funcこれら 2 つの入力引数が渡される
3lib2_funcmod_funcxy の和が x に代入される

シミュレーション結果の表示方法

シミュレーション結果を表示するには、スコープをモデルに追加します。以下の手順に従います。

  1. Simulink ライブラリ ブラウザーを開きます。

  2. Simulink/Sinks ライブラリから Scope ブロックをクリックし、main_model に追加します。

  3. モデル エクスプローラーを開きます。

  4. [モデルの階層構造] ペインで、modChart に移動します。

  5. 出力データ z をチャートに以下のように追加します。

    1. [追加][データ] を選択します。

    2. [名前] 列に z と入力します。

    3. [スコープ] 列で [出力] をクリックします。

    4. 他のプロパティについては既定の設定を使用します。

  6. modChart については、読み込まれるデフォルト遷移アクションを以下のように更新します。

    {x = lib1_func(x,y); z = x;}
  7. モデルで、modChart からの出力端子を Scope ブロックの入力端子に接続します。

  8. Scope ブロックをダブルクリックして表示を開きます。

  9. シミュレーションを開始します。

  10. シミュレーションの終了後、スコープ表示を右クリックして [オートスケール] をクリックします。

    この結果は、次のようになります。