IEC 61850 client, guarded IED control, reporting, GOOSE, Sampled Values, SCL, and PCAP engineering toolkit for .NET 8.
ARIEC61850 is an independently developed C# implementation maintained under a documented clean-room and provenance policy. It supports substation-automation laboratories, approved commissioning work, FAT/SAT preparation, protocol research, education, and repeatable engineering evidence.
Validation boundary: a guarded control path has been exercised with a laboratory IED. This is engineering evidence, not formal IEC 61850 conformance, broad interoperability evidence, functional-safety approval, or permission to operate primary equipment.
Website · Quick start · Control stack · Control tester · Current status · Roadmap
License: the current
mainbranch and current community release packages are licensed only underGPL-3.0-or-later. A separate commercial license is available for proprietary integration, OEM/white-label distribution, and contractual support. See Licensing.
- Native C#/.NET means a project-owned managed implementation rather than an application wrapper around an unrelated IEC 61850 stack.
- Smart Control means automated discovery of
ctlModel, live MMS type information, required control sequence, and completion evidence. It does not mean AI-based decision-making or autonomous equipment operation. - Guarded means the application adds explicit target selection, typed planning, confirmation, bounded execution, cleanup, and evidence. It does not prove that equipment, interlocking, or switching procedures are safe.
- Control-model-aware IEC 61850 control: select a control Data Object such as
CSWI.Pos; the engine discoversctlModel, exact live MMS types, and applies Direct Operate or Select-Before-Operate sequencing. - Operator-oriented OPEN/CLOSE workflow: WPF control tester with live status, interlock check, synchrocheck, Test mode, originator, timeout, cancellation, and protocol evidence.
- MMS client and reporting: association, model discovery, FC-aware reads, DataSet/RCB inventory, report planning, GI, monitoring, and diagnostics.
- GOOSE and Sampled Values: frame codecs, SCL-backed profiles, PCAP inspection, bounded publishing, subscription, sequence supervision, and diagnostics.
- SCL and engineering evidence: expected-vs-observed analysis, readiness profiles, Markdown/JSON evidence, and deterministic simulation.
- Public-source controls: GPL licensing, warnings-as-errors, automated tests, provenance rules, source-hygiene scripts, CI, and release checks.
The IED Discovery desktop app keeps the normal operator workflow concise:
Select CSWI.Pos → open Control Tester → verify status and test conditions → stage OPEN or CLOSE → confirm
The engine applies the discovered sequence:
| Discovered control model | Sequence | Completion boundary |
|---|---|---|
| Direct, normal security | Oper |
Confirmed MMS result |
| SBO, normal security | SBO → Oper |
Confirmed MMS result |
| Direct, enhanced security | Oper → CommandTermination |
Positive or negative termination |
| SBO, enhanced security | SBOw → Oper → CommandTermination |
Positive or negative termination |
The control stack also manages:
- exact live
ctlValbinding for DPC, SPC, INC/ISC, BSC, and APC variants; - immutable
ctlNum, timestampT, origin, Test, and Check values across a sequence; - interlock and synchrocheck request bits;
- SBO ownership, expiry, best-effort
Cancel, and association-loss cleanup; LastApplError,ControlError,AddCause, and request/response evidence;- process-feedback readback through the discovered status reference.
See Control Stack, Control Tester, and Live IED Control Validation.
| Component | Path | Role |
|---|---|---|
| Core protocol library | src/AR.Iec61850 |
BER, MMS, reporting, control, SCL, GOOSE, SV, PCAP, diagnostics |
| Raw Ethernet transport | src/AR.Iec61850.Transports.Npcap |
Windows laboratory process-bus transport |
| Simulation library | src/AR.Iec61850.Simulation |
Deterministic IED profiles, points, DataSets, reports, and events |
| IED Discovery | apps/AR.Iec61850.IedDiscovery |
Live model browser, reporting workspace, and control tester |
| Engineering Workbench | apps/AR.Iec61850.EngineeringWorkbench |
SCL/PCAP diagnostics and evidence-pack workflow |
| IED Simulator | apps/AR.Iec61850.IedSimulator |
Deterministic laboratory MMS server and simulation workspace |
| SV Publisher | apps/AR.Iec61850.SvPublisher |
Sampled Values laboratory publishing and waveform workspace |
| CLI | apps/AR.Iec61850.Cli |
Automation, discovery, diagnostics, simulation, and PCAP commands |
| Tests | tests/AR.Iec61850.Tests |
Codec, state-machine, binding, diagnostics, and regression coverage |
- .NET 8 SDK.
- Windows for WPF applications and the current raw-Ethernet transport.
- An isolated laboratory or approved commissioning network for active publishing or control.
git clone https://github.com/masarray/ARIEC61850.git
cd ARIEC61850
dotnet restore .\ARIEC61850.sln
dotnet build .\ARIEC61850.sln -c Release
dotnet test .\ARIEC61850.sln -c Release --no-build
.\scripts\verify-source-clean.cmddotnet run --project .\apps\AR.Iec61850.IedDiscovery\AR.Iec61850.IedDiscovery.csproj -c ReleaseLive discovery is read-only. It builds the model from MMS domain and named-variable directories, preserves DataSet member order, inventories RCBs, queries GetVariableAccessAttributes from each logical-node root to recover the FC/DO/DA type hierarchy, and can list the MMS file directory. When a server returns a partial primary FC directory, exact DataSet-member and ReportControl evidence is merged into the model instead of discarding discovered LD/LN containers; the export report labels that recovery and its remaining coverage gap. File service unavailability is reported as evidence and does not discard an otherwise valid model snapshot.
The same desktop app can open vendor SCL/CID/ICD/IID files and use Save SCL to write a generic IID. Offline conversion selects the local IED from an explicit name, Header@id, or an unambiguous filename; removes vendor Private content and later-edition compatibility metadata; prunes peer IED communication and unreachable type templates; and preserves standard DOI/DAI values, FCDA order, DataSets, RCBs, GOOSE/SV controls, and exact source CDC/type definitions.
After live discovery, Save SCL offers the same compatibility choices needed by mixed-edition engineering workflows: Edition 2 Schema V3.1 writes an .iid; Edition 1 Schema V1.6, V1.5, or V1.4 writes an .icd. The selected profile controls root version attributes, schema metadata, report/service fields, and the default extension—it is not only a filename change. Every export also writes JSON/Markdown evidence and preserves warnings for inferred or unavailable information. Live discovery export remains model-driven because MMS cannot recover engineering-only metadata such as the original vendor type IDs, descriptions, private extensions, enum labels, or substation topology.
Before a live command:
- connect only to an approved test IED;
- verify the selected control object and current process status;
- verify switching authority, isolation, blocking, and independent indications;
- configure Test, interlock, synchrocheck, and origin as required;
- stage the command and review the confirmation;
- review MMS acceptance, termination, application errors, and feedback separately.
dotnet run --project .\apps\AR.Iec61850.Cli -- mms-discover 192.0.2.10 --port 102 --timeout-ms 30000dotnet run --project .\apps\AR.Iec61850.Cli -- `
mms-scl-export 192.0.2.10 `
--ied-name IED1 `
--scl-schema edition2-v3.1 `
--output .\.artifacts\out\IED1-discovered.iid
dotnet run --project .\apps\AR.Iec61850.Cli -- `
mms-scl-export 192.0.2.10 `
--ied-name IED1 `
--scl-schema edition1-v1.6 `
--output .\.artifacts\out\IED1-discovered.icddotnet run --project .\apps\AR.Iec61850.Cli -- `
inspect-scl .\samples\scl\minimal-station.scd
dotnet run --project .\apps\AR.Iec61850.Cli -- `
scl-save-as .\vendor-relay.cid `
--ied-name RELAY1 `
--output .\.artifacts\out\RELAY1.interoperable.iid
dotnet run --project .\apps\AR.Iec61850.Cli -- `
generate-pcap .\samples\scl\minimal-station.scd .\.artifacts\out\processbus-demo.pcap
dotnet run --project .\apps\AR.Iec61850.Cli -- `
inspect-pcap .\.artifacts\out\processbus-demo.pcap `
--scl .\samples\scl\minimal-station.scd| Area | Current public scope |
|---|---|
| MMS client | Association, discovery, FC-aware reads, typed write services, and type inspection |
| Discovery-to-SCL | Edition 2 V3.1 IID and Edition 1 V1.6/V1.5/V1.4 ICD reconstruction with companion evidence and explicit coverage warnings |
| IEC 61850 control | Direct/SBO normal/enhanced sequencing, typed values, termination and application-error handling |
| Reporting | DataSet/RCB discovery, planning, guarded enable/GI, persistent monitoring, and evidence |
| GOOSE | Encode/decode, SCL profiles, publish/subscribe, sequence and supervision diagnostics |
| Sampled Values | Encode/decode, waveform and payload generation, publishing, diagnostics, and PCAP workflows |
| SCL | Station/model parsing, loss-aware vendor normalization, live-discovery reconstruction, communication profiles, and engineering analysis |
| PCAP | Read/write/inspect, stream analysis, and expected-vs-observed binding |
| Simulator | Deterministic laboratory MMS server for discovery and read workflows; broader interoperability remains under validation |
| Security profiles | IEC 62351 profiles are not currently claimed |
| Certification | No formal third-party conformance claim |
Detailed evidence is maintained in the Engine Maturity Matrix.
The reusable core targets .NET 8 and is designed to remain cross-platform where the underlying transport permits it. Current desktop applications use WPF and require Windows. Raw process-bus Ethernet uses a Windows-specific transport in the current public implementation.
Active MMS writes, report-control changes, control operations, GOOSE publishing, Sampled Values publishing, and raw packet replay can change equipment state or network behavior.
Do not connect active functions to an operational substation network without switching authority, an approved procedure, isolation and blocking boundaries, independent verification, and asset-owner authorization. See Security and Operational-Risk Policy.
Synthetic or contributor-owned protocol fixtures and SCL samples are welcome when provenance, redistribution rights, and sanitization are documented. Do not submit customer, employer, station, credential, or proprietary material.
Read CONTRIBUTING.md, AGENTS.md, and the Clean-Room and Interoperability Policy before submitting implementation work.
The current main branch and current public community release packages are licensed only under the GNU General Public License v3.0 or later (GPL-3.0-or-later). See LICENSE.
A separate negotiated commercial license is available from the copyright holder for proprietary integration, OEM or white-label distribution, closed-source redistribution, warranty, maintenance, and priority engineering support. See COMMERCIAL-LICENSE.md.
Official branding is governed separately. See TRADEMARK.md.
Historical revisions through d61a83f5b04e7bd2b847174eeac7f4f6e81ee8e1 remain available under their original terms on branch archive/apache-2.0-final. The historical license text is intentionally not included in the current source tree or current release packages. See Licensing.