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

cleanup class and add general setup checks

parent ed3bc7f5
Branches main
No related tags found
No related merge requests found
......@@ -22,7 +22,9 @@ classdef SCDclass_algo
timing % Timing info structure
exportedtpsdefaults % default tunable parameters defining functions
buslist % list of buses and their sources
signals % Defined Simulink.Signals
inBus % Root inport bus
outBus % Root outport bus
outSignal % Outport signal
end
properties
......@@ -51,6 +53,8 @@ classdef SCDclass_algo
obj.timing.t_stop = 1 ;
obj.timing.dt = 1e-3;
obj.buslist = [];
obj.inBus.name = [name,'_inBus'];
obj.outBus.name = [name,'_outBus'];
% Buses
obj.modelslx = [obj.modelname,'.slx'];
......@@ -67,6 +71,8 @@ classdef SCDclass_algo
% Standard data dictionary equal to algorithm name,
% overriddable by the setter method
obj=obj.setdatadictionary([name '.sldd']);
obj=obj.define_signals;
end
%% Print infos
......@@ -140,7 +146,19 @@ classdef SCDclass_algo
function refddparent = getrefddparentalgo(obj)
refddparent = obj.refddparentalgo;
end
function obj = define_signals(obj)
% generate signal for root output port
mySigName = [obj.getname,'_outport'];
mySig = Simulink.Signal;
mySig.DataType = ['Bus: ',obj.outBus.name];
mySig.Description = sprintf('%s outport bus signal',obj.getname);
% assign signals
obj.outSignal.name = mySigName;
obj.outSignal.obj = mySig;
end
%% Setup functions setter and getter
function obj = addstdinitfcn(obj,fcnhandle)
if ischar(fcnhandle)
......@@ -345,14 +363,14 @@ classdef SCDclass_algo
end
function addsignalstodd(obj)
obj = obj.addsignals; % add signals
dictionaryObj = Simulink.data.dictionary.open(obj.getdatadictionary);
designDataObj = getSection(dictionaryObj, 'Design Data');
for ii=1:numel(obj.signals)
mysignalObj = obj.signals(ii).obj;
mysignalName = obj.signals(ii).name;
signals = obj.outSignal; % for now just this one, maybe later add more
for ii=1:numel(signals)
mysignalObj = signals(ii).obj;
mysignalName = signals(ii).name;
fprintf('adding signal %25s to %s\n',...
mysignalName,obj.getdatadictionary)
obj.replaceorcreateddentry(designDataObj,mysignalName,mysignalObj);
......@@ -516,8 +534,8 @@ classdef SCDclass_algo
end
end
function obj = addsignals(obj)
% root outport signals
function checksignals(obj)
% check root outport signal
load_system(obj.getname);
model_handle = get_param(obj.getname,'Handle');
outport_handle = find_system(model_handle,'BlockType','Outport');
......@@ -526,23 +544,17 @@ classdef SCDclass_algo
% Datatype
datatypeStr = get_param(outport_name,'OutDataTypeStr');
% generate signal from this port datatype
mySigName = [obj.getname,'_outport'];
mySig = Simulink.Signal;
mySig.DataType = datatypeStr;
mySig.Description = sprintf('%s outport bus signal',obj.getname);
expected_busname = ['Bus: ',obj.outBus.name];
assert(isequal(datatypeStr,expected_busname),...
'root outport data bus name mismatch, found %s expected %s',datatypeStr,expected_busname);
% check algo .slx configuration compatibility with signal
outSigName = get_param(outport_name,'SignalName');
assert(isequal(outSigName,mySigName),'outport signal name must resolve to %s',mySigName)
assert(isequal(outSigName,obj.outSignal.name),...
'Found unexpected outport signal: %s instead of %s',outSigName,obj.outSignal.name)
ison = get_param(outport_name,'MustResolveToSignalObject');
assert(isequal(ison,'on'),'outport %s must be set to resolve to signal object name');
% assign signals
obj.signals(1).name = mySigName;
obj.signals(1).obj = mySig;
end
%% MDS container methods forwarders
......@@ -620,7 +632,7 @@ classdef SCDclass_algo
% populate with template tunable parameters
obj.updatetemplatetp;
% add referenced data dictionaries to obj data dictionary
obj.addrefddtodd
......@@ -629,6 +641,7 @@ classdef SCDclass_algo
% add signals to dd
obj.addsignalstodd;
end
function callinits(obj)
......@@ -717,7 +730,7 @@ classdef SCDclass_algo
obj.initdd; % setup data dictionary
obj.callrefmodelinits(obj.getname); % setup workspaces for referenced models
end
function setup(obj)
% setup()
%
......@@ -727,6 +740,8 @@ classdef SCDclass_algo
% an algorithm block diagram
% should pass ctrl-d (instandalone opening)
% after this call
obj.checks;
obj.updatetemplatetp;
obj.buildworkspacetpstruct;
SCDconf_setConf('sim');
......@@ -769,9 +784,16 @@ classdef SCDclass_algo
function load(obj)
load_system(obj.modelname);
end
function checks(obj)
% various checks
obj.checksignals; % check signal definitions
% more checks to be added
end
end
methods(Static,Hidden=true)
function createdatadictionary(ddname,folder)
% Create data dictionary in path folder/ddname
dd_fullpath = fullfile(folder,ddname);
......
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