前言
之前做一个批量添加数据字典的脚本,今天给大家做一个批量修改阈值的脚本;
设计思路
主要为函数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