classdef SCDclass_task < matlab.mixin.Heterogeneous % Superclass for general purposes init and term tasks % the superclass matlab.mixin.Heterogeneous allows % bilding of lists of mixed kind parameters in the % expcode configuration (and later in C++ code) properties (Access = protected) id % Task identification datadictionary % data dictionary hosting the parameter, if empty base workspace modelname % name of the Simulink model using the parameter classname % class name for logging % Properties for a MDS+ related task (not necessarly used) mdsserver % MDS+ server for a MDS+ related task mdstree % MDS+ tree for a MDS+ related task tdiexprmodel % TDI expression to retrieve data when invoked with -1 shot tdiexprshot % TDI expression to retrieve data when invoked with a give shotno, if empty the -1 is used tdiexprused % TDI expression actually used value % value from MDS+ getcommand % full command for getting the value (callable by matlab eval) end properties verbose % Verbosity of the class end methods %function obj=SCDclass_mdsparam(srcsrv, srctree, srctdimodel, srctdishot, modelname, destparam) function obj=SCDclass_task(id,varargin) % MDS source and model destination constructor p=inputParser; addRequired(p,'id',@(x) ischar(x)); addParameter(p,'srcsrv','tcvdata',@(x) ischar(x)); addParameter(p,'srctree','tcv_shot',@(x) ischar(x)); addParameter(p,'srctdimodel','',@(x) ischar(x)); addParameter(p,'srctdishot','',@(x) ischar(x)); addParameter(p,'modelname','',@(x) ischar(x)); addParameter(p,'datadictname','',@(x) ischar(x)); parse(p,id,varargin{:}{:}); obj.id=p.Results.id; obj.mdsserver=p.Results.srcsrv; obj.mdstree=p.Results.srctree; obj.tdiexprmodel=p.Results.srctdimodel; if isempty(p.Results.srctdishot) obj.tdiexprshot=p.Results.srctdimodel; else obj.tdiexprshot=p.Results.srctdishot; end obj.modelname=p.Results.modelname; obj.datadictionary=p.Results.datadictname; obj.verbose=1; end end % Not abstract methods common to all child classes methods function mdsconnect(obj, shot) mdsconnect(obj.mdsserver); s=mdsopen(obj.mdstree, shot); str=sprintf('SCDclass_task (%s), failed opening MDS+ tree', obj.id); assert(s==shot, str); end function obj=actualizegetcmd(obj, cmdstring, shot) if(shot==-1) obj.getcommand=sprintf(cmdstring, obj.tdiexprmodel); obj.tdiexprused=obj.tdiexprmodel; else obj.getcommand=sprintf(cmdstring, obj.tdiexprshot); obj.tdiexprused=obj.tdiexprshot; end end function printinfocommon(obj) fprintf('%s (class %s):\n', obj.id, obj.classname); fprintf(' Simulink model: ''%s'', data dictionary: ''%s''\n', obj.modelname, obj.datadictionary); fprintf(' MDS+ source server: ''%s'', Tree: ''%s''\n', obj.mdsserver, obj.mdstree); fprintf(' MDS+ TDI expressions, model: ''%s''', obj.tdiexprmodel); if(strcmp(obj.tdiexprmodel, obj.tdiexprshot)) fprintf(', shot: same\n'); else fprintf(', shot: ''%s''\n', obj.tdiexprshot); end end function out = getid(obj) out = obj.id; end function obj = setmodelname(obj, modelname) if(isempty(obj.modelname)) obj.modelname = modelname; end end function obj = setdatadictionary(obj, ddname) if(isempty(obj.datadictionary)) obj.datadictionary = ddname; end end end % Abstract method actually implemented by child classes methods (Abstract) % Polymorphic inits init(obj, shot) % Polymorphic terms %term(obj, shot) % Gets data from mds, mds connection is assumed already estabilished % and tree opened [obj, value] = getdata(obj, shot) % Generate C++ code %gencode(obj) % Prints the parameter info summary printinfo(obj) end end