From ad456b47ad1934169d34bff3ca4e155971f445fa Mon Sep 17 00:00:00 2001 From: galperti <cristian.galperti@epfl.ch> Date: Thu, 23 Jul 2020 12:58:17 +0200 Subject: [PATCH] prev ethcat data (only int16) actualization added --- code/classes/SCDclass_taskmdsloadprevETHCAT.m | 133 ++++++++++++++++++ 1 file changed, 133 insertions(+) create mode 100644 code/classes/SCDclass_taskmdsloadprevETHCAT.m diff --git a/code/classes/SCDclass_taskmdsloadprevETHCAT.m b/code/classes/SCDclass_taskmdsloadprevETHCAT.m new file mode 100644 index 0000000..e9fbf68 --- /dev/null +++ b/code/classes/SCDclass_taskmdsloadprevETHCAT.m @@ -0,0 +1,133 @@ +classdef SCDclass_taskmdsloadprevETHCAT < SCDclass_task + % This is a special class which loads previous + % values of the EtherCAT1 real-time network + properties + modelbus + node + workspacedatabasestructure + end + + properties(Access=private) + logdecimate + nint16 + nfloat32 % not yet implemented + end + + methods + + function obj=SCDclass_taskmdsloadprevETHCAT(id, varargin) + obj@SCDclass_task(id, varargin); + obj.cparser.addRequired('modelbus',@(x) ischar(x)); + obj.cparser.addParameter('node', 0, @(x) (isnumeric(x) && ((x==1) || x==2))); + obj=obj.parseconstructorcommon(id, varargin); + obj.modelbus=obj.cparser.Results.modelbus; + obj.node=obj.cparser.Results.node; + switch(obj.node) + case 2 + obj.workspacedatabasestructure='SCDsimdata.SCDnode02simdata.ethercat'; + otherwise + error('SCDclass_taskmdsloadprevETHCAT:constructor','Class not implemented for node %d',obj.node); + %obj.workspacedatabasestructure=''; + end + obj.classname=mfilename; + obj.logdecimate=2; + obj.nint16=20; + obj.nfloat32=10; % not yet implemented + end + + function init(obj, shot) + mdsconnect(obj.mdsserver); + mdsopen(obj.mdstree, shot); + + %try + switch(obj.node) + case 2 + obj.actualizeNode(shot); + end + %catch + % fprintf('\n'); + % warning('SCDclass_taskmdsloadprevETHCAT:init','Error initializing ETHCAT bus for node %d.',obj.node); + %end + end + + function [obj, value] = getdata(obj,shot) + switch(obj.node) + case 2 + [~,value]=obj.getdataNodeETHCAT1(shot); + end + end + + function printinfo(obj) + obj.printinfocommon; + fprintf(' Init model bus: %s, node: %d, ws base struct: %s\n',obj.modelbus, obj.node, obj.workspacedatabasestructure); + end + + + function entrystring = genMARTe2entry(obj, shot) + % TODO: this is a workaround which works by chance, need a more accurate fix + entrystring = ''; + end + + end + + methods(Access = private) + + function obj = actualizeNode(obj, shot) + dd=SCDconf_getdatadict(obj.datadictionary); + adcbus=dd.getEntry(obj.modelbus).getValue; + [~,data]=obj.getdata(shot); + T=timeseries; + if obj.verbose==1 + fprintf('Actualizing data for bus: ''%s'' (%s, shot %d) 0%% ', obj.modelbus, obj.classname, shot); + end + for ii=1:obj.nint16 + T.Time=data.Time; + T.Data=int16(data.Data(:,ii)); + assignin('base','temp',T); + assigncmd=sprintf('%s.%s=temp;',obj.workspacedatabasestructure, adcbus.Elements(ii).Name); + evalin('base',assigncmd); + if obj.verbose==1 && mod(ii,obj.logdecimate)==0 + fprintf('%.0f%% ', ii/obj.nint16*100); + end + end + evalin('base','clear temp'); + if obj.verbose==1 + fprintf('100%% \n'); + end + end + + +%% +% Node 02 loading functions + + function [obj, value] = getdataNodeETHCAT1(obj, shot) + mdsnodename='node02'; + mdsopen('rtc',shot); + T=timeseries; + timebase=mdsvalue(['dim_of(\top.' mdsnodename '.ethcat1.in.int16_001)']); + d_time = double(mdsvalueraw(['\top.' mdsnodename '.params:d_time']))*1.0e-6; + %timebase = round(timebase.*1/d_time)*d_time-d_time/2; + timebase = round(timebase.*1/d_time)*d_time-d_time/100; + T.Time=timebase; + T.Data=zeros(numel(timebase),obj.nint16); + datamatrix=zeros(numel(timebase),obj.nint16); + if obj.verbose==1 + fprintf('Getting data for bus: ''%s'' (%s, shot %d) 0%% ', obj.modelbus, obj.classname, shot); + end + for ii=1:obj.nint16 + channelstr=sprintf(['\\top.' mdsnodename '.ethcat1.in.int16_%03d.raw'],ii); + datamatrix(:,ii)=int16(mdsvalueraw(channelstr)); + if obj.verbose==1 && mod(ii,obj.logdecimate)==0 + fprintf('%.0f%% ', ii/192*100); + end + end + T.Data=datamatrix; % this speeds up a lot the loading + value=T; + if obj.verbose==1 + fprintf('100%% \n'); + end + end + + end +end + -- GitLab