diff --git a/code/classes/SCDclass_expcode.m b/code/classes/SCDclass_expcode.m index a13f5815a75be9e21faaee2c5f62d27be55b34f4..98a12c6713cc3294e4fc96989d99fcecfcb55501 100644 --- a/code/classes/SCDclass_expcode.m +++ b/code/classes/SCDclass_expcode.m @@ -506,7 +506,7 @@ classdef SCDclass_expcode end end - function printMARTe2config(obj, shot, varargin) + function printMARTe2parconfig(obj, shot, varargin) p=inputParser; % if a model name is given, operations will be performed % only on it, otherwise they will be performed on all @@ -519,16 +519,19 @@ classdef SCDclass_expcode else obj.mdscontainer.modeltogenerate=p.Results.model; end - - obj.mdscontainer.printMARTe2parconfig(shot); - - fprintf("+MDSWavegens = {\n"); - fprintf(" Class = MDSWavegens\n"); - fprintf(" Shot = %d\n",shot); - obj.mdscontainer.printMARTe2wgconfig(shot); + end + + function printMARTe2wgbusconfig(obj, shot, ddname, busname, frequency) + fprintf("+MDSWavegen_%s = {\n", busname); + fprintf(" Class = MDSWavegen\n"); + fprintf(" Shot = %d\n",shot); + fprintf(" Frequency = %.2f\n",frequency); + dim=obj.mdscontainer.printMARTe2wgbusconfig(shot, ddname, busname); + fprintf(" Signals = {\n"); + fprintf(" wavegen_%s = { Type = float32 NumberOfElements = %d }\n", busname, dim ); + fprintf(" }\n"); fprintf("}\n"); - end end diff --git a/code/classes/SCDclass_mdsobjcontainer.m b/code/classes/SCDclass_mdsobjcontainer.m index eecc2ced0ad1b0a564c3f4d5e00749bc9275ea09..94ae621fa10732295b6eb139728c87d7762760ef 100644 --- a/code/classes/SCDclass_mdsobjcontainer.m +++ b/code/classes/SCDclass_mdsobjcontainer.m @@ -305,5 +305,62 @@ classdef SCDclass_mdsobjcontainer end end end + + function overalldim = printMARTe2wgbusconfig(obj, shot, ddname, busname) + dd=SCDconf_getdatadict(ddname); + bus=dd.getEntry(busname).getValue; + nelems=numel(bus.Elements); + server=''; + tree=''; + dimension=0; + + for elem=1:nelems + signame=bus.Elements(elem).Name; + found=false; + for wgs=1:obj.numwavegens + %signame + %obj.mdswavegens(wgs).gettarget + if(strcmp(obj.mdswavegens(wgs).gettarget,signame)) + found=true; + break; + end + end + if(~found) + error('SCDclass_mdsobjcontainer:wgnotfound','Signal %s not found in configured wavegens objects', signame); + else + actserver=obj.mdswavegens(wgs).getMDSserver; + acttree=obj.mdswavegens(wgs).getMDStree; + + if(~strcmp(actserver,server) || ~strcmp(acttree,tree)) + if(~strcmp(server,'') || ~strcmp(tree,'')) + error('SCDclass_mdsobjcontainer:multipleconnections','multiple MDS+ connections/trees not supported within the same wavegen generator'); + else + server=actserver; + tree=acttree; + fprintf(' Server=%s\n', server); + fprintf(' Tree=%s\n', tree) + end + end + + entrystring=obj.mdswavegens(wgs).genMARTe2entry(shot); + fprintf(' %s\n', entrystring); + dimension=dimension+bus.Elements(elem).Dimensions; + + end + end + + overalldim=dimension; + + end + + function iorder = getWavegensServerTreeOrder(obj) + % find server-tree order of wavegens + mdsservertree = cell(numel(obj.mdswavegens),2); + for ii=1:numel(obj.mdswavegens) + mdsservertree{ii,1} = obj.mdswavegens(ii).getMDSserver; + mdsservertree{ii,2} = obj.mdswavegens(ii).getMDStree; + end + [~,iorder] = sortrows(mdsservertree); + end end end diff --git a/code/classes/SCDclass_mdswg.m b/code/classes/SCDclass_mdswg.m index 6ea9b0a4f704d5dcac50207eb6d812ec6eee2728..ab927704e0123ff2e1fa31bf5384e94cdeaea2d0 100644 --- a/code/classes/SCDclass_mdswg.m +++ b/code/classes/SCDclass_mdswg.m @@ -16,6 +16,7 @@ classdef SCDclass_mdswg < matlab.mixin.Heterogeneous modelname % name of the Simulink model using the parameter getcommand % full command for getting the value (callablSCDalgo_f4ealgoe by matlab eval) classname % class name for logging + marteclassname % class name for generating MARTe2 cfg file cparser % constructor parameters parser timebasestart % timebase start time variable @@ -100,14 +101,41 @@ classdef SCDclass_mdswg < matlab.mixin.Heterogeneous function entrystring = genMARTe2entrycommon(obj, shot) %entrystring = ['+' obj.wavegentarget ' = { Class=' obj.classname ' Path=' obj.tdiexpr ]; - entrystring = sprintf('+%-50s = { Class=%-30s Path=%-40s',obj.wavegentarget,obj.classname,obj.tdiexpr); - + entrystring = sprintf('+%-50s = { Class=%-30s Path=%-40s',obj.wavegentarget,obj.marteclassname,obj.genMARTe2MDStdiexpression); end function name=getmodelname(obj) name=obj.modelname; end + function [mdsserver] = getMDSserver(obj) + mdsserver = obj.mdsserver; + end + + function [mdstree] = getMDStree(obj) + mdstree = obj.mdstree; + end + + function str=gettarget(obj) + str = obj.wavegentarget; + end + + function str = genMARTe2MDStdiexpression(obj) + % Duplicate first backslash +% if(obj.tdiexprused(1)=='\' && not(obj.tdiexprused(2)=='\')) +% martetdi=['\' obj.tdiexprused]; +% else +% martetdi=obj.tdiexprused; +% end + % Duplicate backslashes + %martetdi=strrep(obj.tdiexpr, '\', '\\'); + martetdi=obj.tdiexpr; + %substitute every " with ' + martetdi=strrep(martetdi, '"', ''''); + %put double string quota + martetdi=['"' martetdi '"']; + str=martetdi; + end end @@ -127,6 +155,9 @@ classdef SCDclass_mdswg < matlab.mixin.Heterogeneous % Generate C++ code %gencode(obj) + + % Generate MARTe2 configuration entry + entrystring = genMARTe2entry(obj, shot) % Prints the parameter info summary printinfo(obj) diff --git a/code/classes/SCDclass_mdswgsigarray1.m b/code/classes/SCDclass_mdswgsigarray1.m index ca8db74feddab855b8d4fe615c1018339ff10a61..1d58fc606585db163b7b51eb409fa0a1baa5fa51 100644 --- a/code/classes/SCDclass_mdswgsigarray1.m +++ b/code/classes/SCDclass_mdswgsigarray1.m @@ -38,6 +38,7 @@ classdef SCDclass_mdswgsigarray1 < SCDclass_mdswg obj.deststopidx=dstinterval(end); obj.classname=mfilename; + obj.marteclassname='MDSWgSigArray1'; end end diff --git a/code/classes/SCDclass_mdswgsigsingle.m b/code/classes/SCDclass_mdswgsigsingle.m index dd507106fc954c38741c1148d717852dd11e1f75..d204baafdcfaa017612ebf86a9336606e8d8e47e 100644 --- a/code/classes/SCDclass_mdswgsigsingle.m +++ b/code/classes/SCDclass_mdswgsigsingle.m @@ -25,6 +25,7 @@ classdef SCDclass_mdswgsigsingle < SCDclass_mdswg obj.destidx=obj.cparser.Results.destindex; obj.classname=mfilename; + obj.marteclassname='MDSWgSigSingle'; end end