Clear Filters
Clear Filters

[Simulink] chart内でカウントアップを記述する方法

2 views (last 30 days)
takaka
takaka on 24 May 2024
Commented: Toshinobu Shintai on 31 May 2024
Simulinkの"chart"(ステートマシン)内で、カウントアップを記述するにはどのようにすればよいでしょうか。
具体的には添付の図の通り、遷移の際にパラメータ"cnt"の値を"1"だけ増やす処理をどのように記載すればよいか教えていただきたいです。
図の状況で実行すると、
「タイプの不一致: embedded.fi {ufix4} ~= embedded.fi {ufix5}.」
というエラーが発生します。いま"cnt"はfixdt(0,4,0)型としているため、1を加算することで5bit幅に増加する可能性があるという理解ですが、その場合は5bit目を切り捨てる処理で構いません。
ご確認お願い致します。

Accepted Answer

Toshinobu Shintai
Toshinobu Shintai on 29 May 2024
Edited: Toshinobu Shintai on 29 May 2024
固定小数点のデータ型は、fimathというオブジェクトを使って詳細にカスタマイズできます。
例えば、以下のようにすると、おっしゃっていることができると考えています。(MATLABコマンドの場合)
%%
F = fimath("ProductMode", 'SpecifyPrecision', ...
"ProductWordLength", 4, ...
"ProductFractionLength", 0, ...
"SumMode", 'SpecifyPrecision', ...
"SumWordLength", 4, ...
"SumFractionLength", 0);
%%
cnt = fi(0, 0, 4, 0);
ONE = fi(1, 0, 4, 0);
cnt.fimath = F;
ONE.fimath = F;
%%
cnt = cnt + ONE
cnt =
1 DataTypeMode: Fixed-point: binary point scaling Signedness: Unsigned WordLength: 4 FractionLength: 0 RoundingMethod: Nearest OverflowAction: Saturate ProductMode: SpecifyPrecision ProductWordLength: 4 ProductFractionLength: 0 SumMode: SpecifyPrecision SumWordLength: 4 SumFractionLength: 0 CastBeforeSum: true
これをChartブロックの中で行う場合、fimathの定義をChartのプロパティインスペクターで指定する必要があります。
これにより、変数cntがfixdt(0,4,0)を維持できるかと思います。
1という数字の型指定については、上記のMATLABコマンドのように、fixdt(0,4,0)の1を意味する定数値を定義する方が手っ取り早いです。
  4 Comments
takaka
takaka on 31 May 2024
度々申し訳ございません。本件解決できておらず、ご確認いただけますと幸いです。
"ONE"をconstantとしても、やはりdouble型と認識されてしまいます。
Toshinobu Shintai
Toshinobu Shintai on 31 May 2024
「cnt_numout」のサイズを-1ではなく、明確に1に設定してみてはどうでしょうか。
私のモデルでは、ここの指定を-1にすると、別のエラーですが、
型、実数/複素数のいずれかがモデル エクスプローラーで指定されていません。また、チャート内のこの変数には値が完全に代入されていません。これを修正するには、次のいずれかを行います。
が出ました。

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!