stateflow chart 内にて、繰り返し処理を1ステップで行うにはどうすればよいか?
Ältere Kommentare anzeigen
現在stateflow chartにて、開発を行っております。
開発モデルにおいて、stateflow chart 内にて繰り返し処理を行いたいために、テストとして以下のようなモデルを作成しました。
図1
図2
図3上記のモデルは、Chart内にて、[1 1 1 1]というInベクトルの各要素を、繰り返し処理によってOutベクトルの各要素に代入するという簡単なモデルとなります。
また、resolutionは1秒です。
Outベクトルは、初期値として[0 0 0 0]と設定されております。
このモデルを実行すると、Outの各要素の出力が異なっており、一つ目と四つ目では以下のようになります。
図4一つ目、0秒の段階で代入が行われている
図5四つ目、代入操作が3秒の時点で行われている。
上記のような代入操作の遅れは、図2において一つの要素の代入操作が1ステップで行われており、すべての操作に4ステップかかっていることによるものと思われます。
ここで、すべての操作を1ステップで行うためにはどうすればよいでしょうか?
Antworten (1)
Atsushi Ueno
am 30 Okt. 2022
0 Stimmen
一つの方法として:
MATLABは配列(ベクトル)を扱えるので、ローカル変数 i やループ処理を削除して、単にen: Out = In;とすれば良いです。
その際、Stateflowチャートのアクション言語をMATLABにしてください。
8 Kommentare
佳樹
am 30 Okt. 2022
Atsushi Ueno
am 30 Okt. 2022
🤔うーん、もう一つ「ステートを除いてジャンクションと遷移だけにすれば1ステップで全部処理される」事を示そうと思っていたのですが、このステートはどうしても必要なものなんでしょうか?

佳樹
am 30 Okt. 2022
Atsushi Ueno
am 30 Okt. 2022
なるほどこれは信号の数だけステートを保持する必要がありますね。
信号の数だけステートを持てば良いかとも思いましたが、N=4ではなく100とかなると困りますもんね。
では上に上がってSimulinkのAtomicサブシステムで括る事になりますか。
Atsushi Ueno
am 30 Okt. 2022
実現は絶対に可能なのですが、今の形では絶対に無理で、ステートを再入可能なライブラリにして、信号の数だけ異なるステートを持たせる形にする必要があります。Stateflowのステートでそれをどう実現するのか方法を知らなくて...何か分かったら追記します。
佳樹
am 30 Okt. 2022
Atsushi Ueno
am 30 Okt. 2022
Subsystem ブロックのプロパティ「Atomic サブシステムとして扱う」にチェックを入れると、そのSubsystem ブロックは「Atomic サブシステム」になります。
実際に設定してみたのですが、Stateが前回値を保持する動きは変わりませんでした。

佳樹
am 31 Okt. 2022
Kategorien
Mehr zu モデル コンポーネントのスケジュール finden Sie in Hilfe-Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!


