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

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

채택된 답변

Toshinobu Shintai
Toshinobu Shintai 2022년 5월 31일
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で作成しました。

추가 답변(2개)

kazuya h
kazuya h 2022년 5월 31일
回答いただきありがとうございます。
添付していただいた画像の通りに変更したところ、実行することができました。
もう一点質問があるのですが、回答の1行目にあるとおりstateflowの条件分岐の出力はスカラーで無ければならないとありますが
ベクトルで出力する方法はstateflow中には無いのでしょうか。
その場合、simulinkのifブロックなどを使用するとベクトルデータでの入出力が可能になるのでしょうか。
  댓글 수: 2
Toshinobu Shintai
Toshinobu Shintai 2022년 5월 31일
すみません、追記ですが、「For Each Subsystem」を使うともう少し効率よくモデル化できます。Test_model_2.slxの「state_vector」サブシステムをFor Eachにすることで、ブロックを沢山並べなくてもモデル化できます。

댓글을 달려면 로그인하십시오.


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

Community Treasure Hunt

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

Start Hunting!