stateflow 7 - mathworks - makers of matlab and simulink stateflowの利用...

6
Stateflow ® 7 ステートマシンおよび制御ロジックの設計およびシミュレーション Stateflow®はSimulink®を拡張して、ス テートマシンとフローチャートを開発する ための設計環境を提供します。Stateflow は、複雑なロジックを自然で読みやすく、か つ理解しやすい形で記述するために必要 な言語要素を提供します。Stateflowは、 MATLAB®およびSimulinkと緊密に統合 され、制御ロジック、監視ロジック、および モードロジックを含む組込みシステムを設 計するための効率的な環境を提供します。 Stateflowチャートでは、階層状態や並列 状態、およびその状態間の遷移をグラフィ カルに表現することができます。Stateflow は、従 来 の 状 態 図 を、フロ ー チャート、 Embedded MATLAB ™ 関数、グラフィカ ル関数、真理値表、テンポラル演算子、直 接イベントブロードキャスト、および手書き Cコードの統合に関するサポートによって 拡張します。 別売のStateflow®Coderを使用すると、 StateflowチャートからCコードを自動生 成することができます。 主な機能 言語要素、階層、並列化および複雑なロジックを自然かつ理解 可能な形で記述するための決定的実行意味論の提供 フローダイアグラムを用いてグラフィカルに、Embedded MATLAB 関数を用いて手続き的に関数を定義。また、真理値 表を用いることで表形式の関数を定義 テンポラルロジックを用いた、遷移やイベントのスケジューリン グ機能 ミーリー型およびムーア型の有限状態マシンのサポート カスタムまたは既存のCコードを、入出力の引数を含めた形で 組込み可能 バス信号、ベクタデータ、行列データ、および固定小数点データ のサポート 不適切に指定されている真理値表などの静的チェック機能 矛盾する遷移、周期問題、状態矛盾、データ範囲の異常、オー バーフロー状態などのランタイムチェック機能 Stateflowチャートのアニメーション表示とシミュレーション中 のデータのロギングにより、システムの理解、デバッグを促進 グラフィカルなブレークポイントの設定、チャートのステップ実 行、およびデータのブラウジングが可能な統合されたデバッガ 航空機の昇降の故障検出、 分離および再構成システ ム。SimulinkとStateflow を用いた、制御システムお よび航空機力学に対する モード切替えの影響のシ ミュレーションと検討の例 です。 Actuators en:L_switch();R_switch(); du:L_switch();R_switch(); LO 1 L1 passive modes.LO_mode=2; active modes.LO_mode=4; standby modes.LO_mode=3; off en:modes.LO_mode=1; ex:fails++; isolated modes.LO_mode=0; RO 2 L1 passive modes.RO_mode=2; active modes.RO_mode=4; standby modes.RO_mode=3; off en:modes.RO_mode=1; ex:fails++; isolated modes.RO_mode=0; LI 3 L1 passive modes.LI_mode=2; active modes.LI_mode=4; send(E,LO); standby modes.LI_mode=3; off en:modes.LI_mode=1; ex:fails++; isolated modes.LI_mode=0; RI 4 L1 passive modes.RI_mode=2; active modes.RI_mode=4; send(E,RO); standby modes.RI_mode=3; off en:modes.RI_mode=1; ex:fails++; isolated modes.RI_mode=0; [fails>=5] go_isolated/... send(E,LI); 2 [!LI_act()|RO_act()] [LI_act()] 1 [!RO_act()&&... LI_act()] [!(pos.low_press.H1_fail)&&... !(pos.L_pos_fail.LO_pos_fail)] go_off[!in(off)] /send(E,LI); 2 [fails>=5] 1 go_isolated/send(E,RI); 2 [!RI_act()|LO_act()] [RI_act()] 1 [!LO_act()&&... RI_act()] [!(pos.low_press.H3_fail)&&... !(pos.R_pos_fail.RO_pos_fail)] go_off[!in(off)] /send(E,RI); 2 [fails>=5] go_isolated/send(E,LO);.. . send(E,RO); 2 [!LO_act()|RI_act()] [LO_act()] [RO_act()&&... LO_act()] [!(pos.low_press.H2_fail)&&.. . !(pos.L_pos_fail.LI_pos_fail)] go_off[!in(off)] /send(E,LO);... send(E,RO); 2 [fails>=5] 1 go_isolated/send(E,RO);... send(E,LO);send(E,LI); 2 [!RO_act()|LI_act()] [RO_act()] [LO_act()&&... RO_act()] go_off[!in(off)] /send(E,RO);.. . send(E,LO);send(E,LI); 2 [!(pos.low_press.H2_fail)&&... !(pos.R_pos_fail.RI_pos_fail)] 1 1 1 1 Actuators en:L_switch();R_switch(); du:L_switch();R_switch(); LO 1 L1 passive modes.LO_mode=2; active modes.LO_mode=4; standby modes.LO_mode=3; off en:modes.LO_mode=1; ex:fails++; isolated modes.LO_mode=0; RO 2 L1 passive modes.RO_mode=2; active modes.RO_mode=4; standby modes.RO_mode=3; off en:modes.RO_mode=1; ex:fails++; isolated modes.RO_mode=0; LI 3 L1 passive modes.LI_mode=2; active modes.LI_mode=4; send(E,LO); standby modes.LI_mode=3; off en:modes.LI_mode=1; ex:fails++; isolated modes.LI_mode=0; RI 4 L1 passive modes.RI_mode=2; active modes.RI_mode=4; send(E,RO); standby modes.RI_mode=3; off en:modes.RI_mode=1; ex:fails++; isolated modes.RI_mode=0; [fails>=5] go_isolated/... send(E,LI); 2 [!LI_act()|RO_act()] [LI_act()] 1 [!RO_act()&&... LI_act()] [!(pos.low_press.H1_fail)&&... !(pos.L_pos_fail.LO_pos_fail)] go_off[!in(off)] /send(E,LI); 2 [fails>=5] 1 go_isolated/send(E,RI); 2 [!RI_act()|LO_act()] [RI_act()] 1 [!LO_act()&&... RI_act()] [!(pos.low_press.H3_fail)&&... !(pos.R_pos_fail.RO_pos_fail)] go_off[!in(off)] /send(E,RI); 2 [fails>=5] go_isolated/send(E,LO);.. . send(E,RO); 2 [!LO_act()|RI_act()] [LO_act()] [RO_act()&&... LO_act()] [!(pos.low_press.H2_fail)&&.. . !(pos.L_pos_fail.LI_pos_fail)] go_off[!in(off)] /send(E,LO);... send(E,RO); 2 [fails>=5] 1 go_isolated/send(E,RO);... send(E,LO);send(E,LI); 2 [!RO_act()|LI_act()] [RO_act()] [LO_act()&&... RO_act()] go_off[!in(off)] /send(E,RO);.. . send(E,LO);send(E,LI); 2 [!(pos.low_press.H2_fail)&&... !(pos.R_pos_fail.RI_pos_fail)] 1 1 1 1

Upload: leanh

Post on 17-Jun-2018

249 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Stateflow 7 - MathWorks - Makers of MATLAB and Simulink Stateflowの利用 Stateflowは、モデリング、シミュレーション、 複雑なダイナミックシステムの解析を行う

© 2009 The MathWorks, Inc. MATLAB and Simulink are registered trademarks of The MathWorks, Inc.See www.mathworks.com/trademarks for a list of additional trademarks. Other product or brand names may be trademarks or registered trademarks of their respective holders.

91737v00 07/09

www.mathworks.co.jp

Stateflow® 7ステートマシンおよび制御ロジックの設計およびシミュレーション

Stateflowチャートの実行Stateflowでロジックをモデリング後、シミュレーションを行い、挙動をライブで表示させ、設計のテスト、検証を行うことができます。グラフィカルデバッガにより、シミュレーションのランタイムエラーを解決し、設計の予測外の挙動を診断することができます。

