首页 文章

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

提问于
浏览
0

我试图以编程方式将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可以不复制到库吗?有可能以某种方式做到这一点吗?

最好的祝福

卢卡斯

1 回答

  • 1

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

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

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

相关问题