我正在尝试以编程方式将Simulink Blocks从模型复制到库中。我在不同的文件夹中有几个同名的Simulink模型。我想迭代它们并将这些模块中的块复制到Simulink库中。像这样:
function UpdateLibrary()
%UPDATELIBRARY Updates BlockLib.mdl form PLECSBlocks of Components
% Detailed explanation goes here
UserLibDir = SimulationManagerClass.Dir.UserLib; %get the path
if exist([SimulationManagerClass.Dir.UserLib, '\BlockLib.mdl'], 'file')
delete([SimulationManagerClass.Dir.UserLib, '\BlockLib.mdl']);
end
BlockLib = new_system('BlockLib', 'Library'); %empty library
PlecsBlocks = rdir([SimulationManagerClass.Dir.UserLib, '\**\PLECSBlock.mdl']); %get all my sources
for i = 1:numel(PlecsBlocks)
SystemPath = PlecsBlocks(i).name;
sys = load_system(PlecsBlocks(i).name);
Blocks = find_system(sys);
add_block(Blocks(2),BlockLib);
close_system(sys);
end
save_system(BlockLib, [SimulationManagerClass.Dir.UserLib, '\BlockLib.mdl']);
close_system(BlockLib);
end
现在我正在尝试复制一个块。块似乎也包含complet模型的句柄:
Block(1) == sys
当我尝试这个时,我得到:
Invalid destination block specification
add_block可以不复制到库吗?有可能以某种方式做到吗?
祝你好运
的Lukas
答案 0 :(得分:1)
对于add_block,您需要提供目标路径作为第二个参数。
add_block(Blocks{2}, 'BlockLib/destination_name');
您需要使用Blocks
的单元格paren来获取源的路径名称。如果您希望目标与原始块具有相同的名称,则可能需要通过删除源模型名称从destination_name
中提取Blocks{2}
。