inputが2つある​場合に、最初の1ステ​ップのみinput1​の値を出力し、それ以​降はinput2を出​力するモデルをsim​ulinkにて作成す​る場合は、どのような​モデルがよいか

13 views (last 30 days)
佳樹
佳樹 on 27 Jul 2023
Commented: 佳樹 on 27 Jul 2023
現在MATLAB, Simulinkにてモデルの作成を行っております。
Simulinkにおいてinputが2つある場合に、最初の1ステップのみinput1の値を出力し、それ以降はinput2を出力するといったモデルを作成しようと考えております。
この要件を満たすモデルは現在以下のようなものとして作成されてあるのですが、いささか内容がわかりにくいものとなっており、どうにか改良できないかと考えております。
このスイッチの駆動信号としてfalseが入力されておりますが、この値にunit delayをかけており、その初期値をtrueとしております。
すなわち、スイッチの駆動信号は以下のようなものとなっております。(time stepは0.1秒)
この駆動信号について~=0かどうか(~=falseかどうか、すなわち==trueかどうか)をチェックすると、最初の0.1秒のみtrueなので上のinput1がoutputとして出力され、それ以降は下のinput2の信号が出力される仕組みとなっております。
このモデルは正直わかりにくいと感じているのですが、一方で代替案となるよいモデルも今一つ思いつきません。
(一応下図のように思い付きはしたのですが、コード効率的に上のモデルの方がよいように思えております。)
代替モデル1
上のモデルよりはわかりやすい気がするが、コード量的にどうなるか、、
代替モデル2
Stateflowにて、最初Initial Stateに入り、次のステップでSteady Stateに遷移する。
Stateflowのステートを使用すると、コード量が多くなるという話を伺った。
上記のように、今一つ代替となるよいモデルを作成することができません。
どのようなモデルであれば、この代替となるもっと簡潔なモデルとなりますでしょうか?

Accepted Answer

Toshinobu Shintai
Toshinobu Shintai on 27 Jul 2023
Edited: Toshinobu Shintai on 27 Jul 2023
回答とは言えないかもしれませんが、私の個人的な意見を述べさせていただきます。
「Stateflow ステートを使用すると、コード量が多くなるという話」があるとのことですが、こちらはケースバイケースかと思います。必ずコード量が多くなるというわけでもありませんので、試しに使ってみて、生成コードに問題があるかどうか、確認してくださればと思います。
本モデルの可読性を向上させたい、という点についてですが、本モデルは要するに、「最初のステップ」と「2ステップ目以降」の二つの状態が存在している、ということになります。そうであれば、その状態をStateflowで記述するようにすると、分かりやすくなります。つまり、状態はStateflowで、状態以外はSimulinkブロックで記述するようにします。
Chartブロックで作成した状態は、Chartブロックから出力信号として、現在の状態を出力できます。
ここで、状態を列挙型で定義すると、可読性が良くなります。列挙型を定数として使うには「Enumerated Constant」ブロックを使います。比較は「Relational Operator」ブロックでできます。
Chartブロックで状態に対して列挙型を指定するには、上の画像にあるように、プロパティインスペクターで「監視する出力の作成」にチェックを入れます。
Simulinkで列挙型を使用する方法については、以下もご参照ください。
  1 Comment
佳樹
佳樹 on 27 Jul 2023
「「最初のステップ」と「2ステップ目以降」の二つの状態が存在している」ということで、Stateflowを使用した方がよいこと、承知いたしました。
今回のモデルの周辺を見てみましても、Stateflowを使用した方がよいように思えましたので、アドバイスを頂いた通りに作成したいと思います。
またコード量に関してもケースバイケースであること、承知いたしました。
コード量に関しては実際にコード生成したのち比較を行い、また搭載する機器の容量等も考慮しながら考えたいと思います。
アドバイスありがとうございました。

Sign in to comment.

More Answers (0)

Tags

Products


Release

R2020b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!