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

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 27 May 2024
Moved: Atsushi Ueno on 29 May 2024
追加の質問となります。
場合によっては以下のエラーが出ることもあります。
これは"1"の型がdouble型であることで、ufix4型の"cnt"というパラメータに加算できないという内容かと思いますが、例えばこの"1"の型を指定する方法はあるでしょうか。
「この代入では、'double' 値が 'embedded.fi {ufix4}' 型に書き込まれます。コード生成では、代入時の型の変更をサポートしていません。前の代入または入力の型の指定に型の不一致がないか確認してください。 」
takaka
takaka on 29 May 2024
Moved: Atsushi Ueno on 29 May 2024
ご回答ありがとうございます。
ご説明頂いた方法を試しましたが、まだエラーが残っており、問題点をご教示いただけますでしょうか。
Simulink内で完結させたいため、ONEという定数を定義する方法を試してみました。
(cnt_numoutが先ほどのcntに対応しています。また実際のモデルはもう少し複雑です。)
各スクリーンショット画面(モデルエクスプローラー、プロパティインスペクター、エラー画面)を添付します。
また、「固定小数点プロパティ」でfimathで型を定義する方法ですが、これは例えば同じchart内に複数の異なる型の固定小数点パラメータがある場合、どのように区別するのでしょうか?
お手数ですがご確認お願い致します。
takaka
takaka on 31 May 2024
度々申し訳ございません。本件解決できておらず、ご確認いただけますと幸いです。
"ONE"をconstantとしても、やはりdouble型と認識されてしまいます。
「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!