stateflow chart 内にて、繰り返し処理​を1ステップで行うに​はどうすればよいか?

現在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ステップで行うためにはどうすればよいでしょうか?

Réponses (1)

Atsushi Ueno
Atsushi Ueno le 30 Oct 2022

0 votes

一つの方法として:
MATLABは配列(ベクトル)を扱えるので、ローカル変数 i やループ処理を削除して、単にen: Out = In;とすれば良いです。
その際、Stateflowチャートのアクション言語をMATLABにしてください。

8 commentaires

佳樹
佳樹 le 30 Oct 2022
ご回答ありがとうございます。
Stateflow内で上記の内容を記述したところ、四つの出力はすべて同じタイミングで代入操作が行われておりました。
ありがとうございます。
しかしながら、今回の図1,2のモデルは、開発においてもう少し複雑な繰り返し処理のモデルを作成するために、テストとして作成したものです。
もう少し複雑なモデルとしては、例えば以下のようなものとなります。
図6
図7
図8
上記のモデルは、入力信号として0もしくは1の信号を入力し、入力が0の場合は出力を1に、入力が1の場合は出力を2とする状態変化をStateflow chartで表したモデルです。
そして、scopeにて、入力と出力に変化のタイミングで違いがないかを見ております。
しかしながら、このモデルは何らかの問題があったようで、意図した出力結果となりませんでした。
そして、その原因を探るべく、今回質問させていただいた図1,2のモデルを作成いたしました。
上記の理由から、Atsushi Ueno様がご回答くださった、Out = In;とそのまま代入する方法ではなく、各要素の処理を繰り返し処理にて、1ステップで行うようなモデルの作成を考えております。
Atsushi Ueno
Atsushi Ueno le 30 Oct 2022
🤔うーん、もう一つ「ステートを除いてジャンクションと遷移だけにすれば1ステップで全部処理される」事を示そうと思っていたのですが、このステートはどうしても必要なものなんでしょうか?
佳樹
佳樹 le 30 Oct 2022
ご回答ありがとうございます。
今回私が図1,2で示したモデルにおいては、ステートは必要ないと思われます。
しかしながら、私が開発を行っているモデルに関しては、もっと複雑なモデルを状態遷移図で表したものを、繰り返し処理似て行いたいと考えております。
たとえば、以下のようなモデルです。
図9
上記のようなモデルの場合、ジャンクションと遷移だけを用いて表現することももしかしたら可能なのかもしれませんが、可読性を考えると状態遷移図を用いた表現を行いたいと考えております。
そして、図9のモデルを作成する前段階のテストとして、質問で上げさせていただいた図1,2のモデルを作成、テスト致しました。
Atsushi Ueno
Atsushi Ueno le 30 Oct 2022
なるほどこれは信号の数だけステートを保持する必要がありますね。
信号の数だけステートを持てば良いかとも思いましたが、N=4ではなく100とかなると困りますもんね。
では上に上がってSimulinkのAtomicサブシステムで括る事になりますか。
Atsushi Ueno
Atsushi Ueno le 30 Oct 2022
実現は絶対に可能なのですが、今の形では絶対に無理で、ステートを再入可能なライブラリにして、信号の数だけ異なるステートを持たせる形にする必要があります。Stateflowのステートでそれをどう実現するのか方法を知らなくて...何か分かったら追記します。
佳樹
佳樹 le 30 Oct 2022
ご回答ありがとうございます。
よろしければ、Atomicサブシステムの使用方法についてお教えいただけないでしょうか?
Atsushi Ueno
Atsushi Ueno le 30 Oct 2022
Subsystem ブロックのプロパティ「Atomic サブシステムとして扱う」にチェックを入れると、そのSubsystem ブロックは「Atomic サブシステム」になります。
実際に設定してみたのですが、Stateが前回値を保持する動きは変わりませんでした。
佳樹
佳樹 le 31 Oct 2022
承知いたしました。
何度もご丁寧な回答を下さり、ありがとうございます。

Connectez-vous pour commenter.

Catégories

En savoir plus sur モデル コンポーネントのスケジュール dans Centre d'aide et File Exchange

Produits

Version

R2022b

Question posée :

le 30 Oct 2022

Commenté :

le 31 Oct 2022

Community Treasure Hunt

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

Start Hunting!