Simulinkにて作成したモデル全体の質量を求めることは可能でしょうか。

4 comentarios

stozaki
stozaki el 17 de Sept. de 2020
taichi muto様
"モデル全体の質量" とは具体的にどの様なメトリクスでしょうか?
ファイルのサイズ? モデル内のブロックの個数? モデルの階層数?
Simulinkモデルが持っているパラメータに "質量" に相当するものが無いため、具体的なパラメータ名などありましたら教えて頂けますか?
stozaki
taichi muto
taichi muto el 22 de Sept. de 2020
返信が遅れてしまい申し訳ありません。
"モデル全体の質量"とは個々の要素を組み合わせて作成したモデル全体の質量です。つまりモデル内のブロックの個数にあたるものです。
Simulinkモデルが持っているパラメータに質量に相当するものが無いということなので,要素それぞれで定義した体積と密度から質量を求めることにします。
お返事いただきありがとうございます。
stozaki
stozaki el 22 de Sept. de 2020
taichi muto様
モデル内のブロックの個数をカウントする方法は回答致しました。ご所望の処理であればAcceptください。
もし差し支えなければ、ブロックの個数を "質量" と換算している意味をご教示頂けますか? ブロック数を "質量" と換算しているユースケースは初めてお見受けしたので、私の回答が的を得ているか否かが心配なためです。
宜しくお願いいたします。
stozaki
taichi muto
taichi muto el 22 de Sept. de 2020
一つのブロックの質量が求まった上で個数が分かれば、(質量)×(個数)で全体の質量に換算できるという意味で用いていました。 私の説明不足で複雑になってしまい申し訳ありません。 具体例を用いた詳しいご回答ありがとうございます。

Iniciar sesión para comentar.

 Respuesta aceptada

stozaki
stozaki el 22 de Sept. de 2020
Editada: stozaki el 22 de Sept. de 2020

0 votos

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 comentario

taichi muto
taichi muto el 22 de Sept. de 2020
私の要望に沿ったご回答ありがとうございます。 また、説明文も付け加えていただき感謝致します。

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Productos

Versión

R2020a

Preguntada:

el 22 de Jul. de 2020

Comentada:

el 22 de Sept. de 2020

Community Treasure Hunt

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

Start Hunting!