stateflow 7 - mathworks - makers of matlab and simulink stateflowの利用...
TRANSCRIPT
© 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
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
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
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
© 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
© 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