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
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")
}
When I run the IOC, I get this error message:
Illegal choice PV: BS:AUTO 0.00000000
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.
Interestingly, this workaround does the job:
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")
}
So it looks like if a record "pulls" the result from scalcout it's OK, but scalcout doesn't "push" it correctly.
I could live with the workaround, but it's a bit of a hack...
Any thoughts on why this is not working?
Cheers,
Isabella
|