モデルの質量分析

11 visualizzazioni (ultimi 30 giorni)
taichi muto
taichi muto il 22 Lug 2020
Commentato: taichi muto il 22 Set 2020
Simulinkにて作成したモデル全体の質量を求めることは可能でしょうか。
  4 Commenti
stozaki
stozaki il 22 Set 2020
taichi muto様
モデル内のブロックの個数をカウントする方法は回答致しました。ご所望の処理であればAcceptください。
もし差し支えなければ、ブロックの個数を "質量" と換算している意味をご教示頂けますか? ブロック数を "質量" と換算しているユースケースは初めてお見受けしたので、私の回答が的を得ているか否かが心配なためです。
宜しくお願いいたします。
stozaki
taichi muto
taichi muto il 22 Set 2020
一つのブロックの質量が求まった上で個数が分かれば、(質量)×(個数)で全体の質量に換算できるという意味で用いていました。 私の説明不足で複雑になってしまい申し訳ありません。 具体例を用いた詳しいご回答ありがとうございます。

Accedi per commentare.

Risposta accettata

stozaki
stozaki il 22 Set 2020
Modificato: stozaki il 22 Set 2020
taichi muto様
ご返信ありがとうございます。
モデル内のブロックの個数をカウントする方法ですが、幾つかの方法があります。
最も簡単にブロック数をカウント出来るのは次の関数をご利用ください。
sldiagnostics(bdroot(gcs),'CountBlocks')
% 例1
>> f14
>> sldiagnostics(bdroot(gcs),'CountBlocks')
ans =
''f14' 内のブロックのカウントが完了しました。
63 個のブロックが見つかりました。
メモ:ブロック タイプの横の "M" は、そのブロック タイプがマスクされた SubSystem または S-function であり、SubSystem と S-function のブロック合計として表示された総ブロック数に既に算入されていることを示しています。MATLAB Function ブロック、Truth Table、Stateflow の各ブロックは、SubSystem と S-function の合計から差し引かれますが、隠れたサポート ブロックは差し引かれません。
f14 Total blocks : 63
Constant : 1
Derivative : 2
Gain : 14
Inport : 9
Outport : 9
Product : 1
RandomNumber : 1
Scope : 3
SignalGenerator : 1
SubSystem : 5
Sum : 8
TransferFcn : 9
M Band-Limited White Noise. : 1
'
ただし、注意頂きたいのは対象モデル内に、Modelブロック (モデル参照) が含まれる場合、その内部のブロック数は上記関数で一度にカウント出来ないので、find_mdlrefs関数を使って、モデル内に含まれるModelブロックをリスト化し、Modelブロック毎にsldiagnostics関数を実行してください。
allModels = find_mdlrefs(bdroot(gcs));
-------------------------------------------------------------------------------------------------------------------------------------------------------
また、sldiagnostics関数の返り値は、コマンドウィンドウに表示される文字列情報なので、モデル内のブロックの個数を数値情報として取得して、別のプログラムで何かしらの処理を行いたい場合には向いていません。
その場合は、次のコマンドでブロックパス数を取得し、length関数で個数を判定できます。
blkLists = find_system(bdroot(gcs),'FollowLinks','on','LookUnderMasks','on');
% 例2
>> f14
>> blkLists = find_system(bdroot(gcs),'FollowLinks','on','LookUnderMasks','on');
>> length(blkLists)
ans =
64
ここで、最初の例では全ブロック数が63に対して、本例では64となっています。これは、find_systemの返り値に "モデル自身" もリストされるためです。従って、実質は63となります。
他にも方法はありますが、代表的な2例を挙げましたので、用途に応じて使い分けてください。
stozaki
  1 Commento
taichi muto
taichi muto il 22 Set 2020
私の要望に沿ったご回答ありがとうございます。 また、説明文も付け加えていただき感謝致します。

Accedi per commentare.

Più risposte (0)

Prodotti


Release

R2020a

Community Treasure Hunt

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

Start Hunting!