結果の表示以下の方法で、シミュレーション実行中にStateflowのチャートを可視化することができます。

・�アクティブな状態と遷移経路をハイライト表示

・�Simulinkの提供するディスプレイとスコー�プで状態、データを表示

・�MATLABの可視化およびグラフィカルユーザインタフェース開発ツールを用いてカスタムディスプレイを構築

シミュレーションの後、後処理用に状態とデータをログに記録することができます。

シミュレーションのデバッグStateflowのデバッガを用いて、ブレークポイントの設定、シミュレーション実行の制御、モデルの情報の表示が可能です。グラフィカルユーザインタフェース(GUI)やMATLABコマンドラインから実行することができます。GUIはチャートの実行状態の正確な情報を提供します。ブレークポイント、現在のデータ値、アクティブな状態、呼び出しスタックなどの情報を表示させることができます。

デバッガでは、ランタイムエラーの検出も可能です。検出されるランタイムエラーには、状態の矛盾、遷移の競合、データ範囲違反、無限ループの可能性、真理値表の不適切な指定などがあります。

シミュレーション実行中の状態遷移を表示するSimulinkのフローティングスコープ(左)。Simulink内の信号セレクタ(上)を使用して、特定の状態を選択することができます。

設計の検証Simulink�Verification�and�Validation(オプション製品)を用いて、Stateflowオブジェクトに要求仕様を直接記し、モデルカバレージ判定基準をまとめることができます。

コードの生成Stateflow�Coder(オプション製品)を用いて、Stateflowチャートをさまざまなアプリケーションに展開することができます。

動作環境Stateflowには、以下の製品が必要です。

・�MATLAB・�Simulink

動作環境の詳細につきましては、 � ��� �www.mathworks.co.jp�をご覧ください。

関連製品・Real-Time Workshop® ��SimulinkモデルおよびMATLABコードからCコードを生成

・SimEvents® ��離散イベントシステムのモデリングシミュレーション

・ Simulink Verification and Validation

 ��要求仕様に沿ったデザインとテストケースの開発およびテストカバレージの測定

・Stateflow Coder ��StateflowチャートからCコードを生成

ブレークポイントの設定、シミュレーションの開始/停止、ランタイムエラーの評価、ダイナミックエラーチェックの実行を行うStateflowデバッガ。

Stateflow®はSimulink®を拡張して、ステートマシンとフローチャートを開発するための設計環境を提供します。Stateflowは、複雑なロジックを自然で読みやすく、かつ理解しやすい形で記述するために必要な言語要素を提供します。Stateflowは、MATLAB®およびSimulinkと緊密に統合�され、制御ロジック、監視ロジック、およびモードロジックを含む組込みシステムを設計するための効率的な環境を提供します。

Stateflowチャートでは、階層状態や並列状態、およびその状態間の遷移をグラフィカルに表現することができます。Stateflowは、従来の状態図を、フローチャート、Embedded�MATLAB™関数、グラフィカル関数、真理値表、テンポラル演算子、直接イベントブロードキャスト、および手書きCコードの統合に関するサポートによって拡張します。

別売のStateflow®�Coderを使用すると、StateflowチャートからCコードを自動生成することができます。

主な機能■�言語要素、階層、並列化および複雑なロジックを自然かつ理解可能な形で記述するための決定的実行意味論の提供

■�フローダイアグラムを用いてグラフィカルに、Embedded�MATLAB関数を用いて手続き的に関数を定義。また、真理値表を用いることで表形式の関数を定義

■�テンポラルロジックを用いた、遷移やイベントのスケジューリング機能

■�ミーリー型およびムーア型の有限状態マシンのサポート

■�カスタムまたは既存のCコードを、入出力の引数を含めた形で組込み可能

■�バス信号、ベクタデータ、行列データ、および固定小数点データのサポート

■�不適切に指定されている真理値表などの静的チェック機能

■�矛盾する遷移、周期問題、状態矛盾、データ範囲の異常、オーバーフロー状態などのランタイムチェック機能

■�Stateflowチャートのアニメーション表示とシミュレーション中のデータのロギングにより、システムの理解、デバッグを促進

■�グラフィカルなブレークポイントの設定、チャートのステップ実行、およびデータのブラウジングが可能な統合されたデバッガ

航空機の昇降の故障検出、分離および再構成システム。SimulinkとStateflowを用いた、制御システムおよび航空機力学に対するモード切替えの影響のシミュレーションと検討の例です。

Actuatorsen:L_switch();R_switch();du:L_switch();R_switch();

LO 1L1 passive

modes.LO_mode=2;activemodes.LO_mode=4;

standbymodes.LO_mode=3;

offen:modes.LO_mode=1;ex:fails++;

isolatedmodes.LO_mode=0;

RO 2L1 passive

modes.RO_mode=2; activemodes.RO_mode=4;

standbymodes.RO_mode=3;

offen:modes.RO_mode=1;ex:fails++;

isolatedmodes.RO_mode=0;

LI 3L1 passive

modes.LI_mode=2; activemodes.LI_mode=4;send(E,LO);

standbymodes.LI_mode=3;

offen:modes.LI_mode=1;ex:fails++;

isolatedmodes.LI_mode=0;

RI 4L1 passive

modes.RI_mode=2; activemodes.RI_mode=4;send(E,RO);

standbymodes.RI_mode=3;

offen:modes.RI_mode=1;ex:fails++;

isolatedmodes.RI_mode=0;

[fails>=5] go_isolated/...send(E,LI);

2[!LI_act()|RO_act()]

[LI_act()]1 [!RO_act()&&...LI_act()]

[!(pos.low_press.H1_fail)&&...!(pos.L_pos_fail.LO_pos_fail)]

go_off[!in(off)] /send(E,LI);

2

[fails>=5]

1

go_isolated/send(E,RI);

2[!RI_act()|LO_act()]

[RI_act()]1 [!LO_act()&&...RI_act()]

[!(pos.low_press.H3_fail)&&...!(pos.R_pos_fail.RO_pos_fail)]go_off[!in(off)]

/send(E,RI);2

[fails>=5]go_isolated/send(E,LO);...send(E,RO);

2[!LO_act()|RI_act()]

[LO_act()] [RO_act()&&...LO_act()]

[!(pos.low_press.H2_fail)&&...!(pos.L_pos_fail.LI_pos_fail)]go_off[!in(off)]

/send(E,LO);...send(E,RO);

2

[fails>=5]

1

go_isolated/send(E,RO);...send(E,LO);send(E,LI);

2[!RO_act()|LI_act()]

[RO_act()] [LO_act()&&...RO_act()]

go_off[!in(off)]/send(E,RO);...send(E,LO);send(E,LI);

2

[!(pos.low_press.H2_fail)&&...!(pos.R_pos_fail.RI_pos_fail)]

1

1

1 1

Actuatorsen:L_switch();R_switch();du:L_switch();R_switch();

LO 1L1 passive

modes.LO_mode=2;activemodes.LO_mode=4;

standbymodes.LO_mode=3;

offen:modes.LO_mode=1;ex:fails++;

isolatedmodes.LO_mode=0;

RO 2L1 passive

modes.RO_mode=2; activemodes.RO_mode=4;

standbymodes.RO_mode=3;

offen:modes.RO_mode=1;ex:fails++;

isolatedmodes.RO_mode=0;

LI 3L1 passive

modes.LI_mode=2; activemodes.LI_mode=4;send(E,LO);

standbymodes.LI_mode=3;

offen:modes.LI_mode=1;ex:fails++;

isolatedmodes.LI_mode=0;

RI 4L1 passive

modes.RI_mode=2; activemodes.RI_mode=4;send(E,RO);

standbymodes.RI_mode=3;

offen:modes.RI_mode=1;ex:fails++;

isolatedmodes.RI_mode=0;

[fails>=5] go_isolated/...send(E,LI);

2[!LI_act()|RO_act()]

