【matlab专题】脚本(7):批量修改标定阈值脚本

前言

之前做一个批量添加数据字典的脚本,今天给大家做一个批量修改阈值的脚本;

设计思路

主要为函数Simulink.CoderInfo来做修改,具体详情去看链接搜索:

链接: Simulink

Signal - 属性:
在这里插入图片描述
在这里插入图片描述

剩下的部分是读取表格将表格数据写入simulink中其中注意表格中的位置Excel_name{坐标,坐标}

  StartSheetNum = 1;
        NumSheet = 1; 
        for i = StartSheetNum:1:(StartSheetNum + NumSheet-1)
            [~, text, CellArray] = xlsread(AbsolutePathFile,i);
            [NumRow,~] = size(text);
            for j=2:1:NumRow
                if( (isnan(CellArray{j,2})) )
                    continue;
                elseif(strcmp(num2str(CellArray{j,2}),'NotUsed'))
                    continue;
            
                elseif(strcmp(num2str(CellArray{j,2}),'CalData'))

                    CalData_Name = CellArray{j,3};
                    CalData_Name = strtrim(CalData_Name);

                    CalData_Value = (CellArray{j,4});
         
                    CalData_DataType=CellArray{j,5};
                    if(ischar(CalData_DataType)==0)
                        CalData_DataType='single';
                    end
                    CalData_DataType = lower(CalData_DataType);
                    CalData_DataType = strtrim(CalData_DataType);
     
                    CalData_Minimum = CellArray{j,6};
            
                    CalData_Maximum = CellArray{j,7};
          
                    if( isnan(CellArray{j,8}) )
                        CalData_unit = '';
                    else
                        CalData_unit = CellArray{j,8};
                    end
              
                    CalData_StorageClass = CellArray{j,9};
                
                    if( isnan(CellArray{j,10}) )
                        CalData_Description = '';
                    else
                        CalData_Description = CellArray{j,10};
                    end

最后一部分就是表格读取的信息

function E0001

sFilePack_Path = which('E0001.m');
if(strcmp(sFilePack_Path,''))
    disp('请检查脚本文件名是否为 E0001.m');
end

flg = 0;
FolderList = genpath(sFilePack_Path);
Folder_FilterList = strsplit(FolderList,'\\E0001.m');
for Folder_FilterI = 1:1:length(Folder_FilterList)
    FolderPath = Folder_FilterList{1,Folder_FilterI};
    sFileList = ls(FolderPath);
    [sFileM ,~] = size(sFileList);
    if (sFileM == 2)
        continue;end

    for sFileI = 3:1:sFileM
        FileStr = sFileList(sFileI,:);
        pathFileFilter = strtrim(FileStr);
        AbsolutePathFile = strcat(FolderPath,'\',pathFileFilter);
        [~,b] = size(AbsolutePathFile);
        tempStringExcel = AbsolutePathFile((b-4):b);
        
        TempFileStr = pathFileFilter(1:2);
        if((strcmp(tempStringExcel,'.xlsm')||strcmp(tempStringExcel,'.xlsx')) == 0)
            continue;
        end
        if(strcmp(TempFileStr,'~$') == 1)
            continue;
        end
        
    
        disp(strcat('Importing data from', 32, AbsolutePathFile,'.'));

下图是我之前做的一个关于KL15模型的例程,这里插入一个表格,是我之前做的例子,可以参考,同时记得修改表格定位的地址
在这里插入图片描述
上图的Type可以设置是否修改此项,对应代码如下:

   if( (isnan(CellArray{j,2})) )
                    continue;
                elseif(strcmp(num2str(CellArray{j,2}),'NotUsed'))
                    continue;
            
                elseif(strcmp(num2str(CellArray{j,2}),'CalData'))

                    CalData_Name = CellArray{j,3};
                    CalData_Name = strtrim(CalData_Name);

这里我将存储类设置成Default,如果其他人设置成其他存储类,可以根据实际情况添加多种存储类

 if(strcmp(num2str(CalData_StorageClass),'Default') == 1 )

最后整理完代码如下

function E0001

sFilePack_Path = which('E0001.m');
if(strcmp(sFilePack_Path,''))
    disp('请检查脚本文件名是否为 E0001.m');
end

flg = 0;
FolderList = genpath(sFilePack_Path);
Folder_FilterList = strsplit(FolderList,'\\E0001.m');
for Folder_FilterI = 1:1:length(Folder_FilterList)
    FolderPath = Folder_FilterList{1,Folder_FilterI};
    sFileList = ls(FolderPath);
    [sFileM ,~] = size(sFileList);
    if (sFileM == 2)
        continue;end

    for sFileI = 3:1:sFileM
        FileStr = sFileList(sFileI,:);
        pathFileFilter = strtrim(FileStr);
        AbsolutePathFile = strcat(FolderPath,'\',pathFileFilter);
        [~,b] = size(AbsolutePathFile);
        tempStringExcel = AbsolutePathFile((b-4):b);
        
        TempFileStr = pathFileFilter(1:2);
        if((strcmp(tempStringExcel,'.xlsm')||strcmp(tempStringExcel,'.xlsx')) == 0)
            continue;
        end
        if(strcmp(TempFileStr,'~$') == 1)
            continue;
        end
        
    
        disp(strcat('Importing data from', 32, AbsolutePathFile,'.'));
    
        

        StartSheetNum = 1;
        NumSheet = 1; 
        for i = StartSheetNum:1:(StartSheetNum + NumSheet-1)
            [~, text, CellArray] = xlsread(AbsolutePathFile,i);
            [NumRow,~] = size(text);
            for j=2:1:NumRow
                if( (isnan(CellArray{j,2})) )
                    continue;
                elseif(strcmp(num2str(CellArray{j,2}),'NotUsed'))
                    continue;
            
                elseif(strcmp(num2str(CellArray{j,2}),'CalData'))

                    CalData_Name = CellArray{j,3};
                    CalData_Name = strtrim(CalData_Name);

                    CalData_Value = (CellArray{j,4});
         
                    CalData_DataType=CellArray{j,5};
                    if(ischar(CalData_DataType)==0)
                        CalData_DataType='single';
                    end
                    CalData_DataType = lower(CalData_DataType);
                    CalData_DataType = strtrim(CalData_DataType);
     
                    CalData_Minimum = CellArray{j,6};
            
                    CalData_Maximum = CellArray{j,7};
          
                    if( isnan(CellArray{j,8}) )
                        CalData_unit = '';
                    else
                        CalData_unit = CellArray{j,8};
                    end
              
                    CalData_StorageClass = CellArray{j,9};
                
                    if( isnan(CellArray{j,10}) )
                        CalData_Description = '';
                    else
                        CalData_Description = CellArray{j,10};
                    end
              
                    if(strcmp(num2str(CalData_StorageClass),'Default') == 1 )
                        eval([CalData_Name, ' = Simulink.Parameter;']);
                        eval([CalData_Name, '.Value = ', num2str(CalData_Value),';']);
                        eval([CalData_Name, '.CoderInfo.StorageClass = ''', 'Custom',''';']);
                        eval([CalData_Name, '.CoderInfo.CustomStorageClass = ''', num2str(CalData_StorageClass),''';']);
                        eval([CalData_Name, '.Description = ''', CalData_Description,''';']);
                        eval([CalData_Name, '.DataType = ''', CalData_DataType,''';']);
                        eval([CalData_Name, '.Min = ', num2str(CalData_Minimum),';']);
                        eval([CalData_Name, '.Max = ', num2str(CalData_Maximum),';']);
                        eval([CalData_Name, '.DocUnits = ''', CalData_unit,''';']);
                    assignin('base', CalData_Name, eval(CalData_Name))
   
                    end
                end
            end
        end
    end
end

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值