Download presentation
Presentation is loading. Please wait.
Published byAllison Bryant Modified over 9 years ago
1
Data Types written by Gabriele Carcassi performed by Bob Dalesio based on ideas/requirements from Bob Dalesio, Kay Kasemir, Ralph Lange, James Roland, Guobao Shen, Greg White Oct 12 2010
2
Scope and requirements Java interfaces define client side data structures to represent data for control systems and high level applications pvData structure define data structure that represent information passed on the wire Compatibility between Epics 3 and 4 Java interfates as part of PVManager for convenience; no dependencies on PVManager nor PVManager depends on them
3
References and documentation Project available at http://pvmanager.sourceforge.net http://pvmanager.sourceforge.net JavaDocs (with actual documentation) at http://pvmanager.sourceforge.net/apidocs/index.htm l http://pvmanager.sourceforge.net/apidocs/index.htm l Package org.epics.pvmanager.data
4
Design guidelines All data types defined through interfaces Two types of interfaces Full type (e.g. VDouble, VMultiInt, VStatistics): they represent types that are actually implemented and can be asked; they all look like VXxx (where V is value) Partial type (e.g. Scalar, Alarm, Time): they represent common parts of data across different full types; they are defined separately so that we have one definition and so that clients can code to that partial interface Full types are made up as collections of partial types (mostly don’t define new methods)
5
VDouble Let’s start with the most common one, VDouble Scalar Alarm Time Display Let’s go through details of all interfaces
6
Scalar Defines: T getValue() Returns the value of some type.
7
Alarm Defines: AlarmSeverity getAlarmSeverity(); AlarmStatus getAlarmStatus(); AlarmSeverity: NONE, MINOR, MAJOR, INVALID, UNDEFINED (3 bits) AlarmStatus: DEVICE, DRIVER, RECORD, DB, CONF, UNDEFINED, CLIENT, NONE (4 bits) Gives the highest alarm and where it originates; first pass, generic information VExtendedAlarm is for more detailed information
8
Time Defines: TimeStamp getTimeStamp(); Integer getTimeUserTag(); boolean isValid(); TimeStamp is a nanosecond accuracy instant Investigating use of JSR-310 Date and Time API javax.time.Instant (64 bit second + 32 bit nanosecond) TimeUserTag can be used to identify fill patterns or anything your heart desires isValid() used to flag when the time source is “bad” (time was not set, returns always EPICS time 0, …)
9
Display Defines: Double getLower/UppterDisplayLimit(); Double getLower/UppterCtrlLimit(); Double getLower/UppterAlarmLimit(); Double getLower/UppterWarningLimit(); String getUnits(); NumberFormat getFormat(); Limits are always in double, regardless of the numeric type
10
VDouble VDouble is one type, and defines all those elements. One can still have partial implementations, that throw UnsupportedOperationException on the pieces that they do not implement or return null. We want to avoid 2^4 combinations
11
All scalar types VDouble – Scalar, Alarm, Time, Display VInt - Scalar, Alarm, Time, Display Explicitly no VFloat, VShort, VByte… Is VBoolean needed? VString - Scalar, Alarm, Time VEnum - Scalar, Enum, Alarm, Time
12
Enumeration Enum defines: List getLabels(); VEnum defines: int getIndex(); Should the index be byte, short or int?
13
Scalar types
14
Multi dimensional arrays VDoubleArray - Array, Alarm, Time, Display VFloatArray - Array, Alarm, Time, Display VIntArray - Array, Alarm, Time, Display VShortArray - Array, Alarm, Time, Display VByteArray - Array, Alarm, Time, Display (VBooleanArray ?) VStringArray - Array, Alarm, Time VEnumArray - Array, Enum, Alarm, Time
15
Array Defines: List getSizes(); The list of sizes for the multi dimensional array. One dimensional array can simply disregard this field. Difference between primitives and objects forces the array in the Full type. VDoubleArray: double[] getArray(); VIntArray: int[] getArray(); VEnumArray, VStringArray: String[] getArray(); - VEnumArray also defines int[] getIndexes(); …
16
Multi Channel arrays Multiple values coming from different channels (e.g. all X BPM readbacks) VMultiDouble: MultiScalar, Alarm, Time, Display VMultiInt: MultiScalar, Alarm, Time, Display VMultiString: MultiScalar, Alarm, Time VMultiEnum: MultiScalar, Enum, Alarm, Time (May need others VMultiDoubleArray,... ?)
17
MultiScalar Defines: List getValues(); List getNames(); Should labels for enums be the same across all values, or can they be different? (Note: VEnumArray already may cover the case for same metadata) Should metadata for numeric data be forced to the same? Or should each carry their own? (Note: numeric arrays may cover the case for same metadata)
18
Multi Channel Array
19
Statistics VStatistics: Statistics, Alarm, Time, Display Statistics define: Double getAverage(); Double getStdDev(); Double getMin(); Double getMax(); Integer getNSamples(); Does not define how it’s calculated (different weights)
20
VTable Defines: int getColumnCount(); int getRowCount(); Class getColumnType(int column); String getColumnName(int column); Object getColumnArray(int column); A table is a list of columns. A column is an array of elements of a particular type plus a name. Different column may have different size: rowCount is the maximum across all columns
21
VTable
22
VImage Defines: int getHeight(); int getWidth(); byte[] getData(); VTable getMetadata(); How do we describe encoding? Is VTable good enough for metadata? Is it too much? Do we need to divide metadata for each image from the metadata that does not change for each image? Should this have Time and Alarm?
23
VImage
24
VExtendedAlarm Defines: List getConditions(); String getMessage(); Condition defines: String getName(); AlarmSeverity getSeverity(); boolean isActive(); VExtendedAlarm gives you the full list of alarms for a device. It says which ones are active. It provides an error message Should each condition also have the AlarmStatus?
25
Status Many types are already operational in PVManager with Epics 3, simulated generation and aggregation Scalar and Array types can be directly generated by JCADataSource and simulated sources VTable used in client-side aggregation VImage used in clieant-side computation VMultiDouble used for synchronized array reconstruction
Similar presentations
© 2024 SlidePlayer.com. Inc.
All rights reserved.