MATLABコマンド​ラインから印刷フレー​ムを使用してsimu​linkモデルブロッ​ク図を印刷することは​できますか

7 views (last 30 days)
yusuke endo
yusuke endo on 12 Sep 2020
Commented: stozaki on 14 Sep 2020
MATLABコマンドラインから,印刷フレームを使用してsimulinkモデルブロック図をpdf出力する方法はありますか?
理由
モデル参照ブロックの中は印刷時の設定において「すべてのシステム」選択しても印刷されないため,
個別にモデルファイルを開いて印刷するように指示があります.
モデル参照ブロックの数が少ない場合は手動で実施すれば良いですが,モデル参照ブロックの数が多い場合は非常に手間になります.
これに対応する方法として,MATLABコマンドラインからモデルを開いてprintコマンドを用いて印刷する方法もあるようですが,
印刷フレームの指定方法が不明です.

Accepted Answer

stozaki
stozaki on 12 Sep 2020
yusuke endo 様
モデル参照毎のブロック線図に対して1枚のpdfファイルを生成するプログラムを考えてみました。
R2020aの環境を使用し、手元では期待されるpdfファイルが出力されることを確認しております。
2通りの方法が考えられたので、お試しください。
方法1 : "print" を使った場合
% 最上位モデルを設定(右辺に最上位モデル名を設定してください)
topModel = 'modelName';
% モデル内に含まれるモデル参照の名称をリストします
[myModels,~] = find_mdlrefs(topModel);
% モデル参照数で繰り返し処理
for N = 1:length(myModels)
% モデル参照を開く
open_system(myModels{N});
% 開いたときに"タブ"で下位階層が見えてしまうときがあるのでその判定
% 本来不要と思われますが、R2020aでは下位階層(タブ表示)が開いてしまうことがあったので回避策としてif-else分岐
if isequal(myModels{N},gcs)
% モデル名と現在のシステム(階層)が一致していればpdf出力
print('-s',myModels{N},'-dpdf');
else
% モデル名と現在のシステム(階層)が不一致の場合、再度モデルを開き直す
% 確実にモデル参照の最上位階層が開く
open_system(myModels{N});
print('-s',myModels{N},'-dpdf');
end
% 開いているモデルを閉じる
close_system(myModels{N});
end
方法2 : "saveas"を使った場合
% 最上位モデルを設定(右辺に最上位モデル名を設定してください)
topModel = 'modelName';
% モデル内に含まれるモデル参照の名称をリストします
[myModels,~] = find_mdlrefs(topModel);
% モデル参照数で繰り返し処理
for N = 1:length(myModels)
% モデル参照を開く
open_system(myModels{N});
% saveas関数を使ってモデル参照のハンドルを取得し、保存形式をpdfとして保存します
saveas(get_param(myModels{N},'Handle'),[myModels{N},'.pdf']);
% 開いているモデルを閉じる
close_system(myModels{N});
end
stozaki
  2 Comments
yusuke endo
yusuke endo on 13 Sep 2020
回答ありがとうございます.
上記の方法により,モデル参照ブロックの内部構造がpdfで出力されることを確認しました.
しかし,pdfに出力されるのはブロックの内部構造だけであり,モデル名称,モデルの保存場所,印刷日時などが記述されていないため,少し情報不足に感じております.
これを解消する方法としてframeeditコマンドにより作成される「印刷フレーム」機能が用意されているかと思いますが,「コマンドラインから実施可能かつ印刷フレームを利用可能な方法」はありますでしょうか?
stozaki
stozaki on 14 Sep 2020
「コマンドラインから」frameeditを使う方法ですが、print関数と組み合わせて使用するのは出来ないように見えます。
print関数のドキュメントを参照すると、print関数の引数として、frameeditで定義した.figを読み込ませて且つ、Simulinkモデルのブロックダイアグラムを印刷対象として指定する組み合わせが無いためです。
また、「Simulinkモデルの印刷」を実行するAPIもドキュメントには見つかりませんでした。
もし、MATLAB Report Generator/Simulink Report Generatorのライセンスをお持ちでしたら、別のアプローチで実現出来る可能性がございます。(幾つかのレンプレートはありますが、カスタマイズが必要かもしれません)
yusuke endo 様のご指摘の様な使用方法は確かに理にかなっており、プログラムで自動実行出来たほうが良いと思いますので、機能拡張のご要望として開発チームへリクエストいたします。
stozaki

Sign in to comment.

More Answers (0)

Categories

Find more on プログラムによるモデル編集 in Help Center and File Exchange

Products


Release

R2018b

Community Treasure Hunt

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

Start Hunting!