[LI_act()]1 [!RO_act()&&...LI_act()]

[!(pos.low_press.H1_fail)&&...!(pos.L_pos_fail.LO_pos_fail)]

go_off[!in(off)] /send(E,LI);

2

[fails>=5]

1

go_isolated/send(E,RI);

2[!RI_act()|LO_act()]

[RI_act()]1 [!LO_act()&&...RI_act()]

[!(pos.low_press.H3_fail)&&...!(pos.R_pos_fail.RO_pos_fail)]go_off[!in(off)]

/send(E,RI);2

[fails>=5]go_isolated/send(E,LO);...send(E,RO);

2[!LO_act()|RI_act()]

[LO_act()] [RO_act()&&...LO_act()]

[!(pos.low_press.H2_fail)&&...!(pos.L_pos_fail.LI_pos_fail)]go_off[!in(off)]

/send(E,LO);...send(E,RO);

2

[fails>=5]

1

go_isolated/send(E,RO);...send(E,LO);send(E,LI);

2[!RO_act()|LI_act()]

[RO_act()] [LO_act()&&...RO_act()]

go_off[!in(off)]/send(E,RO);...send(E,LO);send(E,LI);

2

[!(pos.low_press.H2_fail)&&...!(pos.R_pos_fail.RI_pos_fail)]

1

1

1 1

Page 2: Stateflow 7 - MathWorks - Makers of MATLAB and Simulink Stateflowの利用 Stateflowは、モデリング、シミュレーション、 複雑なダイナミックシステムの解析を行う

www.mathworks.co.jp

Stateflowの利用Stateflowは、モデリング、シミュレーション、複雑なダイナミックシステムの解析を行う統合的なシミュレーション環境の一部です。StateflowはSimulinkと一緒に用いることで、ロジック的な挙動(故障管理やモード切替えなど)とアルゴリズム的な挙動(フィードバック制御や信号の条件付けなど)を組み合わせた組込みソフトウェアのモデルを作成することができます。また、Simulinkにてシステムとその環境のモデルを作成し、アルゴリズムとロジックとの相互作用を検討するために、ハイブリッドシミュレーションを行うこともできます。StateflowはSimulinkのモデルエクスプローラを用いて、データやイベント、ターゲットの作成、Stateflowの全オブジェクトの属性のナビゲート、検索、設定を行います。

SymbolSync 1

Search

SeekSilence

FindPulseen: cnt=Nwindu: cnt−−

Wait

Lock

FindPulseen: cnt=Nwindu: cnt−−

Sync

Integration 2

Running

Disabled

Clock 3

Rst

ClkLoClk

[Miss]1

[Edge]{N1=N1est}

1

[Edge]2

[Edge]

after(N1est−Nhalfwin+1,tick)1

[cnt==0]2

[cnt==0]2

[Edge]1

{Miss=1dly=N1−Nwin}

2

{Miss = 0N1 += Nhalfwin−cntdly=N1−Nhalfwin+1}

after(dly,tick)

ticken(Sync){P0=1, P1=1, PM=1}

at(NMarker,tick){PM=0}

1

at(NOne,tick){P1=0;}

2

at(NZero,tick){P0=0}

3

en(Sync)

every(N1,tick)[ in(Search)]

1 2

3

無線受信機と解読機のSimulinkモデル(左)とStateflowチャート(上)。このモデルでは、Stateflow はシンボル同期に使用されています。

パワーウィンドウシステムの制御ロジックのSimulinkモデル(左)とStateflowチャート(上)。電気モータ(SimPowerSystemsを用いてモデリング)、ウィンドウのメカニズム(SimMechanicsを用いてモデリング)を組込んだSimulinkモデル。モータの負荷を定義し、ロジックでウィンドウの軌道にある障害物を検知します。

Logicon tick: switches();

Remain in Stop state until a NEUTRALevent triggers Stop.Mode to be Ready. function

go()truthtable

switches

Fail safe time out after continuousmovement of more than five secondsStop /

go.neutral();en:out.Stop=1;ex:out.Stop=0;

Mode 1Waiting

Ready

Position 2NotSureWhere

NearTop

NearBottom

Moveentry: obstacles.init();on tick: obstacles.detect();

functionobstacles

Direction 1Down /go.down();

ErrorUp /go.up();

Mode 2NotSureYet

Auto

Manual

EndStopAtTop /go.down();AtBottom /

go.up();

Error

EmergencyDown /go.down();

after(FAILSAFE_TIMEOUT,tick)

2

UP | DOWN

DOWN

after(_70ms,tick)

UP [in(Ready)]

NEUTRAL[in(Manual)]

1

[after(_1s,tick)]

OBSTACLE4

ENDSTOP3

NEUTRAL

[in(AtTop)]12

1 2

DOWN[~in(Down)]

12 UP

[~in(Up)]

en(Direction.Up) | ...en(Direction.Down)

NEUTRAL

3

NEUTRAL[after(_200ms,tick)]

1

after(_1s,tick) 22

[in(Direction.Down)]

1

Stateflowチャートの作成Stateflowチャートは、状態および遷移をシステムの構成要素とする有限状態マシンをグラフィカルに表現します。Stateflowチャートは、ミーリー、ムーア、またはその両方のハイブリッド(拡張機能を含む)のいずれかのマシンクラスで指定することができ�ます。

ステート(状態)、ジャンクション、関数をグラフィカルなパレットから作業ウィンドウにドラッグしてStateflowチャートを作成します。遷移およびフローを作成するには、ステートとジャンクションを接続します。サブチャートを利用することで、複雑なチャートを簡潔で階層的に組織化されたダイアグラムにすることが可能です。

Stateflowには、チャートの作成と修正のために以下のツールが用意されています。

Stateflowチャートエディタ�─� �   �ショートカットメニュー、ナビゲーションツールバー、コマンドツールバー、ズームコントロールなど、生産性を向上させる機能を�提供

シンボル自動作成ウィザード�─�    �欠損したデータやイベントを検出して、Stateflowチャートに追加が可能

Stateflowデバッガ�─�  �     �Stateflowチャートのアニメーションを制御し、シミュレーション結果の確認やStateflowチャートの予期しない挙動の検出と診断を行うための各種機能を提供

関数の追加Stateflowでは、チャートで以下の3種類の関数の定義し、使用することができます。

グラフィカル関数�─�   ��     �アルゴリズムをグラフィカルにプログラミングする場合に使用し、シミュレーション中にその挙動を追跡

Embedded MATLAB関数�─�    �データ解析や可視化のためのMATLAB関数の呼び出し、行列指向の組込みアルゴリズムの定義

真理値表�─�            �フローダイアグラムを描画せずに、組み合わせ論理を使用した簡潔な表形式による関数の指定

StateflowからSimulinkサブシステムを関数のように呼び出すことができます。また、既存の手書きのCコード関数をユーザのStateflowチャートに組込むことも可能�です。

ボイラ温度制御システムにおいて、テンポラルロジックを用いて、ボイラがオーバーヒートしないようにロジックを記述したStateflowチャート(左)。ヒーターシステム(チャートの左側)から呼び出すユーティリティアルゴリズムをEmbedded MATLAB Function(上)とグラフィカル関数(チャートの右側)により実装。

Heater

Offentry: turn_boiler(OFF)on every(5,sec): flash_LED()

On

eMturn_boiler(mode)

function flash_LED()

function b = cold()

after(20,sec)

[Heater.On.warm()]

after(40,sec)[cold()]

[LED==OFF]1

{LED=OFF}

2

{LED=color}

{ b = temp<=reference}

真理値表を用いて、故障検出アルゴリズムにおいて正常なセンサからの読み込みを選択するためのロジックを実装します。

