Mealy と Moore のセマンティクス間でのチャートの変換
Mealy マシンと Moore マシンは、有限ステート マシンのモデリングにおける業界標準の基本パラダイムとして幅広く認知されています。Stateflow® チャート セマンティクスのサブセットとして、純粋な Mealy または Moore のセマンティクスを実装したチャートを作成できます。Mealy と Moore のセマンティクスは、MATLAB® 内のスタンドアロンの Stateflow チャートではサポートされません。詳細については、Mealy マシンと Moore マシンの概要を参照してください。
ベスト プラクティスとしては、開発途中で Stateflow チャート タイプを別のタイプに変更しないことが挙げられます。新しいチャート タイプの設計ルールに従って、元のチャートのセマンティクスを自動的に変換することはできません。チャート タイプを変更する場合は通常、元のチャートと同等の動作が得られるようにチャートを再設計する必要があります。入力のシーケンスが同じ場合は、両方のチャートで出力のシーケンスも同じになるようにします。ただし、場合によっては、チャート定義に違反しなければ特定の動作を変換できないこともあります。
以下の表は、設計途中でチャート タイプを変更した場合に発生する事象をまとめています。
変更元 | 変更先 | 結果 |
---|---|---|
Mealy | Classic | Classic タイプへの変更時には、Mealy チャートはセマンティクスを保持します。 |
Classic | Mealy | Classic チャートがタイム ステップごとに出力を定義し、Mealy のセマンティック ルールに従っている場合、Mealy チャートは元の Classic チャートと同等の動作を示します。 |
Moore | Classic | Moore チャートのステート アクションはラベルが付加されていないため、entry アクションと during アクションとして動作します。Classic チャートは、元の Moore チャートと同等の動作を示しません。再設計が必要になります。 |
Classic | Moore | Classic チャートでラベルが付加されていないアクション (既定では entry アクションと during アクション) は、during アクションと exit アクションとして動作します。Moore チャートは、元の Classic チャートと同等の動作を示しません。再設計が必要になります。 |
Mealy | Moore | アクションの配置に関する Mealy と Moore のルールは相互に排他的です。Mealy と Moore のセマンティクスの間でチャート タイプを変換しても、同等の動作は得られません。再設計が必要になります。 |
Moore | Mealy |
Mealy から Moore のセマンティクスへのチャートの変換
次の例は、Mealy のセマンティクスを使用した自動販売機のモデル化で説明されている Mealy チャートを使用して自動販売機をモデル化する方法を示しています。
openExample("sf_mealy_vending_machine")
Mealy チャートでは、それぞれのステートは想定される次の 3 種類の硬貨の投入を表しています。5 セント硬貨、10 セント硬貨、硬貨なしです。チャートが次のステートに遷移するときに、各条件アクションは入力 (投入された硬貨) に基づいて出力 (飲料缶が放出されるかどうか) を計算します。チャート タイプを [Moore]
に変更すると、チャートが Moore チャートのセマンティクスに違反していることを示すコンパイル時の診断メッセージが表示されます。Moore のセマンティクスに従うと、チャート出力 soda
は入力 coin
の値に依存できません。
チャートを有効な Moore のセマンティクスに変換するには、出力を計算するロジックを遷移からステートへ移動することによってチャートを再設計します。Moore チャートでは、各ステートは、投入される硬貨と飲料缶の放出条件 (soda = 0
または soda = 1
) の両方を表さなければなりません。そのため、再設計されたチャートには、より多くのステートが必要になります。
openExample("sf_moore_vending_machine")
coin
の値を検討する前に、Moore チャートは、アクティブ ステートに従って soda
の値を計算しなければなりません。結果として、自動販売機に代金に見合う金額が投入された場合でも、飲料缶の放出には遅延が生じます。
自動販売機のセマンティクスの比較
次の表は、変換前後のチャートのセマンティクスを比較しています。
Mealy の自動販売機 | Moore の自動販売機 |
---|---|
3 つのステートを使用 | 5 つのステートを使用 |
条件アクションの出力を計算 | ステート アクションの出力を計算 |
入力に基づいて出力を更新 | 入力を評価する前に出力を更新するため、飲料缶を放出する際に追加のタイム ステップが必要 |
この自動販売機では、十分な硬貨が投入された時点で遅延を伴わずに飲料缶が放出されるため、Mealy の方がモデリング パラダイムとして適しています。一方、Moore の自動販売機では、飲料缶を放出する前に追加のタイム ステップが必要です。したがって、Moore の自動販売機では、次回の購入用の硬貨が投入されたのと同じタイム ステップで飲料缶が放出される可能性があります。このような状況では、投入された硬貨に対して飲料缶が放出されるように見えますが、実際には、自動販売機には前のタイム ステップで代金が投入されているため、飲料缶が放出されることになります。
Moore から Mealy のセマンティクスへのチャートの変換
次の例は、Moore のセマンティクスを使用した信号機のモデル化で説明されている Moore チャートを使用して信号機をモデル化する方法を示します。
openExample("sf_moore_traffic_light")
Moore チャートでは、各ステートは、2 つの交差する道路の信号機の色と、現在の色の持続期間を表しています。各ステート アクションは、入力 (センサーで待機している自動車があるかどうか) に関係なく出力 (信号機の色) を計算します。チャート タイプを [Mealy]
に変更すると、チャートが Mealy チャートのセマンティクスに違反していることを示すコンパイル時の診断メッセージが表示されます。Mealy のセマンティクスに従うと、このチャートはステート アクションで出力を計算できません。
チャートを有効な Mealy のセマンティクスに変換するには、出力を計算するロジックをステートから遷移へ移動することによってチャートを再設計します。再設計された Mealy チャートは、Moore チャートと同様に 5 つのステートで構成されます。ほとんどの遷移では、時相論理式または boolean 入力 sens
が、出力 y1
および y2
を計算する条件アクションを保護します。例外は以下のみです。
保護条件なしで初期出力を計算するデフォルト遷移
新しい出力を計算しない、
Stop
ステートからStopForTraffic
ステートへの遷移
openExample("sf_mealy_traffic_light")
同じタイム ステップで、Mealy チャートは時相論理式と入力信号 sens
を評価し、出力 y1
および y2
の値を計算します。その結果、Mealy チャートでは、元の Moore チャートで対応する変化が発生する 1 つ前のタイム ステップで出力が変化します。Simulink® モデルでは、各出力信号に Delay ブロックを追加することにより、出力において予測される変化を補正できます。
信号機コントローラーのセマンティクスの比較
次の表は、変換前後のチャートのセマンティクスを比較しています。
Moore の信号機コントローラー | Mealy の信号機コントローラー |
---|---|
5 つのステートを使用 | 5 つのステートを使用 |
ステート アクションの出力を計算 | 条件アクションの出力を計算 |
入力を評価する前に出力を更新 | 入力に基づいて出力を更新、各出力信号に Delay ブロックが必要 |