質問: モデルの質量分析 simulinkにて作成したモデル全体の質量を求めることは可能でしょうか。
回答: 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