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

Heavy refactoring and cleanup

parent 93a833f2
No related branches found
No related tags found
No related merge requests found
......@@ -26,15 +26,7 @@ classdef SCDclass_expcode
status % Expcode development status
loadverbose % Verbosity level of the loading (currently 0 or 1)
% Per node properties structs
node01
node02
node03
node04
node05
node06
node07
node08
nodes % array of node properties structs
end
methods(Static)
......@@ -46,10 +38,12 @@ classdef SCDclass_expcode
node01.timing.t_start = -4.5;
node01.timing.t_stop = 3;
node01.timing.dt = 1e-4;
node01.thperiod = 1.0000e-03;
node01.buildcfg.conffile{1} = 'standard';
node01.buildcfg.initscdbeforecomp = 0;
node01.usewavegen = 0;
node01.datadict='SCD_rtc_01.sldd';
node01.haswavegen = 1;
node01.hasethercat = 0;
node01.hasadc = 1;
node02.active = 0;
node02.ncpu = 4;
......@@ -64,8 +58,9 @@ classdef SCDclass_expcode
node02.buildcfg.conffile{4} = 'standard';
node02.buildcfg.conffile=node02.buildcfg.conffile';
node02.buildcfg.initscdbeforecomp = 0;
node02.usewavegen = 0;
node02.datadict='SCD_rtc_02.sldd';
node02.haswavegen = 1;
node02.hasadc = 1;
node02.hasethercat = 1;
node03.active = 0;
node03.ncpu = 4;
......@@ -73,7 +68,6 @@ classdef SCDclass_expcode
node03.timing.t_start = -2.0;
node03.timing.t_stop = 2.75;
node03.timing.dt = 1e-3;
node03.thdwsample = [0 0 0 0];
node03.thperiod = [1.0000e-03 1.0000e-03 1.0000e-03 1.0000e-03];
node03.buildcfg.conffile{1} = 'standard';
node03.buildcfg.conffile{2} = 'standard';
......@@ -81,9 +75,9 @@ classdef SCDclass_expcode
node03.buildcfg.conffile{4} = 'standard';
node03.buildcfg.conffile=node03.buildcfg.conffile';
node03.buildcfg.initscdbeforecomp = [0 0 0 0];
node03.usewavegen = 0;
node03.useethcat1 = 0;
node03.datadict='SCD_rtc_03.sldd';
node03.haswavegen = 1;
node03.hasadc = 0;
node03.hasethercat = 0;
node04.active = 0;
node04.ncpu = 4;
......@@ -91,9 +85,14 @@ classdef SCDclass_expcode
node04.timing.t_start = -4.5;
node04.timing.t_stop = 3;
node04.timing.dt = 1e-4;
node04.thperiod = 1.0000e-04;
node04.buildcfg.conffile{1} = 'standard';
node04.buildcfg.initscdbeforecomp = 0;
node04.usewavegen = 0;
node04.haswavegen = 1;
node04.hasadc = 0;
node04.hasethercat = 0;
node05.active = 0;
node05.ncpu = 1;
......@@ -101,9 +100,12 @@ classdef SCDclass_expcode
node05.timing.t_start = -4.5;
node05.timing.t_stop = 3;
node05.timing.dt = 1e-4;
node05.thperiod = 1.0000e-04;
node05.buildcfg.conffile{1} = 'standard';
node05.buildcfg.initscdbeforecomp = 0;
node05.usewavegen = 0;
node05.haswavegen = 1;
node05.hasadc = 0;
node05.hasethercat = 0;
node06.active = 0;
node06.ncpu = 4;
......@@ -111,7 +113,6 @@ classdef SCDclass_expcode
node06.timing.t_start = 0.0;
node06.timing.t_stop = 2.75;
node06.timing.dt = 1e-3;
node06.thdwsample = [0 0 0 0];
node06.thperiod = [1.0000e-03 1.0000e-03 1.0000e-03 1.0000e-03];
node06.buildcfg.conffile{1} = 'standard';
node06.buildcfg.conffile{2} = 'standard';
......@@ -119,8 +120,9 @@ classdef SCDclass_expcode
node06.buildcfg.conffile{4} = 'standard';
node06.buildcfg.conffile=node06.buildcfg.conffile';
node06.buildcfg.initscdbeforecomp = [0 0 0 0];
node06.usewavegen = 0;
node06.datadict='SCD_rtc_06.sldd';
node06.haswavegen = 1;
node06.hasadc = 0;
node06.hasethercat = 0;
node07.active = 0;
......@@ -129,7 +131,6 @@ classdef SCDclass_expcode
node07.timing.t_start = -0.5;
node07.timing.t_stop = 2.5;
node07.timing.dt = 1e-3;
node07.thdwsample = [0 0 0 0];
node07.thperiod = [1.0000e-03 1.0000e-03 1.0000e-03 1.0000e-03];
node07.buildcfg.conffile{1} = 'standard';
node07.buildcfg.conffile{2} = 'standard';
......@@ -137,8 +138,9 @@ classdef SCDclass_expcode
node07.buildcfg.conffile{4} = 'standard';
node07.buildcfg.conffile=node07.buildcfg.conffile';
node07.buildcfg.initscdbeforecomp = [0 0 0 0];
node07.usewavegen = 0;
node07.datadict='SCD_rtc_07.sldd';
node07.haswavegen = 1;
node07.hasadc = 1;
node07.hasethercat = 0;
node08.active = 0;
node08.ncpu = 1;
......@@ -146,7 +148,6 @@ classdef SCDclass_expcode
node08.timing.t_start = -0.5;
node08.timing.t_stop = 2.5;
node08.timing.dt = 1e-3;
node08.thdwsample = [0 0 0 0];
node08.thperiod = [1.0000e-03 1.0000e-03 1.0000e-03 1.0000e-03];
node08.buildcfg.conffile{1} = 'standard';
node08.buildcfg.conffile{2} = 'standard';
......@@ -154,15 +155,20 @@ classdef SCDclass_expcode
node08.buildcfg.conffile{4} = 'standard';
node08.buildcfg.conffile=node08.buildcfg.conffile';
node08.buildcfg.initscdbeforecomp = [0 0 0 0];
node08.usewavegen = 0;
node08.datadict='SCD_rtc_08.sldd';
node08.haswavegen = 1;
node08.hasadc = 1;
node08.hasethercat = 0;
node = eval(sprintf('node%02d',nodenr));
% general part]
% [general part]
node.hasrfm = 1; % all nodes have rfm
node.wrapper = cell(node.ncpu,1);
node.wrapdatadicts=cell(node.ncpu,1);
node.varalgo = ones(node.ncpu,1);
node.cpuactive = zeros(node.ncpu,1);
node.datadict=sprintf('SCD_rtc_%02d.sldd',nodenr);
for iwrap=1:node.ncpu
node.wrapper{iwrap} = sprintf('SCDwrap_template%02d%02d.slx',nodenr,iwrap);
node.wrapdatadicts{iwrap} = sprintf('SCDwrap_template%02d%02d.sldd',nodenr,iwrap);
......@@ -233,9 +239,10 @@ classdef SCDclass_expcode
obj.mdscontainer = SCDclass_mdsobjcontainer;
obj.taskcontainer = SCDclass_taskcontainer;
for nodenr = 1:8
obj.(sprintf('node%02d',nodenr)) = SCDclass_expcode.defaultnode(nodenr);
for inode = 1:8
tmp(inode) = SCDclass_expcode.defaultnode(inode);
end
obj.nodes = tmp; clear tmp;
end
function printinfo(obj)
......@@ -292,11 +299,11 @@ classdef SCDclass_expcode
'createdir',true);
end
function obj = addwrapper(obj, node, cpu, varalgo, wrappername, varargin)
function obj = addwrapper(obj, inode, icpu, varalgo, wrappername, varargin)
p=inputParser;
checknodes = @(x) ismember(x,obj.activenodes );
checkcpu = @(x) ismember(x,obj.activecpus{node});
checkcpu = @(x) ismember(x,obj.activecpus{inode});
addRequired(p, 'node', checknodes);
addRequired(p, 'cpu', checkcpu);
......@@ -304,7 +311,7 @@ classdef SCDclass_expcode
addRequired(p, 'modelname', @(x) ischar(x));
addOptional(p, 'datadictionary', '', @(x) ischar(x));
parse(p, node, cpu, varalgo, wrappername, varargin{:});
parse(p, inode, icpu, varalgo, wrappername, varargin{:});
% In data dcitionary is not specified it is assumed having
% the same name than the model
......@@ -329,10 +336,10 @@ classdef SCDclass_expcode
end
%% update node info
nodestr=sprintf('node%02d',node);
obj.(nodestr).varalgo(cpu) = varalgo;
obj.(nodestr).wrapper{cpu} = wrappername;
obj.(nodestr).cpuactive(cpu) = 1;
nodestr=sprintf('node%02d',inode);
obj.nodes(inode).varalgo(icpu) = varalgo;
obj.nodes(inode).wrapper{icpu} = wrappername;
obj.nodes(inode).cpuactive(icpu) = 1;
%% save in wrapper list
tempwrapper=cell(10,1);
......@@ -545,13 +552,13 @@ classdef SCDclass_expcode
end
end
function callinits(obj,shot)
function callinits(obj,~)
if(~isempty(obj.algoobjlist))
for ii=1:numel(obj.algoobjlist)
if nargin==1
obj.algoobjlist{ii}.callinits();
elseif nargin==2
obj.algoobjlist{ii}.callinits(shot);
error('this use is deprecated, add tasks instead')
else
error('invalid number of arguments for callinits');
end
......@@ -634,7 +641,7 @@ classdef SCDclass_expcode
% make list of nodes to build
compileslx_list = cell(0);
for inode=1:8
nodeinfo=obj.(sprintf('node%02d',inode));
nodeinfo=obj.nodes(inode);
for icpu = 1:nodeinfo.ncpu
if nodeinfo.cpuactive(icpu)
if inode~=1
......@@ -726,12 +733,12 @@ classdef SCDclass_expcode
% Looping through every active node
for idx_nodedds=1:numel(obj.activenodes)
inode = obj.activenodes(idx_nodedds);
% Getting data dictionary and required data sources
datadictname=eval(sprintf('obj.node%02d.datadict',obj.activenodes(idx_nodedds)));
datadictname = obj.nodes(inode).datadict';
nodedd=Simulink.data.dictionary.open(datadictname);
nodeddsources=nodedd.DataSources;
reqsources=eval(sprintf('obj.node%02d.wrapdatadicts', obj.activenodes(idx_nodedds)));
reqsources=obj.nodes(inode).wrapdatadicts';
% Filtering out not pertinent data sources by name prefix
nodeddsourcesok={};
......@@ -888,10 +895,16 @@ classdef SCDclass_expcode
end
function buildworkspacesimstruct(obj)
obj.mdscontainer.buildworkspacesimstruct;
% obj.mdscontainer.buildworkspacesimstructnode(obj,node)
% obj.mdscontainer.buildworkspacesimstruct; % old
dd=SCDconf_getdatadict('tcv.sldd');
for ii = 1:numel(obj.activenodes)
inode = obj.activenodes(ii);
buildworkspacesimstructnode(obj,inode,dd);
end
end
function obj = setupmain(obj)
% sets up global configs for the expcode
assigncmd=sprintf('scd.expcode=%d;',obj.maincode);
......@@ -901,55 +914,25 @@ classdef SCDclass_expcode
function obj = setupwrappers(obj)
for ii=1:numel(obj.wrapperlist)
switch obj.wrapperlist{ii}{1}
case 1
inode = obj.wrapperlist{ii}{1};
switch inode
%%% THIS SHOULD BE REFACTORED
case {1,8}
if(obj.wrapperlist{ii}{2}==1)
obj.node01.varalgo=obj.wrapperlist{ii}{3};
obj.node01.wrapdatadicts{1}=obj.wrapperlist{ii}{5};
else
warning('SCDclass_expcode:setupwrappers','not supported node01 cpu');
end
case 2
if(obj.wrapperlist{ii}{2}>=1 && obj.wrapperlist{ii}{2}<=4)
obj.node02.varalgo(obj.wrapperlist{ii}{2})=obj.wrapperlist{ii}{3};
obj.node02.wrapdatadicts{obj.wrapperlist{ii}{2}}=obj.wrapperlist{ii}{5};
obj.nodes(inode).varalgo=obj.wrapperlist{ii}{3};
obj.nodes(inode).wrapdatadicts{1}=obj.wrapperlist{ii}{5};
else
warning('SCDclass_expcode:setupwrappers','not supported node02 cpu');
warning('SCDclass_expcode:setupwrappers','not supported node%02d cpu',inode);
end
case 3
case {2,3,4,6,7}
if(obj.wrapperlist{ii}{2}>=1 && obj.wrapperlist{ii}{2}<=4)
obj.node03.varalgo(obj.wrapperlist{ii}{2})=obj.wrapperlist{ii}{3};
obj.node03.wrapdatadicts{obj.wrapperlist{ii}{2}}=obj.wrapperlist{ii}{5};
else
warning('SCDclass_expcode:setupwrappers','not supported node03 cpu');
end
case 6
if(obj.wrapperlist{ii}{2}>=1 && obj.wrapperlist{ii}{2}<=4)
obj.node06.varalgo(obj.wrapperlist{ii}{2})=obj.wrapperlist{ii}{3};
obj.node06.wrapdatadicts{obj.wrapperlist{ii}{2}}=obj.wrapperlist{ii}{5};
else
warning('SCDclass_expcode:setupwrappers','not supported node06 cpu');
end
case 7
if(obj.wrapperlist{ii}{2}>=1 && obj.wrapperlist{ii}{2}<=4)
obj.node07.varalgo(obj.wrapperlist{ii}{2})=obj.wrapperlist{ii}{3};
obj.node07.wrapdatadicts{obj.wrapperlist{ii}{2}}=obj.wrapperlist{ii}{5};
else
warning('SCDclass_expcode:setupwrappers','not supported node07 cpu');
end
case 8
if(obj.wrapperlist{ii}{2}==1)
obj.node08.varalgo=obj.wrapperlist{ii}{3};
obj.node08.wrapdatadicts{1}=obj.wrapperlist{ii}{5};
obj.nodes(inode).varalgo(obj.wrapperlist{ii}{2})=obj.wrapperlist{ii}{3};
obj.nodes(inode).wrapdatadicts{obj.wrapperlist{ii}{2}}=obj.wrapperlist{ii}{5};
else
warning('SCDclass_expcode:setupwrappers','not supported node08 cpu');
warning('SCDclass_expcode:setupwrappers','not supported node%02d cpu',inode);
end
otherwise
warning('SCDclass_expcode:setupwrappers','not supported node');
......@@ -971,17 +954,73 @@ classdef SCDclass_expcode
s=struct();
% Looping through every active node
for idx_nodedds=1:numel(obj.activenodes)
varalgo=eval(sprintf('obj.node%02d.varalgo',obj.activenodes(idx_nodedds)));
for ii=1:numel(obj.activenodes)
inode = obj.activenodes(ii);
varalgo=obj.nodes(inode).varalgo';
for ii=1:numel(varalgo)
str=sprintf('s.algo%02d%02d=%d;',obj.activenodes(idx_nodedds),ii,varalgo(ii));
eval(str);
for jj=1:numel(varalgo)
fieldname = sprintf('algo%02d%02d',inode,jj);
s.(fieldname)=varalgo(jj);
end
end
varalgodd.setValue(s);
end
function obj = buildworkspacesimstructnode(obj,inode,dd)
node = obj.nodes(inode);
try % get existing SCDsimdata
SCDsimdata = evalin('base','SCDsimdata');
catch ME
if strcmp(ME.identifier,'MATLAB:UndefinedFunction')
SCDsimdata = struct(); % assign here if empty
else
rethrow(ME);
end
end
if node.haswavegen
for ithread = 1:node.ncpu
% get whatever is in data dictionary template in wrappers
simstructname = sprintf('SCDnode%02d%02d_simdata',inode,ithread);
fprintf(' setting up %s\n',simstructname);
try
simstruct = dd.getEntry(simstructname).getValue;
catch
warning('%s not found in data dictionary, auto-generate from bus definition',simstructname)
wgbusname = sprintf('WG%02d%02dbus',inode,ithread);
simstruct = SCDconf_createsimdatastruct(dd,wgbusname);
end
SCDsimdata.(simstructname) = simstruct;
end
end
% Node-specific
simstructname = sprintf('SCDnode%02dsimdata',inode);
if node.hasadc
adcbusname = sprintf('ADC%02dbus',inode);
fprintf(' setting up %s.adc\n',simstructname);
SCDsimdata.(simstructname).adc = SCDconf_createsimdatastruct(dd,adcbusname);
end
if node.hasethercat
assert(inode==2,'Ethercat not yet implemented for other node than 2');
ethercatbusname = 'ETHCAT1IN';
fprintf(' setting up %s.ethercat\n',simstructname);
SCDsimdata.(simstructname).ethercat = ...
SCDconf_createsimdatastruct(dd,ethercatbusname);
end
% add also RFM
RFMbusname = 'RFMINbus';
SCDsimdata.rfm = SCDconf_createsimdatastruct(dd,RFMbusname);
% assign result in base workspace
assignin('base','SCDsimdata',SCDsimdata);
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