MATLAB编程技巧:MATLAB/Simulink模型版本批量转换为早期版本脚本

当前MATLAB版本繁多,各版本之间的Simulink模型不能相互打开,导致相互之间的模型使用非常不便,故编写此脚本,用于批量转换Simlink模型到早期的版本。

主要思想是先获取目标文件夹下的模型文件,然后循环转换到早期版本,之后将之前版本的模型文件删除,把暂存的模型文件名转换为原先的模型文件名。

下面将代码分享于此:

%% Simulink模型版本批量转换为早期版本工具
% 运行此文件,选择目标文件夹

function ModelConvertVersionBatch(varargin)
tic
% 选择目标文件夹
MainFile = uigetdir('','选择文件夹');

%% 获取文件夹下具体的文件路径和名称
subdirectories = genpath( MainFile );
% ispc - 确定版本是否适用于 Windows (PC) 平台
if ispc
    % 匹配正则表达式
    subdirectories = regexp( subdirectories, '[^;]*', 'match' );
else
    subdirectories = regexp( subdirectories, '[^:]*', 'match' );
end
% strrep - 查找并替换子字符串
% strrep(str,old,new)
filetype = strrep( '.slx', '.', '' );
ModelFile = {};

for i = 1:length( subdirectories )
    % dir()列出当前文件夹中的文件和文件夹。
    files = dir( subdirectories{ i } );
    % 判断生成文件夹isdir属性
    % isdir=1,代表文件夹,否则,代表文件
    % 获得文件夹目录中的文件
    files = files( ~[ files.isdir ] );
    files = { files.name }';
    % 比较字符串(不区分大小写),相同,返回1,否则,返回0
    if ~strcmpi( filetype, '*' )
        for j = 1:length( files )
            % 对比文件的扩展名与目标文件类型
            if strcmpi( file_get_extension( files{ j } ), filetype )
                % 获得匹配文件的路径
                ModelFile{ end  + 1, 1 } = subdirectories{ i };
                % 获得文件名称
                ModelFile{ end , 2 } = files{ j };
            end
        end
    else
        if ~isempty( files )
            directories = cell( length( files ), 1 );
            [ directories{ 1:end  } ] = deal( subdirectories{ i } );
            ModelFile = [ ModelFile;[ directories, files ] ];
        end
    end
end

%% 获取目标模型文件路径
for i = 1:size(ModelFile,1)
    % 获取slx文件
    FileFullFile(i) = fullfile(ModelFile(i,1),ModelFile(i,2));
    % 切换slx文件所在路径
    cd(ModelFile{i});
    % 设置导出模型的slx文件名称
    TmpName(i) = strcat(ModelFile(i,1),filesep,'New',ModelFile(i,2));
    % 打开slx文件
    open_system(FileFullFile(i));
    % 导出slx文件,版本用户自定
    Simulink.exportToVersion(bdroot,TmpName{i},'R2018a');
    % 关闭slx模型窗口
    bdclose;
    % 删除原先版本slx模型
    delete(FileFullFile{i})
    % 更换slx模型文件名,恢复为之前的slx模型文件名
    movefile(TmpName{i},FileFullFile{i});
end
toc
%% 关闭打开的模型窗口
bdclose('all')
load chirp
sound(y,Fs)
end

%% 获得文件的扩展名
function extension = file_get_extension( filename )
extension = '';
% strfind - 在其他字符串中查找字符串,返回起始索引
idx = strfind( filename, '.' );
if ~isempty( idx )
    % 获得文件的扩展名
    extension = filename( idx + 1:end  );
end
end
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值