Skip to content

Professional parity: readable URCB/BRCB root structures for external-client discovery #84

Open

Description

@masarray

Goal

Close the next evidence-backed MMS model gap between ARStack IED Simulator and a successful external IEC 61850 client session.

Evidence

A known-good ARIEC61850 + external IEC 61850 client trace shows external IEC 61850 client issuing bulk Reads against report-control-block root variables, not only leaf attributes:

  • URCB roots such as LLN0$RP$A_URCB in a multi-variable Read;
  • BRCB roots under LLN0$BR... in a multi-variable Read;
  • each successful AccessResult is an MMS structure containing the current RCB state.

Current ARStack MmsStaticUrcbObjectBank / MmsStaticBrcbObjectBank expose attribute leaves ($RptID, $RptEna, etc.) but not the RCB root as a readable object. That can leave an engineering browser associated yet unable to obtain report-control inventory/state in the form it expects.

Required implementation

  • expose each URCB root as a readable MMS structure;
  • expose each BRCB root as a readable MMS structure;
  • root data must be generated from the live per-association runtime state (no stale manifest snapshot);
  • preserve existing leaf objects and guarded writes;
  • preserve bounded/allocation-conscious server behavior;
  • ensure root TypeSpecification/order matches the RCB attributes actually exposed by the server;
  • Read(listOfVariable) containing multiple RCB roots must preserve one AccessResult per requested root and request order;
  • add hard-profile tests for root Read, multi-root Read, state change after reserve/enable, and BRCB ownership-sensitive fields;
  • add an external IEC 61850 client-parity loopback case representing the observed bulk root-read sequence.

Professional acceptance gate

Do not close on unit tests alone. Close only after:

  1. cross-platform CI is green;
  2. Windows packaged RC contains the change;
  3. real external IEC 61850 client progresses through DataSet discovery into RCB inventory/reads without association failure;
  4. diagnostics show the exact RCB root request/result counts when troubleshooting.

This is part of the broader goal of making ARStack Workbench a professional IEC 61850 commissioning/troubleshooting tool rather than a demo simulator.

