ドキュメンテーション

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

MATLAB オブジェクトとして実行する Stateflow チャートの作成

ステート マシンのプログラミングの利点を MATLAB® のすべての機能と組み合わせるために、スタンドアロンの Stateflow® チャートを Simulink® モデル外で作成します。スタンドアロンのチャートは拡張子 .sfx を付けて保存し、MATLAB オブジェクトとして実行します。チャート アニメーションおよびグラフィカル デバッグのツールを使用して設計を調整します。

スタンドアロンのチャートでは、次のような MATLAB アプリケーションを作成できます。

これらのアプリケーションは、Stateflow ライセンスなしで共有および実行できます。詳細については、スタンドアロンのチャートの共有を参照してください。

スタンドアロンのチャートの作成

スタンドアロンの Stateflow チャートを作成するには、関数 edit を使用して Stateflow エディターを開きます。たとえば、MATLAB コマンド ウィンドウで、次のように入力します。

edit chart.sfx
ファイル chart.sfx が存在しない場合、Stateflow エディターでは空のチャートが chart という名前で開きます。それ以外の場合、エディターでは sfx ファイルによって定義されているチャートが開きます。

スタンドアロンのチャートを保存した後、関数 help は、MATLAB でのチャートの実行に関する情報を表示します。

help chart.sfx

Stateflow チャート オブジェクトの作成

MATLAB でスタンドアロンのチャートを実行するには、まず Stateflow チャート オブジェクトを作成します。スタンドアロンのチャートの sfx ファイルの名前を関数として使用します。データの初期値は、名前と値のペアとして指定します。たとえば、次のコマンドは、チャート オブジェクト chartObject を作成し、data1data2 を初期化して、デフォルト遷移を実行します。

chartObject = chart('data1',value1,'data2',value2)

実行の構文、チャート データの値、アクティブ ステートのリストなどのチャート情報を表示するには、関数 disp を使用します。

disp(chartObject)

スタンドアロンのチャートの実行

Stateflow チャート オブジェクトを定義した後、関数 step (必要に応じてデータ値を含める) を呼び出すことにより、スタンドアロンのチャートを実行できます。

step(chartObject,'data1',value1,'data2',value2)

あるいは、次のいずれかの入力イベント関数を呼び出すこともできます。

event_name(chartObject,'data1',value1,'data2',value2)

チャートにグラフィカル関数または MATLAB 関数が含まれている場合は、それらを MATLAB コマンド ウィンドウで直接呼び出すことができます。チャート関数を呼び出しても、スタンドアロンのチャートは実行されません。

function_name(chartObject,u1,u2)

スタンドアロンのチャートは、Stateflow エディターを開かずに実行できます。チャートが開いている場合、Stateflow エディターでは、チャート アニメーションによってアクティブ ステートと遷移が強調表示されます。

デバッグや単体テストの目的で、Stateflow エディターから直接スタンドアロンのチャートを実行することができます。実行中に、ユーザー インターフェイスからデータ値を入力し、イベントをブロードキャストします。詳細については、Stateflow チャート オブジェクトの実行と単位テストを参照してください。

スタンドアロンのチャートは、MATLAB スクリプト、Simulink モデル、または App Designer のユーザー インターフェイスから実行できます。詳細については、以下を参照してください。

スタンドアロンのチャートの共有

Stateflow のライセンスを持っていない共同作業の相手とスタンドアロンのチャートを共有できます。

共同作業の相手は、Stateflow を持っていれば、スタンドアロンのチャートを開いて、編集、実行することが可能です。実行中は、チャート アニメーションとデバッグがサポートされます。実行時エラー メッセージには、チャート内のエラーが発生したステートまたは遷移へのハイパーリンクが含まれます。

Stateflow を持っていない場合、共同作業の相手は、Stateflow エディターを開かずに、MATLAB オブジェクトとしてスタンドアロンのチャートを実行できます。チャート アニメーションとデバッグはサポートされません。実行時エラー メッセージには、チャートへのハイパーリンクは含まれません。

Stateflow チャート オブジェクトのプロパティと関数

Stateflow チャート オブジェクトは、以下を提供することにより、単一の構造体でデータと演算をカプセル化します。

  • スタンドアロンのチャートの内部状態変数を含むプライベート プロパティ

  • チャートのセマンティクスを実装するさまざまな演算を呼び出す関数 step

チャート オブジェクトには、チャート内に存在するさまざまな要素に対応するその他のプロパティや関数も含まれる場合があります。

スタンドアロンのチャートの要素チャート オブジェクトの要素
ローカル データと定数データパブリック プロパティ
入力イベントチャートを実行する関数
グラフィカル関数と MATLAB 関数MATLAB コマンド ウィンドウから呼び出すことのできる関数

チャート オブジェクトの構成オプション

チャート オブジェクトを作成するときに、以下の構成オプションを名前と値のペアとして含めることでチャートの動作を指定できます。

構成オプション説明
-animationDelay各遷移セグメントを強調表示するためにチャート アニメーションが使用する遅延を指定します。既定値は 0.01 秒です。遅延なしでチャート アニメーションを生成するには、ゼロに設定します。

