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 <mailto:srinivas1 at llnl.gov>