Model 参照ブロックをSubsystemで置き換えるにはどうすれば良いですか?
16 ビュー (過去 30 日間)
古いコメントを表示
Model Reference ブロックを Subsystem ブロックで置き換える方法があれば教えてください。
採用された回答
MathWorks Support Team
2013 年 4 月 11 日
例えば、下記の手順が挙げられます。
1. モデル参照ブロックを検索
2. モデル参照ブロックの情報を取得(位置、大きさ、参照先のモデル名など)
3. モデル参照ブロックを削除し、サブシステムを配置
4. サブシステム内のブロックを全て削除
5. 参照先のモデルをオープン
6. 参照先のブロック線図をサブシステムにコピー
7. サブシステムブロックの位置を設定
8. 参照先のモデルをクローズ
これを実現するコマンドの一例を、下記に記述します。
デモモデル 'sldemo_mdlref_depgraph' のモデル参照ブロックを置き換えます。
mdl = 'sldemo_mdlref_depgraph';
open_system(mdl);
load_system('simulink');
mdlBlks=1;
while ~isempty(mdlBlks)
% Modelブロックの検索
[refMdls, mdlBlks] = find_mdlrefs(mdl);
for k = 1:length(mdlBlks)
try
% Modelブロックの位置と大きさを取得
pos = get_param(mdlBlks{k},'Position');
% 参照先のモデル名を取得
refmodel = get_param(mdlBlks{k},'ModelName');
% Modelブロックの削除
delete_block(mdlBlks{k});
% Atomic Subsystem をモデルに配置
nb = add_block('simulink/Ports & Subsystems/Atomic Subsystem',mdlBlks{k});
% Atomic Subsystem内のInport, Outport, Line を消去
Simulink.SubSystem.deleteContents(mdlBlks{k});
% 参照先のモデルを開く
open_system(refmodel);
% 参照先のブロック線図を、Atomic Subsystemにコピー
Simulink.BlockDiagram.copyContentsToSubSystem(refmodel,mdlBlks{k});
% Atomic SubsystemのPositionを、元のModelブロックのものに設定
set_param(nb,'Position',pos)
close_system(refmodel);
catch
end
end
end
0 件のコメント
その他の回答 (0 件)
参考
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!