1 秒の遅延を指定して、非常に低速のアニメーションを含むチャート オブジェクトを作成します。

chartObject = chart('-animationDelay',1)

-enableAnimationチャート アニメーションを有効にします。既定値は true です。

アニメーションが無効なチャート オブジェクトを作成します。

chartObject = chart('-enableAnimation',false)

-executeInitStepデフォルト遷移の内部実行を有効にします。既定値は true です。

チャート オブジェクトを作成しますが、デフォルト遷移は実行しません。

chartObject = chart('-executeInitStep',false)

-warningOnUninitializedDataチャート オブジェクトの初期化後に、空のチャート データに関する警告を有効にします。既定値は true です。

チャート オブジェクト作成時に警告を回避します。

chartObject = chart('-warningOnUninitializedData',false)

チャート データの初期化

Stateflow エディターで、[シンボル] ウィンドウを使用してチャート データの初期値を指定できます。チャート オブジェクトを作成すると、チャート データはそのスコープに従ってアルファベット順に初期化されます。定数データが最初に初期化されます。ローカル データは最後に初期化されます。

初期値を指定する式を使用する場合、チャートは以下の方法で式の解決を試みます。

  • チャート内の他のデータの値を使用

  • 検索パス上での関数の呼び出し

たとえば、式 y を使用して、ローカル データ x の初期値を指定するとします。その場合、次のようになります。

  • y という定数がチャートに含まれている場合は、yx より前に初期化されます。ローカル データ x には、y と同じ初期値が代入されます。

  • y というローカル データがチャートに含まれている場合は、xy より前に初期化されます。ローカル データ x は空の配列に代入されます。構成オプション -warningOnUninitializedDatatrue に設定されている場合は、警告が発生します。

  • y という名前のデータがチャートに含まれていない場合、x は関数 y を呼び出すことによって初期化されます。ファイル y.m が検索パスにない場合は、次のエラーが発生します。

    Undefined function or variable 'y'.

Stateflow では、MATLAB ワークスペースを検索して初期値を解決することはないため、このエラーは、y という変数が MATLAB ワークスペース内にある場合であっても発生します。

機能および制限事項

サポートされている機能は次のとおりです。

  • MATLAB をアクション言語とする Classic チャートのセマンティクス。Simulink でのコード生成が制限されている関数を含めて、MATLAB のすべての機能を使用できます。スクリプトとモデルを使用した Stateflow チャート オブジェクトの実行を参照してください。

    メモ

    スタンドアロンの Stateflow チャートでは、オペレーティング システムのコマンド記号 ! はサポートされません。オペレーティング システムのコマンドを実行するには、関数 system を使用します。

  • 階層をもつ排他的 (OR) およびパラレル (AND) ステート構造。ステート構造ステートの階層を参照してください。

  • フロー チャート、グラフィカル関数および MATLAB 関数。チャート内の再利用可能なコンポーネントを参照してください。

  • チャートのローカル データと定数データ (型の制限なし)。Stateflow チャート オブジェクトの実行と単位テストを参照してください。

  • 入力イベント。Stateflow チャートを使用したヒューマンマシン インターフェイスのロジックの設計を参照してください。

  • 次の時相論理演算子。

    • afterevery、および temporalCount は、呼び出し回数 (tick)、絶対時間 (secmsecusec)、および入力イベントで演算を行います。

    • count は、チャートの呼び出し回数 (tick) で演算を行います。

    • elapsed は、絶対時間 (sec) で演算を行います。

    詳細については、Stateflow チャートを使用したヒューマンマシン インターフェイスのロジックの設計を参照してください。

    メモ

    スタンドアロンの Stateflow チャートでは、絶対時間の時相論理は条件付き遷移ではサポートされません。

  • チャートの実行時にアクティブなステートにアクセスする関数 getActiveStates。アクティブ ステートを cell 配列として保存するには、次のように入力します。

    states = getActiveStates(chartObject)

  • スタンドアロンのチャートを MATLAB オブジェクトとして実装するコードを生成する関数 matlab.internal.getcode.sfxfile。このコードを文字列 code として保存するには、次のように入力します。

    code = matlab.internal.getcode.sfxfile('chart.sfx')
    コードをファイル chart.m に保存するには、次のように入力します。
    code = matlab.internal.getcode.sfxfile('chart.sfx',true)

以下の Simulink に固有の内容はサポートされていません。

  • サンプル時間と連続時間のセマンティクス

  • C アクション言語

  • ステートとしての Simulink 関数および Simulink サブシステム

  • 入力、出力およびパラメーターのデータ

  • データ ストア メモリのデータ

  • 出力イベントとローカル イベント

  • 入力、出力およびローカルのメッセージ

その他の制限は次のとおりです。

  • Mealy や Moore のセマンティクスなし

  • 状態遷移表なし

  • 真理値表関数なし

  • ステートを親とするローカル データや関数なし

  • 遷移アクション (遷移元ステートからの出力後、遷移先ステートへの入力前に実行されるアクション) なし

  • 変化検出演算子 (hasChangedhasChangedFrom または hasChangedTo) なし

参考

| |

関連するトピック