Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
S
SCDDS-core
Manage
Activity
Members
Code
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Deploy
Releases
Model registry
Analyze
Contributor analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
SPC
SCDDS
SCDDS-core
Commits
41989c09
Commit
41989c09
authored
5 years ago
by
Federico Felici
Browse files
Options
Downloads
Patches
Plain Diff
Heavy refactoring and cleanup
parent
93a833f2
No related branches found
No related tags found
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
code/classes/SCDclass_expcode.m
+132
-93
132 additions, 93 deletions
code/classes/SCDclass_expcode.m
with
132 additions
and
93 deletions
code/classes/SCDclass_expcode.m
+
132
−
93
View file @
41989c09
...
...
@@ -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
.
use
wavegen
=
0
;
node03
.
useethcat1
=
0
;
node03
.
datadict
=
'SCD_rtc_03.sldd'
;
node03
.
has
wavegen
=
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
node
nr
=
1
:
8
obj
.
(
sprintf
(
'node%02d'
,
nodenr
)
)
=
SCDclass_expcode
.
defaultnode
(
node
nr
);
for
i
node
=
1
:
8
tmp
(
inode
)
=
SCDclass_expcode
.
defaultnode
(
i
node
);
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
,
i
node
,
i
cpu
,
varalgo
,
wrappername
,
varargin
)
p
=
inputParser
;
checknodes
=
@
(
x
)
ismember
(
x
,
obj
.
activenodes
);
checkcpu
=
@
(
x
)
ismember
(
x
,
obj
.
activecpus
{
node
});
checkcpu
=
@
(
x
)
ismember
(
x
,
obj
.
activecpus
{
i
node
});
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
,
i
node
,
i
cpu
,
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
.
(
nodes
tr
)
.
varalgo
(
cpu
)
=
varalgo
;
obj
.
(
nodes
tr
)
.
wrapper
{
cpu
}
=
wrappername
;
obj
.
(
node
str
)
.
cpuactive
(
cpu
)
=
1
;
nodestr
=
sprintf
(
'node%02d'
,
i
node
);
obj
.
nodes
(
inode
)
.
varalgo
(
i
cpu
)
=
varalgo
;
obj
.
nodes
(
inode
)
.
wrapper
{
i
cpu
}
=
wrappername
;
obj
.
nodes
(
i
node
)
.
cpuactive
(
i
cpu
)
=
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
%
02
d
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 node
08
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
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment