Repository navigation
CANopen: verbleibende optionale EMCYs 8110h (Overrun) und 8140h (Bus-off-Recovery) #423
Description
Normprüfung am 31.10.2026
CiA 301 V4.2.0, lokaler Volltext 301v04020008.pdf, §7.2.7.1, Table 26 (S. 65–66) und Figure 37 (S. 67) geprüft. 8110h bezeichnet verlorene Objekte durch CAN-Overrun, 8140h eine Erholung von Bus-off. Beide Codes sind optional. Die Zustandsregeln unterscheiden neue Fehler, teilweise Reparatur (0000h darf mit Restfehlern gesendet werden) und vollständige Reparatur (0000h wird gesendet).
Der Text legt dort keine zusätzliche konkrete Lebensdauer oder Ausgabereihenfolge des transienten 8140h-Ereignisses gegenüber dem bestehenden 8120h-Aggregat fest und liefert kein Reparatursignal für einen Overrun. Damit ist die Textprüfung dieser Stellen erledigt; daraus allein folgt noch kein eindeutiger Implementierungsvertrag. Die offenen Clear-/Sequenzentscheidungen bleiben ausdrücklich bestehen. Keine Verhaltensänderung vorgenommen.
Erledigt
- 8130h für Heartbeat-Consumer und lokales Life Guarding: feat(canopen): add opt-in guarding error EMCYs #486,
EmitGuardingErrorEmcy, opt-in, Default false. - 8120h für beobachtetes Controller Error Passive: feat(canopen): add opt-in controller passive EMCYs #487, separates
EmitControllerErrorEmcy, opt-in, Default false. - Beide sind in das bestehende Kommunikationsfehler-Aggregat eingebunden: 1001h Bits 4/0, Anwendungsbits erhalten, 0000h erst nach Ende der letzten Ursache. PRs enthalten Prüf-/Mutationsnachweise.
Rest und Abschlussbedingungen
Diese optionalen Codes sind Erweiterungen, keine hier bereits belegten Konformitätsdefekte.
- 8110h Overrun – Lebensdauer festlegen: CanKit 0.5.6 meldet RxOverflow/TxOverflow, liefert aber laut Prüfung keinen eindeutigen dauerhaften Reparaturzustand. Einen belastbaren Adapter-Recovery-Nachweis oder einen expliziten Anwendungs-Acknowledge/Clear-Vertrag festlegen. „Controller wieder Normal“ allein darf nicht als Overrun-Reparatur geraten werden.
- 8110h implementieren: nach dieser Festlegung opt-in abbilden; Tests für Aktivierung, wiederholte Meldungen, definierte Reparatur, Reset/Dispose und gleichzeitige andere Fehler.
- 8140h Recovery-Sequenz prüfen: zutreffende CiA-301-Ausgabe und Table 26/Figure 37 prüfen; tatsächliche Bus-off-Erholung von Bus-off-Eintritt unterscheiden und die Sequenz von 8140h, Fehlerregister und 0000h festlegen.
- 8140h implementieren: opt-in mit Tests für echte Erholung, fehlende/alte Zustandsübergänge, Reset/Dispose und andere noch aktive Fehler. Anwendungsbits müssen erhalten bleiben.
- README/XML/Anforderungen an den endgültigen Umfang und die Clear-/Reset-Regeln anpassen.
Schließen, wenn: beide Restcodes mit explizitem Vertrag und Tests implementiert sind, oder der Maintainer für einen oder beide ausdrücklich entscheidet, sie nicht anzubieten, und die Umfangsgrenze dokumentiert ist. Die Bestandsaufnahme trifft keine solche Ablehnungsentscheidung.
Letzter Implementierungs- und Reststatus.
Abgleich: 2026-10-31, gegen gemergte PRs, Issue-Kommentare und main @ 61d037a7. Dies ist eine Bestandsaufnahme; die verlinkten Prüfungen wurden dabei nicht erneut ausgeführt.
Activity
dborgards commentedon Oct 27, 2026
Completed independent feature parts:
72f83407), opt-inEmitGuardingErrorEmcy, default false.d80bf712), separate opt-inEmitControllerErrorEmcy, default false. It uses the existing actor-driven BusStateMonitor, fresh reset baselines and generation invalidation for queued jobs/retries, preserves reset/LSS completion on diagnostic errors, and cleans up monitoring on disposal/construction failure.Both use the existing communication-error aggregate: 1001h bits 4/0 while active, application bits preserved, one report per error event and 0000h only when the last cause repairs. All issue/PR review findings were addressed in their original threads. Final #487 validation: 3104 local net10 tests, net48 compile, format, nine verified packages, 50 engineering tests and traceability; 14 actual source mutations runtime-red/restored. Both final CI-Cobertura copies cover every changed executable entry with no missing/partials. Main CI 40493261604 and CodeQL 40493261636 are fully successful at d80bf71 (18 documented retained CodeQL recommendations, no new alerts).
Leaving this issue open for the genuine remaining contracts:
These remaining scope/norm decisions are collected with the other backlog prerequisites. No real NuGet publication was performed.
[-]CANopen: optionally raise EMCY 8130h (life guard/heartbeat) and 81xxh (CAN controller state)[/-][+]CANopen: verbleibende optionale EMCYs 8110h (Overrun) und 8140h (Bus-off-Recovery)[/+]