Activity

  1. masarray commented on Sep 14, 2026

    @masarray
    OwnerAuthor

    Milestone gate update — 2026-09-14

    Current PR #82 head is 6ea0889c0656c847e6df3a95c59d92608a471564.

    The latest real external IEC 61850 client retest still closes immediately after GetNameList invoke 1 -> Read invoke 2. Therefore issue #84 remains the next professional-parity milestone, but RCB-root work must not be used to mask or conflate the current P0 Read/discovery blocker.

    P0 work now on PR #82:

    • 543585240d4de5bf5050907e98c781079b3c8263 — accept external IEC 61850 client-compatible Read access forms (listOfVariable, variableListName, compatibility unwrapped form) while retaining one AccessResult per requested object/member;
    • f9f1499d385e372799f5d34f84a38dc5091cd9d7 — regression coverage for DataSet/compatibility Read shapes;
    • 6ea0889c0656c847e6df3a95c59d92608a471564 — diagnostics no longer report an application-rejected confirmed request as simply “answered”.

    Current validation on exact head 6ea0889c:

    Gate for starting/closing this issue remains evidence-based:

    1. produce one exact Windows RC from the final P0 head;
    2. retest with the same reference IEC 61850 model CID and real external IEC 61850 client;
    3. require discovery to progress beyond Read invoke 2 into GVAA/DataSet/report inventory operations;
    4. then implement/read-test URCB/BRCB roots against the observed request sequence and keep Professional parity: readable URCB/BRCB root structures for external-client discovery #84 open until external external IEC 61850 client proof passes.

    No external external IEC 61850 client interoperability claim is made yet.

  2. masarray commented on Sep 14, 2026

    @masarray
    OwnerAuthor

    P1 implementation checkpoint — typed live RCB root hierarchy

    Current branch head: 2d74af8eb621dd0ad0a8fecd530a856843d209bc

    This implements the core of #84 without closing the external acceptance gate.

    Runtime behavior

    2304b10bf33ba16f20af457ae6ed53bb738f786f updates the portable MMS dispatcher so missing intermediate hierarchy roots can be exposed as a bounded virtual MMS hierarchy with matching Read data and GetVariableAccessAttributes TypeSpecification.

    For concrete report-control roots, child ordering is semantic rather than lexical:

    • URCB: RptID, RptEna, Resv, DatSet, ConfRev, OptFlds, BufTm, TrgOps, IntgPd, GI, SqNum
    • BRCB: RptID, RptEna, DatSet, ConfRev, PurgeBuf, EntryID, ResvTms, Owner

    This is important because MMS Structure Read values do not carry component names. The value order now matches the synthesized TypeSpecification order.

    The hierarchy remains live: root Read invokes the existing descendant leaf callbacks at request time, including per-association BRCB state/Owner callbacks. Existing exact leaf Read/Write and guarded ownership semantics remain unchanged.

    Regression

    embedded/mms_interop_rcb_root_hard_profile_smoke.cpp is registered in Embedded Profile CI at head 2d74af8e.

    It covers:

    • one bulk Read containing URCB then BRCB roots, preserving request/result order;
    • semantic URCB/BRCB field order;
    • synthetic root GVAA returning typed MMS Structure with matching component names/order;
    • live URCB-style state change reflected in a second root Read;
    • real BRCB runtime/control/object-bank reservation, RptEna, and ownership-sensitive Owner reflected in root Read;
    • release/disable state reflected in a subsequent Read.

    The URCB half of this embedded hard-profile uses mutable leaf callbacks intentionally because URCB host runtime sources are outside the current Embedded Core source boundary; P1 does not silently expand that portability boundary. BRCB uses the actual portable runtime/control/object-bank.

    Gate status

    Issue remains OPEN. Current GitHub Actions are running/queued for the P1 head. Real external IEC 61850 client interoperability is still not claimed. Closure still requires the #84 external gate: Windows RC + real external IEC 61850 client progressing through DataSet/RCB inventory/reads without association failure, with diagnostics sufficient to identify the root request/results.

  3. masarray commented on Sep 14, 2026

    @masarray
    OwnerAuthor

    P0/P1 internal engineering gate complete

    P0/P1 implementation is now frozen at the proven P1 package head 2d74af8eb621dd0ad0a8fecd530a856843d209bc for internal acceptance purposes.

    Concrete proof on that exact head:

    • IED Simulator Release Hardening Add native Qt premium SMV Injector with direct SCL profile control #57 (34861518756):
      • Linux release-soak: SUCCESS
      • Windows release-package: SUCCESS
      • MSVC release build: SUCCESS
      • portable + installer packaging: SUCCESS
      • staged + installed release verification: SUCCESS
      • reconnect soak: SUCCESS
      • application-close/socket cleanup soak: SUCCESS
    • IED Simulator Qt #627: SUCCESS

    This closes the P0/P1 internal code/build/package/lifecycle gate. No further speculative P0/P1 protocol changes should be made while P2 is being developed.

    Issue #84 intentionally remains OPEN because its external acceptance gate is still real external IEC 61850 client against the packaged runtime. We still do not claim external external IEC 61850 client RCB parity until that client progresses through RCB inventory/reads without association failure and diagnostics confirm the root request/result counts.

  4. masarray commented on Sep 15, 2026

    @masarray
    OwnerAuthor

    Ready for external/manual acceptance — exact-head RC available

    Internal implementation/CI requirements are now satisfied on exact PR head c114d1977335f8427f9ab85e9b65d26fe4effcc4:

    Exact Windows RC artifact:

    • name: arstack-iec61850-workbench-windows-rc
    • artifact ID: 10374597841
    • size: 60,673,059 bytes
    • digest: sha256:2efc27cfb0d7ae64cd2784a15a7276fe97d288c104c89a0f26d265dc5afc13a4
    • source head: c114d1977335f8427f9ab85e9b65d26fe4effcc4

    Issue #84 remains OPEN exactly as required by its professional acceptance gate. Next evidence must come from real external IEC 61850 client / physical IED execution, not simulator CI: first read-only SCL-assisted association/domain/FC-root validation, then RCB/report acceptance after Stage A succeeds.

  5. changed the title [-]Professional parity: readable URCB/BRCB root structures for IEDScout-class discovery[/-] [+]Professional parity: readable URCB/BRCB root structures for external IEC 61850 client-class discovery[/+] on Sep 19, 2026
  6. changed the title [-]Professional parity: readable URCB/BRCB root structures for external IEC 61850 client-class discovery[/-] [+]Professional parity: readable URCB/BRCB root structures for external-client discovery[/+] on Sep 19, 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