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  2022  <20232024  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  <20232024 
<== Date ==> <== Thread ==>

Subject: Question on Accessing Data in Custom PV Structures
From: "Srinivas, Dhruv via Tech-talk" <tech-talk at aps.anl.gov>
To: "tech-talk at aps.anl.gov" <tech-talk at aps.anl.gov>
Date: Fri, 7 Jul 2023 21:03:19 +0000

To whom it may concern,

 

I’m attempting to create custom PVStructures which contain differing normative types. At the moment, I’ve created the below code in an IOC which creates a PV Structure with 2 NTScalars and 1 NTScalarArray.

 

record(ai, "rec:X") {

               field(VAL, "20")

               field(HIGH, "30")

               field(HSV, "MINOR")

               info(Q:group, {

                              "CustomDataStructure": {

                                             "X_Scalar": {

                                                            +channel:"VAL"

                                             }

                              }

               })

}

record(ai, "rec:Y") {

               field(VAL, "40") 

               info(Q:group, {

                              "CustomDataStructure": {

                                             "Y_Scalar": {

                                                            +type:"scalar",                  

                                                            +channel:"VAL",

                                                            +id:"MyTestingPVA2PVA",

                                             }

                              }

               })

}

 

record(aai, "input_this") {

               field(NELM, "4")

               field(FTVL, "INT64")

               field(INP, "[1,2,3,4]")

               info(Q:group, {

                              "CustomDataStructure": {

                                             "Z_Aray": {

                                                            +channel:"VAL"

                                             }

                              }

               })

 

}

 

At the moment, this does create the PV Structure, and I can access it through “pvget”. However I’m unsure if this is the right way to do this. Can someone with more experience with Epics v7 correct me if so? Also, I’m not sure how to go about accessing parts of “CustomDataStructure”. Namely how would I go about accessing the value for Y_Scalar through CustomDataStructure?

 

I’ve also copied the output of pvget below. I apologize for the lengthy post, but I thought it was best to provide as much context as possible.

 

  • pvget CustomDataStructure

CustomDataStructure MyTestingPVA2PVA

    structure record

        structure _options

            uint queueSize 0

            boolean atomic true

    epics:nt/NTScalar:1.0 X_Scalar

        double value 20

        alarm_t alarm

            int severity 0

            int status 2

            string message UDF

        structure timeStamp

            long secondsPastEpoch 631152000

            int nanoseconds 0

            int userTag 0

        structure display

            double limitLow 0

            double limitHigh 0

            string description

            string units

            int precision 0

            enum_t form (0) Default

                int index 0

                string[] choices [Default, String, Binary, Decimal, Hex, Exponential, Engineering]

        control_t control

            double limitLow 0

            double limitHigh 0

            double minStep 0

        valueAlarm_t valueAlarm

            boolean active false

            double lowAlarmLimit nan

            double lowWarningLimit nan

            double highWarningLimit 30

            double highAlarmLimit nan

            int lowAlarmSeverity 0

            int lowWarningSeverity 0

            int highWarningSeverity 0

            int highAlarmSeverity 0

            byte hysteresis 0

    epics:nt/NTScalar:1.0 Y_Scalar

        double value 40

        alarm_t alarm

            int severity 0

            int status 2

            string message UDF

        structure timeStamp

            long secondsPastEpoch 631152000

            int nanoseconds 0

            int userTag 0

        structure display

            double limitLow 0

            double limitHigh 0

            string description

            string units

            int precision 0

            enum_t form (0) Default

                int index 0

                string[] choices [Default, String, Binary, Decimal, Hex, Exponential, Engineering]

        control_t control

            double limitLow 0

            double limitHigh 0

            double minStep 0

        valueAlarm_t valueAlarm

            boolean active false

            double lowAlarmLimit nan

            double lowWarningLimit nan

            double highWarningLimit nan

            double highAlarmLimit nan

            int lowAlarmSeverity 0

            int lowWarningSeverity 0

            int highWarningSeverity 0

            int highAlarmSeverity 0

            byte hysteresis 0

    epics:nt/NTScalarArray:1.0 Z_Scalar

        long[] value [1,2,3,4]

        alarm_t alarm INVALID DRIVER UDF

            int severity 3

            int status 2

            string message UDF

        structure timeStamp

            long secondsPastEpoch 631152000

            int nanoseconds 0

            int userTag 0

        structure display

            double limitLow 0

            double limitHigh 0

            string description

            string units

            int precision 0

            enum_t form (0) Default

                int index 0

                string[] choices [Default, String, Binary, Decimal, Hex, Exponential, Engineering]

        control_t control

            double limitLow 0

            double limitHigh 0

            double minStep 0

        valueAlarm_t valueAlarm

            boolean active false

            double lowAlarmLimit nan

            double lowWarningLimit nan

            double highWarningLimit nan

            double highAlarmLimit nan

            int lowAlarmSeverity 0

            int lowWarningSeverity 0

            int highWarningSeverity 0

            int highAlarmSeverity 0

            byte hysteresis 0

 

Sincerely,

 

Dhruv Srinivas

srinivas1 at llnl.gov

 


Replies:
Re: Question on Accessing Data in Custom PV Structures Michael Davidsaver via Tech-talk

Navigate by Date:
Prev: Re: External: changing compiler versions Niko Kivel via Tech-talk
Next: Re: External: changing compiler versions Pierrick M Hanlet 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  <20232024 
Navigate by Thread:
Prev: Re: External: changing compiler versions Pierrick M Hanlet via Tech-talk
Next: Re: Question on Accessing Data in Custom PV Structures Michael Davidsaver 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  <20232024