ADAPT - LoggedData / OperationData / Section / Meter Discussion

Note: The integer IDs below correspond to the ReferenceID element in CompoundIdentifiers

Note: This list supersedes, as of 20150129, the WorkItemOperation material in a previously circulated Excel.

LoggedData (implements WorkRecord)

  • As of 20150129, LoggedData only has the data already contained in its parent class. We will be on the lookout for any attributes that we need to add, especially in the context of Scouting / FieldObservations. If there are none before the release of v1 of the ADAPT data model, we reserve the right to collapse LoggedData back to its parent.
  • In the future we will want to consider auxiliary actors in the process of logging data (e.g. a truck and its driver, a grain cart and its driver, etc...) 
  • We have not yet implemented the concept of mark/note, which would allow for space- and time-specific notes to be logged.
  • 20150427: R. Andres Ferreyra reviewed the LoggedData object with PAIL team members Dan Berne (Unlicensed) and aberger@agsense.net. LoggedData is very compatible with PAIL's InboundData and OffsiteData objects, but the general idea of OperationData (which, I believe is central to the SPADE interpretation of LoggedData) does not fit at all. PAIL's suggestion is to create a subclass of LoggedData called Observations, that has OperationData as optional (at best.) This may be a good home for scouting data as well, although it remains to be discussed whether scouting plans (incl. pre-arranged scouting locations) are not analogous to WorkOrders / WorkItems.
AttributeTypeMultiplicityDescription
IdCompoundIdentifier1
WorkRecordIdInteger1
GrowerIdInteger0..1
FarmIdInteger0..1
FieldIdInteger0..1
CropZoneIdInteger0..1
TimeScopesTimeScope0..*
PersonRoleIdsInteger0..*
EquipmentConfigurationGroupEquipmentConfigurationGroup0..1
GuidanceAllocationIdsInteger0..*
WorkItemIdsInteger0..*
SummaryIdInteger0..1
NotesNote0..*
OperationDataOperationData1..*
ReleaseSpatialDataAction

DescriptionString0..1
MachineIdInteger0..1

OperationData

  • We will break this out so we have only one OperationData object instance per load. 
AttributeTypeMultiplicityDescription
IdCompoundIdentifier1

Unique identifer

 R. Andres Ferreyra: I think this needs to go; I see no reason for OperationData to need to exist independently of the LoggedData.


LoadIdInteger0..1

A reference to the load. See ADAPT - Load / LoadDestination Discussion

OperationTypeOperationTypeEnum1The operation performed
PrescriptionIdInteger0..1A reference to the Prescription, if any, used during this operation. If multiple products are used they will be included as a single multi-product prescription.
ProductIdInteger0..1

The product used for the operation

ProductIdsInteger0..*
VarietyLocatorIdInteger0..1A reference to the VarietyLocator layer used during this operation, if any
WorkItemOperationIdInteger0..1A reference to the Work Item Operation that generated this work
MaxDepthInteger1Count of depth
SpatialRecordCountInteger1How many spatial records are there?
EquipmentConfigIDInteger0..1
EquipmentConfigurationIdsInteger0..*
GetSpatialRecords()IEnumerable<SpatialRecord>
Returns an IEnumerable of SpatialRecord
GetDeviceElementUses()(int, IEnumerable<DeviceElementuse>)

DescriptionString0..1
CoincidentOperationDataIdsInteger0..*
GetSections(Depth: Integer)IEnumerable<Section>

ConnectorIdsInteger0..nA reference to the Connector objects linking MachineConfiguration and ImplementConfiguration (or two ImplementConfiguration) objects. Somewhat redundant because that info can be traced back through the ImplementConfiguration and its Connector references to machine and/or other impllements, but included here to help test / sanity check / select Connectors for processing / export.

SpatialRecord

AttributeTypeMultiplicityDescription
GeometryShape1The geometry defining the location
TimestampDateTime1The timestamp of the location.
GetMeterValue(meter: Meter)RepresentationValue
?
SetMeterValue(meter: Meter, RepresentationValue: value)


GetAppliedLatency(meter: Meter)


Section [Not Implemented]

  • Depth 0 always represents the full swath and contains DDIs and their values at that level (e.g. Elevation, Weather Information, Fuel Consumption)
  • Depths 1+ represent a segmented version of the full swath
AttributeTypeMultiplicityDescription
IdCompoundIdentifier1UniqueIdentifier
OperationDataIdInteger1A reference to the OperationData this section applies to
DepthInteger1Indicates which depth the section was recorded for
OrderInteger1An incrementing value indicating the order of the sections from left to right
SectionWidthNumericRepresentationValue1The width of the section
TotalDistanceTravelledNumericRepresentationValue0..1Total distance travelled for the operation when section status was on
TotalElapsedTimeNumericRepresentationValue0..1Total elapsed time for the operation when the section status was on
MetersMeter0..n

Meter (analogous to a process data variable in ISO) [Not Implemented]

AttributeTypeMultiplicityDescription
IdCompoundIdentifier1UniqueIdentifier
SectionIdInteger 1A reference to the Section where this meter was recorded

Representation

Representation1The object for what DDI is defined
ValuesDouble1..n

The values recorded. Aligned by index with the sections

AppliedLatencyNumericRepresentationValue1The latency reported by the controller
ReportedLatencyNumericRepresentationValue1The latency reported by the implement

NumericMeter (Subclass of Meter) [Not Implemented]

AttributeTypeMultiplicityDescription

UnitOfMeasure

UnitOfMeasure1The unit this meter was recorded in

EnumeratedMeter (Subclass of Meter) [Not Implemented]

AttributeTypeMultiplicityDescription
ValueCodesInteger1..* Integers that correspond to the Code of an enumeration member. The specific enumeration is implicit in the Representation identified in the parent class.

SectionSummary

AttributeTypeMultiplicityDescription
IdInteger1UniqueIdentifier
SectionIdInteger1A reference to the Section that this summary applies to
TotalDistanceTravelledNumericRepresentation1The total distance traveled with this section on
TotalElapsedTimeNumericRepresentation1The total elapsed time with this section on

CalibrationFactor

  • This is typically entered as a result of measurement via scale tickets, etc.
AttributeTypeMultiplicityDescription
IdCompoundIdentifier1The id of the calibration factor
MeterIdInteger1The meter to apply the calibration factor to
TimeScopeIdsInteger0...nThe time the calibration occurred. 20150903: R. Andres Ferreyra replaced datetime class with TimeScope, for consistency with other mandates.
ValueNumericRepresentationValue1The value of the calibration. 20150903:  R. Andres Ferreyra replaced Double type with NumericRepresentationValue, for consistency with other mandates.

DataLogTrigger

AttributeTypeMultiplicityDescription
IdCompoundIdentifier1
DataLogMethodLoggingMethodEnum1
DataLogDistanceIntervalNumericRepresentationValue0..1
DataLogTimeIntervalNumericRepresentationValue0..1
DataLogThresholdMinimumNumericRepresentationValue0..1
DataLogThresholdMaximumNumericRepresentationValue0..1
DataLogThresholdChangeNumericRepresentationValue0..1
ContextItemsContextItem0..*
LoggingLevelLoggingLevelEnum1
RepresentationRepresentation1
DeviceElementIdInteger0..1

DataLogTrigger

AttributeTypeMultiplicityDescription
ValueCodesInteger0..*

Destination

AttributeTypeMultiplicityDescription
IdCompoundIdentifier1
DescriptionString1
LocationLocation0..1
FacilityIdInteger0..1

MeteredValue

AttributeTypeMultiplicityDescription
ValueRepresentationValue1
MeterIdInteger0..1
DeviceConfigurationIdInteger0..1

StampedMeteredValue

AttributeTypeMultiplicityDescription
ValuesMeteredValues1..*
StampTimeScope0..1

NumericWorkingData

AttributeTypeMultiplicityDescription
UnitOfMeasureUnitOfMeasure0..1
ValuesDouble0..*
IdCompoundIdentifier1
DeviceElementUseIdInteger1
RepresentationRepresentation1
AppliedLatencyNumericRepresentationValue1
ReportedLatencyNumericRepresentationValue1

WorkingData

AttributeTypeMultiplicityDescription
IdCompoundIdentifier1
DeviceElementUseIdInteger1
RepresentationRepresentation1
AppliedLatencyNumericRepresentationValue1
ReportedLatencyNumericRepresentationValue1

LoggingLevelEnum

Enumeration LiteralDescription
MachineType
SpecificMachine
ImplementType
SpecificImplement
SpecificSection
SpecificMeter
Unspecified

LoggingMethodEnum

Enumeration LiteralDescription
TimeInterval
DistanceInterval
ThresholdLimits
OnChange
Total

Note:


foreach (spatialRecord in operationData.GetSpatialRecords())
{
	var shape = spatialRecord.GetShape();
	var time = spatialRecord.GetTimeElapsed();
	for(depth=0; depth< operationData.GetMaxDepth();depth++)
	{
		foreach(section in operation.GetSections(depth)
		{
			var width = section.Width;
			foreach(meter in section.GetMeters())
			{
				if(meter is NumericMeter)
				{
					var value = spatialRecord.GetMeterValue(meter);   // Yo, note that there are different representations for meters...
					var appliedLatency = spatialRecord.GetAppliedLatency(meter);
				}
				else if(meter is EnumeratedMeter)
				{
					var value = spatialRecord.GetMeterValue(meter);
				}
			}
		}	
	}
}