I have tried to do some time analysis with ezcaIDL and CaIDL.
The ezcaIDL is using the ezca interface library, and CaIDL is
using the Lca interface library.
I found out that in general that the caget in ezcaIDL is
3 times slower than CaIDL.
I also found out that the startgroup and endgroup can not handle
do loop get correctly in ezcaIDL (example is attached at the end.)
If I use array with the 'do loop' it always return 0 (for double
type PVs) or null string for the requested PV array. If I tried
to redo array get for string type, ezcaIDL core dumped.
In CaIDL users can request the value as string type for a
requested array of PVs, this is particularly useful in storing
values for the mixed type of PV names within IDL. In ezcaIDL users can
not do that. Array get and put as string type is very
desirable.
Three cases have been studied, the real time used in seconds
are tabulated in the following table. The test runs are performed
on a sparc 20 workstation. In case 1 a caget is repeated 100
times on an AI record, in case 2 a caget is repeated 100 times
on a waveform record with float type with 4000 elements, and in
case 3 a string caget on an array of 372 PV names is requested.
CaIDL ezcaIDL
Case 1 1 sec 4 sec
Case 2 3 sec 9 sec
Case 3 2 sec (Null Returned)
======================
EXAMPLE OF ARRAY GET in ezcaIDL
======================
PRO array1,pvnames ; this will work in ezcaIDL
no = n_elements(pvnames)
castartgroup
st = caget(pvnames(0),val1)
st = caget(pvnames(1),val2)
st = caget(pvnames(2),val3)
print,caendgroup()
print,pvnames(0),val1
print,pvnames(1),val2
print,pvnames(2),val3
END
PRO realarray_ezca,pvnames ; this will not work in ezcaIDL
no = n_elements(pvnames)
val = make_array(no,/double)
castartgroup
for i=0,no-1 do begin
st = caget(pvnames(i),val(i))
end
print,caendgroup()
for i=0,no-1 do begin
print,pvnames(i),val(i)
end
END
The above two routines test result are shown below.
IDL> x = ['chademoai1','chademoai2','chademocalc3']
IDL> array1,x ; correct result returned
0
chademoai1 -17.000000
chademoai2 0.0000000
chademocalc3 -6.0000000
IDL> realarray_ezca,x ; wrong result returned by do loop
0
chademoai1 0.0000000
chademoai2 0.0000000
chademocalc3 0.0000000
IDL>
TO do same thing as above in CaIDL, a user can simply just enter
x = ['chademoai1','chademoai2','chademocalc3']
val = caget(x)
- Navigate by Date:
- Prev:
Re: Has anyone integrated the Heurikon "Nitro 60" Nick Rees
- Next:
Converting edd displays to edd2 Paul Martin
- Index:
1994
<1995>
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
- Navigate by Thread:
- Prev:
Re: Has anyone integrated the Heurikon "Nitro 60" Nick Rees
- Next:
Re: ezcaIDL vs CaIDL Mark Rivers
- Index:
1994
<1995>
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
|