テンポラルロジック条件の指定Stateflowは、イベントドリブンシステムのための正確かつ効率的なコードを生成する、イベントスケジューリングメカニズムを提供します。テンポラル演算子(before、after、at、every)を使用して、遷移および状態アクティビティのスケジューリングロジックを指定することができます。これらのテンポラルロジックは、Stateflowイベントの発生カウントに応答します。これにより、タイマやカウンタをハンドリングする、エラーの頻発するイベントスケジューリングタスクから解放されます。

チャートライブラリの作成Stateflowでチャートライブラリを作成することで、チャートを容易に再利用することができます。これにより、例えばライブラリ内のチャートを更新する際、チャートのインスタンスは自動的に更新されます。

Simulinkとのインタフェース下記の操作を行うだけで、Simulinkとイベントやデータを交換することができます。

・�モデルエクスプローラでStateflowチャートの入出力データやイベントの追加、�設定

・�Stateflowの入出力ポートをSimulinkブロックに接続

・�Simulinkのシミュレーションパラメータを設定

また、Stateflowブロックと、StateflowブロックやSimulinkモデルの外部ソースコード間のインタフェースの定義も可能です。モデルエクスプローラにより、Simulinkとのインタフェース作成に加え、Stateflowチャートのすべてのデータ、イベント、属性のナビゲート、作成、設定、および検索が可能です。

Simulinkとのインタフェース作成に加え、Stateflowチャートの全データをナビゲート、作成、設定、検索するためのモデルエクスプローラ。

Stateflowの主要な要素を用いて定義された、フォールトトレラント燃料噴射システムのためのロジック。

Sens_Failure_Counter1MultiFail

FL3 FL4FL2FL1FL0

Fueling_Mode 2

Fuel_Disabled

Running H

Low_Emissionsentry: fuel_mode = LOW; H

Normal

Warmup

Rich_Mixtureentry: fuel_mode = RICH;

Single_Failure

INC INC1

DEC1

DEC2

INC1

INC2

DEC2

DEC

[ speed > max_speed ]2

[!in(MultiFail)]

enter(MultiFail)1

exit(MultiFail)

[in(FL1)]

[in(FL0)]

[in(FL1)]12

[in(O2_normal)]

ParallelismState

Transition

History

Action

Junction

Hierarchy

Condition

Subchart

Supertransition

Page 3: Stateflow 7 - MathWorks - Makers of MATLAB and Simulink Stateflowの利用 Stateflowは、モデリング、シミュレーション、 複雑なダイナミックシステムの解析を行う

www.mathworks.co.jp

Stateflowの利用Stateflowは、モデリング、シミュレーション、複雑なダイナミックシステムの解析を行う統合的なシミュレーション環境の一部です。StateflowはSimulinkと一緒に用いることで、ロジック的な挙動(故障管理やモード切替えなど)とアルゴリズム的な挙動(フィードバック制御や信号の条件付けなど)を組み合わせた組込みソフトウェアのモデルを作成することができます。また、Simulinkにてシステムとその環境のモデルを作成し、アルゴリズムとロジックとの相互作用を検討するために、ハイブリッドシミュレーションを行うこともできます。StateflowはSimulinkのモデルエクスプローラを用いて、データやイベント、ターゲットの作成、Stateflowの全オブジェクトの属性のナビゲート、検索、設定を行います。

SymbolSync 1

Search

SeekSilence

FindPulseen: cnt=Nwindu: cnt−−

Wait

Lock

FindPulseen: cnt=Nwindu: cnt−−

Sync

Integration 2

Running

Disabled

Clock 3

Rst

ClkLoClk

[Miss]1

[Edge]{N1=N1est}

1

[Edge]2

[Edge]

after(N1est−Nhalfwin+1,tick)1

[cnt==0]2

[cnt==0]2

[Edge]1

{Miss=1dly=N1−Nwin}

2

{Miss = 0N1 += Nhalfwin−cntdly=N1−Nhalfwin+1}

after(dly,tick)

ticken(Sync){P0=1, P1=1, PM=1}

at(NMarker,tick){PM=0}

1

at(NOne,tick){P1=0;}

2

at(NZero,tick){P0=0}

3

en(Sync)

every(N1,tick)[ in(Search)]

1 2

3

無線受信機と解読機のSimulinkモデル(左)とStateflowチャート(上)。このモデルでは、Stateflow はシンボル同期に使用されています。

パワーウィンドウシステムの制御ロジックのSimulinkモデル(左)とStateflowチャート(上)。電気モータ(SimPowerSystemsを用いてモデリング)、ウィンドウのメカニズム(SimMechanicsを用いてモデリング)を組込んだSimulinkモデル。モータの負荷を定義し、ロジックでウィンドウの軌道にある障害物を検知します。

Logicon tick: switches();

Remain in Stop state until a NEUTRALevent triggers Stop.Mode to be Ready. function

go()truthtable

switches

Fail safe time out after continuousmovement of more than five secondsStop /

go.neutral();en:out.Stop=1;ex:out.Stop=0;

Mode 1Waiting

Ready

Position 2NotSureWhere

NearTop

NearBottom

Moveentry: obstacles.init();on tick: obstacles.detect();

functionobstacles

Direction 1Down /go.down();

ErrorUp /go.up();

Mode 2NotSureYet

Auto

Manual

EndStopAtTop /go.down();AtBottom /

go.up();

Error

EmergencyDown /go.down();

after(FAILSAFE_TIMEOUT,tick)

2

UP | DOWN

DOWN

after(_70ms,tick)

UP [in(Ready)]

NEUTRAL[in(Manual)]

1

[after(_1s,tick)]

OBSTACLE4

ENDSTOP3

NEUTRAL

[in(AtTop)]12

1 2

DOWN[~in(Down)]

12 UP

[~in(Up)]

en(Direction.Up) | ...en(Direction.Down)

NEUTRAL

3

NEUTRAL[after(_200ms,tick)]

1

after(_1s,tick) 22

[in(Direction.Down)]

1

Stateflowチャートの作成Stateflowチャートは、状態および遷移をシステムの構成要素とする有限状態マシンをグラフィカルに表現します。Stateflowチャートは、ミーリー、ムーア、またはその両方のハイブリッド(拡張機能を含む)のいずれかのマシンクラスで指定することができ�ます。

ステート(状態)、ジャンクション、関数をグラフィカルなパレットから作業ウィンドウにドラッグしてStateflowチャートを作成します。遷移およびフローを作成するには、ステートとジャンクションを接続します。サブチャートを利用することで、複雑なチャートを簡潔で階層的に組織化されたダイアグラムにすることが可能です。

Stateflowには、チャートの作成と修正のために以下のツールが用意されています。

Stateflowチャートエディタ�─� �   �ショートカットメニュー、ナビゲーションツールバー、コマンドツールバー、ズームコントロールなど、生産性を向上させる機能を�提供

シンボル自動作成ウィザード�─�    �欠損したデータやイベントを検出して、Stateflowチャートに追加が可能

Stateflowデバッガ�─�  �     �Stateflowチャートのアニメーションを制御し、シミュレーション結果の確認やStateflowチャートの予期しない挙動の検出と診断を行うための各種機能を提供

関数の追加Stateflowでは、チャートで以下の3種類の関数の定義し、使用することができます。

グラフィカル関数�─�   ��     �アルゴリズムをグラフィカルにプログラミングする場合に使用し、シミュレーション中にその挙動を追跡

Embedded MATLAB関数�─�    �データ解析や可視化のためのMATLAB関数の呼び出し、行列指向の組込みアルゴリズムの定義

真理値表�─�            �フローダイアグラムを描画せずに、組み合わせ論理を使用した簡潔な表形式による関数の指定

StateflowからSimulinkサブシステムを関数のように呼び出すことができます。また、既存の手書きのCコード関数をユーザのStateflowチャートに組込むことも可能�です。

ボイラ温度制御システムにおいて、テンポラルロジックを用いて、ボイラがオーバーヒートしないようにロジックを記述したStateflowチャート(左)。ヒーターシステム(チャートの左側)から呼び出すユーティリティアルゴリズムをEmbedded MATLAB Function(上)とグラフィカル関数(チャートの右側)により実装。

Heater

Offentry: turn_boiler(OFF)on every(5,sec): flash_LED()

On

eMturn_boiler(mode)

function flash_LED()

function b = cold()

after(20,sec)

[Heater.On.warm()]

after(40,sec)[cold()]

[LED==OFF]1

{LED=OFF}

2

{LED=color}

{ b = temp<=reference}

真理値表を用いて、故障検出アルゴリズムにおいて正常なセンサからの読み込みを選択するためのロジックを実装します。

テンポラルロジック条件の指定Stateflowは、イベントドリブンシステムのための正確かつ効率的なコードを生成する、イベントスケジューリングメカニズムを提供します。テンポラル演算子(before、after、at、every)を使用して、遷移および状態アクティビティのスケジューリングロジックを指定することができます。これらのテンポラルロジックは、Stateflowイベントの発生カウントに応答します。これにより、タイマやカウンタをハンドリングする、エラーの頻発するイベントスケジューリングタスクから解放されます。

チャートライブラリの作成Stateflowでチャートライブラリを作成することで、チャートを容易に再利用することができます。これにより、例えばライブラリ内のチャートを更新する際、チャートのインスタンスは自動的に更新されます。

Simulinkとのインタフェース下記の操作を行うだけで、Simulinkとイベントやデータを交換することができます。

・�モデルエクスプローラでStateflowチャートの入出力データやイベントの追加、�設定

・�Stateflowの入出力ポートをSimulinkブロックに接続

・�Simulinkのシミュレーションパラメータを設定

また、Stateflowブロックと、StateflowブロックやSimulinkモデルの外部ソースコード間のインタフェースの定義も可能です。モデルエクスプローラにより、Simulinkとのインタフェース作成に加え、Stateflowチャートのすべてのデータ、イベント、属性のナビゲート、作成、設定、および検索が可能です。

Simulinkとのインタフェース作成に加え、Stateflowチャートの全データをナビゲート、作成、設定、検索するためのモデルエクスプローラ。

Stateflowの主要な要素を用いて定義された、フォールトトレラント燃料噴射システムのためのロジック。

Sens_Failure_Counter1MultiFail

FL3 FL4FL2FL1FL0

Fueling_Mode 2

Fuel_Disabled

Running H

Low_Emissionsentry: fuel_mode = LOW; H

Normal

Warmup

Rich_Mixtureentry: fuel_mode = RICH;

Single_Failure

INC INC1

DEC1

DEC2

INC1

INC2

DEC2

DEC

[ speed > max_speed ]2

[!in(MultiFail)]

enter(MultiFail)1

exit(MultiFail)

[in(FL1)]

[in(FL0)]

[in(FL1)]12

[in(O2_normal)]

ParallelismState

Transition

History

Action

Junction

Hierarchy

Condition

Subchart

Supertransition

Page 4: Stateflow 7 - MathWorks - Makers of MATLAB and Simulink Stateflowの利用 Stateflowは、モデリング、シミュレーション、 複雑なダイナミックシステムの解析を行う

www.mathworks.co.jp

Stateflowの利用Stateflowは、モデリング、シミュレーション、複雑なダイナミックシステムの解析を行う統合的なシミュレーション環境の一部です。StateflowはSimulinkと一緒に用いることで、ロジック的な挙動(故障管理やモード切替えなど)とアルゴリズム的な挙動(フィードバック制御や信号の条件付けなど)を組み合わせた組込みソフトウェアのモデルを作成することができます。また、Simulinkにてシステムとその環境のモデルを作成し、アルゴリズムとロジックとの相互作用を検討するために、ハイブリッドシミュレーションを行うこともできます。StateflowはSimulinkのモデルエクスプローラを用いて、データやイベント、ターゲットの作成、Stateflowの全オブジェクトの属性のナビゲート、検索、設定を行います。

SymbolSync 1

Search

SeekSilence

FindPulseen: cnt=Nwindu: cnt−−

Wait

Lock

FindPulseen: cnt=Nwindu: cnt−−

Sync

Integration 2

Running

Disabled

Clock 3

Rst

ClkLoClk

[Miss]1

[Edge]{N1=N1est}

1

[Edge]2

[Edge]

after(N1est−Nhalfwin+1,tick)1

[cnt==0]2

[cnt==0]2

[Edge]1

{Miss=1dly=N1−Nwin}

2

{Miss = 0N1 += Nhalfwin−cntdly=N1−Nhalfwin+1}

after(dly,tick)

ticken(Sync){P0=1, P1=1, PM=1}

at(NMarker,tick){PM=0}

1

at(NOne,tick){P1=0;}

2

at(NZero,tick){P0=0}

3

en(Sync)

every(N1,tick)[ in(Search)]

1 2

3

無線受信機と解読機のSimulinkモデル(左)とStateflowチャート(上)。このモデルでは、Stateflow はシンボル同期に使用されています。

パワーウィンドウシステムの制御ロジックのSimulinkモデル(左)とStateflowチャート(上)。電気モータ(SimPowerSystemsを用いてモデリング)、ウィンドウのメカニズム(SimMechanicsを用いてモデリング)を組込んだSimulinkモデル。モータの負荷を定義し、ロジックでウィンドウの軌道にある障害物を検知します。

Logicon tick: switches();

Remain in Stop state until a NEUTRALevent triggers Stop.Mode to be Ready. function

go()truthtable

switches

Fail safe time out after continuousmovement of more than five secondsStop /

go.neutral();en:out.Stop=1;ex:out.Stop=0;

Mode 1Waiting

Ready

Position 2NotSureWhere

NearTop

NearBottom

Moveentry: obstacles.init();on tick: obstacles.detect();

functionobstacles

Direction 1Down /go.down();

ErrorUp /go.up();

Mode 2NotSureYet

Auto

Manual

EndStopAtTop /go.down();AtBottom /

go.up();

Error

EmergencyDown /go.down();

after(FAILSAFE_TIMEOUT,tick)

2

UP | DOWN

DOWN

after(_70ms,tick)

UP [in(Ready)]

NEUTRAL[in(Manual)]

1

[after(_1s,tick)]

OBSTACLE4

ENDSTOP3

NEUTRAL

[in(AtTop)]12

1 2

DOWN[~in(Down)]

12 UP

[~in(Up)]

en(Direction.Up) | ...en(Direction.Down)

NEUTRAL

3

NEUTRAL[after(_200ms,tick)]

1

after(_1s,tick) 22

[in(Direction.Down)]

1

Stateflowチャートの作成Stateflowチャートは、状態および遷移をシステムの構成要素とする有限状態マシンをグラフィカルに表現します。Stateflowチャートは、ミーリー、ムーア、またはその両方のハイブリッド(拡張機能を含む)のいずれかのマシンクラスで指定することができ�ます。

ステート(状態)、ジャンクション、関数をグラフィカルなパレットから作業ウィンドウにドラッグしてStateflowチャートを作成します。遷移およびフローを作成するには、ステートとジャンクションを接続します。サブチャートを利用することで、複雑なチャートを簡潔で階層的に組織化されたダイアグラムにすることが可能です。

Stateflowには、チャートの作成と修正のために以下のツールが用意されています。

Stateflowチャートエディタ�─� �   �ショートカットメニュー、ナビゲーションツールバー、コマンドツールバー、ズームコントロールなど、生産性を向上させる機能を�提供

シンボル自動作成ウィザード�─�    �欠損したデータやイベントを検出して、Stateflowチャートに追加が可能

Stateflowデバッガ�─�  �     �Stateflowチャートのアニメーションを制御し、シミュレーション結果の確認やStateflowチャートの予期しない挙動の検出と診断を行うための各種機能を提供

関数の追加Stateflowでは、チャートで以下の3種類の関数の定義し、使用することができます。

グラフィカル関数�─�   ��     �アルゴリズムをグラフィカルにプログラミングする場合に使用し、シミュレーション中にその挙動を追跡

