MATLAB Answers

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

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

  0 Comments

Sign in to comment.

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

Show 3 older comments
徹 矢吹
徹 矢吹 on 30 Jun 2020
すみません、MATLAB Functionエディターのデータの編集から「整数オーバーフローの飽和」をチェックする場所が見つかりました。
質問以前にも以下の情報を確認しましたが、「整数オーバーフローで飽和」については、設定の可否が記載されており、私の知りたい設定方法がありませんでした。
(不慣れな上に急いでいたため確認不足だったかもしれません。)
徹 矢吹
徹 矢吹 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)

Categories