Skip to content
Snippets Groups Projects
Commit 9697b993 authored by Federico Felici's avatar Federico Felici
Browse files

Merge remote-tracking branch 'origin/master' into SCDDMmagcontrol

parents efa14b27 356339a7
No related branches found
No related tags found
No related merge requests found
...@@ -32,8 +32,8 @@ classdef SCDclass_mdspar < matlab.mixin.Heterogeneous ...@@ -32,8 +32,8 @@ classdef SCDclass_mdspar < matlab.mixin.Heterogeneous
assignstring % actualizedata specific assignstring % actualizedata specific
denanstring % actualizedata specific denanstring % actualizedata specific
caststring % actualizedata specific caststring % actualizedata specific
unlinked % unlinked parameter, no actualization will be performed (this is set via an empty MDS source path)
end end
properties properties
...@@ -75,7 +75,12 @@ classdef SCDclass_mdspar < matlab.mixin.Heterogeneous ...@@ -75,7 +75,12 @@ classdef SCDclass_mdspar < matlab.mixin.Heterogeneous
obj.modelname=obj.cparser.Results.modelname; obj.modelname=obj.cparser.Results.modelname;
obj.datadictionary=obj.cparser.Results.datadictname; obj.datadictionary=obj.cparser.Results.datadictname;
obj.modeltpstruct=obj.cparser.Results.modeltpstruct; obj.modeltpstruct=obj.cparser.Results.modeltpstruct;
obj.skippable=obj.cparser.Results.skippable; obj.skippable=obj.cparser.Results.skippable;
if isempty(obj.cparser.Results.srctdimodel)
obj.unlinked=1;
else
obj.unlinked=0;
end
end end
function name=getmodelname(obj) function name=getmodelname(obj)
...@@ -96,28 +101,34 @@ classdef SCDclass_mdspar < matlab.mixin.Heterogeneous ...@@ -96,28 +101,34 @@ classdef SCDclass_mdspar < matlab.mixin.Heterogeneous
end end
function obj=preactualizecommon(obj, shot) function obj=preactualizecommon(obj, shot)
% Opening the tree if(~obj.unlinked)
obj.mdsconnect(shot); % Opening the tree
% Checking if data can be retrieved, updating get command obj.mdsconnect(shot);
[obj, obj.value]=obj.getdata(shot); % Checking if data can be retrieved, updating get command
[obj, obj.value]=obj.getdata(shot);
pointspos=strfind(obj.modelparam,'.'); pointspos=strfind(obj.modelparam,'.');
baseparam=obj.modelparam(1:pointspos(1)-1); baseparam=obj.modelparam(1:pointspos(1)-1);
structparam=obj.modelparam(pointspos(1):end); structparam=obj.modelparam(pointspos(1):end);
obj.assignvar=sprintf('%s.Value%s',baseparam,structparam); obj.assignvar=sprintf('%s.Value%s',baseparam,structparam);
obj.assignstring=sprintf('%s=%s;',obj.assignvar,obj.getcommand); obj.assignstring=sprintf('%s=%s;',obj.assignvar,obj.getcommand);
obj.denanstring=sprintf('%s(isnan(%s))=0;',obj.assignvar,obj.assignvar); obj.denanstring=sprintf('%s(isnan(%s))=0;',obj.assignvar,obj.assignvar);
obj.caststring=sprintf('%s=%s;',obj.assignvar,obj.assignvar); obj.caststring=sprintf('%s=%s;',obj.assignvar,obj.assignvar);
end
end end
function obj=postactualizecommon(obj, shot) function obj=postactualizecommon(obj, shot)
if obj.verbose==1 if(~obj.unlinked)
fprintf('Actualizing parameter: ''%s'' <- ''%s'' (%s, shot %d)\n', obj.modelparam, obj.tdiexprused, obj.classname, shot); if obj.verbose==1
end fprintf('Actualizing parameter: ''%s'' <- ''%s'' (%s, shot %d)\n', obj.modelparam, obj.tdiexprused, obj.classname, shot);
end
evalin('base', obj.assignstring);
evalin('base', obj.denanstring); evalin('base', obj.assignstring);
evalin('base', obj.caststring); evalin('base', obj.denanstring);
evalin('base', obj.caststring);
else
fprintf('Actualizing parameter: ''%s'', parameter unlinked, SKIPPED!\n', obj.modelparam);
end
end end
function [obj,value]=getdatacommon(obj, shot) function [obj,value]=getdatacommon(obj, shot)
...@@ -150,13 +161,19 @@ classdef SCDclass_mdspar < matlab.mixin.Heterogeneous ...@@ -150,13 +161,19 @@ classdef SCDclass_mdspar < matlab.mixin.Heterogeneous
function printinfocommon(obj) function printinfocommon(obj)
fprintf('%s (class %s):\n', obj.modelparam, obj.classname); fprintf('%s (class %s):\n', obj.modelparam, obj.classname);
fprintf(' Simulink model: ''%s'', data dictionary: ''%s''\n', obj.modelname, obj.datadictionary); fprintf(' Simulink model: ''%s'', data dictionary: ''%s''\n', obj.modelname, obj.datadictionary);
fprintf(' MDS+ source server: ''%s'', Tree: ''%s''\n', obj.mdsserver, obj.mdstree); if(~obj.unlinked)
fprintf(' MDS+ TDI expressions, model: ''%s''', obj.tdiexprmodel); fprintf(' MDS+ source server: ''%s'', Tree: ''%s''\n', obj.mdsserver, obj.mdstree);
if(strcmp(obj.tdiexprmodel, obj.tdiexprshot)) fprintf(' MDS+ TDI expressions, model: ''%s''', obj.tdiexprmodel);
fprintf(', shot: same.\n'); if(strcmp(obj.tdiexprmodel, obj.tdiexprshot))
fprintf(', shot: same.\n');
else
fprintf(', shot: ''%s''\n', obj.tdiexprshot);
end
else else
fprintf(', shot: ''%s''\n', obj.tdiexprshot); fprintf(' UNLINKED!\n');
end end
end end
function out = gettargetparam(obj) function out = gettargetparam(obj)
......
...@@ -36,7 +36,7 @@ classdef SCDclass_mdswgsigarray1 < SCDclass_mdswg ...@@ -36,7 +36,7 @@ classdef SCDclass_mdswgsigarray1 < SCDclass_mdswg
obj.srcstopidx=srcinterval(end); obj.srcstopidx=srcinterval(end);
obj.deststartidx=dstinterval(1); obj.deststartidx=dstinterval(1);
obj.deststopidx=dstinterval(end); obj.deststopidx=dstinterval(end);
obj.classname=mfilename; obj.classname=mfilename;
obj.marteclassname='MDSWgSigArray1'; obj.marteclassname='MDSWgSigArray1';
end end
...@@ -143,7 +143,10 @@ classdef SCDclass_mdswgsigarray1 < SCDclass_mdswg ...@@ -143,7 +143,10 @@ classdef SCDclass_mdswgsigarray1 < SCDclass_mdswg
end end
end end
function entrystring = genMARTe2entry(obj, shot) function entrystring = genMARTe2entry(obj, shot)
if(srcstartidx~=deststartidx || srcstopidx~=deststopidx)
error('SCDclass_mdswgsigarray1:genMARTe2entry','Signal position remapping not yet implemented in the MARTe version of this class');
end
entrystring=obj.genMARTe2entrycommon(shot); entrystring=obj.genMARTe2entrycommon(shot);
entrystring=[entrystring ' StartIdx=' num2str(obj.srcstartidx) ' StopIdx=' num2str(obj.srcstopidx) ' }']; entrystring=[entrystring ' StartIdx=' num2str(obj.srcstartidx) ' StopIdx=' num2str(obj.srcstopidx) ' }'];
end end
...@@ -164,7 +167,7 @@ classdef SCDclass_mdswgsigarray1 < SCDclass_mdswg ...@@ -164,7 +167,7 @@ classdef SCDclass_mdswgsigarray1 < SCDclass_mdswg
for ii=obj.srcstartidx:obj.srcstopidx for ii=obj.srcstartidx:obj.srcstopidx
expandedtdi = sprintf(obj.tdiexpr, ii); expandedtdi = sprintf(obj.tdiexpr, ii);
martename=expandedtdi; martename=expandedtdi;
sigentry=sprintf(' %s={ NodeName=%s Type=float32 NumberOfElements=1 DataManagement=0 HoleManagement=1 }\n',martename, expandedtdi); sigentry=sprintf(' %s={ NodeName=%s Type=float32 NumberOfElements=%d DataManagement=0 HoleManagement=1 }\n',martename, expandedtdi);
expentries=[expentries sigentry]; expentries=[expentries sigentry];
end end
end end
......
...@@ -9,7 +9,7 @@ classdef SCDclass_task < matlab.mixin.Heterogeneous ...@@ -9,7 +9,7 @@ classdef SCDclass_task < matlab.mixin.Heterogeneous
datadictionary % data dictionary hosting the parameter, if empty base workspace datadictionary % data dictionary hosting the parameter, if empty base workspace
modelname % name of the Simulink model using the parameter modelname % name of the Simulink model using the parameter
classname % class name for logging classname % class name for logging
cparser % constructor parameters parser
% Properties for a MDS+ related task (not necessarly used) % Properties for a MDS+ related task (not necessarly used)
mdsserver % MDS+ server for a MDS+ related task mdsserver % MDS+ server for a MDS+ related task
...@@ -32,32 +32,34 @@ classdef SCDclass_task < matlab.mixin.Heterogeneous ...@@ -32,32 +32,34 @@ classdef SCDclass_task < matlab.mixin.Heterogeneous
function obj=SCDclass_task(id,varargin) function obj=SCDclass_task(id,varargin)
% MDS source and model destination constructor % MDS source and model destination constructor
p=inputParser; obj.cparser=inputParser;
addRequired(p,'id',@(x) ischar(x)); addRequired(obj.cparser,'id',@(x) ischar(x));
addParameter(p,'srcsrv','tcvdata',@(x) ischar(x)); addParameter(obj.cparser,'srcsrv','tcvdata',@(x) ischar(x));
addParameter(p,'srctree','tcv_shot',@(x) ischar(x)); addParameter(obj.cparser,'srctree','tcv_shot',@(x) ischar(x));
addParameter(p,'srctdimodel','',@(x) ischar(x)); addParameter(obj.cparser,'srctdimodel','',@(x) ischar(x));
addParameter(p,'srctdishot','',@(x) ischar(x)); addParameter(obj.cparser,'srctdishot','',@(x) ischar(x));
addParameter(p,'modelname','',@(x) ischar(x)); addParameter(obj.cparser,'modelname','',@(x) ischar(x));
addParameter(p,'datadictname','',@(x) ischar(x)); addParameter(obj.cparser,'datadictname','',@(x) ischar(x));
parse(p,id,varargin{:}{:}); obj.verbose=1;
end
function obj=parseconstructorcommon(obj, id, varargin)
parse(obj.cparser,id,varargin{:}{:});
obj.id=p.Results.id; obj.id=obj.cparser.Results.id;
obj.mdsserver=p.Results.srcsrv; obj.mdsserver=obj.cparser.Results.srcsrv;
obj.mdstree=p.Results.srctree; obj.mdstree=obj.cparser.Results.srctree;
obj.tdiexprmodel=p.Results.srctdimodel; obj.tdiexprmodel=obj.cparser.Results.srctdimodel;
if isempty(p.Results.srctdishot) if isempty(obj.cparser.Results.srctdishot)
obj.tdiexprshot=p.Results.srctdimodel; obj.tdiexprshot=obj.cparser.Results.srctdimodel;
else else
obj.tdiexprshot=p.Results.srctdishot; obj.tdiexprshot=obj.cparser.Results.srctdishot;
end end
obj.modelname=p.Results.modelname; obj.modelname=obj.cparser.Results.modelname;
obj.datadictionary=p.Results.datadictname; obj.datadictionary=obj.cparser.Results.datadictname;
end
obj.verbose=1;
end
function name=getmodelname(obj) function name=getmodelname(obj)
name=obj.modelname; name=obj.modelname;
......
...@@ -14,9 +14,11 @@ classdef SCDclass_taskmdscheckbusnames < SCDclass_task ...@@ -14,9 +14,11 @@ classdef SCDclass_taskmdscheckbusnames < SCDclass_task
methods methods
function obj=SCDclass_taskmdscheckbusnames(id, modelbus, varargin) function obj=SCDclass_taskmdscheckbusnames(id, varargin)
obj@SCDclass_task(id, varargin); obj@SCDclass_task(id, varargin);
obj.modelbus=modelbus; obj.cparser.addRequired('modelbus',@(x) ischar(x));
obj=obj.parseconstructorcommon(id, varargin);
obj.modelbus=obj.cparser.Results.modelbus;
obj.classname=mfilename; obj.classname=mfilename;
end end
...@@ -27,7 +29,7 @@ classdef SCDclass_taskmdscheckbusnames < SCDclass_task ...@@ -27,7 +29,7 @@ classdef SCDclass_taskmdscheckbusnames < SCDclass_task
[obj,value]=obj.getdata(shot); [obj,value]=obj.getdata(shot);
if obj.verbose==1 if obj.verbose==1
fprintf('Cheking bus: ''%s'' <-> ''%s'' (%s, shot %d)\n', obj.modelbus, obj.tdiexprused, obj.classname, shot); fprintf('Checking bus: ''%s'' <-> ''%s'' (%s, shot %d)\n', obj.modelbus, obj.tdiexprused, obj.classname, shot);
end end
d=Simulink.data.dictionary.open(sprintf('%s',obj.datadictionary)); d=Simulink.data.dictionary.open(sprintf('%s',obj.datadictionary));
......
classdef SCDclass_taskmdsloadprevADC < SCDclass_task
% This is a special class which loads previous
% values of the ADCs for the acquiring nodes
properties
modelbus
node
workspacedatabasestructure
end
methods
function obj=SCDclass_taskmdsloadprevADC(id, varargin)
obj@SCDclass_task(id, varargin);
obj.cparser.addRequired('modelbus',@(x) ischar(x));
obj.cparser.addParameter('node', 0, @(x) (isnumeric(x) && (x==2)));
obj=obj.parseconstructorcommon(id, varargin);
obj.modelbus=obj.cparser.Results.modelbus;
obj.node=obj.cparser.Results.node;
switch(obj.node)
case 2
obj.workspacedatabasestructure='SCDsimdata.SCDnode02simdata.adc';
otherwise
obj.workspacedatabasestructure='';
end
obj.classname=mfilename;
end
function init(obj, shot)
mdsconnect(obj.mdsserver);
mdsopen(obj.mdstree, shot);
switch(obj.node)
case 2
obj.actualizeNode02(shot);
end
end
function [obj, value] = getdata(obj,shot)
%obj=obj.actualizegetcmd('mdsvalue(''%s'')', shot);
%value=eval(obj.getcommand);
switch(obj.node)
case 2
[~,value]=obj.getdataNode02ACQ196(shot); %% Here we need to switch betweeen old and new acquisition unit and tcv standard also
end
end
function printinfo(obj)
obj.printinfocommon;
fprintf(' Init model bus: %s, node: %d, ws base struct: %s\n',obj.modelbus, obj.node, obj.workspacedatabasestructure);
end
end
methods(Access = private)
function obj = actualizeNode02(obj, shot)
dd=SCDconf_getdatadict(obj.datadictionary);
adcbus=dd.getEntry(obj.modelbus).getValue;
[~,data]=obj.getdata(shot);
T=timeseries;
if obj.verbose==1
fprintf('Actualizing data for bus: ''%s'' (%s, shot %d) ', obj.modelbus, obj.classname, shot);
end
for ii=1:192
T.Time=data.Time;
T.Data=int16(data.Data(:,ii));
assignin('base','temp',T);
assigncmd=sprintf('%s.%s=temp;',obj.workspacedatabasestructure, adcbus.Elements(ii).Name);
evalin('base',assigncmd);
if obj.verbose==1 && mod(ii,4)==0
fprintf('.');
end
end
evalin('base','clear temp');
if obj.verbose==1
fprintf('\n');
end
end
function [obj, value] = getdataNode02ACQ196(obj, shot)
T=timeseries;
timebase=mdsvalue('dim_of(\top.crpprt02.board1.adc_01)'); %% TODO: check with marte
d_time = double(mdsvalueraw( '\top.crpprt02.params:d_time' ))*1.0e-6;
%timebase = round(timebase.*1/d_time)*d_time-d_time/2;
timebase = round(timebase.*1/d_time)*d_time-d_time/100;
T.Time=timebase;
T.Data=zeros(numel(timebase),192);
if obj.verbose==1
fprintf('Getting data for bus: ''%s'' (%s, shot %d) ', obj.modelbus, obj.classname, shot);
end
for ii=1:96
% NOTE: physical2logical remapping is only for
% data acquired with the present ACQ196 system
% it must go away when using the new ACQ2106 system
%fprintf('Loading channel %d:%d ...\r',1,physical2logical(ii));
channelstr=sprintf('\\top.crpprt02.board1.adc_%02d.raw',physical2logical(ii));
T.Data(:,ii)=int16(mdsvalue(channelstr));
if obj.verbose==1 && mod(ii,4)==0
fprintf('.');
end
end
for ii=1:96
%fprintf('Loading channel %d:%d ...\r',2,physical2logical(ii));
channelstr=sprintf('\\top.crpprt02.board2.adc_%02d.raw',physical2logical(ii));
T.Data(:,ii+96)=int16(mdsvalue(channelstr));
if obj.verbose==1 && mod(ii,4)==0
fprintf('.');
end
end
value=T;
if obj.verbose==1
fprintf('\n');
end
end
end
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