Skip to content

A DDOP with two booms: the condensed setpoint goes to the second boom's element only, the first boom never moves #115

Open

Description

@chriskinal

Summary

With a DDOP that has two boom elements, each with its own condensed work state DDIs, the TC registers all sections as one list and sends the combined condensed setpoint to the second boom's element only. The first boom never receives a setpoint and its sections never move, while AOG's section states show all of them.

What we ran

isobus-implement-sim profile airseeder-12m: two booms of six sections each, DDI 161 (actual condensed work state) and DDI 290 (setpoint condensed work state) on each boom element, DDI 160 section control state on the device element. Against 4ede403, headless on vcan0, driven from a Python stand-in for AOG (tests/scenario_tc.py). Every one-boom profile in the same run follows its setpoints with the profile's delay; this one does not. The log shows the 12 sections registered in one list and one DDI 290 command, with the 12-section value, addressed to the second boom's element.

What would help

Either of these, and a log line saying which:

  • Refuse, or warn about, a DDOP with more than one boom, since the TC declares support for one boom in its capabilities and drives sections as one list.
  • Or send each boom's condensed value to its own element, split by the sections that belong to it.

A real air seeder or a sprayer with front and rear booms is the case this stands for.

Activity

  1. gunicsba commented on Oct 23, 2026

    @gunicsba
    Contributor

    The sprayer with front and rear booms will be more complicated IMHO. That would require AgOpenGPS to register the booms properly as currently we assume everything is in one line.

    Air seeders that puts down fertilizer and seeds might be controlled by the same command just we send it twice.

    Planters that have lets say 4+4 rows of fertilizer and 8 units for seed and another 8 units from microgranulate would be much harder unless proper multiboom is supported.

    Usually these implements support copying from one boom. So you can pick your favourite (lets say cornseeds) then everything else will be turned on based on that.

  2. gunicsba commented on Nov 11, 2026

    @gunicsba
    Contributor

    Confirmed on a real machine: RDS Artemis seeder controller

    The same bug shows up with a real implement: an RDS Artemis (software 003.07) on a seeder with three dispensers, field-tested on 2026-11-11. One difference from the simulator profile: the Artemis puts DDI 160 on each Function as well, not on the device element. So the first two seeders were never switched to automatic either.

    Fix: #131 (stacked on #130). Each element that carries its own condensed DDIs gets its own setpoint (sections numbered within it) and its own DDI 160. Its DDI 161/160 reports are read per element. DDOPs with one such element keep the existing path; that holds for all 24 sample DDOPs in the fixture collection.

    DDOP (unlinked layout, 953 bytes)

    Three Functions, each with one Section and its own DDI 160/161/290:

    DVC "RDS Artemis" sw="003.07"
    DET 1   Device   "RDS Artemis"         elem=0
    DET 3   Function "Seeder 1"            elem=2  parent=1   (DDI 160, 161, 290, 141 linked)
    DET 4   Function "Seeder 2"            elem=3  parent=1   (DDI 160, 161, 290, 141 linked)
    DET 5   Function "Seeder 3"            elem=4  parent=1   (DDI 160, 161, 290, 141 linked)
    DET 100 Section  "Seeder 1 Section 1"  elem=6  parent=3   (DDI 134, 135, 67 as process data)
    DET 101 Section  "Seeder 2 Section 1"  elem=7  parent=4
    DET 102 Section  "Seeder 3 Section 1"  elem=8  parent=5
      DPD 501 DDI 160 Section Control State          props=0x02 (settable)
      DPD 503 DDI 161 Actual Condensed WS 1-16        props=0x01 trig=0x09
      DPD 504 DDI 290 Setpoint Condensed WS 1-16      props=0x02 (settable)
      DPD 200/201/202 DDI 134/135/67 Offset X / Offset Y / Width, process data only (no fixed values)
    

    Before: develop + #130 (build 9d3c6d7), session 13:36:12–13:38:00

    Every command went to element 4 (Seeder 3), as a 3-section value:

    [13:36:13.711] Sending set value to client 235 for DDI Section Control State element 4 with value Auto/on
    ...
    Commands sent in the session:
          1 DDI Section Control State element 4 with value Auto/on
          5 DDI Setpoint Condensed Work State (1-16) element 4 with value 0 0 0 3 ...
          5 DDI Setpoint Condensed Work State (1-16) element 4 with value 1 1 1 3 ...
    Actual condensed reports (first section):
        106 element 2 (Seeder 1) -> 0
        106 element 3 (Seeder 2) -> 1   <- running for the whole session, never commanded
        106 element 4 (Seeder 3) -> 0   <- received "1 1 1" but never reported on
    

    An earlier session (build b9126fd, 11:33) shows the same pattern: 110 setpoints and 3 Auto/on, all to element 4.

    After: #131 (build a271aa7), 13:57 session
    [13:57:20.530] [TC Server] Sections are split over 3 elements with their own condensed DDIs:
    [13:57:20.530]   Element 2: sections 1-1
    [13:57:20.530]   Element 3: sections 2-2
    [13:57:20.530]   Element 4: sections 3-3
    [13:57:27.218] Sending set value to client 235 for DDI Section Control State element 2 with value Auto/on
    [13:57:27.218] Sending set value to client 235 for DDI Section Control State element 3 with value Auto/on
    [13:57:27.218] Sending set value to client 235 for DDI Section Control State element 4 with value Auto/on
    [13:57:27.231] Client 235 value command for element 2 DDI Section Control State with value Auto/on OK.
    [13:57:27.231] Client 235 value command for element 3 DDI Section Control State with value Auto/on OK.
    [13:57:27.231] Client 235 value command for element 4 DDI Section Control State with value Auto/on OK.
    [13:57:28.914] Sending set value to client 235 for DDI Setpoint Condensed Work State (1-16) element 2 with value 1 3 3 3 ...
    [13:57:28.914] Sending set value to client 235 for DDI Setpoint Condensed Work State (1-16) element 3 with value 1 3 3 3 ...
    [13:57:28.914] Sending set value to client 235 for DDI Setpoint Condensed Work State (1-16) element 4 with value 1 3 3 3 ...
    [13:57:30.449] Client 235 value command for element 4 DDI Actual Condensed Work State (1-16) with value 1 3 3 3 ... OK.
    [13:57:30.951] Client 235 value command for element 3 DDI Actual Condensed Work State (1-16) with value 1 3 3 3 ... OK.
    [13:57:40.166] Sending set value ... element 2/3/4 with value 0 3 3 3 ...
    [13:57:40.246] Client 235 value command for element 3/4 DDI Actual Condensed Work State (1-16) with value 0 3 3 3 ... OK.
    

    Seeders 2 and 3 follow the setpoint. Seeder 1 stays off: its dispenser has a hardware fault on that machine.

    On the earlier comment about copying from one boom: that is how this machine is used. All three dispensers work the same 6 m strip and should follow one AOG section. That part is not covered by this issue, so it is tracked separately (link below).

    🤖 Generated with Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions