Adapt usage
The 20|20 ADAPT plugin reads all .2020
files from the Precision Planting 20|20 Generation 3 monitors.
The plugin is released as a .NET NuGet package for easy integration into other software packages. The latest version can also be downloaded directly from the 20|20 ADAPT download page.
What is ADAPT?
ADAPT is an open-source, industry defined specification and framework for agricultural field operation data sponsored by AgGateway. The ADAPT framework is based on Microsoft's .NET Framework. The ADAPT source code is available on Github.
Prior to ADAPT's widespread adoption, FODM was primarily used. FODM is an earlier approach to standardizing Field Operations data. ADAPT was developed to replace FODM, and it's development has been influenced by a wider group of industry participants. Precision Planting does not offer a FODM or FODD for 20|20 data.
Please note that the 20/20 SeedSense Generation 1 or Generation 2 monitors produce .dat
files that utilize the Climate FieldView file format and are readable only by the Climate FODD. Climate provides information about using the .dat
file format via the FieldView for Developers portal.
Data Visualizer
The ADAPT project contains an open source Visualizer program. The ADAPT Visualizer can be used in conjunction with the 20|20 ADAPT plugin to examine the contents of a .2020 file.
Please visit to the 20|20 ADAPT Visualizer tutorial for more information.
Integrating the plugin to your code
To integrate the 20|20 ADAPT plugin into your software, reference the plugin using the NuGet package, or reference the DLL files directly. Additionally, a reference must be added to the AgGatewayADAPTFramework
package, available from NuGet.org, or from Github.
Within your code, instantiate the PrecisionPlanting.ADAPT._2020.Plugin
class and invoke the import method with the path to the .2020
files intending to be read.
// Instantiate the 20|20 ADAPT plugin
var myPlugin = new PrecisionPlanting.ADAPT._2020.Plugin();
// Import data from a given path. The plugin will return a single ADM object.
string datapath = @"C:\My_2020_Files";
AgGateway.ADAPT.ApplicationDataModel.ADM.ApplicationDataModel admObject =
myPlugin.Import(dataPath).SingleOrDefault();
if (admObject != null)
{
// Retrieve data from admObject
}
Data Formatting
The data within the ADAPT ApplicationDataModel
uses the following conventions.
Summaries
Totals/Summaries recorded by the 20|20 for an operation are included under Documents/Summaries. Per-product summaries are under OperationSummaries, and all products summaries are under SummaryData.
ADAPT Representations
Where a standard ADAPT Representation exists, the 20|20 ADAPT plugin reports values using that Representation. For example, ADAPT defines vrSeedRateSeedsActual
as the instantaeous actual planting population; the 20|20 ADAPT plugin reuses this representation.
Where types specific to the 20|20 are present, the 20|20 ADAPT plugin uses a Representation of CodeSource = UserDefined
. Examples of this are Representations for SmartFirmer. A complete list of Representations are present on the 20|20 ADAPT download page.
Operation Data
There exists a set of OperationData
objects for regions of the operation. If Insecticide or Fertilizer was applied alongside Seed, these data will be separate OperationData
objects with correlated timestamps.
Because the 20|20 ADAPT plugin complies with ADAPT Framework 2.0, it is possible to use the OperationData.CoincidentOperationDataIds
property to identify such correlated data.
Null Values
In the case of SpatialRecords
that have <null>
WorkingData
values, the <null>
represents a case where no value was logged by the sensor. For the purposes of interpreting this data where other SpatialRecords
on corresponding WorkingData
objects contain values, consumers may wish to consider interpolating values from other SpatailRecords
instead of treating these values as zero, depending on the nature of the sensor.
Inline Offsets
ADAPT provides a detailed model for modeling the implement offsets. The inline offsets as reported by the 20|20 ADAPT plugin have the following meanings:
MachineConfiguration.GPSXOffset
: distance the GPS receiver is forward of the rear axleHitchPoint.ReferencePoint.XOffset
(Tractor): distance the hitch is behind of the rear axleHitchPoint.ReferencePoint.XOffset
(Implement): distance the hitch point is forward of the implement reference pointImplementConfiguration.ControlPoint.XOffset
: distance the implement reference point is backward of the hitch. This value is the inverse ofHitchPoint.ReferencePoint.XOffset
(Implement).SectionConfiguration.InlineOffset
: distance the section reference point is backward of the hitch
Positive values are forward and negative values are backward. The EquipmentConfiguration
objects model the Connector
mappings of the MachineConfiguration
(in most cases, the tractor) to the ImplementConfiguration
.
Lateral Offsets
Positive values are right of the reference point from the point of view of the driver's seat, and negative values are left.
Sample Data
Sample data is available for ADAPT development.
Importing data from the 20|20
The 20|20 ADAPT plugin supports customizing the contents included in the ADAPT ApplicationDataModel
through passing one or more properties into the second parameter of the Plugin.Import()
method. Common property settings are indicated in this section. Additional property settings are indicated inline in the Representations section below.
-
DataFrequency
: Frequency at which data is returned. For most data, 5 Hz is the native frequency. 1 Hz down-samples the data from its native sampling rate.Values:
1
/5
Default:1
Data provided by the 20|20
Common items
These items are common and included for all types of data.
Data Representations
-
dtRecordingStatus
: ReturnsOn
orOff
based on whether data was being recorded at this timeUnits:
On/Off
-
vrVehicleSpeed
: Instanteous velocity at which the vehicle is travelingUnits:
miles/hour
-
vrHeading
: Instantenous heading towards which the vehicle is travelingUnits:
degrees
-
vrDistanceTraveled
: Cumulatative distance traveled by the vehicle within the data frequency time frame.Units:
feet
Planting Rates
Planting information describes the rates at which seeds are applied. The following are included whenever a metered seeding system is configured.
If an operation contains multiple hybrids, the data follows these conventions:
- If a planter supports multiple-hybrid-per-row capabilities (Precision Planting mSet or vSet Select), the data will include a vrProductIndex datum for each row. This value maps to the Reference ID of the product in the ADAPT ApplicationDataModel catalog.
- If a planter is configured with left/right varieties or a similar partial planter configuration, the OperationData will include an intermediate operation device depth with a vrProductIndex defining the product for the governed rows. The rows may be associated to their parent portion of the implement by referencing the DeviceElementUse's DeviceElementConfiguration and its associated DeviceElement. The DeviceElement will have a ParentDeviceId associated to the corresponding element that maps to the DeviceElementUse reporting a vrProductIndex.
Data Representations
-
vrSeedRateSeedsTarget
: Instantaneous intended seeding rate at which the equipment should be seeding or plantingUnits:
seeds/acre
-
vrSeedRateSeedsActual
: Instantaneous actual seeding rate at which the equipment should be seeding or plantingUnits:
seeds/acre
-
vrProductIndex
: Value containing the Reference ID of the product being applied at this sample point. See information listed in the header section above.Units:
-
Seeding Quality
Seeding quality describes the performance of seed metering, taking into account the seeds and equipment metering the seeds.
Properties
-
SeedingQuality
: IfTrue
, seeding/planting quality data is populated upon import. By default, seeding quality data is not automatically imported.Values:
True
/False
Default:False
Data Representations
-
vrPlantingSingulation
: Percentage of properly singulated seeds. This value is an average based on the user set Seeds to Average.Units:
percent
-
vrPlantingSkips
: Percentage of improperly singulated seeds classified as skips. This value is an average based on the user set Seeds to Average.Units:
percent
-
vrPlantingDoubles
: Percentage of improperly singulated seeds classified as doubles. This value is an average based on the user set Seeds to Average.Units:
percent
-
Spacing_Variation
: Percentage representing the consistency of seed spacing. This value is an average based on the user set Seeds to Average.Units:
percent
-
NewSeeds
: Count of new seeds from the seeding system.Units:
count
-
Vacuum
: Vacuum pressure observed at the seed meter.Units:
kPa
Harvest (YieldSense)
Harvest data describes the monitoring of a harvesting operation on a combine or other type of harvesting equipment. Data is always imported if present within a file.
Data Representations
-
vrYieldCalibration
: Per field calibration value of the harvest system vrYield.Units:
double
-
vrYieldMass
: Measured dry mass of grain by the mass flow sensor.Units:
lb
-
vrYieldWetMass
: Measured wet mass of grain by the mass flow sensor.Units:
lbf
-
vrYieldWetMassFlow
: Measured flow of wet grain mass by the mass flow sensor.Units:
lbf/second
-
vrHarvestMoisture
: Percentage of grain moisture as read by the combine moisture sensor.Units:
percent
-
vrYieldVolumePerArea
: Average dry yield being harvested.Units:
bushels/acre
-
vrYieldWetVolumePerArea
: Average wet yield being harvested.Units:
bushels/acre
-
dtHeaderStatus
: Returns 'On' or 'Off' based on user calibration of the combine header.Units:
on/off
-
SeparatorStatus
: Status of the combine separator.Units:
on/off
-
dtUnloadingAugerState
: Status of the combine unloading auger.Units:
on/off
-
FeedHousePositionDegrees
: Instantaneous position of the combine feedhouse.Units:
degrees
-
AugerPositionDegrees
: Instantaneous position of the combine unloading auger.Units:
degrees
-
CombineDirection
: Instantaneous combine direction {Forward, Reverse}.Units:
Enumeration
-
vrEngineSpeed
: Instantaneous combine engine speed.Units:
revolutions/minute
-
vrTotalAreaCovered
: Acccumulated acres harvested by combine.Units:
acres
Liquid Application (vApply, vApplyHD, FlowSense and Sprayers)
Liquid applications describe the measured rates at which liquid application products are being applied.
Properties
-
LiquidApplication
: IfTrue
, liquid product application data is populated upon import. By default, liquid product application data is not automatically imported.Values:
True
/False
Default:False
Data Representations
-
vrAppRateVolumeActual
: Actual flow rate of the liquid product being applied.Units:
gallons/acre
Granular Application (vDrive Insecticide and Air Seeders/Drills)
Insecticide applications describe the rates at which insecticide application products are being applied. At present, insecticide application values report the commanded rates, or the inferred rate based on metering system speed, without actually sensing the volume or mass of the product being applied.
Properties
-
GranularApplication
: IfTrue
, granular product application data is populated upon import. By default, granular application data is not automatically imported.Values:
True
/False
Default:False
Data Representations
-
vrAppRateMassActual
: Application rate of the granular product being applied, as described above.Units:
lbf/acre
Magnitude
: Estimate of applied granular particles in Air Seeder data.
Units: count/acre
Deviation
: Statistical deviation in Air Seeder data.
Units: percent
Row Unit Down Force (DeltaForce, Smart Pin)
Row unit down force describes the pressures and forces that are being applied to the row unit, as well as row unit performance.
Properties
-
Downforce
: IfTrue
, row unit down force data is populated upon import. By default, row unit down force data is not automatically imported.Values:
True
/False
Default:False
Data Representations
-
NetAppliedForce
: Net applied down force value in pounds for each row from the active Downforce system.Units:
lbf
-
vrDownForceApplied
: Actual down force sensor value in pounds for each row from the active Downforce system.Units:
lbf
-
vrGroundContact
: Percentage representing the amount of time weight is present on the gauge wheel. Anything less than 100% represents seeds possibly being planted shallower than desired.Units:
percent
-
vrDownForceMargin
: The lowest measured down force reading in a given period of time.Units:
lbf
-
vrRideQuality
: Percentage representing the amount of time the row unit acceleration data is greater than desired.Units:
percent
Soil Sensing (SmartFirmer)
SmartFirmer senses properties of the soil by means of contact with the furrow during a planting operation.
Properties
-
SoilSensing
: IfTrue
, sensed soil data is populated upon import. By default, sensed soil data is not automatically imported.Values:
True
/False
Default:False
Data Representations
-
Uniform_Furrow
: Percent of time the furrow is considered to be uniformUnits:
percent
-
Organic_Matter
: Organic matter percentage of the soilUnits:
percent
-
CEC
: Cation exchange capacity of the soilUnits:
meq/1000g
-
Furrow_Moisture
: Percent of soil moisture the seed will take up over the next 3 daysUnits:
percent
-
Clean_Furrow
: Percent of time the furrow is considered to be cleanUnits:
percent
-
vrSoilTemperature
: Temperature of the soilUnits:
degrees fahrenheit
Depth Control (SmartDepth)
Depth control describes the depth control equipment present on the row unit.
Properties
-
RowUnitDepthControl
: IfTrue
, depth control is populated upon import. By default, depth control data is not automatically imported.Values:
True
/False
Default:False
Data Representations
-
Smart_Depth
: Commanded depth setting by the row unit depth actuator.Units:
inches
Closing System (FurrowForce)
The following items are populated based on the following settings:
Properties
-
RowUnitClosingSystem
: IfTrue
, data for the FurrowForce closing system is populated upon import. By default, closing system data is not automatically imported.Values:
True
/False
Default:False
Representations
-
Applied_Closing_Force
: Amount of force applied to the closing system by the closing system hardwareUnits:
lbf
-
Closing_Actuator_Pressure
: Pressure measured by the closingUnits:
pounds/inch^2
-
Closing_Margin
: Amount of force being applied to the closing system beyond that required to keep the closing system in the groundUnits:
lbf
-
Good_Closing
: Percentage representing the amount of time that the closing system is maintaining the intended closing forceUnits:
percent
-
Closing_Uniformity
: Percentage representing the amount of time that the closing system signal variation exceeds a set threshold.Units:
percent
Row Cleaner System
The following item is populated based on the following settings:
Properties
-
RowCleanerSystem
: IfTrue
, row cleaner data is populated upon import. By default, row cleaner data is not automatically imported.Values:
True
/False
Default:False
Representations
-
Row_Cleaner_Net_Pressure
: Amount of pressure applied to the row cleaner hardwareUnits:
psi
Sprayers
The following items are populated for sprayers:
Representations
-
Nozzle_Pressure
: Pressure at the nozzleUnits:
psi
-
Nozzle_Duty_Cycle
: Percentage of time the nozzle is openUnits:
percent
Camera System (SymphonyVision)
-
TargetedSpray
: IfTrue
, data is populated upon import. By default, data is not automatically imported.Values:
True
/False
Default:False
Representations
-
Weed_Density
: Percentage of the ground covered by weeds at this location.Units:
percent
-
Weed_Severity
: Determined weed pressure at this location. {None, Low, Medium, High, Unknown}Units:
Enumeration
-
Weed_Type
: Type of weed(s) present at this location. {None, Emerging, Grass, Broadleaf, Multiple, Unknown}Units:
Enumeration
Exporting data to the 20|20
The plugin supports exporting Field Boundaries and Vector Prescriptions to the 20|20.
Field Boundaries
Configure the relevant Grower, Farm and Field data within an Application Data Model, and associate any Field Boundaries to Fields. Upon Plugin.Export() this information will be written to the .2020 file.
Vector Prescriptions
Configure the relevant Grower, Farm and Field data within an Application Data Model, and associate any Prescriptions to Fields. Be sure the correct units of measure are set on the rate attributes within the prescription. The plugin supports seed rate, liquid rate, granular rate and seed depth prescriptions. Upon Plugin.Export() this information will be written to the .2020 file.