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  2016  2017  2018  2019  2020  2021  2022  2023  2024  2025  <2026 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  <2026
<== Date ==> <== Thread ==>

Subject: Re: scalcout EPICS Record Error
From: Mark Rivers via Tech-talk <tech-talk at aps.anl.gov>
To: "tech-talk at aps.anl.gov" <tech-talk at aps.anl.gov>, Varuna Crishan Meddage <vmeddage at fnal.gov>
Date: Thu, 19 Mar 2026 22:56:09 +0000
Hi Varuna,

You should look at the scalcout record documentation here:

Your calc _expression_ is this:
 field(CALC, "IF(STRLEN(A)==0, 0, VAL(A))") 

That syntax is incorrect.

I think the CALC field should be this, but I have not tested it.

 field(CALC, "LEN(A)==0 ? 0 : DBL(A)") 

Mark


From: Tech-talk <tech-talk-bounces at aps.anl.gov> on behalf of Varuna Crishan Meddage via Tech-talk <tech-talk at aps.anl.gov>
Sent: Thursday, March 19, 2026 5:28 PM
To: tech-talk at aps.anl.gov <tech-talk at aps.anl.gov>
Subject: scalcout EPICS Record Error
 
Hi,

I have following record instance defined in my .db file. 

====================================================================
record(stringin, "$(acc):$(sys)_$(group):nsChannel$(channel_id)Vrms")
{
  field(SCAN, "10 second")
  field(DTYP, "Snmp")
  field(INP, "@$(HOST) $(COMMUNITY) $(W)::nsChannel$(channel_id)Vrms.0 STRING: 100")
  field(DESC, "Channel $(channel_id) Vrms")
  field(FLNK, "$(acc):$(sys)_$(group):calc_nsChannel$(channel_id)Vrms")
}
=========================================================================

I want to convert the string value of above record  to a numerical value using a scalcout EPICS record. For that purpose, I defined the following scalcout record which caused the runtime errors as pasted below. (Here I want to output 0 if string value is empty  and numerical value otherwise)

========================= SCALCOUT RECORD =============================

record(scalcout, "$(acc):$(sys)_$(group):calc_nsChannel$(channel_id)Vrms")
{
  field(INPA, "$(acc):$(sys)_$(group):nsChannel$(channel_id)Vrms PP")
  field(CALC, "IF(STRLEN(A)==0, 0, VAL(A))") 
  field(PREC, "2")
  field(EGU, "V")
  field(DESC, "Channel $(channel_id) Vrms")
}
=======================================================================

==================================== ERROR MESSAGE ===============================

recGblRecordError: scalcout:init_record Error (514,3) PV: PIP2:TIME_CTRL_GPS:calc_nsChannel1Vrms
recGblRecordError: scalcout:init_record Error (514,3) PV: PIP2:TIME_CTRL_GPS:calc_nsChannel2Vrms
recGblRecordError: scalcout:init_record Error (514,3) PV: PIP2:TIME_CTRL_GPS:calc_nsChannel3Vrms
recGblRecordError: scalcout:init_record Error (514,3) PV: PIP2:TIME_CTRL_GPS:calc_nsChannel4Vrms
recGblRecordError: scalcout:init_record Error (514,3) PV: PIP2:TIME_CTRL_GPS:calc_nsChannel5Vrms
recGblRecordError: scalcout:init_record Error (514,3) PV: PIP2:TIME_CTRL_GPS:calc_nsChannel6Vrms
recGblRecordError: scalcout:init_record Error (514,3) PV: PIP2:TIME_CTRL_GPS:calc_nsChannel7Vrms
recGblRecordError: scalcout:init_record Error (514,3) PV: PIP2:TIME_CTRL_GPS:calc_nsChannel8Vrms
recGblRecordError: scalcout:init_record Error (514,3) PV: PIP2:TIME_CTRL_GPS:calc_nsChannel9Vrms
recGblRecordError: scalcout:init_record Error (514,3) PV: PIP2:TIME_CTRL_GPS:calc_nsChannel10Vrms
recGblRecordError: scalcout:init_record Error (514,3) PV: PIP2:TIME_CTRL_GPS:calc_nsChannel11Vrms
recGblRecordError: scalcout:init_record Error (514,3) PV: PIP2:TIME_CTRL_GPS:calc_nsChannel12Vrms
recGblRecordError: scalcout:init_record Error (514,3) PV: PIP2:TIME_CTRL_GPS:calc_nsChannel13Vrms
recGblRecordError: scalcout:init_record Error (514,3) PV: PIP2:TIME_CTRL_GPS:calc_nsChannel14Vrms
recGblRecordError: scalcout:init_record Error (514,3) PV: PIP2:TIME_CTRL_GPS:calc_nsChannel15Vrms
recGblRecordError: scalcout:init_record Error (514,3) PV: PIP2:TIME_CTRL_GPS:calc_nsChannel16Vrms
recGblRecordError: scalcout:init_record Error (514,3) PV: PIP2:TIME_CTRL_GPS:calc_nsChannel17Vrms
recGblRecordError: scalcout:init_record Error (514,3) PV: PIP2:TIME_CTRL_GPS:calc_nsChannel18Vrms
recGblRecordError: scalcout:init_record Error (514,3) PV: PIP2:TIME_CTRL_GPS:calc_nsChannel19Vrms
recGblRecordError: scalcout:init_record Error (514,3) PV: PIP2:TIME_CTRL_GPS:calc_nsChannel20Vrms
recGblRecordError: scalcout:init_record Error (514,3) PV: PIP2:TIME_CTRL_GPS:calc_nsChannel21Vrms
recGblRecordError: scalcout:init_record Error (514,3) PV: PIP2:TIME_CTRL_GPS:calc_nsChannel22Vrms
recGblRecordError: scalcout:init_record Error (514,3) PV: PIP2:TIME_CTRL_GPS:calc_nsChannel23Vrms
recGblRecordError: scalcout:init_record Error (514,3) PV: PIP2:TIME_CTRL_GPS:calc_nsChannel24Vrms