Embedded MATLAB関数�─�    �データ解析や可視化のためのMATLAB関数の呼び出し、行列指向の組込みアルゴリズムの定義

真理値表�─�            �フローダイアグラムを描画せずに、組み合わせ論理を使用した簡潔な表形式による関数の指定

StateflowからSimulinkサブシステムを関数のように呼び出すことができます。また、既存の手書きのCコード関数をユーザのStateflowチャートに組込むことも可能�です。

ボイラ温度制御システムにおいて、テンポラルロジックを用いて、ボイラがオーバーヒートしないようにロジックを記述したStateflowチャート(左)。ヒーターシステム(チャートの左側)から呼び出すユーティリティアルゴリズムをEmbedded MATLAB Function(上)とグラフィカル関数(チャートの右側)により実装。

Heater

Offentry: turn_boiler(OFF)on every(5,sec): flash_LED()

On

eMturn_boiler(mode)

function flash_LED()

function b = cold()

after(20,sec)

[Heater.On.warm()]

after(40,sec)[cold()]

[LED==OFF]1

{LED=OFF}

2

{LED=color}

{ b = temp<=reference}

真理値表を用いて、故障検出アルゴリズムにおいて正常なセンサからの読み込みを選択するためのロジックを実装します。

テンポラルロジック条件の指定Stateflowは、イベントドリブンシステムのための正確かつ効率的なコードを生成する、イベントスケジューリングメカニズムを提供します。テンポラル演算子(before、after、at、every)を使用して、遷移および状態アクティビティのスケジューリングロジックを指定することができます。これらのテンポラルロジックは、Stateflowイベントの発生カウントに応答します。これにより、タイマやカウンタをハンドリングする、エラーの頻発するイベントスケジューリングタスクから解放されます。

チャートライブラリの作成Stateflowでチャートライブラリを作成することで、チャートを容易に再利用することができます。これにより、例えばライブラリ内のチャートを更新する際、チャートのインスタンスは自動的に更新されます。

Simulinkとのインタフェース下記の操作を行うだけで、Simulinkとイベントやデータを交換することができます。

・�モデルエクスプローラでStateflowチャートの入出力データやイベントの追加、�設定

・�Stateflowの入出力ポートをSimulinkブロックに接続

・�Simulinkのシミュレーションパラメータを設定

また、Stateflowブロックと、StateflowブロックやSimulinkモデルの外部ソースコード間のインタフェースの定義も可能です。モデルエクスプローラにより、Simulinkとのインタフェース作成に加え、Stateflowチャートのすべてのデータ、イベント、属性のナビゲート、作成、設定、および検索が可能です。

Simulinkとのインタフェース作成に加え、Stateflowチャートの全データをナビゲート、作成、設定、検索するためのモデルエクスプローラ。

Stateflowの主要な要素を用いて定義された、フォールトトレラント燃料噴射システムのためのロジック。

Sens_Failure_Counter1MultiFail

FL3 FL4FL2FL1FL0

Fueling_Mode 2

Fuel_Disabled

Running H

Low_Emissionsentry: fuel_mode = LOW; H

Normal

Warmup

Rich_Mixtureentry: fuel_mode = RICH;

Single_Failure

INC INC1

DEC1

DEC2

INC1

INC2

DEC2

DEC

[ speed > max_speed ]2

[!in(MultiFail)]

enter(MultiFail)1

exit(MultiFail)

[in(FL1)]

[in(FL0)]

[in(FL1)]12

[in(O2_normal)]

ParallelismState

Transition

History

Action

Junction

Hierarchy

Condition

Subchart

Supertransition

Page 5: Stateflow 7 - MathWorks - Makers of MATLAB and Simulink Stateflowの利用 Stateflowは、モデリング、シミュレーション、 複雑なダイナミックシステムの解析を行う

© 2009 The MathWorks, Inc. MATLAB and Simulink are registered trademarks of The MathWorks, Inc.See www.mathworks.com/trademarks for a list of additional trademarks. Other product or brand names may be trademarks or registered trademarks of their respective holders.

91737v00 07/09

www.mathworks.co.jp

Stateflow® 7ステートマシンおよび制御ロジックの設計およびシミュレーション

Stateflowチャートの実行Stateflowでロジックをモデリング後、シミュレーションを行い、挙動をライブで表示させ、設計のテスト、検証を行うことができます。グラフィカルデバッガにより、シミュレーションのランタイムエラーを解決し、設計の予測外の挙動を診断することができます。

結果の表示以下の方法で、シミュレーション実行中にStateflowのチャートを可視化することができます。

・�アクティブな状態と遷移経路をハイライト表示

・�Simulinkの提供するディスプレイとスコー�プで状態、データを表示

・�MATLABの可視化およびグラフィカルユーザインタフェース開発ツールを用いてカスタムディスプレイを構築

シミュレーションの後、後処理用に状態とデータをログに記録することができます。

シミュレーションのデバッグStateflowのデバッガを用いて、ブレークポイントの設定、シミュレーション実行の制御、モデルの情報の表示が可能です。グラフィカルユーザインタフェース(GUI)やMATLABコマンドラインから実行することができます。GUIはチャートの実行状態の正確な情報を提供します。ブレークポイント、現在のデータ値、アクティブな状態、呼び出しスタックなどの情報を表示させることができます。

デバッガでは、ランタイムエラーの検出も可能です。検出されるランタイムエラーには、状態の矛盾、遷移の競合、データ範囲違反、無限ループの可能性、真理値表の不適切な指定などがあります。

シミュレーション実行中の状態遷移を表示するSimulinkのフローティングスコープ(左)。Simulink内の信号セレクタ(上)を使用して、特定の状態を選択することができます。

設計の検証Simulink�Verification�and�Validation(オプション製品)を用いて、Stateflowオブジェクトに要求仕様を直接記し、モデルカバレージ判定基準をまとめることができます。

コードの生成Stateflow�Coder(オプション製品)を用いて、Stateflowチャートをさまざまなアプリケーションに展開することができます。

動作環境Stateflowには、以下の製品が必要です。

・�MATLAB・�Simulink

動作環境の詳細につきましては、 � ��� �www.mathworks.co.jp�をご覧ください。

関連製品・Real-Time Workshop® ��SimulinkモデルおよびMATLABコードからCコードを生成

・SimEvents® ��離散イベントシステムのモデリングシミュレーション

・ Simulink Verification and Validation

 ��要求仕様に沿ったデザインとテストケースの開発およびテストカバレージの測定

・Stateflow Coder ��StateflowチャートからCコードを生成

ブレークポイントの設定、シミュレーションの開始/停止、ランタイムエラーの評価、ダイナミックエラーチェックの実行を行うStateflowデバッガ。

Stateflow®はSimulink®を拡張して、ステートマシンとフローチャートを開発するための設計環境を提供します。Stateflowは、複雑なロジックを自然で読みやすく、かつ理解しやすい形で記述するために必要な言語要素を提供します。Stateflowは、MATLAB®およびSimulinkと緊密に統合�され、制御ロジック、監視ロジック、およびモードロジックを含む組込みシステムを設計するための効率的な環境を提供します。

Stateflowチャートでは、階層状態や並列状態、およびその状態間の遷移をグラフィカルに表現することができます。Stateflowは、従来の状態図を、フローチャート、Embedded�MATLAB™関数、グラフィカル関数、真理値表、テンポラル演算子、直接イベントブロードキャスト、および手書きCコードの統合に関するサポートによって拡張します。

別売のStateflow®�Coderを使用すると、StateflowチャートからCコードを自動生成することができます。

主な機能■�言語要素、階層、並列化および複雑なロジックを自然かつ理解可能な形で記述するための決定的実行意味論の提供

■�フローダイアグラムを用いてグラフィカルに、Embedded�MATLAB関数を用いて手続き的に関数を定義。また、真理値表を用いることで表形式の関数を定義

