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
assignstring % actualizedata specific
denanstring % actualizedata specific
caststring % actualizedata specific
unlinked % unlinked parameter, no actualization will be performed (this is set via an empty MDS source path)
end
properties
......@@ -75,7 +75,12 @@ classdef SCDclass_mdspar < matlab.mixin.Heterogeneous
obj.modelname=obj.cparser.Results.modelname;
obj.datadictionary=obj.cparser.Results.datadictname;
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
function name=getmodelname(obj)
......@@ -96,28 +101,34 @@ classdef SCDclass_mdspar < matlab.mixin.Heterogeneous
end
function obj=preactualizecommon(obj, shot)
% Opening the tree
obj.mdsconnect(shot);
% Checking if data can be retrieved, updating get command
[obj, obj.value]=obj.getdata(shot);
if(~obj.unlinked)
% Opening the tree
obj.mdsconnect(shot);
% Checking if data can be retrieved, updating get command
[obj, obj.value]=obj.getdata(shot);
pointspos=strfind(obj.modelparam,'.');
baseparam=obj.modelparam(1:pointspos(1)-1);
structparam=obj.modelparam(pointspos(1):end);
obj.assignvar=sprintf('%s.Value%s',baseparam,structparam);
obj.assignstring=sprintf('%s=%s;',obj.assignvar,obj.getcommand);
obj.denanstring=sprintf('%s(isnan(%s))=0;',obj.assignvar,obj.assignvar);
obj.caststring=sprintf('%s=%s;',obj.assignvar,obj.assignvar);
pointspos=strfind(obj.modelparam,'.');
baseparam=obj.modelparam(1:pointspos(1)-1);
structparam=obj.modelparam(pointspos(1):end);
obj.assignvar=sprintf('%s.Value%s',baseparam,structparam);
obj.assignstring=sprintf('%s=%s;',obj.assignvar,obj.getcommand);
obj.denanstring=sprintf('%s(isnan(%s))=0;',obj.assignvar,obj.assignvar);
obj.caststring=sprintf('%s=%s;',obj.assignvar,obj.assignvar);
end
end
function obj=postactualizecommon(obj, shot)
if obj.verbose==1
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.caststring);
if(~obj.unlinked)
if obj.verbose==1
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.caststring);
else
fprintf('Actualizing parameter: ''%s'', parameter unlinked, SKIPPED!\n', obj.modelparam);
end
end
function [obj,value]=getdatacommon(obj, shot)
......@@ -150,13 +161,19 @@ classdef SCDclass_mdspar < matlab.mixin.Heterogeneous
function printinfocommon(obj)
fprintf('%s (class %s):\n', obj.modelparam, obj.classname);
fprintf(' Simulink model: ''%s'', data dictionary: ''%s''\n', obj.modelname, obj.datadictionary);
fprintf(' MDS+ source server: ''%s'', Tree: ''%s''\n', obj.mdsserver, obj.mdstree);
fprintf(' MDS+ TDI expressions, model: ''%s''', obj.tdiexprmodel);
if(strcmp(obj.tdiexprmodel, obj.tdiexprshot))
fprintf(', shot: same.\n');
if(~obj.unlinked)
fprintf(' MDS+ source server: ''%s'', Tree: ''%s''\n', obj.mdsserver, obj.mdstree);
fprintf(' MDS+ TDI expressions, model: ''%s''', obj.tdiexprmodel);
if(strcmp(obj.tdiexprmodel, obj.tdiexprshot))
fprintf(', shot: same.\n');
else
fprintf(', shot: ''%s''\n', obj.tdiexprshot);
end
else
fprintf(', shot: ''%s''\n', obj.tdiexprshot);
fprintf(' UNLINKED!\n');
end
end
function out = gettargetparam(obj)
......
......@@ -36,7 +36,7 @@ classdef SCDclass_mdswgsigarray1 < SCDclass_mdswg
obj.srcstopidx=srcinterval(end);
obj.deststartidx=dstinterval(1);
obj.deststopidx=dstinterval(end);
obj.classname=mfilename;
obj.marteclassname='MDSWgSigArray1';
end
......@@ -143,7 +143,10 @@ classdef SCDclass_mdswgsigarray1 < SCDclass_mdswg
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=[entrystring ' StartIdx=' num2str(obj.srcstartidx) ' StopIdx=' num2str(obj.srcstopidx) ' }'];
end
......@@ -164,7 +167,7 @@ classdef SCDclass_mdswgsigarray1 < SCDclass_mdswg
for ii=obj.srcstartidx:obj.srcstopidx
expandedtdi = sprintf(obj.tdiexpr, ii);
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];
end
end
......
......@@ -9,7 +9,7 @@ classdef SCDclass_task < matlab.mixin.Heterogeneous
datadictionary % data dictionary hosting the parameter, if empty base workspace
modelname % name of the Simulink model using the parameter
classname % class name for logging
cparser % constructor parameters parser
% Properties for a MDS+ related task (not necessarly used)
mdsserver % MDS+ server for a MDS+ related task
......@@ -32,32 +32,34 @@ classdef SCDclass_task < matlab.mixin.Heterogeneous
function obj=SCDclass_task(id,varargin)
% MDS source and model destination constructor
p=inputParser;
addRequired(p,'id',@(x) ischar(x));
obj.cparser=inputParser;
addRequired(obj.cparser,'id',@(x) ischar(x));
addParameter(p,'srcsrv','tcvdata',@(x) ischar(x));
addParameter(p,'srctree','tcv_shot',@(x) ischar(x));
addParameter(p,'srctdimodel','',@(x) ischar(x));
addParameter(p,'srctdishot','',@(x) ischar(x));
addParameter(p,'modelname','',@(x) ischar(x));
addParameter(p,'datadictname','',@(x) ischar(x));
parse(p,id,varargin{:}{:});
addParameter(obj.cparser,'srcsrv','tcvdata',@(x) ischar(x));
addParameter(obj.cparser,'srctree','tcv_shot',@(x) ischar(x));
addParameter(obj.cparser,'srctdimodel','',@(x) ischar(x));
addParameter(obj.cparser,'srctdishot','',@(x) ischar(x));
addParameter(obj.cparser,'modelname','',@(x) ischar(x));
addParameter(obj.cparser,'datadictname','',@(x) ischar(x));
obj.verbose=1;
end
function obj=parseconstructorcommon(obj, id, varargin)
parse(obj.cparser,id,varargin{:}{:});
obj.id=p.Results.id;
obj.mdsserver=p.Results.srcsrv;
obj.mdstree=p.Results.srctree;
obj.tdiexprmodel=p.Results.srctdimodel;
if isempty(p.Results.srctdishot)
obj.tdiexprshot=p.Results.srctdimodel;
obj.id=obj.cparser.Results.id;
obj.mdsserver=obj.cparser.Results.srcsrv;
obj.mdstree=obj.cparser.Results.srctree;
obj.tdiexprmodel=obj.cparser.Results.srctdimodel;
if isempty(obj.cparser.Results.srctdishot)
obj.tdiexprshot=obj.cparser.Results.srctdimodel;
else
obj.tdiexprshot=p.Results.srctdishot;
obj.tdiexprshot=obj.cparser.Results.srctdishot;
end
obj.modelname=p.Results.modelname;
obj.datadictionary=p.Results.datadictname;
obj.verbose=1;
end
obj.modelname=obj.cparser.Results.modelname;
obj.datadictionary=obj.cparser.Results.datadictname;
end
function name=getmodelname(obj)
name=obj.modelname;
......
......@@ -14,9 +14,11 @@ classdef SCDclass_taskmdscheckbusnames < SCDclass_task
methods
function obj=SCDclass_taskmdscheckbusnames(id, modelbus, varargin)
function obj=SCDclass_taskmdscheckbusnames(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;
end
......@@ -27,7 +29,7 @@ classdef SCDclass_taskmdscheckbusnames < SCDclass_task
[obj,value]=obj.getdata(shot);
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
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