Skip to main content

CN1 ADAPT Plugin Guide

AgGateway's ADAPT is an Open Source Software project. The ADAPT framework's goal is to provide a common language, a data model, for transferring Agronomic data from one system to another.

This CN1 ADAPT plugin maps CNH Industrial's proprietary file format CN1 to the ADAPT data model. If your application supports ADAPT, you will be able to read the data stored in a CN1 file.

The plugin requires that at least one .CN1 folder to be present in the provided dataPath. The IsDataCardSupported() method checks this on the plugin.

The Import() method will return one ApplicationDataModel object per .CN1 folder in the provided dataPath.

Download Latest

The latest version is 4.1.1 and was released on 12/03/2024. Supports .Net Standard 2.0.

Version Details

Changes across versions are listed below.

4.1.1

  • Updated CNHVoyager2.dll to 4.1.1.2.
  • Monitor Serial Number is now available under Catalog.DeviceElements.
  • New errors collection available which may contain errors detected by the CN1 SDK.
  • Upgraded to .NET Standard 2.0 and references the ADAPT Framework v3.1.0. Read more about this at Github.

4.0.0

  • Upgraded to .NET Standard 2.0 and references the ADAPT Framework v3.0.2. Read more about this at Github.

Object Mapping Details

The following section contain details on how property mapping is handled.

Unmapped Properties

Several properties in the CN1 data model that do not map directly to the ADAPT data model are handled by the following ContextItem codes:

NameDescription
US-EPA-NThe EPA Number.
ApplicationRatesTop level context item for the following nested context items.

These values are all numeric and the ValueUOM indicates the unit of measure:
  • DefaultApplicationRate
  • MinimumApplicationRate
  • MaximumApplicationRate
MaximumWindSpeedMaximum wind speed allowed by product label.
RequiredBufferDistanceRequired buffer distance from product label.
IsNotificationRequiredRequirement to post a notice, based on product label.
IsRestrictedIndicates that usage of the product may be restricted, based on label.
PackageSizeIndicates size of the package.

Products

The plugin will map the following types of products in the ADAPT data model:

Product TypeUsage
CropNutritionProductFor all Fertilizer usage products.
CropVarietyProductFor planted crop variety products.
GenericProductFor Carriers or other generic products.
MixProductFor any product mixes.

When available in the CN1 data model, the ProductDensity (or SeedPlantDensity for varieties) will also be mapped to the Density value.

Further Notes on Product Types

Below are further details on the product types listed in the table above.

CropNutritionProduct

Used for all Dry or Liquid fertilizer products from a CN1 folder.

The IsManure flag is not set. There are no Ingredients available to record the different nutrient percentages provided by the fertilizer because individual nutrients are not tracked by the CN1 format.

CropProtectionProduct

Used for several different subtypes of crop protection: Fungicide, Herbicide, Insecticide, and Pesticides.

The Category of the product is used to note the detailed subtype (for Fungicide, Herbicide, and Insecticide only). ADAPT does not currently have a category for Pesticides and those will be set to Unknown.

CropVarietyProduct

Will contain a reference to a valid CropId.

There are currently no mappings available for TraitIds in data coming from the CN1 folder and the GeneticallyEnhanced property will not be set.

GenericProduct

Used when the CN1 data has marked the product as Generic or as a Carrier. This would be used if "Water" was present as part of a product mix.

MixProduct

All of the ProductComponents for a MixProduct always reference other products for the CN1 plugin, the Ingredient object type is not used. The ProductComponent objects will have IsProduct property set to true and the IngredientId will reference an actual product in the Catalog.Products collection.

When available, the TotalQuantity for the mix will also be applied to the MixProduct object. This will use one of the following representations depending on the kind of product:

RepresentationPurpose
vrTotalQuantityAppliedVolumeFor liquid products.
vrTotalQuantityAppliedMassFor dry products.
vrTotalSeedQuantityAppliedMassFor CropVariety measured by mass.
vrTotalSeedQuantityAppliedMassFor CropVariety measured by seeds.

There are 2 different ways that the ProductComponent quantity can be measured for a MixProduct. The MixProduct is configured in one of two ways:

  • By Formula
    • In this situation, the quantity represents the total amount of the product in the mix.
      • vrActiveIngredientMass is used for dry components.
      • vrActiveIngredientVolume is used for liquid components.
  • By Percentage
    • In this situation, the vrProductContent representation is used to note the percentage of product for the mix.
A single MixProduct only uses one or the other, and there will not be a combination of total ingredient amounts and percentages used for the same MixProduct.

Grower / Farm / Field

Grower

The plugin will currently map the following grower attributes to ADAPT Model:

Initial AttributeMaps To
ICNHV2Grower.SUIDId.UniqueIds.Id
ICNHV2Grower.NameName
CN1 data model does have Contact Information for grower. Contact information is not mapped.

Farm

The plugin will currently map the following farm attributes to ADAPT Model:

Initial AttributeMaps To
ICNHV2Farm.SUIDId.UniqueIds.Id
ICNHV2Farm.NameFarm.Description

Farm contains GrowerId that references grower this is set by the plugin.

