Simulinkで、任意のタイミングからの経過時間を求めるにはどのようにすればよいですか?
144 ビュー (過去 30 日間)
古いコメントを表示
MathWorks Support Team
2013 年 10 月 25 日
回答済み: MathWorks Support Team
2013 年 10 月 25 日
Simulinkで、任意のタイミングからの経過時間を求めるにはどのようにすればよいですか?
採用された回答
MathWorks Support Team
2013 年 10 月 26 日
実現方法はいくつか考えられますが、例えば、次のいずれかの考え方によりモデリングすることができます。
1. 時間を計測したい間、1を積分する
2. 計測を開始する時間を保持し、その時間と現在時間の差分をとる
1. 時間を計測したい間、1を積分する
時間を計測したい間、1を出力する信号を作成してIntegratorブロックで積分することで、経過時間を求めることができます。
下記にパルス信号が0より大きい間、時間を計測する例を示します。
サンプル:by_integrator.mdl
この例では、Compare To Constant ブロックを利用して、信号が0より大きいときに1を出力する信号を作成しています。なお、Compare To Constant ブロックの「ゼロクロッシング検知」オプションをオンにすることで、信号が0以上となる瞬間を検知するようにしています。
また、Compare To Constantブロックの出力は、boolean型もしくは、uint8型となるため、Integerブロックが入力として受け入れることができるdouble型にData Type Conversionブロックを使って変換しています。
この方法は、比較的少ないブロックで簡単に実現することができますが、数値積分を使用して時間を求めるため、ごく微小な誤差が発生する可能性があります。より正確な時間を求めるためには、2.の方法を検討します。
2. 計測を開始する時間を保持し、その時間と現在時間の差分をとる
計測を開始する時間は、Triggered Subsystem とclock ブロックを用いることで保持することができます。この保持した時間と現在時間との差分をとることで、経過時間を求めることができます。下記にパルス信号が0より大きい間、時間を計測する例を示します。
サンプル:by_clock_trigger.mdl
この例でも、Compare To Constant ブロックの「ゼロクロッシング検知」オプションをオンにすることで、パルス信号が0より大きくなる瞬間を検知するようにしています。また、Switchブロックを使うことで、パルス信号が0より大きい間は経過時間を出力し、それ以外の間は、0を出力するようにしています。
0 件のコメント
その他の回答 (0 件)
参考
製品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!