如何以编程方式将Simulink Blocks复制到Simulink库

时间:2015-10-13 10:46:12

标签: matlab simulink

我正在尝试以编程方式将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

1 个答案:

答案 0 :(得分:1)

对于add_block,您需要提供目标路径作为第二个参数。

add_block(Blocks{2}, 'BlockLib/destination_name');

您需要使用Blocks的单元格paren来获取源的路径名称。如果您希望目标与原始块具有相同的名称,则可能需要通过删除源模型名称从destination_name中提取Blocks{2}