このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
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 チャートを作成してギア シフトをモデル化できます。