■�テンポラルロジックを用いた、遷移やイベントのスケジューリング機能

■�ミーリー型およびムーア型の有限状態マシンのサポート

■�カスタムまたは既存のCコードを、入出力の引数を含めた形で組込み可能

■�バス信号、ベクタデータ、行列データ、および固定小数点データのサポート

■�不適切に指定されている真理値表などの静的チェック機能

■�矛盾する遷移、周期問題、状態矛盾、データ範囲の異常、オーバーフロー状態などのランタイムチェック機能

■�Stateflowチャートのアニメーション表示とシミュレーション中のデータのロギングにより、システムの理解、デバッグを促進

■�グラフィカルなブレークポイントの設定、チャートのステップ実行、およびデータのブラウジングが可能な統合されたデバッガ

航空機の昇降の故障検出、分離および再構成システム。SimulinkとStateflowを用いた、制御システムおよび航空機力学に対するモード切替えの影響のシミュレーションと検討の例です。

Actuatorsen:L_switch();R_switch();du:L_switch();R_switch();

LO 1L1 passive

modes.LO_mode=2;activemodes.LO_mode=4;

standbymodes.LO_mode=3;

offen:modes.LO_mode=1;ex:fails++;

isolatedmodes.LO_mode=0;

RO 2L1 passive

modes.RO_mode=2; activemodes.RO_mode=4;

standbymodes.RO_mode=3;

offen:modes.RO_mode=1;ex:fails++;

isolatedmodes.RO_mode=0;

LI 3L1 passive

modes.LI_mode=2; activemodes.LI_mode=4;send(E,LO);

standbymodes.LI_mode=3;

offen:modes.LI_mode=1;ex:fails++;

isolatedmodes.LI_mode=0;

RI 4L1 passive

modes.RI_mode=2; activemodes.RI_mode=4;send(E,RO);

standbymodes.RI_mode=3;

offen:modes.RI_mode=1;ex:fails++;

isolatedmodes.RI_mode=0;

[fails>=5] go_isolated/...send(E,LI);

2[!LI_act()|RO_act()]

[LI_act()]1 [!RO_act()&&...LI_act()]

[!(pos.low_press.H1_fail)&&...!(pos.L_pos_fail.LO_pos_fail)]

go_off[!in(off)] /send(E,LI);

2

[fails>=5]

1

go_isolated/send(E,RI);

2[!RI_act()|LO_act()]

[RI_act()]1 [!LO_act()&&...RI_act()]

[!(pos.low_press.H3_fail)&&...!(pos.R_pos_fail.RO_pos_fail)]go_off[!in(off)]

/send(E,RI);2

[fails>=5]go_isolated/send(E,LO);...send(E,RO);

2[!LO_act()|RI_act()]

[LO_act()] [RO_act()&&...LO_act()]

[!(pos.low_press.H2_fail)&&...!(pos.L_pos_fail.LI_pos_fail)]go_off[!in(off)]

/send(E,LO);...send(E,RO);

2

[fails>=5]

1

go_isolated/send(E,RO);...send(E,LO);send(E,LI);

2[!RO_act()|LI_act()]

[RO_act()] [LO_act()&&...RO_act()]

go_off[!in(off)]/send(E,RO);...send(E,LO);send(E,LI);

2

[!(pos.low_press.H2_fail)&&...!(pos.R_pos_fail.RI_pos_fail)]

1

1

1 1

Actuatorsen:L_switch();R_switch();du:L_switch();R_switch();

LO 1L1 passive

modes.LO_mode=2;activemodes.LO_mode=4;

standbymodes.LO_mode=3;

offen:modes.LO_mode=1;ex:fails++;

isolatedmodes.LO_mode=0;

RO 2L1 passive

modes.RO_mode=2; activemodes.RO_mode=4;

standbymodes.RO_mode=3;

offen:modes.RO_mode=1;ex:fails++;

isolatedmodes.RO_mode=0;

LI 3L1 passive

modes.LI_mode=2; activemodes.LI_mode=4;send(E,LO);

standbymodes.LI_mode=3;

offen:modes.LI_mode=1;ex:fails++;

isolatedmodes.LI_mode=0;

RI 4L1 passive

modes.RI_mode=2; activemodes.RI_mode=4;send(E,RO);

standbymodes.RI_mode=3;

offen:modes.RI_mode=1;ex:fails++;

isolatedmodes.RI_mode=0;

[fails>=5] go_isolated/...send(E,LI);

2[!LI_act()|RO_act()]

[LI_act()]1 [!RO_act()&&...LI_act()]

[!(pos.low_press.H1_fail)&&...!(pos.L_pos_fail.LO_pos_fail)]

go_off[!in(off)] /send(E,LI);

2

[fails>=5]

1

go_isolated/send(E,RI);

2[!RI_act()|LO_act()]

[RI_act()]1 [!LO_act()&&...RI_act()]

[!(pos.low_press.H3_fail)&&...!(pos.R_pos_fail.RO_pos_fail)]go_off[!in(off)]

/send(E,RI);2

[fails>=5]go_isolated/send(E,LO);...send(E,RO);

2[!LO_act()|RI_act()]

[LO_act()] [RO_act()&&...LO_act()]

[!(pos.low_press.H2_fail)&&...!(pos.L_pos_fail.LI_pos_fail)]go_off[!in(off)]

/send(E,LO);...send(E,RO);

2

[fails>=5]

1

go_isolated/send(E,RO);...send(E,LO);send(E,LI);

2[!RO_act()|LI_act()]

[RO_act()] [LO_act()&&...RO_act()]

go_off[!in(off)]/send(E,RO);...send(E,LO);send(E,LI);

2

[!(pos.low_press.H2_fail)&&...!(pos.R_pos_fail.RI_pos_fail)]

1

1

1 1

Page 6: Stateflow 7 - MathWorks - Makers of MATLAB and Simulink Stateflowの利用 Stateflowは、モデリング、シミュレーション、 複雑なダイナミックシステムの解析を行う

© 2009 The MathWorks, Inc. MATLAB and Simulink are registered trademarks of The MathWorks, Inc.See www.mathworks.com/trademarks for a list of additional trademarks. Other product or brand names may be trademarks or registered trademarks of their respective holders.

91737v00 07/09

www.mathworks.co.jp

Stateflow® 7ステートマシンおよび制御ロジックの設計およびシミュレーション

Stateflowチャートの実行Stateflowでロジックをモデリング後、シミュレーションを行い、挙動をライブで表示させ、設計のテスト、検証を行うことができます。グラフィカルデバッガにより、シミュレーションのランタイムエラーを解決し、設計の予測外の挙動を診断することができます。

結果の表示以下の方法で、シミュレーション実行中にStateflowのチャートを可視化することができます。

・�アクティブな状態と遷移経路をハイライト表示

・�Simulinkの提供するディスプレイとスコー�プで状態、データを表示

・�MATLABの可視化およびグラフィカルユーザインタフェース開発ツールを用いてカスタムディスプレイを構築

シミュレーションの後、後処理用に状態とデータをログに記録することができます。

シミュレーションのデバッグStateflowのデバッガを用いて、ブレークポイントの設定、シミュレーション実行の制御、モデルの情報の表示が可能です。グラフィカルユーザインタフェース(GUI)やMATLABコマンドラインから実行することができます。GUIはチャートの実行状態の正確な情報を提供します。ブレークポイント、現在のデータ値、アクティブな状態、呼び出しスタックなどの情報を表示させることができます。

デバッガでは、ランタイムエラーの検出も可能です。検出されるランタイムエラーには、状態の矛盾、遷移の競合、データ範囲違反、無限ループの可能性、真理値表の不適切な指定などがあります。

シミュレーション実行中の状態遷移を表示するSimulinkのフローティングスコープ(左)。Simulink内の信号セレクタ(上)を使用して、特定の状態を選択することができます。

