Open Source · MIT License · v1.9.1

CANopen device files,
handled the .NET way.

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.

$ dotnet add package EdsDcfNet
Zero runtime dependencies netstandard2.0 + net10.0 CiA DS 306 v1.4 / CiA 311 v1.1 compliant MIT licensed
Why EdsDcfNet

Everything the specification demands. Nothing you don't need.

Built strictly against the official CiA specifications, with an API designed for real-world engineering workflows.

Simple, fluent API

One entry point per format: CanOpenFile.Eds, .Dcf, .Cpj, .Xdd, .Xdc — read, write, and convert in a few lines.

Type-safe models

Fully typed object dictionary, device info, and commissioning models — no string-fiddling with INI sections.

Round-trip fidelity

Unknown sections, comments, and vendor extensions are preserved so files survive a read-modify-write cycle intact.

EDS → DCF conversion

Turn a device template into a commissioned configuration with node ID, baudrate, and node name — one method call.

Modular devices & PDOs

Bus couplers with plug-in modules, CompactPDO/CompactSubObj storage, object links, and $NODEID formula evaluation.

Validation built in

Detect invalid commissioning values and inconsistent object lists before writing — or enforce it with CanOpenWriteOptions.Validated.

Supported formats

Five formats, one consistent API

Every format shares the same read/write surface: files, strings, and streams — synchronous and async.

FormatSpecificationEntry pointDescription
EDSCiA DS 306CanOpenFile.EdsElectronic Data Sheet — the device template describing the object dictionary
DCFCiA DS 306CanOpenFile.DcfDevice Configuration File — a commissioned device instance with node ID and baudrate
CPJCiA 306-3CanOpenFile.CpjNodelist project files describing complete CANopen network topologies
XDDCiA 311CanOpenFile.XddXML device description, including the ApplicationProcess model (CiA 311 §6.4.5)
XDCCiA 311CanOpenFile.XdcXML device configuration with device commissioning data
Quick start

From EDS to commissioned DCF in three lines

Program.cs
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);
  • 1

    Install the package

    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.

  • 2

    Read any device file

    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.

  • 3

    Modify, validate, write

    Work with typed models, run CanOpenFile.Validate(...), and serialize back with full round-trip fidelity.

Resources

Source, documentation & package

EdsDcfNet is developed in the open — the code, the docs, and the releases are all one click away.