EdsDcfNet is a comprehensive, zero-dependency C# library for reading and writing CiA DS 306 (EDS, DCF, CPJ) and CiA 311 (XDD, XDC) files — with a clean, type-safe API built for industrial automation.
Built strictly against the official CiA specifications, with an API designed for real-world engineering workflows.
One entry point per format: CanOpenFile.Eds, .Dcf, .Cpj, .Xdd, .Xdc — read, write, and convert in a few lines.
Fully typed object dictionary, device info, and commissioning models — no string-fiddling with INI sections.
Unknown sections, comments, and vendor extensions are preserved so files survive a read-modify-write cycle intact.
Turn a device template into a commissioned configuration with node ID, baudrate, and node name — one method call.
Bus couplers with plug-in modules, CompactPDO/CompactSubObj storage, object links, and $NODEID formula evaluation.
Detect invalid commissioning values and inconsistent object lists before writing — or enforce it with CanOpenWriteOptions.Validated.
Every format shares the same read/write surface: files, strings, and streams — synchronous and async.
| Format | Specification | Entry point | Description |
|---|---|---|---|
| EDS | CiA DS 306 | CanOpenFile.Eds | Electronic Data Sheet — the device template describing the object dictionary |
| DCF | CiA DS 306 | CanOpenFile.Dcf | Device Configuration File — a commissioned device instance with node ID and baudrate |
| CPJ | CiA 306-3 | CanOpenFile.Cpj | Nodelist project files describing complete CANopen network topologies |
| XDD | CiA 311 | CanOpenFile.Xdd | XML device description, including the ApplicationProcess model (CiA 311 §6.4.5) |
| XDC | CiA 311 | CanOpenFile.Xdc | XML device configuration with device commissioning data |
using EdsDcfNet; // Read the device template var eds = CanOpenFile.Eds.ReadFile("device.eds"); Console.WriteLine($"Device: {eds.DeviceInfo.ProductName}"); Console.WriteLine($"Vendor: {eds.DeviceInfo.VendorName}"); // Commission it: node ID 2 @ 500 kbit/s var dcf = CanOpenFile.Eds.ConvertToDcf( eds, nodeId: 2, baudrate: 500); // Validate and write the DCF CanOpenFile.Dcf.WriteFile( dcf, "device_node2.dcf", CanOpenWriteOptions.Validated);
Add EdsDcfNet from NuGet. It runs anywhere .NET Standard 2.0 runs — .NET Framework 4.6.1+, .NET Core 2.0+, .NET 5+, Unity, and Xamarin.
Use the format entry points to parse EDS, DCF, CPJ, XDD, or XDC from files, strings, or streams — with safe input-size limits by default.
Work with typed models, run CanOpenFile.Validate(...), and serialize back with full round-trip fidelity.
EdsDcfNet is developed in the open — the code, the docs, and the releases are all one click away.
Browse the full source, report issues, and contribute. Built with CI, semantic-release, and full test coverage.
github.com/dborgards/eds-dcf-netGuides, API documentation, migration notes, and background on the CiA DS 306 / CiA 311 specifications.
github.com/dborgards/eds-dcf-net/wikiInstall the latest stable release with symbols and SourceLink. Deterministic builds, signed by CI on every release.
nuget.org/packages/EdsDcfNet