EPICS Controls Argonne National Laboratory

Experimental Physics and
Industrial Control System

1994  1995  1996  1997  1998  1999  2000  2001  2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  2013  2014  2015  <20162017  2018  2019  2020  2021  2022  2023  2024  Index 1994  1995  1996  1997  1998  1999  2000  2001  2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  2013  2014  2015  <20162017  2018  2019  2020  2021  2022  2023  2024 
<== Date ==> <== Thread ==>

Subject: RE: std support countdown timer trigger PV and calcout record question
From: "Mooney, Tim M." <[email protected]>
To: Alireza Panna <[email protected]>, "[email protected]" <[email protected]>
Date: Fri, 12 Feb 2016 02:18:19 +0000
Hi Ali,

1. The reason this doesn't work is that StreamDevice doesn't provide device support for the busy record.  (It provides device support for many of the record types in base, and for the scalcout record type in synApps.)

The countDownTimer writes 1 to the trigger PV.  You probably want it to write 0.  (Better: you could modify the database so that it writes a user specified value.  Set DOPT to "Use OCAL", and set OCAL to the value or _expression_ you want.)

Also make sure that the link you write to trigger.OUT has the attribute PP or CA.  If you just specify
a PV name without an attribute, you get the default NPP, which writes to but does not process the record.

2. You could change this calc _expression_:
    B*1*10**(3)/A
to something like this:
    a<.01 ? 0 : B*1*10**(3)/A


Tim Mooney ([email protected]) (630)252-5417
Beamline Controls Group (www.aps.anl.gov)
Advanced Photon Source, Argonne National Lab


From: [email protected] [[email protected]] on behalf of Alireza Panna [[email protected]]
Sent: Thursday, February 11, 2016 7:37 PM
To: [email protected]
Subject: std support countdown timer trigger PV and calcout record question

Hello tech talkers,

1. I am trying to add the following functionality in my stream device x-ray apps:
Basically I want to kill the x-ray flux based on a timer (an auto shut off timer) if the x-ray is continuously firing upto the set time. I want to give the end user, the ability to set this time.

Currently the way I do this is using a sequencer code (see attached file), But I think it is better to use the countdownTimer records provided in stdApp. So I decided to test it out. The problem I encountered is that when I set the trigger PV  to the xray on/off record ($(P):ON), at the end of the countdown, the xray does not turn on or off. So as another test I tried to trigger the sim detector acquire PV (from area detector) using the countdownTimer records, and this worked. Looking at the record types, I see that the acquire PV for sim detector is a busy record. Now when I change the xray on/off to a busy record instead of bo, I get this error:

dbLoadRecords("db/devsri.db","P=VPFI:SRI:xray,PORT=L0,A=0")
Can't set "VPFI:SRI:xray:ON.DTYP" to "stream"
Error at or before ")" in file "db/devsri.db" line 4

Here's the relevant record:
record(busy, "$(P):ON") 
 {
    field(DESC, "X-ray on")
    field(DTYP, "stream")
    field(VAL, "0")
    field(ZNAM, "OFF")
    field(ONAM, "ON")
    field(OUT , "@devsri.proto setXR L0")
 }
(The record works fine when i set the type to bo)
So how do I get the countdownTimer to shut off the xray?

By the way I am fairly new to snl coding so any comments are much appreciated.

2. I have the following records in my records instance file (.db), Basically I get the kVp and power from the device and use it to calculate the tube current. Now when both the kVp and power rbv's are 0 (so 0/0), I would like to show the current as 0 (or NAN) to the end user. How do I do this in the database file. 
record(ai, "$(P):KVP_RBV")
{
    field(DESC, "Get peak kilovolt")
    field(DTYP, "stream")
    field(INP, "@devoxford.proto get_val(VM) $(PORT) $(A)")
  field(EGU, "kVp")
    field(PREC, "0")
    field(SCAN, ".1 second")
    field(FLNK, "$(P):CALC_UA")
}

record(ai, "$(P):WATT_RBV")
{
    field(DESC, "Get tube power")
    field(DTYP, "stream")
    field(INP, "@devoxford.proto get_val(WM) $(PORT) $(A)")
  field(EGU, "W")
    field(PREC, "0")
    field(SCAN, ".1 second")
    field(FLNK, "$(P):CALC_UA")
}

record(calcout, "$(P):CALC_UA") 
{
  field (INPA,"$(P):KVP_RBV")
  field (INPB,"$(P):WATT_RBV")
  field (CALC, "B*1*10**(3)/A")
  field (OUT, "$(P):UA_RBV.VAL")
  field (OOPT,"Every Time")

record(longin, "$(P):UA_RBV")
{
  field (DESC, "Get Tube Current")
  field (DTYP, "Soft Channel")
  field (INP, "$(P):CALC_UA.VAL")
  field (EGU, "UA")
  field (SCAN, ".1 second")
}

Thank you

Best,
Ali


References:
std support countdown timer trigger PV and calcout record question Alireza Panna

Navigate by Date:
Prev: std support countdown timer trigger PV and calcout record question Alireza Panna
Next: pilatus file format setting.. mujin park
Index: 1994  1995  1996  1997  1998  1999  2000  2001  2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  2013  2014  2015  <20162017  2018  2019  2020  2021  2022  2023  2024 
Navigate by Thread:
Prev: std support countdown timer trigger PV and calcout record question Alireza Panna
Next: pilatus file format setting.. mujin park
Index: 1994  1995  1996  1997  1998  1999  2000  2001  2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  2013  2014  2015  <20162017  2018  2019  2020  2021  2022  2023  2024 
ANJ, 15 Jul 2016 Valid HTML 4.01! · Home · News · About · Base · Modules · Extensions · Distributions · Download ·
· Search · EPICS V4 · IRMIS · Talk · Bugs · Documents · Links · Licensing ·