EPICS Home

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  <20222023  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  <20222023  2024 
<== Date ==> <== Thread ==>

Subject: Implementing transform field
From: "Marco A. Barra Montevechi Filho via Tech-talk" <tech-talk at aps.anl.gov>
To: "tech-talk at aps.anl.gov" <tech-talk at aps.anl.gov>
Date: Thu, 4 Aug 2022 14:19:19 +0000
Good morning, all!
Im trying to implement the transform field in an IOC but im not getting the expected result:

i have an analog in record reading a bitmask value from a modbus register. Since the bitmask has 16 bits, i want to perform 16 bitwise operations to transform each bit in a binary in record thus transforming each 0 or 1 into a different string.
Since i dont want to need to create 16 calcout records, i thought i could use the transform record to perform all bitwise operations and push each one of them into a different binary in record. So after reading the documentation i tried to perform a calculation with transform just for testing:

record(ai, "${BL}:${H}:${EQ}:BitmaskGetter") {
    field(DESC, "Bitmask used by other pvs.")
    field(DTYP,"asynInt32")
    field(INP,"@asyn(SIP_EMODBUS_1_1_Rd_Status,0,1000)MODBUS_DATA")
    field(SCAN, "I/O Intr")
    field(FLNK, "${BL}:${H}:${EQ}:StatusSeparator")
}
record(transform, "${BL}:${H}:${EQ}:StatusSeparator"){
    field(DESC, "PV to process status bitmask")
    field(INPA, "${BL}:${H}:${EQ}:StatusBitmask")
    field(CLCA, "A+1")
    field(OUTA, "${BL}:${H}:${EQ}:EnableStatus")
    field(SCAN, "Passive")
}
record(bi, "${BL}:${H}:${EQ}:EnableStatus"){
    field(DESC, "Power supply status")
    field(ZNAM, "Stopped")
    field(ONAM, "Started")
}
So i expected that while caget in BitmaskGetter returns 0, caget into StatusSeparator.A would return 1 and EnableStatus would return "Started". It is not what happens: StatusSeparator returns 0 and EnableStatus returns "Stopped".

To test if the calculation is right, i tried substituting the transform record to a calc one:
record(ai, "${BL}:${H}:${EQ}:BitmaskGetter") {
    field(DESC, "Bitmask used by other pvs.")
    field(DTYP,"asynInt32")
    field(INP,"@asyn(SIP_EMODBUS_1_1_Rd_Status,0,1000)MODBUS_DATA")
    field(SCAN, "I/O Intr")
    field(FLNK, "test_calc")
}
record(calcout, "${BL}:${H}:${EQ}:StatusSeparator""){
    field(DESC, "PV to process status bitmask")
    field(INPA, "${BL}:${H}:${EQ}:StatusBitmask")
    field(CALC, "A+1")
    field(OUT, "${BL}:${H}:${EQ}:EnableStatus")
}
record(bi, "${BL}:${H}:${EQ}:EnableStatus"){
    field(DESC, "Power supply status")
    field(ZNAM, "Stopped")
    field(ONAM, "Started")
}
And now caget into StatusSeparator returns 1, StatusSeparator.A returns 0, BitmaskGetter returns 0 and EnableStatus returns "Started", as expected.

So i figure field OUTA from the transform record pushes the value in field A (which is zero) to the EnableStatus link. If this is the case, is there any way at all to push the result from CLCA to the EnableStatus link? Also,in which field is the result from CLCA field stored, if any?

Thanks in advance,

Marco

Aviso Legal: Esta mensagem e seus anexos podem conter informações confidenciais e/ou de uso restrito. Observe atentamente seu conteúdo e considere eventual consulta ao remetente antes de copiá-la, divulgá-la ou distribuí-la. Se você recebeu esta mensagem por engano, por favor avise o remetente e apague-a imediatamente.

Disclaimer: This email and its attachments may contain confidential and/or privileged information. Observe its content carefully and consider possible querying to the sender before copying, disclosing or distributing it. If you have received this email by mistake, please notify the sender and delete it immediately.


Replies:
Re: Implementing transform field Mooney, Tim M. via Tech-talk
Re: Implementing transform field Rolf Keitel via Tech-talk

Navigate by Date:
Prev: Re: ADSimDetector-R2-10 build errors with base-7.0.6.1 Mark Rivers via Tech-talk
Next: Re: Implementing transform field Mooney, Tim M. 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  <20222023  2024 
Navigate by Thread:
Prev: Re: ADSimDetector-R2-10 build errors with base-7.0.6.1 Mark Rivers via Tech-talk
Next: Re: Implementing transform field Mooney, Tim M. 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  <20222023  2024