1 | function [AM, tout, DataTime, ErrorFlag] = getpvonline(TangoNames, Field, varargin); |
---|
2 | %GETPVONLINE - Get the online value |
---|
3 | % [AM, DataTime, ErrorFlag] = getpvonline(TangoNames, N, DataType); |
---|
4 | % |
---|
5 | % INPUTS |
---|
6 | % 1. TangoNames |
---|
7 | % 2. Field - 'Monitor' or 'Setpoint' |
---|
8 | % 3. N - Number of data points to return {Default: 1} |
---|
9 | % (only used for 'Vector', 'Waveform', and 'Matrix' DataTypes) |
---|
10 | % 4. DataType - 'double' or 'string' |
---|
11 | % 5. t - time vector of when to start a read [seconds] |
---|
12 | % 6. NAverage - Number of averages per data point {Default: 1} |
---|
13 | % 7. AvgSamplePeriod - Sample period when averaging [seconds] {Default: .1} |
---|
14 | % |
---|
15 | % OUTPUTS |
---|
16 | % 1. AM - Value |
---|
17 | % 2. tout - Local computer time on finish of data read |
---|
18 | % 3. DataTime = time (in seconds) since 00:00:00, Jan 1, 1970 |
---|
19 | % (seconds + nanoseconds * i) |
---|
20 | % 4. ErrorFlag (Presently not functional. All errors will cause a Matlab error.) |
---|
21 | % |
---|
22 | % EXAMPLES |
---|
23 | % 1. get one data with a 3 second delay |
---|
24 | % getpvonline('ANS-C01/AEsim/S1-CH/current',3) |
---|
25 | % 2. 5 averages witha periode of 1 second |
---|
26 | % getpvonline('ANS-C01/AEsim/S1-CH/current','Setpoint','Double',1,0,5,1) |
---|
27 | % getpvonline('ANS-C01/AEsim/S1-CH/current','Setpoint',0,5,1) |
---|
28 | % See also setpvonline |
---|
29 | |
---|
30 | % |
---|
31 | % Written for by Laurent S. Nadolski |
---|
32 | |
---|
33 | %% TODO groups |
---|
34 | |
---|
35 | % Function start time |
---|
36 | t0 = clock; |
---|
37 | InputFlags = {}; |
---|
38 | |
---|
39 | for i = length(varargin):-1:1 |
---|
40 | if strcmpi(varargin{i},'Retry') |
---|
41 | InputFlags = [InputFlags varargin(i)]; |
---|
42 | varargin(i) = []; |
---|
43 | elseif strcmpi(varargin{i},'NoRetry') |
---|
44 | InputFlags = [InputFlags varargin(i)]; |
---|
45 | varargin(i) = []; |
---|
46 | end |
---|
47 | end |
---|
48 | |
---|
49 | if length(varargin) < 1 |
---|
50 | error('Must have at least a TangoName input'); |
---|
51 | end |
---|
52 | |
---|
53 | if ~exist('Field','var') |
---|
54 | field = 'Monitor'; |
---|
55 | else |
---|
56 | field = Field; |
---|
57 | end |
---|
58 | |
---|
59 | DataType = 'Double'; |
---|
60 | N = 0; |
---|
61 | NAvg = 1; |
---|
62 | AvgPeriod = 0; |
---|
63 | |
---|
64 | if length(varargin) >= 1 |
---|
65 | if ischar(varargin{1}) |
---|
66 | DataType = varargin{1}; |
---|
67 | varargin(1) = []; |
---|
68 | if length(varargin) >= 1 |
---|
69 | N = varargin{1}; |
---|
70 | varargin(1) = []; |
---|
71 | end |
---|
72 | end |
---|
73 | if length(varargin) >= 1 |
---|
74 | t = varargin{1}; |
---|
75 | if length(varargin) >= 2 |
---|
76 | NAvg = varargin{2}; |
---|
77 | if length(varargin) >= 3 |
---|
78 | AvgPeriod = varargin{3}; |
---|
79 | if length(varargin) >= 4 |
---|
80 | FreshDataFlag = varargin{4}; |
---|
81 | end |
---|
82 | end |
---|
83 | end |
---|
84 | end |
---|
85 | end |
---|
86 | |
---|
87 | % Scalars |
---|
88 | N = N(1); |
---|
89 | NAvg = NAvg(1); |
---|
90 | AvgPeriod = AvgPeriod(1); |
---|
91 | |
---|
92 | % t must be a row vector |
---|
93 | t = t(:)'; |
---|
94 | |
---|
95 | ErrorFlag = 0; |
---|
96 | |
---|
97 | ExtraTimedelay = etime(clock,t0); |
---|
98 | [AM, tout, DataTime, ErrorFlag] = readattribute(TangoNames, field, t - ExtraTimedelay, InputFlags{:}); |
---|
99 | tout = tout + ExtraTimedelay; |
---|
100 | |
---|
101 | % Averaging |
---|
102 | if NAvg > 1 |
---|
103 | toutall = tout; |
---|
104 | AMavg = AM; |
---|
105 | for k = 2:NAvg, |
---|
106 | % Warning do no take into account time for getting the date |
---|
107 | tdelay = AvgPeriod-tout |
---|
108 | [AM, tout, DataTime, ErrorFlag] = readattribute(TangoNames, field, tdelay, InputFlags{:}); |
---|
109 | toutall = toutall + tout |
---|
110 | tout = tout - tdelay; |
---|
111 | AMavg = AMavg + AM; |
---|
112 | end |
---|
113 | AM = AMavg / NAvg; |
---|
114 | tout = toutall; |
---|
115 | end |
---|
116 | |
---|
117 | % format to a column vector |
---|
118 | AM = AM(:); |
---|