source: MML/trunk/mml/links/tango/getpvonline.m @ 4

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

Initial import--MML version from SOLEIL@2013

File size: 3.2 KB
Line 
1function [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
36t0 = clock;
37InputFlags = {};
38
39for 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
47end
48
49if length(varargin) < 1
50    error('Must have at least a TangoName input');
51end
52
53if ~exist('Field','var')
54    field = 'Monitor';
55else
56    field = Field;
57end
58                                                                                                                               
59DataType = 'Double';
60N = 0;
61NAvg = 1;
62AvgPeriod = 0;
63
64if 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
85end
86
87% Scalars
88N = N(1);
89NAvg = NAvg(1);
90AvgPeriod = AvgPeriod(1);
91
92% t must be a row vector
93t = t(:)';
94
95ErrorFlag = 0;
96
97ExtraTimedelay = etime(clock,t0);
98[AM, tout, DataTime, ErrorFlag] = readattribute(TangoNames, field, t - ExtraTimedelay, InputFlags{:});
99tout = tout + ExtraTimedelay;
100
101% Averaging
102if 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;
115end
116
117% format to a column vector
118AM = AM(:);
Note: See TracBrowser for help on using the repository browser.