Skip to content
Snippets Groups Projects
Commit 533b566f authored by Cristian Galperti's avatar Cristian Galperti Committed by Federico Felici
Browse files

logical type case included in mdsparnumeric loader class

parent 5288b32e
No related branches found
No related tags found
No related merge requests found
function TP = algo_template_loadtp()
% Setup tunable control params
TP.enable = true;
TP.gain = single(2);
TP.refmodel.gain = 4; % another gain used in referenced model
TP.rowvect = int32([1 2 3]);
TP.colvect = int16([1 2 3]');
TP.matrix = int8([1 2; 3 4]);
end
......@@ -13,6 +13,7 @@ obj=obj.addfpinitfcn('algo_template_loadfp','algo_template_fp');
obj=obj.addtunparamstruct('algo_template_tp', @()algo_template_loadtp(), false);
%% Tunable parameters
obj=obj.addparameter(SCDclass_mdsparnumeric('kb1','enable' ,'srcsrv','spcpc171.epfl.ch','srctree','martetest'));
obj=obj.addparameter(SCDclass_mdsparnumeric('ks1','gain' ,'srcsrv','spcpc171.epfl.ch','srctree','martetest'));
obj=obj.addparameter(SCDclass_mdsparnumeric('ks2','refmodel.gain' ,'srcsrv','spcpc171.epfl.ch','srctree','martetest'));
obj=obj.addparameter(SCDclass_mdsparnumeric('kv1','rowvect' ,'srcsrv','spcpc171.epfl.ch','srctree','martetest'));
......
......@@ -42,6 +42,7 @@ classdef SCDclass_mdspar < matlab.mixin.Heterogeneous
mdsvalidationstr % MDS validation string used in autopopulation
loadpermissivity % true if load error shoudn't cause an error (warning only)
logicalmdstype % expected type for a logical parameter
end
properties
......@@ -68,7 +69,7 @@ classdef SCDclass_mdspar < matlab.mixin.Heterogeneous
obj.verbose=1;
obj.matlabseparator='.';
obj.marteseparator='-';
obj.logicalmdstype='uint8'; % generated C code uses uint8 to handle logicals
end
function obj=parseconstructor(obj, srctdimodel, destparam, varargin)
......
......@@ -27,23 +27,24 @@ classdef SCDclass_mdsparnumeric < SCDclass_mdspar
return;
end
%%% Actualization checks %%%
% dimensions
%%%% Actualization checks %%%%
boolcast=false;
%%% dimensions
sourcedim=size(obj.value);
targetdim=Simulink.data.evalinGlobal(obj.modelname,sprintf('size(%s)',obj.assignvar));
actchk=true;
if numel(sourcedim)~=numel(targetdim)
sourcedim
targetdim
if obj.loadpermissivity
warning('SCDDScore:mdsparnumeric','%s: number of dimensions not matching, actualization skipped!',obj.modelparam);
else
error('SCDDScore:mdsparnumeric','%s: number of dimensions not matching, actualization skipped!',obj.modelparam);
end
sourcedim
targetdim
actchk=false;
end
% handle vector transposition
%%% handle vector transposition
if numel(sourcedim)==2 && ~isscalar(obj.value)
if (sourcedim(1)==1 && targetdim(2)==1) || (sourcedim(2)==1 && targetdim(1)==1)
% we've a vector to transpose
......@@ -55,27 +56,43 @@ classdef SCDclass_mdsparnumeric < SCDclass_mdspar
end
end
if actchk && ~any(sourcedim == targetdim)
sourcedim
targetdim
if obj.loadpermissivity
warning('SCDDScore:mdsparnumeric','%s: dimensions not matching, actualization skipped!',obj.modelparam);
else
error('SCDDScore:mdsparnumeric','%s: dimensions not matching, actualization skipped!',obj.modelparam);
end
sourcedim
targetdim
actchk=false;
end
% type
end
%%%% type
sourceclass=class(obj.value);
targetclass=Simulink.data.evalinGlobal(obj.modelname,sprintf('class(%s)',obj.assignvar));
%%% handle cast to logical
if strcmp(targetclass,'logical')
if ~strcmp(sourceclass,'uint8')
sourceclass
if obj.loadpermissivity
warning('SCDDScore:mdsparnumeric','%s: source type must be %s for logical parameters',obj.modelparam,obj.logicalmdstype);
else
error('SCDDScore:mdsparnumeric','%s: source type must be %s for logical parameters',obj.modelparam,obj.logicalmdstype);
end
actchk=false;
end
if actchk
sourceclass='logical';
boolcast=true;
end
end
%%% type check
if actchk && ~strcmp(sourceclass,targetclass)
sourceclass
targetclass
if obj.loadpermissivity
warning('SCDDScore:mdsparnumeric','%s: Data types not matching, actualization skipped!',obj.modelparam);
else
error('SCDDScore:mdsparnumeric','%s: Data types not matching, actualization skipped!',obj.modelparam);
end
sourceclass
targetclass
actchk=false;
end
......@@ -83,8 +100,12 @@ classdef SCDclass_mdsparnumeric < SCDclass_mdspar
% interface do not provide in information (matrix
% orientation) to do this. Or, probably, I misunderstood and
% matrix orientation is always preserved
obj.caststring=sprintf('%s=%s;',obj.assignvar,obj.assignvar);
if boolcast
obj.caststring=sprintf('%s=logical(%s);',obj.assignvar,obj.assignvar);
else
obj.caststring=sprintf('%s=%s;',obj.assignvar,obj.assignvar);
end
if actchk
obj.postactualize(shot);
end
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment