inputが2つある場合に、最初の1ステップのみinput1の値を出力し、それ以降はinput2を出力するモデルをsimulinkにて作成する場合は、どのようなモデルがよいか
14 views (last 30 days)
Show older comments
現在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のステートを使用すると、コード量が多くなるという話を伺った。
上記のように、今一つ代替となるよいモデルを作成することができません。
どのようなモデルであれば、この代替となるもっと簡潔なモデルとなりますでしょうか?
0 Comments
Accepted Answer
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で列挙型を使用する方法については、以下もご参照ください。
More Answers (0)
See Also
Categories
Find more on Simulink Function in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!