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

13 ビュー (過去 30 日間)
佳樹
佳樹 2023 年 7 月 27 日
コメント済み: 佳樹 2023 年 7 月 27 日
現在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のステートを使用すると、コード量が多くなるという話を伺った。
上記のように、今一つ代替となるよいモデルを作成することができません。
どのようなモデルであれば、この代替となるもっと簡潔なモデルとなりますでしょうか?

採用された回答

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

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeSimulink Function についてさらに検索

タグ

製品


リリース

R2020b

Community Treasure Hunt

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

Start Hunting!