CN1 data model does have Contact Information for farm. Contact information is not mapped.

Field

The plugin will currently map the following field attributes to ADAPT Model:

Farm.Description

Initial AttributeMaps ToNotes
ICNHV2Field.SUIDId.UniqueIds.IdNone.
ICNHV2Field.NameField.DescriptionNone.
ICNHV2Field.BoundaryField.FieldBoundaryNone.
ICNHV2Field.AreaField.AreavrReportedFieldArea. Unit of measure is square metres

Field contains GrowerId and FarmId which references grower and farm both are set by the plugin.

The field area is a user-entered value and may not accurately represent the field boundary area.

Setup Data

Field Boundary

Field boundaries are mapped from the CN1 folder when they are available. There will be at most one FieldBoundary added per field since the CN1 folder structure only tracks one active boundary per field.

Inner and outer polygon rings from the CN1 folder will be spatially sorted to obey conventional geometry rules. The field boundary will always be represented as a MultiPolygon geometry object. Each Outer polygon will be mapped to an ExteriorRing on a Polygon within the MultiPolygon. Any Inner polygons that fall inside will be added to that polygon's polygon InteriorRings collection.

There may be some situations where an Inner polygon does not have a corresponding Outer ring. In this situation, a polygon will be created with an ExteriorRing and one InteriorRing set to the same geometry. The usage of the inner ring as the outer ring is to satisfy the requirement that all polygons have at least one outer ring.

Guidance Lines

The plugin will import any available guidance lines into the data model. By default, each guidance line from the CN1 folder will be placed into separate groups. When the SwathGroup is used, all of the same lines with the same SwathGroup will be placed into the same GuidanceGroup in the ADAPT model.

The following is a list of mappings for how each CN1 guidance pattern type maps to an ADAPT object:

  • CNHV2SwathTypeLine AbLine
  • CNHV2SwathTypeHeading APlus
  • CNHV2SwathTypePivot* PivotGuidancePattern
  • CNHV2SwathTypePivotMultiPoint* PivotGuidancePattern
  • CNHV2SwathTypePivotByValues PivotGuidancePattern
  • CNHV2SwathTypeSpiral Spiral
  • CNHV2SwathTypeCurve AbCurve
  • CNHV2SwathTypeFieldSwath AbCurve
    • Also maps to DrivenHeadland for FieldBoundary.
  • CNHV2SwathTypeMultiSwath AbCurve
    • Multiple in a GuidanceGroup.
  • CNHV2SwathTypeMultiSwathPlus AbCurve
    • Multiple in a GuidanceGroup.
The Pivot and PivotMultiPoint types define a pivot guidance pattern by using 3 points along the perimeter of the circle rather than a center point and radius as is customary for ADAPT.

The plugin calculates the center point and radius to map to the PivotGuidancePattern. This may change in the future if ADAPT adds support for this additional method.

Obstacles

When available, obstacles for a field will be added as a ReferenceLayer with a ReferenceLayerType of Obstacles. There will be one Obstacles reference layer per field which contains obstacles.

Each obstacle shape for the field (Point, Line, or Polygon) will be added to the reference layer as a separate ShapeLookup item.

The following representations are used as SpatialAttributes on each of the ShapeLookup items on the reference layer:

RepresentationNotes
srObstacleNameThis is a StringValue and will contain the name of the obstacle.
dtObstacleLevelThis defines the warning level. There are two values:
  • dtiWarning, for Warning-type
  • dtiObstacle, for Obstacle
dtObstacleTypeThis defines a detailed obstacle type that can be any of the following pre-defined variables:
  • dtiObstacleTypeOther
  • dtiObstacleTypeFence
  • dtiObstacleTypeGrassWaterway
  • dtiObstacleTypeTerrace
  • dtiObstacleTypePond
  • dtiObstacleTypeRoad
  • dtiObstacleTypeRiverStream
  • dtiObstacleTypeSlough
  • dtiObstacleTypeDitch
  • dtiObstacleTypeTileInlet

All of the above representations are user-defined and are contained in the CN1Plugin.DefinedTypeInstanceList class used in the plugin.

Prescriptions

Prescription data contained in a CN1 folder structure is mapped when available. The prescription rate maps are imported as either RasterGridPrescription or VectorPrescription depending on the internal geometry type.

Each RasterGridPrescription converted will only reference one Product at a time and will be assigned to a single field by the FieldId property. Each field may have multiple prescriptions for different products.

The representation and units of measure used for the prescriptions depend on the ProductForm used by the prescription itself. The mapping to Representation and units of measure is as follows:

RepresentationMaps ToUnits of Measure
DryGranularvrAppRateMassTargetKilograms per Square Metre
LiquidvrAppRateVolumeTargetLitres per Square Metre
PlantvrSeedRateSeedsTargetCount per Square Metre
SeedvrSeedRateSeedsTargetCount per Square Metre
BulkSeedvrSeedRateMassTargetKilograms per Square Metre
OthervrAppRateMassTargetKilograms per Square Metre

There is a ContextItem available on each prescription to note the creation date.

