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 | 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 |
<== Date ==> | <== Thread ==> |
---|
Subject: | Re: scalcout fails to write to bo - (partially?) solved |
From: | Isabella Rey <[email protected]> |
To: | "Mooney, Tim M." <[email protected]> |
Cc: | "[email protected]" <[email protected]> |
Date: | Mon, 18 May 2015 12:38:35 +0100 |
Hi Isabella,
There are three ways to get the behavior you want in this situation:
1. Have the calc _expression_ produce a string value that is one of the bo record's ZNAM or ONAM strings:
record(scalcout, "BS:CAMS_OK") {
field(SCAN, ".1 second")
field(CALC, "AA==CC ? 'ON' : 'OFF' ") <---<<
field(INAA, "CAM1:TRAFFIC_LIGHT")
field(OUT, "BS:AUTO PP")
field(OOPT, "When Zero")
field(CC, "OK")
}
2. Have the calc _expression_ explicitly produce a string value that is '0' or '1':
record(scalcout, "BS:CAMS_OK") {
field(SCAN, ".1 second")
field(CALC, "AA==CC ? '1' : '0' ") <---<<
field(INAA, "CAM1:TRAFFIC_LIGHT")
field(OUT, "BS:AUTO PP")
field(OOPT, "When Zero")
field(CC, "OK")
}
3. Make the scalcout record's conversion from number to string produce zero decimal digits:
record(scalcout, "BS:CAMS_OK") {
field(PREC, "0") <---<<
field(SCAN, ".1 second")
field(CALC, "AA==CC")
field(INAA, "CAM1:TRAFFIC_LIGHT")
field(OUT, "BS:AUTO PP")
field(OOPT, "When Zero")
field(CC, "OK")
}
Tim Mooney ([email protected]) (630)252-5417
Software Services Group (www.aps.anl.gov)
Advanced Photon Source, Argonne National Lab
From: [email protected] [[email protected]] on behalf of Isabella Rey [[email protected]]
Sent: Friday, May 15, 2015 11:21 AM
To: [email protected]
Subject: scalcout fails to write to bo
IsabellaCheers,So it looks like if a record "pulls" the result from scalcout it's OK, but scalcout doesn't "push" it correctly.Interestingly, this workaround does the job:After looking at other posts, I think the scalcout is trying to write a string in the bo, which generates the error. But my understanding of the scalcout documentation is that the conversion to int should be done automatically, and this should just work.When I run the IOC, I get this error message:Hi All,I have a scalcout record whose output should go into a bo record, as follows:
record(scalcout, "BS:CAMS_OK") {
field(SCAN, ".1 second")
field(CALC, "AA==CC")
field(INAA, "CAM1:TRAFFIC_LIGHT")
field(OUT, "BS:AUTO PP")
field(OOPT, "When Zero")
field(CC, "OK")
}
record(bo, "BS:AUTO") {
field(PINI, "YES")
field(VAL, "0")
field(ZNAM, "OFF")
field(ONAM, "ON")
}
Illegal choice PV: BS:AUTO 0.00000000
record(scalcout, "BS:CAMS_OK") {
field(CALC, "AA==CC")
field(INAA, "CAM1:TRAFFIC_LIGHT")
field(CC, "OK")
}
record(calcout, "BS:CAMS_OK_FAN") {
field(SCAN, ".1 second")
field(INPA, "BS:CAMS_OK PP")
field(OUT, "BS:AUTO PP")
field(OOPT, "When Zero")
}
record(bo, "BS:AUTO") {
field(PINI, "YES")
field(VAL, "0")
field(ZNAM, "OFF")
field(ONAM, "ON")
}
I could live with the workaround, but it's a bit of a hack...Any thoughts on why this is not working?