diff --git a/code/classes/SCDclass_component.m b/code/classes/SCDclass_component.m index 16cc2b68a4d72bf4c1047501178fc1709c421887..5db11239f1408955afa7700bd80b8c2e0ad9ab2c 100644 --- a/code/classes/SCDclass_component.m +++ b/code/classes/SCDclass_component.m @@ -1,8 +1,7 @@ classdef SCDclass_component % Superclass for SCD component - % Can be a wrapper or a node or all SCD - % Anything that has a model, a data dictionary - % and optionally an associated algorithm + % Can be a wrapper or a node + % Includes functions to link associated data dictionaries properties loadverbose = 1; @@ -61,42 +60,7 @@ classdef SCDclass_component end end end - - function obj = linknodedd(obj,node) - % link node data dictionary to main expcode object data dicationary - assert(isa(node,'SCDclass_node'),'node must be an SCDclass_node object') - ddObj = Simulink.data.dictionary.open(obj.ddname); - - prefix = 'SCD_rtc'; - - % already linked sources - prevsources = ddObj.DataSources; - prevsources_nodes = prevsources(startsWith(prevsources,prefix)); - - % make algo data dictionary list list - reqsources = node.ddname; - - % removing unnecessary ones - for ii=1:numel(prevsources_nodes) - mysource = prevsources_nodes{ii}; - if ~contains(reqsources,mysource) - obj.printlog('Removing algorithm data source %s from %s',mysource,obj.ddname); - ddObj.removeDataSource(prevsources_nodes{ii}) - end - end - - % add new ones not yet present - mysource = reqsources; - assert(startsWith(mysource,prefix),... - 'attempting to add algo dd: %s that does not start with ''%s''-aborting',prefix,mysource); - if contains(prevsources,mysource) - obj.printlog('Not adding node data source %s - already exists',mysource); - else - obj.printlog('Adding node data source %s to %s',mysource,obj.ddname); - ddObj.addDataSource(mysource); - end - end - + function obj=printlog(obj,str,varargin) % printlog, allows sprintf()-like expressions if obj.loadverbose==1 diff --git a/code/classes/SCDclass_expcode.m b/code/classes/SCDclass_expcode.m index 3dc0b5c95c5f9258f87b21113e63d1ff1cc719d5..5543496c62b4224f3ae9a95f6bc7a81b97a87f3c 100644 --- a/code/classes/SCDclass_expcode.m +++ b/code/classes/SCDclass_expcode.m @@ -37,10 +37,10 @@ classdef SCDclass_expcode modeltoactualize % name of the algorithm to actualize ('all' means all coonfigured) algos % list of algorithms objects nodes % array of node properties structs - configurednodes % nodes that are configured (that exist) - configuredcpus % cpus per node nodes that are configured (that exist) - ddname % top level data dictionary name for the expcode - ddpath % top level data dicationary save path + definednodes % nodes that are defined in Simulink + definedcpus % cpus per node nodes that are defined in Simulink + ddname ='tcv.sldd' % main expcode data dictionary name + ddpath % main expcode data dicationary save path end %% @@ -77,17 +77,6 @@ classdef SCDclass_expcode end end - function mydd = getddname(inode) - if nargin==0 - mydd = 'tcv.sldd'; - elseif nargin==1 - assert(isnumeric(inode)) - mydd = sprintf('SCD_rtc_%02d.sldd',inode); - else - error('invalid number of arguments'); - end - end - function close_all(saveflag) if nargin==0 saveflag = 1; @@ -119,14 +108,14 @@ classdef SCDclass_expcode obj.maincode = 1; obj.status = 'debug'; obj.loadverbose = 1; - obj.ddname = obj.getddname; - hardwarepath = fileparts(which('tcv.slx')); - assert(~isempty(hardwarepath),'tcv.slx not found?') + mainslx = obj.getslxname; + hardwarepath = fileparts(which(mainslx)); + assert(~isempty(hardwarepath),'%s not found?',mainslx) obj.ddpath = hardwarepath; - obj.configurednodes=[1 2 6 7 8]; - obj.configuredcpus=[{1}; ... + obj.definednodes=[1 2 6 7 8]; + obj.definedcpus=[{1}; ... {1:6}; ... {}; ... {1}; ... @@ -142,10 +131,10 @@ classdef SCDclass_expcode obj.mdscontainer = SCDclass_mdsobjcontainer; obj.taskcontainer = SCDclass_taskcontainer; - nnodes = numel(obj.configurednodes); + nnodes = numel(obj.definednodes); obj.nodes = cell(1,nnodes); for inode = 1:nnodes - nodenr = obj.configurednodes(inode); + nodenr = obj.definednodes(inode); obj.nodes{nodenr} = SCDclass_node(nodenr); end end @@ -202,7 +191,7 @@ classdef SCDclass_expcode dd = Simulink.data.dictionary.open(obj.ddname); % link data dictionaries for active nodes - for ii=obj.configurednodes + for ii=obj.definednodes mydatasource = obj.nodes{ii}.ddname; fprintf('adding data source %s to %s\n',mydatasource,obj.ddname) dd.addDataSource(mydatasource); @@ -711,8 +700,8 @@ classdef SCDclass_expcode fprintf('opening %s\n',datadictname) % Looping through every active node - for idx_nodedds=1:numel(obj.configurednodes) - inode = obj.configurednodes(idx_nodedds); + for idx_nodedds=1:numel(obj.definednodes) + inode = obj.definednodes(idx_nodedds); mynode = obj.nodes{inode}; % Add all wrapper dictionaries as datasources for main dd @@ -757,8 +746,8 @@ classdef SCDclass_expcode % obj.mdscontainer.buildworkspacesimstruct; % old dd=SCDconf_getdatadict(obj.ddname); - for ii = 1:numel(obj.configurednodes) - inode = obj.configurednodes(ii); + for ii = 1:numel(obj.definednodes) + inode = obj.definednodes(ii); buildworkspacesimstructnode(obj,inode,dd); end @@ -782,10 +771,10 @@ classdef SCDclass_expcode zeroElem = Simulink.BusElement; zeroElem.Name = 'zero'; - Elems = repmat(Simulink.BusElement,numel(obj.configurednodes),1); + Elems = repmat(Simulink.BusElement,numel(obj.definednodes),1); - for ii = 1:numel(obj.configurednodes) - inode = obj.configurednodes(ii); + for ii = 1:numel(obj.definednodes) + inode = obj.definednodes(ii); leafName = sprintf('Node%02d_RFM' ,inode); subBusName = sprintf('Bus: RFMOUT%02dbus',inode); @@ -830,8 +819,8 @@ classdef SCDclass_expcode s=struct(); % Looping through every active node - for ii=1:numel(obj.configurednodes) - inode = obj.configurednodes(ii); + for ii=1:numel(obj.definednodes) + inode = obj.definednodes(ii); mynode = obj.nodes{inode}; for jj=1:numel(mynode.wrappers) diff --git a/code/classes/SCDclass_node.m b/code/classes/SCDclass_node.m index 190b1fcf61cfc7ec462c67170885a0f9db05bbef..60794ba4a29a5fad68a6ca369a65e07f46cd434f 100644 --- a/code/classes/SCDclass_node.m +++ b/code/classes/SCDclass_node.m @@ -193,6 +193,41 @@ classdef SCDclass_node < SCDclass_component obj.active = value; end + function linknodedd(obj,node) + % link node data dictionary to main expcode object data dicationary + assert(isa(node,'SCDclass_node'),'node must be an SCDclass_node object') + ddObj = Simulink.data.dictionary.open(obj.ddname); + + prefix = 'SCD_rtc'; + + % already linked sources + prevsources = ddObj.DataSources; + prevsources_nodes = prevsources(startsWith(prevsources,prefix)); + + % make algo data dictionary list list + reqsources = node.ddname; + + % removing unnecessary ones + for ii=1:numel(prevsources_nodes) + mysource = prevsources_nodes{ii}; + if ~contains(reqsources,mysource) + obj.printlog('Removing algorithm data source %s from %s',mysource,obj.ddname); + ddObj.removeDataSource(prevsources_nodes{ii}) + end + end + + % add new ones not yet present + mysource = reqsources; + assert(startsWith(mysource,prefix),... + 'attempting to add algo dd: %s that does not start with ''%s''-aborting',prefix,mysource); + if contains(prevsources,mysource) + obj.printlog('Not adding node data source %s - already exists',mysource); + else + obj.printlog('Adding node data source %s to %s',mysource,obj.ddname); + ddObj.addDataSource(mysource); + end + end + function updatetemplatetp(obj) % update wrapper algos for ii=1:numel(obj.wrappers)