Logged Data

All supported logged data is mapped to the ApplicationDataModel.Documents.LoggedData collection.

The following types of logged data are currently supported by the plugin:

  • Grain Harvest
  • Forage Harvest
  • Cane Harvest
  • Cotton Harvest
  • Application Rate
    • Includes Planting, Spraying, Spreading, and other applications
  • Vehicle Performance

To ensure efficient processing and reduced memory usage, the plugin will dynamically load the logged records from the disk as the SpatialRecords are enumerated. As a best practice, it is important to call the ReleaseSpatialRecords method on the LoggedData object as soon as you are finished with the records.

WorkRecord documents are used to log summaries and other notes from the task where available. This includes the following items:

  • Crop Residue
  • Sky Condition
  • Soil Condition
  • Soil Moisture
  • Soil Texture
  • Humidity
  • Temperature
  • Wind Speed
  • Wind Direction

The following representations are available on the SpatialRecords for all data types handled by this plugin:

RepresentationNotes
vrElevationMeasured in Metres.
vrHeadingMeasured in Arc Degrees.
vrDistanceTraveledMeasured in Metres.
vrDeltaAreaMeasured in Square Metres.
vrNumSatellitesMeasured in Count. This is a User-Defined representation.
dtSignalTypeNone.
dtRecordingStatusNone.

The following representations are available on the Operation Summary:

Product FormRepresentationUnits of Measure
AreavrTotalAreaCoveredSquare Meters
Fuel (InWork)ISO 316Litres
Fuel (OutOfWork)ISO 317Litres

Harvest

Harvest data is relatively simple and is only available down to the Implement level. There is no section/subsection reporting for harvest. The following representations of data are available for harvest data:

RepresentationHarvest TypeNotes
vrYieldWetMassGrainMeasured in Kilograms.
vrHarvestMoistureGrainMeasured in Percentage.
vrConstituentCrudeProteinGrainMeasured in Percentage. Available when equipped with protein sensor.
vrYieldMassForageForageMeasured in Kilograms.
vrHarvestMoistureForageMeasured in Percentage.
vrYieldMassCottonMeasured in Kilograms.
vrYieldMassCaneCaneMeasured in Kilograms.

Note that certain representations are only available for a given Harvest Type.

Application Data

Application data records at the Implement level as well as Section and SubSection levels where available. The two types of representations used are for Actual rate and Target rates. The representations used depend upon the product form just like the prescriptions.

Please note that subsection meters use different units of measure as shown below.

Implement and Section level - Actual Representations
Product FormRepresentationUnits of Measure
DryGranularvrAppRateMassActualKilograms per Square Metre
LiquidvrAppRateVolumeActualLitres per Square Metre
PlantvrSeedRateSeedsActualCount per Square Metre
SeedvrSeedRateSeedsActualCount per Square Metre
BulkSeedvrSeedRateMassActualKilograms per Square Metre
OthervrAppRateMassActualKilograms per Square Metre
SubSection level - Actual Representations
Product FormRepresentationUnits of Measure
DryGranularvrAppRateMassActualKilograms per Square Metre
LiquidvrAppRateVolumeActualLitres per Square Metre
PlantvrSeedRateSeedsActualThousands of Seed per Square Metre
SeedvrSeedRateSeedsActualThousands of Seed per Square Metre
BulkSeedvrSeedRateMassActualKilograms per Square Metre
OthervrAppRateMassActualKilograms per Square Metre
Implement, Section, and SubSection level - Target representations
Product FormRepresentationUnits of Measure
DryGranularvrAppRateMassTargetKilograms per Square Metre
LiquidvrAppRateVolumeTargetLitres per Square Metre
PlantvrSeedRateSeedsTargetCount per Square Metre
SeedvrSeedRateSeedsTargetCount per Square Metre
BulkSeedvrSeedRateMassTargetKilograms per Square Metre
OthervrAppRateMassTargetKilograms per Square Metre
Operation Summary Representations for Product Totals
Product FormRepresentationUnits of Measure
DryGranularvrTotalQuantityAppliesMassKilograms
LiquidvrTotalQuantityAppliedVolumeLitres
PlantvrTotalSeedQuantityAppliedSeedThousands of Seed
SeedvrTotalSeedQuantityAppliedSeedThousands of Seed
BulkSeedvrTotalSeedQuantityAppliedMassKilograms
OthervrTotalQuantityAppliedMassKilograms

Planting Data

Planting data is an extension of the Application data - please see the above section for notes on target and actual seeding rate meters.

When properly equipped, Planting data may contain additional representations for singulation, seed spacing quality, downforce, ground contact, and row unit ride quality. These additional representations will only be present on the Section and SubSection levels where available.

Advanced Seed Sense Logging
RepresentationUnits of Measure
vrPlantingSingulationPercentage
vrPlantingSkipsPercentage
vrPlantingDoublesPercentage
vrActualSeedSpacingCVUnitless
Down Force Logging
RepresentationUnits of Measure
vrDownForceMarginNewtons
vrDownForceAppliedNewtons
vrGroundContactPercentage
vrRideQualityPercentage