Repository navigation
Conversation
An implement only reconnects when it sees no TC Status for 6 s. Restarting the TC takes 2-3 s, and both our TC Status and the stack's (sent from TaskControllerServer::update()) were back on the bus before that, so the implement kept sending process data as if nothing happened. The new TC did not know it and NACKed every message; in the field a spreader stayed cut off for 20 minutes across three restarts, until the tractor was power-cycled. - Startup: hold TC Status, and the TC server update that sends the stack's copy, for 6.5 s, so clients of the previous run time out and reconnect. - Runtime: watch for Client Task and Value messages addressed to us from a CF the stack has no active client for. Such a client still thinks it is connected; hold TC Status for 6.5 s so it starts over. A 30 s cooldown lets reconnecting clients finish, and after 3 attempts for the same NAME the TC stops and asks for a power-cycle instead of disturbing the other clients. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
A field log from 2026-10-13 (Sulky Isolink spreader on a JD tractor) showed the spreader cut off for 20 minutes after the operator restarted the TC three times.
An implement only drops its connection when it sees no TC Status for 6 s. A TC restart takes 2–3 s, and both our TC Status and the stack's own copy (sent from
TaskControllerServer::update()) were back on the bus before that. The spreader never noticed the TC had gone away and kept sending process data. The new TC didn't know it, so the stack NACKed every message:That message appears 4,461 times in the log. The spreader only came back after the tractor was power-cycled. The JD tractor ECU client (0xF0) was stuck the same way.
Changes
tcServer->update(), which also holds the stack's copy. Clients of the previous run time out and reconnect. Their messages wait in the stack's queue.MyTCServerregisters its own CAN callback for Process Data. If a Client Task or Value message reaches us from a CF that has no active client in the stack, that client still thinks it is connected. The stack ignores its Client Task messages and NACKs its values, so it never recovers on its own. The TC then goes quiet for 6.5 s so the client starts over.get_active_client()andserverControlFunction, which are protected and unchanged in the Bump AgIsoStack++ to upstream main (includes #718) #104 stack pin.Notes
Application::send_task_controller_status_message()and the stack's. That's out of scope here; both are held during a quiet period.6fe9029on the integration branch only delays our own TC Status at startup, so it doesn't prevent this. This PR replaces it.Application::update(). Keep both sides; the resolution is intest/szello-debug.Testing
[TC] Holding TC Status for 6500 ms (startup), and the implements reconnect (New client ... detected via WorkingSetMaster) with noNACKinglines;[TC] Client 0x.. is talking to us as if connected ....🤖 Generated with Claude Code