PIP2:TIME_CTRL_GPS:calc_nsChannel1Vrms DSET write does not exist
PIP2:TIME_CTRL_GPS:calc_nsChannel2Vrms DSET write does not exist
PIP2:TIME_CTRL_GPS:calc_nsChannel3Vrms DSET write does not exist
PIP2:TIME_CTRL_GPS:calc_nsChannel4Vrms DSET write does not exist
PIP2:TIME_CTRL_GPS:calc_nsChannel5Vrms DSET write does not exist
PIP2:TIME_CTRL_GPS:calc_nsChannel6Vrms DSET write does not exist
PIP2:TIME_CTRL_GPS:calc_nsChannel7Vrms DSET write does not exist
PIP2:TIME_CTRL_GPS:calc_nsChannel8Vrms DSET write does not exist
PIP2:TIME_CTRL_GPS:calc_nsChannel9Vrms DSET write does not exist
PIP2:TIME_CTRL_GPS:calc_nsChannel10Vrms DSET write does not exist
PIP2:TIME_CTRL_GPS:calc_nsChannel11Vrms DSET write does not exist
PIP2:TIME_CTRL_GPS:calc_nsChannel12Vrms DSET write does not exist
PIP2:TIME_CTRL_GPS:calc_nsChannel13Vrms DSET write does not exist
PIP2:TIME_CTRL_GPS:calc_nsChannel14Vrms DSET write does not exist
PIP2:TIME_CTRL_GPS:calc_nsChannel15Vrms DSET write does not exist
PIP2:TIME_CTRL_GPS:calc_nsChannel16Vrms DSET write does not exist
PIP2:TIME_CTRL_GPS:calc_nsChannel17Vrms DSET write does not exist
PIP2:TIME_CTRL_GPS:calc_nsChannel18Vrms DSET write does not exist
PIP2:TIME_CTRL_GPS:calc_nsChannel19Vrms DSET write does not exist
PIP2:TIME_CTRL_GPS:calc_nsChannel20Vrms DSET write does not exist
PIP2:TIME_CTRL_GPS:calc_nsChannel21Vrms DSET write does not exist
PIP2:TIME_CTRL_GPS:calc_nsChannel22Vrms DSET write does not exist
PIP2:TIME_CTRL_GPS:calc_nsChannel23Vrms DSET write does not exist
PIP2:TIME_CTRL_GPS:calc_nsChannel24Vrms DSET write does not exist
==================================================================================

Any solutions solve this problem ?

Thanks
Varuna Meddage

Replies:
Re: scalcout EPICS Record Error Mark Rivers via Tech-talk
References:
scalcout EPICS Record Error Varuna Crishan Meddage via Tech-talk

Navigate by Date:
Prev: scalcout EPICS Record Error Varuna Crishan Meddage via Tech-talk
Next: Re: scalcout EPICS Record Error Mark Rivers via Tech-talk
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  <2026
Navigate by Thread:
Prev: scalcout EPICS Record Error Varuna Crishan Meddage via Tech-talk
Next: Re: scalcout EPICS Record Error Mark Rivers via Tech-talk
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  <2026
ANJ, 19 Mar 2026 · Home · News · About · Talk · Base · Modules · Extensions ·
· Distributions · Download · Documents · Links · Licensing ·