モデルの質量分析
1 view (last 30 days)
Show older comments
Simulinkにて作成したモデル全体の質量を求めることは可能でしょうか。
4 Comments
stozaki
on 22 Sep 2020
taichi muto様
モデル内のブロックの個数をカウントする方法は回答致しました。ご所望の処理であればAcceptください。
もし差し支えなければ、ブロックの個数を "質量" と換算している意味をご教示頂けますか? ブロック数を "質量" と換算しているユースケースは初めてお見受けしたので、私の回答が的を得ているか否かが心配なためです。
宜しくお願いいたします。
stozaki
Accepted Answer
stozaki
on 22 Sep 2020
Edited: stozaki
on 22 Sep 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
More Answers (0)
See Also
Categories
Find more on 診断の設定と表示 in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!