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 <2025> | 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 <2025> |
<== Date ==> | <== Thread ==> |
---|
Subject: | RE: Using AD plugins on asyn port |
From: | Abdalla Ahmad via Tech-talk <tech-talk at aps.anl.gov> |
To: | Mark Rivers <rivers at cars.uchicago.edu>, "Johnson, Andrew N." <anj at anl.gov>, "Pearson, Matthew" <pearsonmr at ornl.gov>, "tech-talk at aps.anl.gov" <Tech-talk at aps.anl.gov> |
Date: | Thu, 24 Jul 2025 11:26:47 +0000 |
Here are the outputs of the two commands: epics> dbpr NDSA:cam1:ArrayIn 2 ACKS: NO_ALARM ACKT: YES AMSG: APST: Always
ASG : BKPT: 00 BUSY: 0 DESC:
DISA: 0 DISP: 0 DISS: NO_ALARM DISV: 1
DTYP: asynFloat32ArrayOut EGU : EVNT:
FLNK: CONSTANT FTVL: FLOAT HOPR: 0
INP : INST_IO @asyn(NDSA,0,1)NDSA_ARRAY_DATA LCNT: 0
LOPR: 0 MPST: Always NAME: NDSA:cam1:ArrayIn
NAMSG: NELM: 200 NORD: 200 NSEV: NO_ALARM
NSTA: NO_ALARM PACT: 0 PHAS: 0 PINI: NO
PREC: 0 PRIO: LOW PUTF: 0 RARM: 0
RPRO: 0 SCAN: Passive SDIS: CONSTANT SDLY: -1
SEVR: NO_ALARM SIML: CONSTANT SIMM: NO SIMS: NO_ALARM
SIOL: CONSTANT SSCN: 65535 STAT: NO_ALARM
TIME: 2025-07-24 14:02:33.691146878 TPRO: 0 TSE : 0
TSEL: CONSTANT UDF : 0 UDFS: INVALID VAL : PTR (nil) $ caget NDSA:cam1:ArrayIn NDSA:cam1:ArrayIn 200 -74.6667 52.8155 -11.0769 -10.9714 -10.8679 52.6355 -11.2593 -11.156 -11.0545 -10.955
-10.8571 -74.1947 53.3333 -10.5739 52.9655 52.5128 -11.3898 -11.2941 -74.6667 -10.5785 52.9836 -10.9268 -10.8387 52.736 -74.6667 116.409 -11.5 -11.4109 52.1846 51.7863 -12.1212 115.008 -76.4179 -202.904 -10.8235 -74.2774 -73.7391 117.41 -74.0571 -9.98582 -9.91549
-73.3986 -9.33333 -9.26897 -72.7671 -72.2721 -8.21622 -71.7315 -7.68 -134.781 -70.3158 57.3072 -133.818 57.8064 -6.15385 121.07 -70.481 -6.44025 57.2 -6.75776 -6.71605 56.9325 -7.02439 -6.98182 -6.93976 -6.8982 -6.85714 56.8047 -70.7765 -6.73684 -6.69767 -6.65896
-6.62069 -70.2171 -6.18182 -6.14689 -6.11236 57.5642 57.2444 56.9282 -7.03297 -70.6448 -6.6087 -6.57297 -6.53763 -6.50267 -6.46809 -70.0952 -6.06316 -69.6963 58 -5.96891 -5.93814 -5.90769 -69.551 -5.52284 -5.49495 -69.1457 -68.8 0 -48 64 53.3333 45.7143 -16
-14.2222 -12.8 46.5455 -16 44.3077 41.1429 38.4 36 33.8824 -28.4444 33.6842 -28.8 -88.381 -84.3636 41.7391 -21.3333 -81.92 -17.2308 -16.5926 45.7143 -17.6552 -17.0667 45.4194 -18 -17.4545 -16.9412 107.886 -19.5556 -81.2973 -79.1579 -77.1282 -12.8 -12.4878
50.2857 -13.3953 49.4545 48.3556 -77.913 49.0213 -14.6667 -14.3673 -14.08 48.9412 48 47.0943 46.2222 -80.2909 46.8571 -16.8421 -16.5517 -16.2712 -16 47.2131 46.4516 -17.2698 -17 -16.7385 -16.4848 -79.2836 48 -15.7681 -15.5429 47.7746 -16 -78.9041 -77.8378
-13.6533 49.6842 -14.1299 49.2308 48.6076 -15.2 -15.0123 -14.8293 48.5783 -15.2381 48.1882 -15.6279 47.8161 47.2727 -16.5393 -16.3556 47.1209 46.6087 -17.2043 46.2979 -17.5158 -80.6667 46.8454 -16.9796 46.5455 -17.28 -80.4753 47.0588 -16.7767 After some investigation, I noticed that the compiler (gcc 8.5.0) is throwing
-Wsign-compare
on the unsigned int i
defined inside writeXXXArray.
I changed it to int and for some reason the IOC is now working, the array is acquiring but only one item. I opened ADBase.ui and I noticed the following:
Re-running the IOC, it started to throw “Floating-point exception” after fixing
-Wsign-compare
and the core dump is showing the same exact location. Best Regards, Abdalla Al-Dalleh Control Engineer SESAME
From: Mark Rivers <rivers at cars.uchicago.edu> Hi Abdalla, After your primary IOC should have sent waveforms to the NDSA driver, but before you start acquire in the NDSA driver please send the output of this command in the NDSA IOC: dbpr NDSA:cam1:ArrayIn 2 And from a Linux shell do: caget NDSA:cam1:ArrayIn Mark From: Abdalla Ahmad <Abdalla.Ahmad at sesame.org.jo> Hi all Thanks for the feedback, I created an IOC with NDDriverStdArrays support, attached is the startup file. The ArrayIn PV is receiving data from my waveform record through an intermediate ‘aao’ record in the attached nd.db database,
where the DOL field is set to a waveform of size 200 scanned at 1 second. The IOC boots but when I press acquire on the GUI, the IOC segfaults immediately. I added the gdb output of loading the core dump at the end of the startup file, it always crashes here:
https://github.com/areaDetector/NDDriverStdArrays/blob/master/NDDriverStdArraysApp/src/NDDriverStdArrays.cpp#L259 .
I used the IOC in the source code but I got the same segfault at the same location. Could it be related to the fact that the array size is 0? I also attached a screenshot of the NDDriverStdArrays UI file. Am I missing something? Best Regards, Abdalla Al-Dalleh Control Engineer SESAME From: Mark Rivers <rivers at cars.uchicago.edu> That’s a very useful addition. Whether it can be used with NDDriverStdArrays depends on the behavior of the input waveform record you are copying via the aao record. If it only posts monitors when the waveform is “done” then it could work. But in some
applications the input waveform may process many times with “intermediate results” before it is really done. One example would be a waveform digitizer with relatively slow sample rate. The waveform record may be processing multiple times during an acquisition
so the operator can see the waveform trace update before it is complete. Another example is an MCA spectrum which is acquiring for a relative long time. The waveform will update during acquisition so the operator can see the waveform amplitude grow. In
these cases you probably don’t want the intermediate values of the waveform to be sent to NDDriverStdArrays, you only want to write the final value. That is where a more sophisticated CA client may be needed. Mark From: Johnson, Andrew N. <anj at anl.gov> You can use an aao (array analog output) record to read array data from another record
using the DOL input link and write it through the OUT output link to another record. The DOL and OMSL fields were added to it in EPICS 7.0.7. - Andrew -- Complexity comes for free, Simplicity you have to work for. |