行列ベクトルの入力デ​ータをstatefl​owに読み込ませる方​法

2 Ansichten (letzte 30 Tage)
kazuya h
kazuya h am 31 Mai 2022
シリアル通信でデータサイズ[1 24](int16)のデータをstateflowを用いて条件分岐したいのですが、行列またはベクトルが不適切に使用されているというエラーが出てしまいます。
その後、プロパティインスペクターで入出力データのサイズと型を[1 24](int16)に設定して再度実行しましたが、データサイズの不一致というエラーが出てしまいます。
stateflowに行列データを読み込む時は一旦スカラーに変換しなければならないのでしょうか。
何か解決策等教えていただければ幸いです。

Akzeptierte Antwort

Toshinobu Shintai
Toshinobu Shintai am 31 Mai 2022
Stateflowの遷移の条件判定式の出力が、スカラーなければならないためにエラーとなります。
例えば以下のようにコードを書いて実行してみると分かりますが、
y = ones(1, 24);
y < 2000
ans = 1×24 logical array
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
比較演算子"<"は、ベクトルの各数値に対して実行され、出力はベクトルになります。
例えば以下のように判定式がスカラーになるようにすればエラーは発生しなくなると思います。
参考までに、モデルも添付します。R2021aで作成しました。

Weitere Antworten (2)

kazuya h
kazuya h am 31 Mai 2022
回答いただきありがとうございます。
添付していただいた画像の通りに変更したところ、実行することができました。
もう一点質問があるのですが、回答の1行目にあるとおりstateflowの条件分岐の出力はスカラーで無ければならないとありますが
ベクトルで出力する方法はstateflow中には無いのでしょうか。
その場合、simulinkのifブロックなどを使用するとベクトルデータでの入出力が可能になるのでしょうか。
  2 Kommentare
Toshinobu Shintai
Toshinobu Shintai am 31 Mai 2022
Bearbeitet: Toshinobu Shintai am 31 Mai 2022
Stateflowの状態遷移をベクトル化する意味は、どのようにお考えでしょうか。
通常、Stateflowのチャート内に存在するステートブロックは、ある一つの状態を表現しています。そのため、その状態が遷移するということは、一つの "遷移するしないのフラグ" = "スカラーのboolean値" があればよいです。
この遷移フラグがベクトルである、ということは、そのステートをベクトル化(インスタンス化)したいということでしょうか。そのような表現はStateflowではできません。Stateflowでなくても、そのような表現は可視化が難しくなるかと思います。
少しモデルが大きくなりますが、要素ごとに状態遷移を適用するようにする方が見やすく、またその方法がSimulinkとStateflowで可能になる手段になります。
添付ファイルをご確認ください。
Toshinobu Shintai
Toshinobu Shintai am 31 Mai 2022
すみません、追記ですが、「For Each Subsystem」を使うともう少し効率よくモデル化できます。Test_model_2.slxの「state_vector」サブシステムをFor Eachにすることで、ブロックを沢山並べなくてもモデル化できます。

Melden Sie sich an, um zu kommentieren.


kazuya h
kazuya h am 31 Mai 2022
具体的には4*6行列の24分割された位置検出データの、閾値を超えたものをON(x=1)の状態にすることが狙いでした。
先ほどのスカラー(y(1))を条件分岐に記入した際には4*6行列の内1行目しかON状態にならなかったので、ベクトルに出来ないかを質問した次第になります。ベクトルと行列を同義と考えてしまっていたので、ややこしくなってしまいました。
送付していただいたtest_model_2.slxのstate_vectorをモデルに組み込んだところ、閾値を超えた24個の位置データをそれぞれ検出することが出来ました。ありがとうございます。

Kategorien

Mehr zu Simulink Function finden Sie in Help Center und File Exchange

Produkte


Version

R2021a

Community Treasure Hunt

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

Start Hunting!