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

Improve struct 2 bus conversions and tests

parent 7f8594a0
No related merge requests found
......@@ -5,7 +5,7 @@
% and with zero data of the correct kind
% This is enough for passing a ctrl-D with from Workspace bus kind blocks
function [out] = SCDconf_createsimdatastruct(dd,busname)
function [out] = SCDconf_createstructfrombus(dd,busname)
bus=dd.getEntry(busname).getValue; % get from data dictionary
bussize=size(bus.Elements);
......@@ -16,7 +16,7 @@ for ii=1:signalssize
if contains(element.DataType,'Bus: ')
busname = erase(element.DataType,'Bus: ');
% recursive call
out.(element.Name) = SCDconf_createsimdatastruct(dd,busname);
out.(element.Name) = SCDconf_createstructfrombus(dd,busname);
else
try cast(1,element.DataType); catch ME; error('non-numeric type'); end
elementdims=element.Dimensions;
......
% Compare the structure of a bus to that of a structure, return 1 if they
% are the same.
function [areequal] = SCDconf_structbuscmp(mystruct,mybus)
nelem=numel(mybus.Elements);
for ielem = 1:nelem
myelem = mybus.Elements(ielem);
myelementname = myelem.Name;
if ~isfield(mystruct,myelementname)
areequal = false; return;
end
myfield = mystruct.(myelementname);
if startsWith(myelem.DataType,'Bus')
% recursive call
areequal = SCDconf_structbuscmp(mystruct,mybus);
if ~areequal; return; end
elseif ~isa(myfield,'timeseries') % check timeseries
areequal=false; return;
elseif ~isa(myfield.Data,myelem.DataType) % check data type
areequal=false; return;
elseif ~all(size(myfield.Data,2:ndims(myfield.Data))==myelem.Dimensions) % check dimension
areequal=false; return;
end
end
% if we made it this far..
areequal = true;
end
classdef test_structbus < matlab.unittest.TestCase
properties
testBus = test_structbus.getTestBus();
end
methods(Test,TestTags={'Unit'})
function testDifferentStruct(testCase)
mystruct = struct('a',1);
testCase.assertFalse(SCDconf_structbuscmp(mystruct,testCase.testBus));
end
function testSameStruct(testCase)
mystruct = SCDconf_createstructfrombus(testCase.testBus); % generate to match bus
areequal = SCDconf_structbuscmp(mystruct,testCase.testBus);
testCase.assertTrue(areequal);
end
end
methods(Static)
function testBus = getTestBus()
testBus = Simulink.Bus;
testBus.Description = '';
testBus.DataScope = 'Auto';
testBus.HeaderFile = '';
testBus.Alignment = -1;
saveVarsTmp{1} = Simulink.BusElement;
saveVarsTmp{1}.Name = 'a';
saveVarsTmp{1}.Complexity = 'real';
saveVarsTmp{1}.Dimensions = 24;
saveVarsTmp{1}.DataType = 'single';
saveVarsTmp{1}.Min = [];
saveVarsTmp{1}.Max = [];
saveVarsTmp{1}.DimensionsMode = 'Fixed';
saveVarsTmp{1}.SamplingMode = 'Sample based';
saveVarsTmp{1}.SampleTime = -1;
saveVarsTmp{1}.DocUnits = 'varies';
saveVarsTmp{1}.Description = ['References for observable errors coming ' ...
'from the A matrix'];
saveVarsTmp{1}(2, 1) = Simulink.BusElement;
saveVarsTmp{1}(2, 1).Name = 'b';
saveVarsTmp{1}(2, 1).Complexity = 'real';
saveVarsTmp{1}(2, 1).Dimensions = 8;
saveVarsTmp{1}(2, 1).DataType = 'single';
saveVarsTmp{1}(2, 1).Min = [];
saveVarsTmp{1}(2, 1).Max = [];
saveVarsTmp{1}(2, 1).DimensionsMode = 'Fixed';
saveVarsTmp{1}(2, 1).SamplingMode = 'Sample based';
saveVarsTmp{1}(2, 1).SampleTime = -1;
saveVarsTmp{1}(2, 1).DocUnits = 'V';
saveVarsTmp{1}(2, 1).Description = ['Feed-forwards for SCR E converters' ...
' voltage commands'];
saveVarsTmp{1}(3, 1) = Simulink.BusElement;
saveVarsTmp{1}(3, 1).Name = 'hyb_FF_f_u';
saveVarsTmp{1}(3, 1).Complexity = 'real';
saveVarsTmp{1}(3, 1).Dimensions = 8;
saveVarsTmp{1}(3, 1).DataType = 'single';
saveVarsTmp{1}(3, 1).Min = [];
saveVarsTmp{1}(3, 1).Max = [];
saveVarsTmp{1}(3, 1).DimensionsMode = 'Fixed';
saveVarsTmp{1}(3, 1).SamplingMode = 'Sample based';
saveVarsTmp{1}(3, 1).SampleTime = -1;
saveVarsTmp{1}(3, 1).DocUnits = 'V';
saveVarsTmp{1}(3, 1).Description = ['Feed-forwards for SCR F converters' ...
' voltage commands'];
testBus.Elements = saveVarsTmp{1};
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