コード生成を前提にし​たsimulinkモ​デルで、条件成立時に​配列の、あるインデッ​クスが持つ値をインク​リメントする方法

2 views (last 30 days)
徹 矢吹
徹 矢吹 on 26 Jun 2020
Commented: Toshinobu Shintai on 30 Jun 2020
配列 test[3]のそれぞれのデータに対し、ある閾値を超えた場合にデータをインクリメントするモデルの作り方を教えていただけないでしょうか。(2015a)
例えば、以下のようなCソースをモデルで実現することは可能でしょうか。また、一般的にモデルで表現するとどのような作りになるのでしょうか。
if ( val 1> LABELX )
{
test[0]++ ;
}
if ( val 2> LABELY )
{
test[1]++ ;
}

Accepted Answer

Toshinobu Shintai
Toshinobu Shintai on 26 Jun 2020
Simulinkのブロックで汎化した記述をするのは難しいですね。添付した「my_model.slx」のように、Selectorを使えば書けるのですが、インクリメントする要素を変えると構造を変えなければなりません。
もし社内ルールでMATLAB Functionを使ってもよいのであれば、「my_model_2.slx」のように記述できるので、こちらの方がよいと思います。
Embedded Coderでコード生成した後のコードも添付しています。拡張子が.cのままでは添付できなかったので、.txtにしました。開く際は拡張子を修正してください。
  6 Comments
徹 矢吹
徹 矢吹 on 30 Jun 2020
1点確認させてください。
MATLAB Functionエディターにある3行目の処理「out = vec」についてですが、
この1文の意図を教えていただけますでしょうか。
Toshinobu Shintai
Toshinobu Shintai on 30 Jun 2020
「整数オーバーフローで飽和」の件ですが、ドキュメントが分かりにくくて申し訳ありません。改善のためフィードバックさせていただきます。
3行目の処理は、簡単に言えば変数初期化とデータ型定義のためです。
以降の処理でout(3)という記述を行うためには、事前にデータサイズが明確になっていなければなりませんので、最初に代入を記述することで、outがvecと同じデータ型、サイズになります。

Sign in to comment.

More Answers (0)

Community Treasure Hunt

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

Start Hunting!