duration 演算子を使用した振動の制御
次の例では、自動車のギアが 1 速から 4 速にシフトするロジックについて考えます。
このシステムのギア チェンジをモデル化する際は、発生する振動を制御することが重要です。モデル sf_car では、どのギア ステートがアクティブなのかを制御するパラレル ステートのデバウンサー ロジックを使用しています。Stateflow® におけるデバウンサーの機能の詳細については、デバウンス ロジックを使用した過渡信号の削減を参照してください。
デバウンサー ロジックは、duration 演算子を使用して簡略化できます。モデル sf_car_using_duration でこの簡略化を確認できます。duration 演算子は条件式を評価し、その式が true であった時間の長さを出力します。この時間の長さが既知の時間しきい値を超えると、ステートはより高速または低速のギアへ遷移します。
パラレル ステートのロジックを削除し、duration 演算子を使用することで、より簡単な Stateflow ロジックによって振動を制御できます。duration 演算子は、Simulink® モデルの Stateflow チャートでのみサポートされます。
パラレル ステートのロジックを使用した振動の制御
モデル sf_car を開きます。
openExample("sf_car")チャート shift_logic を選択し、[ステート チャート] タブで [マスク内を表示] をクリックします。
Stateflow チャート shift_logic は、自動車の速度とスロットルの開放量が指定された場合に、自動車がどのギアに入っているかを制御します。 shift_logic には、gear_state と selection_state という 2 つのパラレル ステートがあります。gear_state には各ギアにつき 4 つの排他的ステートが含まれています。selection_state は自動車がダウンシフトまたはアップシフトしているか、あるいは現在のギアのままであるかを判定します。

この Stateflow チャートでは、自動車が 1 速から 2 速にシフトするには、イベント UP が selection_state から gear_state へ送信されなければなりません。このイベントは、車速がしきい値を超え、TWAIT で定義された時間にわたってしきい値よりも高く維持された場合に送信されます。イベント UP が送信されると、gear_state は first から second に遷移します。
duration 演算子を使用した振動の制御
モデル sf_car_using_duration を開きます。
openExample("sf_car_using_duration")チャート Gear_Logic を選択し、[ステート チャート] タブで [マスク内を表示] をクリックします。
Gear_Logic には、各ギアにつき 4 つの排他的ステートがあります。ローカル変数 up および down は各ステート間の遷移をガードします。

この Stateflow チャートにおいて、自動車が 1 速から 2 速にシフトするには、条件 up が true でなければなりません。車速がしきい値以上である時間の長さが、TWAIT で指定された時間の長さより大きい場合に、条件 up は true に定義されます。車速がしきい値以下である時間の長さが、TWAIT で指定された時間の長さより大きい場合に、条件 down は true に定義されます。duration 演算子は、車速がしきい値を超えた、またはそれ未満であった時間の長さを記録します。up 条件が満たされると、アクティブ ステートは first から second に遷移します。
パラレル ステートのデバウンサー ロジックを duration 演算子で置き換えることにより、より簡単な Stateflow チャートを作成してギア シフトをモデル化できます。