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

Add generic bus registration for algos

parent 1d3298e3
No related branches found
No related tags found
No related merge requests found
......@@ -15,8 +15,7 @@ classdef SCDclass_algo
fpinits % inits scripts for fixed parameters
timing % Timing info structure
exportedtpsdefaults % default tunable parameters defining functions
inBus % name of input bus
outBus % name of output bus
buslist % list of buses and their sources
modelslx % slx model file name
folder % folder containing algorithm
end
......@@ -39,10 +38,9 @@ classdef SCDclass_algo
obj.timing.t_start = 0 ;
obj.timing.t_stop = 1 ;
obj.timing.dt =1e-3;
obj.buslist = [];
% buses
obj.inBus = [obj.modelname,'_inBus' ];
obj.outBus = [obj.modelname,'_outBus'];
obj.modelslx = [obj.modelname,'.slx'];
% files
......@@ -113,8 +111,8 @@ classdef SCDclass_algo
end
function [stdinits, fpinits] = getinits(obj)
stdinits=obj.stdinits;
fpinits=obj.fpinits;
stdinits = obj.stdinits;
fpinits = obj.fpinits;
end
......@@ -154,8 +152,39 @@ classdef SCDclass_algo
temp{2}=targetstruct;
temp{3}=targetworkspace;
obj.fpinits{end+1}=temp;
end
%% Bus setter and getter
function obj = addbus(obj,name,source)
assert(~isequal(name,source),'bus source file and name may not be the same')
% Register a bus from a file to be added to dd
ii = numel(obj.buslist)+1;
obj.buslist(ii).name = name;
obj.buslist(ii).source = source;
end
function list = getbuslist(obj)
list = obj.buslist;
end
function printbuslist(obj)
list = getbuslist(obj);
fprintf('\n******* Registered buses for %s: ******\n\n',obj.modelname)
fprintf('%-15s %-15s %-50s\n\n','Name','Type','Source')
for ii=1:numel(list)
if ishandle(list(ii).source)
type = 'function';
else
type = 'file';
end
source = which([list(ii).source,'.m']);
if isempty(source), source='NOT FOUND'; end
fprintf('%-15s %-15s %-50s\n',list(ii).name,type,source);
end
fprintf('\n');
end
%% Data dictionary setter and getter
function obj = setdatadictionary(obj, datadict)
......@@ -171,6 +200,7 @@ classdef SCDclass_algo
assert(iscell(refdd) && isrow(refdd),'refdd must be a row cell array of data dictionary names')
obj.refdatadictionaries = refdd;
end
function createdatadictionary(obj,varargin)
% create data dictionary in path obj.folder/obj.getdatadictionary
......@@ -190,23 +220,45 @@ classdef SCDclass_algo
end
%% Data dictionary manipulation manipulations
function addbuses(obj)
% Add buses to data dictionary from .m file descriptions, if
% available. Bus names in obj.inBus, obj.outBus
if ~isempty(which(obj.inBus)) && ~isempty(which(obj.outBus))
dictionaryObj = Simulink.data.dictionary.open(obj.getdatadictionary);
designDataObj = getSection(dictionaryObj, 'Design Data');
fprintf('Add buses to data dictionary: %s, %s\n',obj.inBus,obj.outBus);
eval(obj.inBus); eval(obj.outBus); % eval buses in base workspace
obj.replaceorcreateddentry(designDataObj,obj.inBus ,evalin('base',obj.inBus ));
obj.replaceorcreateddentry(designDataObj,obj.outBus,evalin('base',obj.outBus ));
if dictionaryObj.HasUnsavedChanges, dictionaryObj.saveChanges; end % Save if necessary
evalin('base',sprintf('clear %s %s',obj.inBus,obj.outBus));
else
fprintf('no buses imported in datadictionary - assuming they are already there\n')
function addbusestodd(obj)
% Add buses to data dictionary from .m file descriptions
dictionaryObj = Simulink.data.dictionary.open(obj.getdatadictionary);
designDataObj = getSection(dictionaryObj, 'Design Data');
busList = obj.getbuslist;
for ii=1:numel(busList)
mybusSource = busList(ii).source;
busName = busList(ii).name;
if ischar(mybusSource)
% User specified a file that contains a bus definition
% (typically exported from bus editor)
fprintf('Adding bus %s from %s to %s\n',busName,mybusSource,obj.getdatadictionary);
assert(logical(exist(mybusSource,'file')),'%s does not exist',mybusSource)
eval(mybusSource); % eval bus script here
assert(exist(busName,'var')~=0,...
'no variable %s found despite running script %s',busName,which(mybusSource))
obj.replaceorcreateddentry(designDataObj,busName,eval(busName));
elseif ishandle(mybusSource)
% user specified a function that returns cell arrays of
% bus names and bus objects
[names,buses] = mybusSource();
for jj=1:numel(buses)
fprintf('adding bus %s from function %s to %s',...
names{jj},func2str(mybusSource),obj.getdatadictionary)
obj.replaceorcreateddentry(designDataObj,names{jj},buses{jj});
end
end
end
if dictionaryObj.HasUnsavedChanges, dictionaryObj.saveChanges; end % Save if necessary
end
function addrefdd(obj)
% add configurations.sldd as referenced data dictionary, plus
% other optional data dictionaries (e.g. used by lower-level components of an algorithm)
......@@ -412,7 +464,7 @@ classdef SCDclass_algo
obj.updatetemplatetp;
% add buses
obj.addbuses;
obj.addbusestodd;
% add referenced data dictionaries
obj.addrefdd
......
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