Skip to content

CANopen: verbleibende optionale EMCYs 8110h (Overrun) und 8140h (Bus-off-Recovery) #423

Open

Description

@dborgards

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

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

  1. dborgards commented on Oct 27, 2026

    @dborgards
    OwnerAuthor

    Completed independent feature parts:

    • 8130h heartbeat-consumer/local life guarding: merged in feat(canopen): add opt-in guarding error EMCYs #486 (72f83407), opt-in EmitGuardingErrorEmcy, default false.
    • 8120h observed controller error passive: merged in feat(canopen): add opt-in controller passive EMCYs #487 (d80bf712), separate opt-in EmitControllerErrorEmcy, 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:

    • 8110h overrun: pinned CanKit 0.5.6 exposes RxOverflow/TxOverflow as error-frame events, without an unambiguous persistent repair signal. A normal controller level alone must not be guessed to repair an overrun. Recommendation: require a reliable adapter recovery signal or an explicitly defined application acknowledgement/clear contract before implementing its active lifetime.
    • 8140h recovered from bus-off: relate it to actual recovery, not bus-off entry, and confirm the error-register/0000h sequence against the applicable CiA 301 Table 26/Figure 37 text. That normative sequencing has not been verified; no conformance claim or guessed implementation was added.

    These remaining scope/norm decisions are collected with the other backlog prerequisites. No real NuGet publication was performed.

  2. changed the title [-]CANopen: optionally raise EMCY 8130h (life guard/heartbeat) and 81xxh (CAN controller state)[/-] [+]CANopen: verbleibende optionale EMCYs 8110h (Overrun) und 8140h (Bus-off-Recovery)[/+] on Oct 31, 2026
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

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions