automaticaly define calibration parameter to the workspace through read the m file
이 질문을 팔로우합니다.
- 팔로우하는 게시물 피드에서 업데이트를 확인할 수 있습니다.
- 정보 수신 기본 설정에 따라 이메일을 받을 수 있습니다.
오류 발생
페이지가 변경되었기 때문에 동작을 완료할 수 없습니다. 업데이트된 상태를 보려면 페이지를 다시 불러오십시오.
이전 댓글 표시
i have a m file, it defineed many calibration parameters one by one, each line seems like following: objDef_CAL('EngDa_jEng_C', '0.197350', 'Min', '0', 'Max', '10', 'Width', '1', 'Typedef', 'j_kgm2_t', 'Rate', 'MED','Description', 'engine inertia'); First question:how to get different part through each line, for example(Name,Min,Max,width...) second: how to define the calibration parameter to worksapce use script.
채택된 답변
hello
maybe this ?
see my dummy calibration file attached (it's a txt and not a m file)
I simply created a second line with slightly different values (to test the code)
the code : will generate a "out" structure with fields :
out(1) = struct with fields:
EngDa_jEng_C: 0.1973
Min: 0
Max: 10
Width: 1
Typedef: ' j_kgm2_t'
Rate: ' MED'
Description: ' engine inertia'
out(2) = struct with fields:
EngDa_jEng_C: 0.4974
Min: 0
Max: 20
Width: 3
Typedef: ' j_kgm2_t'
Rate: ' MED'
Description: ' engine inertia'
D=readlines('calibration.txt'); % read as string array
lines=find(contains(D,'objDef_CAL')); % find the "objDef_CAL" line(s)
k = 0;
for ck=1:numel(lines)
tmp = char(D(lines(ck)));
% remove quote character
iq = findstr(tmp,'''');
tmp(iq) = [];
tmp = extractBetween(tmp,'(',')');
% check if line is empty or not
if ~isempty(tmp)
k = k+1;
s =split(tmp, ',');
% fill the structure "out" with info's
out(k).EngDa_jEng_C = str2double(s{2});
out(k).Min = str2double(s{4});
out(k).Max = str2double(s{6});
out(k).Width = str2double(s{8});
out(k).Typedef = s{10};
out(k).Rate = s{12};
out(k).Description = s{14};
end
end
% let's see what we have
out(1)
out(2)
댓글 수: 9
thanks, Mathieu, yes i tryed this on my laptop, it works, this information can help me to creat the calibration parameter to the workspace.

another question, we know s{1} = EngDa_jEng_C, i want implement(EngDa_jEng_C = Simulink.Parameter) in script, how to do?
hello
what is "Simulink.Parameter" ? is it a field (and Simulink a structure) ? or just a string or char array ?
Simulink.Parameter is a command, if i run the command(a =Simulink.Parameter),then a parameter called a will be created,like following:
a =
Parameter with properties:
Value: []
CoderInfo: [1×1 Simulink.CoderInfo]
Description: ''
DataType: 'auto'
Min: []
Max: []
Unit: ''
Complexity: 'real'
Dimensions: [0 0]
now i want to creat a parameter named(EngDa_jEng_C), i want realize this in script(now we know s{1} = 'EngDa_jEng_C'), how to do?
I suspect you want to dynamically create a variable named EngDa_jEng_C and assign to it the structure content of Simulink.Parameter ?
I wouldsuggest you to read this :
instead , based on the code I suggested above , we can expand it to have the "out" structure have now more fields like :
out.name = 'EngDa_jEng_C
out.param = parameter structure from "Simulink.Parameter"
let's try it (I have run a simulink file of mine and I have this data in my workspace :
a =Simulink.Parameter
a = Parameter with properties:
Value: []
CoderInfo: [1×1 Simulink.CoderInfo]
Description: ''
DataType: 'auto'
Min: []
Max: []
Unit: ''
Complexity: 'real'
Dimensions: [0 0]
now let's try to implement this in the code :
D=readlines('calibration.txt'); % read as string array
lines=find(contains(D,'objDef_CAL')); % find the "objDef_CAL" line(s)
k = 0;
for ck=1:numel(lines)
tmp = char(D(lines(ck)));
% remove quote character
iq = findstr(tmp,'''');
tmp(iq) = [];
tmp = extractBetween(tmp,'(',')');
% check if line is empty or not
if ~isempty(tmp)
k = k+1;
s =split(tmp, ',');
% fill the structure "out" with info's
out(k).name = s{1};
out(k).param = Simulink.Parameter;
out(k).Min = str2double(s{4});
out(k).Max = str2double(s{6});
out(k).Width = str2double(s{8});
out(k).Typedef = s{10};
out(k).Rate = s{12};
out(k).Description = s{14};
end
end
% let's see what we have
out(1)
out(2)
the two out structure will be :
out(1) = struct with fields:
name: 'EngDa_jEng_C'
param: [1×1 Simulink.Parameter]
Min: 0
Max: 10
Width: 1
Typedef: ' j_kgm2_t'
Rate: ' MED'
Description: ' engine inertia'
out(2) = struct with fields:
name: 'EngDa_jEng_C'
param: [1×1 Simulink.Parameter]
Min: 0
Max: 20
Width: 3
Typedef: ' j_kgm2_t'
Rate: ' MED'
Description: ' engine inertia'
and if we look closer into first out fields (out(1).param) we have your Simulink.Parameter datas
out(1).param = Parameter with properties:
Value: []
CoderInfo: [1×1 Simulink.CoderInfo]
Description: ''
DataType: 'auto'
Min: []
Max: []
Unit: ''
Complexity: 'real'
Dimensions: [0 0]
wenchao zhang
2023년 10월 23일
편집: wenchao zhang
2023년 10월 23일
yes, good idea, then each element of out will have the parameter of(Simulink.Parameter), but if i can directly to see the name(EngDa_jEng_C) in workspace, it will be better, because this is clear, like following,

ok, not recommended but you can use assignin for that purpose
see new code below :
D=readlines('calibration.txt'); % read as string array
lines=find(contains(D,'objDef_CAL')); % find the "objDef_CAL" line(s)
k = 0;
for ck=1:numel(lines)
tmp = char(D(lines(ck)));
% remove quote character
iq = findstr(tmp,'''');
tmp(iq) = [];
tmp = extractBetween(tmp,'(',')');
% check if line is empty or not
if ~isempty(tmp)
k = k+1;
s =split(tmp, ',');
% fill the structure "out" with info's
% out(k).name = s{1};
% out(k).param = Simulink.Parameter;
out(k).Min = str2double(s{4});
out(k).Max = str2double(s{6});
out(k).Width = str2double(s{8});
out(k).Typedef = s{10};
out(k).Rate = s{12};
out(k).Description = s{14};
% specifically assign "Simulink.Parameter" to s{1} (i.e.var name EngDa_jEng_C)
assignin ( 'caller', s{1}, Simulink.Parameter );
end
end
now you have in the workspace a new varaible EngDa_jEng_C (from s{1}) and we have assigned to it the output of Simulink.Parameter
EngDa_jEng_C = Value: []
CoderInfo: [1×1 Simulink.CoderInfo]
Description: ''
DataType: 'auto'
Min: []
Max: []
Unit: ''
Complexity: 'real'
Dimensions: [0 0]
My pleasure !
추가 답변 (0개)
카테고리
도움말 센터 및 File Exchange에서 Event Functions에 대해 자세히 알아보기
참고 항목
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!웹사이트 선택
번역된 콘텐츠를 보고 지역별 이벤트와 혜택을 살펴보려면 웹사이트를 선택하십시오. 현재 계신 지역에 따라 다음 웹사이트를 권장합니다:
또한 다음 목록에서 웹사이트를 선택하실 수도 있습니다.
사이트 성능 최적화 방법
최고의 사이트 성능을 위해 중국 사이트(중국어 또는 영어)를 선택하십시오. 현재 계신 지역에서는 다른 국가의 MathWorks 사이트 방문이 최적화되지 않았습니다.
미주
- América Latina (Español)
- Canada (English)
- United States (English)
유럽
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)
