source: MML/trunk/machine/SOLEIL/common/archiving/arread.m @ 4

Last change on this file since 4 was 4, checked in by zhangj, 10 years ago

Initial import--MML version from SOLEIL@2013

File size: 6.6 KB
Line 
1function Data = arread(varargin)
2%ARREAD - Read data from archiving database
3%
4%  INPUTS
5%  1. FAMILY attribute name or family name
6%      If family, device list can be given, else [] (All) is assumed
7%  2. starting date {now - 2 hours}
8%  3. ending date {now}
9%  4. {'HDB'} or 'TDB' : select database
10%
11%  OUPUTS
12%  1. Data - output structure
13%
14%  EXAMPLES
15%  1. arread('CH',1);
16%  2. arread('CH');
17%  3. arread('LT1/AE/CH.1/current')
18%  4. arread('LT1/VI/PI55.1/pressure', '02-07-2005 03:21:02', '02-07-2005 20:21:00')
19%  5. For all PI
20%     arread('PI', [], '02-07-2005 03:21:02', '02-07-2005 20:21:00')
21%
22%  See Also arplot
23
24%
25% Written by Laurent S. Nadolski
26
27% Default parameters
28
29HourAverageFlag = 0;
30MinuteAverageFlag = 0;
31SecondAverageFlag = 0;
32
33% Look for hdbextractor name in Tango Static DB
34extractor = cell2mat(tango_get_db_property('archivage','hdbextractor'));
35database  = 'HDB';
36
37Field = 'Monitor';
38
39% WARNING this is the new format for date
40strformat = 'dd-mm-yyyy HH:MM:SS';
41
42date1 = datestr(now - 0.0417*12, strformat); % now - 1 hours
43date2 = datestr(now, strformat);
44
45% Look if 'struct' or 'numeric' in on the input line
46InputFlags = {};
47for i = length(varargin):-1:1
48    if isstruct(varargin{i})
49        % Ignore structures
50    elseif iscell(varargin{i})
51        % Ignore cells
52    elseif strcmpi(varargin{i},'HDB')
53        extractor = cell2mat(tango_get_db_property('archivage','hdbextractor'));
54        database = varargin{i};
55        varargin(i) = [];
56    elseif strcmpi(varargin{i},'TDB')
57        extractor = cell2mat(tango_get_db_property('archivage','tdbextractor'));
58        database = varargin{i};
59        varargin(i) = [];
60    elseif strcmpi(varargin{i},'Hour')
61        HourAverageFlag = 1;
62        varargin(i) = [];
63    elseif strcmpi(varargin{i},'Minute')
64        MinuteAverageFlag = 1;
65        varargin(i) = [];
66    elseif strcmpi(varargin{i},'Second')
67        SecondAverageFlag = 1;
68        varargin(i) = [];
69    elseif strcmpi(varargin{i},'NoAverage')
70        HourAverageFlag = 0;
71        MinuteAverageFlag = 0;
72        SecondAverageFlag = 0;
73        varargin(i) = [];
74    elseif strcmpi(varargin{i},'Monitor')
75        Field = 'Monitor';
76        varargin(i) = [];
77    elseif strcmpi(varargin{i},'Setpoint')
78        Field = 'Setpoint';
79        varargin(i) = [];
80    elseif strcmpi(varargin{i},'RMS')
81        Field = 'RMS';
82        varargin(i) = [];
83    elseif strcmpi(varargin{i},'Struct')
84        StructOutputFlag = 1;
85        varargin(i) = [];
86    elseif strcmpi(varargin{i},'Physics')
87        UnitsFlag = 'Physics';
88        InputFlags = [InputFlags varargin(i)];
89        varargin(i) = [];
90    elseif strcmpi(varargin{i},'hardware')
91        UnitsFlag = 'Hardware';
92        InputFlags = [InputFlags varargin(i)];
93        varargin(i) = [];
94    end
95end
96
97%%%%%%%%%%%%%%
98% INPUT PARSER
99%%%%%%%%%%%%%%
100
101Family = varargin{1};   
102%% check if family is valid and return it in AO
103[FamilyIndex, AO] = isfamily(Family);
104
105if FamilyIndex
106    %%%%%%%%%%%%%%%%
107    % FAMILY INPUT %
108    %%%%%%%%%%%%%%%%
109   
110    % DeviceList
111    if length(varargin) > 1
112        DeviceList = varargin{2};
113    else
114        DeviceList = family2dev(Family);     % Default behavior comes from family2dev
115    end
116
117    %Convertion to TANGO name
118    Family = family2tango(Family,Field,DeviceList);
119
120    if length(varargin) > 2
121        % starting date
122        date1 = varargin{3};
123        if length(varargin) > 2
124            %ending date
125            date2 = varargin{4};
126        end
127    end
128
129elseif isattribute(Family)
130    %%%%%%%%%%%%%%%%%%%%%%
131    % TANGO NAME INPUT %
132    %%%%%%%%%%%%%%%%%%%%%%
133    if length(varargin) > 1
134        % starting date
135        date1 = varargin{2};
136        if length(varargin) > 2
137            %ending date
138            date2 = varargin{3};
139        end
140    end
141else
142    error('%s is not a valid name\n',Family);
143end
144
145%% For Bug in archiving
146%attr_name = strcat('//ganymede.synchrotron-soleil.fr:20000/', Family);
147attr_name = Family;
148
149if ~iscell(attr_name)
150    attr_name = {attr_name};
151end
152
153
154% dvalue : valeur
155% svalue : date en format type 2004-12-05 16:08:07.969
156% Import toutes les valeurs archivees entre deux dates
157if HourAverageFlag
158    %cmdName = 'GetAttDataBetweenDates';
159    cmdName = 'GetAttDataBetweenDatesSampling';
160    OPTION = 'HOUR';
161elseif MinuteAverageFlag
162    %cmdName = 'GetAttDataBetweenDates';
163    cmdName = 'GetAttDataBetweenDatesSampling';
164    OPTION = 'MINUTE';
165elseif SecondAverageFlag
166    %cmdName = 'GetAttDataBetweenDates';
167    cmdName = 'GetAttDataBetweenDatesSampling';
168    OPTION = 'SECOND';
169else
170    cmdName = 'GetAttDataBetweenDatesSampling';
171    OPTION = 'ALL';
172end
173
174for ik = 1:length(attr_name)
175    argin = {attr_name{ik}, date1, date2, OPTION};
176    % get data for one attribute
177    %Data.ardata(ik) = tango_command_inout2(extractor,'GetAttDataBetweenDates',argin);   
178    rep{ik} = tango_command_inout2(extractor,cmdName, argin);
179end
180
181% Refresh attribute list on extractor
182tango_close_device(extractor);
183tango_open_device(extractor);
184tango_set_timeout(extractor,30000);
185
186for ik = 1:length(attr_name)
187    if rep{ik}.lvalue ~= 0
188        %sdata = tango_attribute_history(extractor,rep{ik}.svalue{1,:},double(rep{ik}.lvalue));
189        if ~iscell(rep{ik}.svalue{1}), rep{ik}.svalue{1} = {rep{ik}.svalue{1}}; end
190        sdata = tango_attribute_history(extractor,rep{ik}.svalue{1}{:},double(rep{ik}.lvalue));
191        if tango_error == -1
192            tango_print_error_stack;
193        end
194        if sdata(1).m == 1
195            for kk = 1:rep{ik}.lvalue,
196                Data.ardata(ik).dvalue(kk) = sdata(kk).value;
197                Data.ardata(ik).svalue(kk) = sdata(kk).time;
198            end
199        else % for vectors
200            for kk = 1:rep{ik}.lvalue,
201                Data.ardata(ik).dvalue(kk,:) = sdata(kk).value;
202                Data.ardata(ik).svalue(kk,:) = sdata(kk).time;
203            end
204        end           
205       Data.ardata(ik).svalue = tango_shift_time(Data.ardata(ik).svalue);
206       tango_command_inout2(extractor,'RemoveDynamicAttribute',rep{ik}.svalue{1}{:});
207    else
208        disp([mfilename ': No Data for ' attr_name{ik}]);
209    end
210   
211    %tango_command_inout2(extractor,'RemoveDynamicAttribute',rep{ik}.svalue{2});
212    % If R/W attribute, ardata.dvalue = [readvalue setvalue]
213    % first shot : just keep readback data
214%     len = length(Data.ardata(ik).svalue);
215%     if len ~= length(Data.ardata(ik).dvalue)
216%         Data.ardata(ik).dvalue = Data.ardata(ik).dvalue(1:len);
217%     end
218end
219
220Data.TangoNames = attr_name;
221Data.start = date1;
222Data.end   = date2;
223Data.database = database;
224
225if  ~isfield(Data,'ardata') ||  (~isstruct(Data.ardata) && Data == -1) || isempty(Data.ardata(1).dvalue)
226    disp([mfilename 'No data available']);
227    Data = -1;
228    return;
229end
Note: See TracBrowser for help on using the repository browser.