Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

Stateflow チャートでの Simulink コンポーネントの再利用

Simulink® 関数は、ステートと遷移のアクションにおいて Simulink サブシステムを呼び出せるようにするグラフィカル オブジェクトです。Simulink 関数は、Simulink モデルの Stateflow® チャートでのみサポートされます。

Simulink 関数を使用すると、設計の効率性が向上し、モデルの可読性も高くなります。この関数の代表的な使用例は、以下のとおりです。

  • Simulink ブロックを必要とする関数の定義

  • 複数コントローラーの実行のスケジュール

Simulink 関数は、チャート、ステート、またはサブチャート内の任意の場所に配置できます。関数の場所により、その関数を呼び出すことのできるステートと遷移の集合が判定されます。

  • ある特定のステート、またはサブチャートとそのサブステートの内部で関数を呼び出す場合は、Simulink 関数をそのステートまたはサブチャートに配置します。この関数は、そのステートまたはサブチャートの親や先祖に含まれる同じ名前の関数よりも優先されます。

  • チャートの任意の部分から関数を呼び出す場合は、Simulink 関数をチャート レベルに配置します。

  • モデルの任意のチャートから関数を呼び出す場合は、Simulink Function (Simulink) ブロックを使用して、関数を Simulink キャンバスで直接定義します。詳細については、Simulink 関数の概要 (Simulink)を参照してください。

メモ

Simulink 関数は Stateflow 階層のチャートやステート データにはアクセスできません。

たとえば、以下の Simulink 関数の名前は sim_fcn です。3 つの引数 (abc) を取り、2 つの出力値 (xy) を返します。

この関数には Simulink サブシステムがあり、最初の引数をゲイン 25 で乗算し、他の 2 つの引数を結合して複素数の出力信号を生成します。

Simulink 関数の定義

  1. オブジェクト パレットで、Simulink 関数のアイコン をクリックします。ポインターをチャート内の新しい Simulink 関数の位置に移動します。

  2. 関数のシグネチャ ラベルを入力します。

    関数シグネチャ ラベルは、関数の名前と、その引数と戻り値の正式名称を指定します。シグネチャ ラベルの構文は以下のとおりです。

    [return_val1,return_val2,...] = function_name(arg1,arg2,...)
    複数の戻り値と複数の入力引数を指定できます。戻り値と入力引数として、値のスカラー、ベクトル、または行列を指定できます。戻り値が 1 つのみの関数では、シグネチャ ラベルの大かっこを省略します。

    すべての引数と戻り値に一意の変数名を使用しなければなりません。

  3. 関数をプログラミングするには、関数ボックスをダブルクリックして Simulink エディターを開きます。初期状態では、エディターには関数呼び出し Trigger (Simulink) ブロック、および関数シグネチャと一致する Inport (Simulink) および Outport (Simulink) ブロックがあります。Trigger ブロックは削除できません。

  4. Simulink エディターで、ブロックを追加し、Inport および Outport ブロックに接続します。

  5. Inport および Outport ブロックを構成します。

    1. 各ブロックをダブルクリックして、[ブロック パラメーター] ダイアログ ボックスを開きます。

    2. [信号属性] タブで、入力パラメーターまたは戻り値の [データ型] および [端子の次元] を入力します。

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

    メモ

    Simulink 関数の Inport ブロックは、[データ型][端子の次元] を継承できません。詳細については、Inport ブロックのプロパティの明示的な設定を参照してください。

ステートと遷移における Simulink 関数の呼び出し

Simulink 関数は、任意のステートまたは遷移のアクションから呼び出すことができます。Simulink 関数は、他の関数から呼び出すこともできます。

Simulink 関数を呼び出すには、関数シグネチャを使用し、関数シグネチャの各仮引数に実際の引数の値を設定します。実際の引数と仮引数のデータ型が異なる場合、関数は実際の引数を仮引数のデータ型にキャスト (変換) します。

Simulink 関数のプロパティの指定

プロパティのダイアログ ボックスから、Simulink 関数の一般的なプロパティを設定できます。関数プロパティのダイアログ ボックスを開くには、Simulink 関数のボックスを右クリックし、[プロパティ] を選択します。関数のプロパティの説明については、Subsystem, Atomic Subsystem, CodeReuse Subsystem (Simulink) を参照してください。

Simulink 関数の使用方法のガイドライン

引数名での英数字とアンダースコアの使用

このガイドラインでは、Inport および Output ブロックの名前は Stateflow チャートでの識別子命名規則に従っています。

Inport ブロックのプロパティの明示的な設定

Simulink 関数の Inport ブロックは、データ型とサイズを継承できません。そのため、double 型のスカラーでない Inport ブロックについては、[データ型][端子の次元] を個別に設定しなければなりません。

Simulink 関数の Outport ブロックは、サブシステム内の接続に基づいて、サイズとデータ型を継承できます。そのため、これらのブロックの [データ型][端子の次元] は継承として指定できます。

ヒント

Inport ブロックのプロパティの更新を簡単にするには、データ型とサイズをパラメーターとして指定できます。

不連続的な信号から連続的な信号への変換

Simulink 関数の Outport ブロックでは、不連続的な信号はサポートされません。不連続的な信号を出力するブロックが関数に含まれる場合は、不連続的な出力と Outport ブロックの間に Signal Conversion (Simulink) ブロックを挿入してください。このアクションにより、出力信号の連続性が確保されます。

不連続的な信号を出力できるブロックは、Bus Creator (Simulink) ブロックや Mux (Simulink) ブロックなどです。Bus Creator ブロックでは、このブロックがバーチャル バスを出力する場合、出力は不連続的となります。[非バーチャルなバスとして出力] が選択されている場合、出力信号は連続的になるため、変換は不要です。

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

Simulink 関数をエクスポートすると、シミュレーション中に実行時エラーが発生します。このエラーを回避するには、[チャートのプロパティ] ダイアログ ボックスを開き、[チャート レベルの関数をエクスポート] チェック ボックスをオフにします。

Moore チャートでは Simulink 関数を使用しない

Moore チャートでは、Simulink 関数を使用できません。この制限により、チャートの実行時に Moore のセマンティクス違反が生じるのを回避できます。

チャートの初期化中に実行されるデフォルト遷移で Simulink を呼び出さない

チャートのプロパティ [初期化時に指定されたチャートを実行 (入力)] を選択した場合は、チャートが初めて起動するときに実行されるデフォルト遷移で Simulink 関数を呼び出すことはできません。呼び出した場合、チャートでシミュレーション中に実行時エラーが発生します。

連続時間チャートのステート During アクションまたは遷移ステートにおいては Simulink 関数を呼び出さない

連続時間チャートでは、マイナー タイム ステップ中は、Simulink 関数を呼び出すことはできません。Simulink 関数は、メジャー タイム ステップ中に発生するアクション、つまり、ステートの entry または exit アクション、および遷移アクションで呼び出してください。ステート during アクションまたは遷移条件で Simulink 関数を呼び出すと、シミュレーション中に実行時エラーが発生します。

Simulink 関数用の HDL コードを生成しない

Simulink 関数は HDL コード生成をサポートしません。Simulink 関数が含まれるチャートの HDL コードを生成すると、シミュレーション中に実行時エラーが発生します。

値による引数の受け渡し

参照により引数を Simulink 関数に渡すと、シミュレーション中に実行時エラーが発生します。

参考

(Simulink) | (Simulink) | (Simulink) | (Simulink) | (Simulink) | (Simulink) | (Simulink)

関連するトピック