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: | 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.
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 |