時相論理を使用した要件の実行の制御
Simulink® モデルの Requirements Table ブロックの要件について、要件の評価と実行を時相論理を使用して制御できます。[持続時間] 列と時相演算子はシミュレーション時間または異なるタイム ステップのデータ値に依存するため、それらを使用して時相論理を実行できます。
[持続時間] 列の使用
[持続時間] 列では、要件の前提条件が有効である時間がどれだけ続いたらブロックで事後条件のチェックまたはアクションの実行を開始するかを指定します。持続時間を満たさないと、ブロックで要件の事後条件はチェックされず、要件のアクションも実行されません。[持続時間] 列を使用するには、前提条件を指定する必要があります。
[持続時間] 列の表示と非表示を切り替えるには、列を右クリックして [列の切り替え] 、 [[持続時間] 列の切り替え] を選択します。[テーブル] タブの [列] セクションで [列の表示] 、 [持続時間] をクリックしても、列の表示と非表示を切り替えることができます。この列は [要件] タブにのみ表示されます。
[持続時間] 列を使用するには、要件を定義し、前提条件が true である時間がどれだけ続いたら前提条件を満たすかを示す値を入力します。持続時間は秒数で指定する必要があり、正のスカラーとして評価されなければなりません。
[持続時間] 列の使用例
この例では、Requirements Table ブロックを使用して、時間に依存する要件を入力信号が満たすことをチェックします。ブロックで [持続時間] 列を使用して、要件が有効である時間がどれだけ続いたら出力を実行するかを指定します。
Requirements Table ブロックを開きます。このブロックでは、3 つの要件を使用して、入力データ u
をチェックし、出力データ y
を指定します。
u
が0
以上である時間が 2 秒を超えている場合、ブロックはy
を1
に設定します。u
が0
未満である時間が 2 秒を超えている場合、ブロックはy
を-1
に設定します。いずれの要件も満たさない場合、ブロックは
y
を0
に設定します。
シミュレーションを実行し、Scope ブロックで出力を確認します。
追加の例については、Define Formal Requirements with a Durationを参照してください。
時相論理演算子の使用
Requirements Table ブロックに演算子を使用して時相論理を追加することもできます。これらの演算子は、[要件] タブまたは [アクション] タブの前提条件、事後条件、アクションに表示される可能性があります。
演算子 | 構文 | 説明 |
---|---|---|
duration | duration(C) | 条件式 C が true になってからの経過時間 (秒数) を返します。 |
isStartup |
| シミュレーション時間が 0 と等しい場合は true 、それ以外のシミュレーション時間の場合は false を返します。 |
getPrevious |
| 前のタイム ステップにおけるデータの値を返します。 |
t | t | シミュレーション時間 (秒数) を返します。 |
時相論理演算子を使用するときの考慮事項
isStartup
を含む Requirements Table ブロックを Enabled Subsystem (Simulink) ブロックで使用している場合、isStartup
演算子は、ユーザーが Enabled Subsystem ブロックを再度有効にするタイム ステップで true
を返します。ただし、t
演算子は最上位モデルで使用されている時間の値を取得します。そのため、同じ状況でリセットされません。
時相論理演算子の使用例
この例では、時相論理演算子を使用して入力信号をチェックする Requirements Table ブロックを示します。Requirements Table ブロックで入力信号の値とシミュレーション時間をチェックして、2 つの出力で異なる値を実行します。
Requirements Table ブロックを開きます。このブロックでは、4 つの最上位の要件と 3 つ目の要件の 2 つの子要件を使用して、入力データ u
の値をチェックします。
シミュレーションを開始した直後の場合、ブロックは出力データ
y1
を0
に設定します。それ以外の場合、ブロックはy1
を前のタイム ステップにおけるu
の値に設定します。u
が0
以上である場合、ブロックは条件が true である時間が 1 秒を超えているかどうかをチェックします。条件を満たす時間が 1 秒を超えていれば、ブロックはy2
を1
に設定します。それ以外の場合、ブロックはy2
を0
に設定します。u
が0
未満である場合、ブロックはy2
をシミュレーション時間を10
で除算した値に設定します。
シミュレーションを実行し、Scope ブロックで出力を確認します。