設計の検証Simulink�Verification�and�Validation(オプション製品)を用いて、Stateflowオブジェクトに要求仕様を直接記し、モデルカバレージ判定基準をまとめることができます。

コードの生成Stateflow�Coder(オプション製品)を用いて、Stateflowチャートをさまざまなアプリケーションに展開することができます。

動作環境Stateflowには、以下の製品が必要です。

・�MATLAB・�Simulink

動作環境の詳細につきましては、 � ��� �www.mathworks.co.jp�をご覧ください。

関連製品・Real-Time Workshop® ��SimulinkモデルおよびMATLABコードからCコードを生成

・SimEvents® ��離散イベントシステムのモデリングシミュレーション

・ Simulink Verification and Validation

 ��要求仕様に沿ったデザインとテストケースの開発およびテストカバレージの測定

・Stateflow Coder ��StateflowチャートからCコードを生成

ブレークポイントの設定、シミュレーションの開始/停止、ランタイムエラーの評価、ダイナミックエラーチェックの実行を行うStateflowデバッガ。

Stateflow®はSimulink®を拡張して、ステートマシンとフローチャートを開発するための設計環境を提供します。Stateflowは、複雑なロジックを自然で読みやすく、かつ理解しやすい形で記述するために必要な言語要素を提供します。Stateflowは、MATLAB®およびSimulinkと緊密に統合�され、制御ロジック、監視ロジック、およびモードロジックを含む組込みシステムを設計するための効率的な環境を提供します。

Stateflowチャートでは、階層状態や並列状態、およびその状態間の遷移をグラフィカルに表現することができます。Stateflowは、従来の状態図を、フローチャート、Embedded�MATLAB™関数、グラフィカル関数、真理値表、テンポラル演算子、直接イベントブロードキャスト、および手書きCコードの統合に関するサポートによって拡張します。

別売のStateflow®�Coderを使用すると、StateflowチャートからCコードを自動生成することができます。

主な機能■�言語要素、階層、並列化および複雑なロジックを自然かつ理解可能な形で記述するための決定的実行意味論の提供

■�フローダイアグラムを用いてグラフィカルに、Embedded�MATLAB関数を用いて手続き的に関数を定義。また、真理値表を用いることで表形式の関数を定義

■�テンポラルロジックを用いた、遷移やイベントのスケジューリング機能

■�ミーリー型およびムーア型の有限状態マシンのサポート

■�カスタムまたは既存のCコードを、入出力の引数を含めた形で組込み可能

■�バス信号、ベクタデータ、行列データ、および固定小数点データのサポート

■�不適切に指定されている真理値表などの静的チェック機能

■�矛盾する遷移、周期問題、状態矛盾、データ範囲の異常、オーバーフロー状態などのランタイムチェック機能

■�Stateflowチャートのアニメーション表示とシミュレーション中のデータのロギングにより、システムの理解、デバッグを促進

■�グラフィカルなブレークポイントの設定、チャートのステップ実行、およびデータのブラウジングが可能な統合されたデバッガ

航空機の昇降の故障検出、分離および再構成システム。SimulinkとStateflowを用いた、制御システムおよび航空機力学に対するモード切替えの影響のシミュレーションと検討の例です。

Actuatorsen:L_switch();R_switch();du:L_switch();R_switch();

LO 1L1 passive

modes.LO_mode=2;activemodes.LO_mode=4;

standbymodes.LO_mode=3;

offen:modes.LO_mode=1;ex:fails++;

isolatedmodes.LO_mode=0;

RO 2L1 passive

modes.RO_mode=2; activemodes.RO_mode=4;

standbymodes.RO_mode=3;

offen:modes.RO_mode=1;ex:fails++;

isolatedmodes.RO_mode=0;

LI 3L1 passive

modes.LI_mode=2; activemodes.LI_mode=4;send(E,LO);

standbymodes.LI_mode=3;

offen:modes.LI_mode=1;ex:fails++;

isolatedmodes.LI_mode=0;

RI 4L1 passive

modes.RI_mode=2; activemodes.RI_mode=4;send(E,RO);

standbymodes.RI_mode=3;

offen:modes.RI_mode=1;ex:fails++;

isolatedmodes.RI_mode=0;

[fails>=5] go_isolated/...send(E,LI);

2[!LI_act()|RO_act()]

[LI_act()]1 [!RO_act()&&...LI_act()]

[!(pos.low_press.H1_fail)&&...!(pos.L_pos_fail.LO_pos_fail)]

go_off[!in(off)] /send(E,LI);

2

[fails>=5]

1

go_isolated/send(E,RI);

2[!RI_act()|LO_act()]

[RI_act()]1 [!LO_act()&&...RI_act()]

[!(pos.low_press.H3_fail)&&...!(pos.R_pos_fail.RO_pos_fail)]go_off[!in(off)]

/send(E,RI);2

[fails>=5]go_isolated/send(E,LO);...send(E,RO);

2[!LO_act()|RI_act()]

[LO_act()] [RO_act()&&...LO_act()]

[!(pos.low_press.H2_fail)&&...!(pos.L_pos_fail.LI_pos_fail)]go_off[!in(off)]

/send(E,LO);...send(E,RO);

2

[fails>=5]

1

go_isolated/send(E,RO);...send(E,LO);send(E,LI);

2[!RO_act()|LI_act()]

[RO_act()] [LO_act()&&...RO_act()]

go_off[!in(off)]/send(E,RO);...send(E,LO);send(E,LI);

2

[!(pos.low_press.H2_fail)&&...!(pos.R_pos_fail.RI_pos_fail)]

1

1

1 1

Actuatorsen:L_switch();R_switch();du:L_switch();R_switch();

LO 1L1 passive

modes.LO_mode=2;activemodes.LO_mode=4;

standbymodes.LO_mode=3;

offen:modes.LO_mode=1;ex:fails++;

isolatedmodes.LO_mode=0;

RO 2L1 passive

modes.RO_mode=2; activemodes.RO_mode=4;

standbymodes.RO_mode=3;

offen:modes.RO_mode=1;ex:fails++;

isolatedmodes.RO_mode=0;

LI 3L1 passive

modes.LI_mode=2; activemodes.LI_mode=4;send(E,LO);

standbymodes.LI_mode=3;

offen:modes.LI_mode=1;ex:fails++;

isolatedmodes.LI_mode=0;

RI 4L1 passive

modes.RI_mode=2; activemodes.RI_mode=4;send(E,RO);

standbymodes.RI_mode=3;

offen:modes.RI_mode=1;ex:fails++;

isolatedmodes.RI_mode=0;

[fails>=5] go_isolated/...send(E,LI);

2[!LI_act()|RO_act()]

[LI_act()]1 [!RO_act()&&...LI_act()]

[!(pos.low_press.H1_fail)&&...!(pos.L_pos_fail.LO_pos_fail)]

go_off[!in(off)] /send(E,LI);

2

[fails>=5]

1

go_isolated/send(E,RI);

2[!RI_act()|LO_act()]

[RI_act()]1 [!LO_act()&&...RI_act()]

[!(pos.low_press.H3_fail)&&...!(pos.R_pos_fail.RO_pos_fail)]go_off[!in(off)]

/send(E,RI);2

[fails>=5]go_isolated/send(E,LO);...send(E,RO);

2[!LO_act()|RI_act()]

[LO_act()] [RO_act()&&...LO_act()]

[!(pos.low_press.H2_fail)&&...!(pos.L_pos_fail.LI_pos_fail)]go_off[!in(off)]

/send(E,LO);...send(E,RO);

2

[fails>=5]

1

go_isolated/send(E,RO);...send(E,LO);send(E,LI);

2[!RO_act()|LI_act()]

[RO_act()] [LO_act()&&...RO_act()]

go_off[!in(off)]/send(E,RO);...send(E,LO);send(E,LI);

2

[!(pos.low_press.H2_fail)&&...!(pos.R_pos_fail.RI_pos_fail)]

1

1

1 1