【问题标题】:How to copy Simulink Blocks to Simulink library programmatically如何以编程方式将 Simulink 模块复制到 Simulink 库
【发布时间】:2015-10-13 10:46:11
【问题描述】:

我正在尝试以编程方式将 Simulink 模块从模型复制到库中。我在不同的文件夹中有几个同名的 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

现在我正在尝试只复制一个块。 Blocks 似乎也包含完整模型的句柄,因此:

Block(1) == sys

当我尝试这个时,我得到:

Invalid destination block specification

add_block 不能复制到库吗?有没有可能以某种方式做到这一点?

最好的问候

卢卡斯

【问题讨论】:

    标签: matlab simulink


    【解决方案1】:

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

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

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

    【讨论】:

    • 不错。有效。我只需要传递一个字符串作为参数。谢谢,伙计!
    猜你喜欢
    • 1970-01-01
    • 2016-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-16
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多