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

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

 採用された回答

Toshinobu Shintai
Toshinobu Shintai 2020 年 6 月 26 日

0 投票

Simulinkのブロックで汎化した記述をするのは難しいですね。添付した「my_model.slx」のように、Selectorを使えば書けるのですが、インクリメントする要素を変えると構造を変えなければなりません。
もし社内ルールでMATLAB Functionを使ってもよいのであれば、「my_model_2.slx」のように記述できるので、こちらの方がよいと思います。
Embedded Coderでコード生成した後のコードも添付しています。拡張子が.cのままでは添付できなかったので、.txtにしました。開く際は拡張子を修正してください。

6 件のコメント

徹 矢吹
徹 矢吹 2020 年 6 月 29 日
2015aのMATLABにおいて、MATLAB Functionブロックの整数のオーバーフローチェックを無効にすることは可能でしょうか。
Toshinobu Shintai
Toshinobu Shintai 2020 年 6 月 29 日
添付した「my_model_2.slx」では、「整数オーバーフローの飽和」のチェックを外したことで、「my_model_2.txt」のように生成コードでオーバーフローのチェックはしていませんが、この話ではない、別の問題についてでしょうか。
徹 矢吹
徹 矢吹 2020 年 6 月 30 日
「整数オーバーフローの飽和」のことで正しいです。
「整数オーバーフローの飽和」のチェックがどこにあるかがわからず困っています。
2015aのバージョンでは存在しないのでしょうか。
※添付いただいた「my_model_2.slx」を参考にモデルを自作したのですが、チェックの場所がわからず、
オーバーフローのコードが生成されてしまいました。(オーバーフロー対策は設定ではなく、モデルで表現したいという考えがあります。)
徹 矢吹
徹 矢吹 2020 年 6 月 30 日
すみません、MATLAB Functionエディターのデータの編集から「整数オーバーフローの飽和」をチェックする場所が見つかりました。
質問以前にも以下の情報を確認しましたが、「整数オーバーフローで飽和」については、設定の可否が記載されており、私の知りたい設定方法がありませんでした。
(不慣れな上に急いでいたため確認不足だったかもしれません。)
徹 矢吹
徹 矢吹 2020 年 6 月 30 日
1点確認させてください。
MATLAB Functionエディターにある3行目の処理「out = vec」についてですが、
この1文の意図を教えていただけますでしょうか。
Toshinobu Shintai
Toshinobu Shintai 2020 年 6 月 30 日
「整数オーバーフローで飽和」の件ですが、ドキュメントが分かりにくくて申し訳ありません。改善のためフィードバックさせていただきます。
3行目の処理は、簡単に言えば変数初期化とデータ型定義のためです。
以降の処理でout(3)という記述を行うためには、事前にデータサイズが明確になっていなければなりませんので、最初に代入を記述することで、outがvecと同じデータ型、サイズになります。

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

ヘルプ センター および File ExchangeSystem on Chip (SoC) についてさらに検索

Community Treasure Hunt

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

Start Hunting!