2015-10-13 183 views
0

我试图以编程方式将Simulink块从模型复制到库。我在不同的文件夹中有几个同名的Simulink模型。我想遍历它们并将这些模型中的块复制到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 

现在我正试图复制一个块。块似乎包含了完满成功模型的手柄以及这样:

Block(1) == sys 

当我尝试这样我得到:

Invalid destination block specification 

能add_block无法复制到库?是否有可能做到这一点?

问候

卢卡斯

回答

1

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

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

您需要使用电池为括号来Blocks得到源的路径名。如果您希望目标位置与原始块名称相同,则可能需要从Blocks{2}中提取destination_name,方法是删除源模型名称。

+0

不错。有效。我只需要传递一个字符串作为参数。谢了哥们! – Lukas