EdsDcfNet 1.4.6
See the version list below for details.
dotnet add package EdsDcfNet --version 1.4.6
NuGet\Install-Package EdsDcfNet -Version 1.4.6
<PackageReference Include="EdsDcfNet" Version="1.4.6" />
<PackageVersion Include="EdsDcfNet" Version="1.4.6" />
<PackageReference Include="EdsDcfNet" />
paket add EdsDcfNet --version 1.4.6
#r "nuget: EdsDcfNet, 1.4.6"
#:package EdsDcfNet@1.4.6
#addin nuget:?package=EdsDcfNet&version=1.4.6
#tool nuget:?package=EdsDcfNet&version=1.4.6
EdsDcfNet
A comprehensive, easy-to-use C# .NET library for CiA DS 306 - Electronic Data Sheet (EDS), Device Configuration File (DCF) and Nodelist Project (CPJ) for CANopen devices.
Features
✨ Simple API - Intuitive, fluent API style for quick integration
📖 Read EDS - Complete parsing of Electronic Data Sheets
📝 Read & Write DCF - Process and create Device Configuration Files
🌐 Read & Write CPJ - Parse and create Nodelist Project files (CiA 306-3 network topologies)
🔄 EDS to DCF Conversion - Easy conversion with configuration parameters
🎯 Type-Safe - Fully typed models for all CANopen objects
📦 Modular - Support for modular devices (bus couplers + modules)
✅ CiA DS 306 v1.4 Compliant - Implemented according to official specification
Quick Start
Reading an EDS File
using EdsDcfNet;
// Read EDS file
var eds = CanOpenFile.ReadEds("device.eds");
// Display device information
Console.WriteLine($"Device: {eds.DeviceInfo.ProductName}");
Console.WriteLine($"Vendor: {eds.DeviceInfo.VendorName}");
Console.WriteLine($"Product Number: 0x{eds.DeviceInfo.ProductNumber:X}");
Reading a DCF File
using EdsDcfNet;
// Read DCF file
var dcf = CanOpenFile.ReadDcf("configured_device.dcf");
Console.WriteLine($"Node ID: {dcf.DeviceCommissioning.NodeId}");
Console.WriteLine($"Baudrate: {dcf.DeviceCommissioning.Baudrate} kbit/s");
Converting EDS to DCF
using EdsDcfNet;
// Read EDS
var eds = CanOpenFile.ReadEds("device.eds");
// Convert to DCF with node ID and baudrate
var dcf = CanOpenFile.EdsToDcf(eds, nodeId: 2, baudrate: 500, nodeName: "MyDevice");
// Save DCF
CanOpenFile.WriteDcf(dcf, "device_node2.dcf");
Working with Nodelist Projects (CPJ)
using EdsDcfNet;
using EdsDcfNet.Models;
// Read a CPJ file describing the network topology
var cpj = CanOpenFile.ReadCpj("nodelist.cpj");
foreach (var network in cpj.Networks)
{
Console.WriteLine($"Network: {network.NetName}");
foreach (var node in network.Nodes.Values)
{
Console.WriteLine($" Node {node.NodeId}: {node.Name} ({node.DcfFileName})");
}
}
// Create a new CPJ
var project = new NodelistProject();
project.Networks.Add(new NetworkTopology
{
NetName = "Production Line 1",
Nodes =
{
[2] = new NetworkNode { NodeId = 2, Present = true, Name = "PLC", DcfFileName = "plc.dcf" },
[3] = new NetworkNode { NodeId = 3, Present = true, Name = "IO Module", DcfFileName = "io.dcf" }
}
});
CanOpenFile.WriteCpj(project, "network.cpj");
Working with Object Dictionary
using EdsDcfNet.Extensions;
var dcf = CanOpenFile.ReadDcf("device.dcf");
// Get object
var deviceType = dcf.ObjectDictionary.GetObject(0x1000);
// Set value (returns true if object exists, false if not found)
bool set = dcf.ObjectDictionary.SetParameterValue(0x1000, "0x00000191");
// Browse PDO objects
var tpdos = dcf.ObjectDictionary.GetPdoCommunicationParameters(transmit: true);
API Overview
Main Class: CanOpenFile
// Read EDS
ElectronicDataSheet ReadEds(string filePath)
ElectronicDataSheet ReadEdsFromString(string content)
// Read DCF
DeviceConfigurationFile ReadDcf(string filePath)
DeviceConfigurationFile ReadDcfFromString(string content)
// Write DCF
void WriteDcf(DeviceConfigurationFile dcf, string filePath)
string WriteDcfToString(DeviceConfigurationFile dcf)
// Read CPJ (CiA 306-3 Nodelist Project)
NodelistProject ReadCpj(string filePath)
NodelistProject ReadCpjFromString(string content)
// Write CPJ
void WriteCpj(NodelistProject cpj, string filePath)
string WriteCpjToString(NodelistProject cpj)
// Convert EDS to DCF
DeviceConfigurationFile EdsToDcf(ElectronicDataSheet eds, byte nodeId,
ushort baudrate = 250, string? nodeName = null)
Supported Features
- ✅ Complete EDS parsing
- ✅ Complete DCF parsing and writing
- ✅ CPJ nodelist project parsing and writing (CiA 306-3 network topologies)
- ✅ All Object Types (NULL, DOMAIN, DEFTYPE, DEFSTRUCT, VAR, ARRAY, RECORD)
- ✅ Sub-objects and sub-indexes
- ✅ Compact Storage (CompactSubObj, CompactPDO)
- ✅ Object Links
- ✅ Modular device concept
- ✅ Hexadecimal, decimal, and octal numbers
- ✅ $NODEID formula evaluation (e.g., $NODEID+0x200)
- ✅ CANopen Safety (EN 50325-5) - SRDOMapping, InvertedSRAD
- ✅ Comments and additional sections
Examples
Complete examples can be found in the examples/EdsDcfNet.Examples project.
Project Structure
eds-dcf-net/
├── src/
│ └── EdsDcfNet/ # Main library
│ ├── Models/ # Data models
│ ├── Parsers/ # EDS/DCF/CPJ parsers
│ ├── Writers/ # DCF/CPJ writers
│ ├── Utilities/ # Helper classes
│ ├── Exceptions/ # Custom exceptions
│ └── Extensions/ # Extension methods
├── examples/
│ └── EdsDcfNet.Examples/ # Example application
└── docs/
├── architecture/ # ARC42 software architecture
└── cia/ # CiA DS 306 specification
Requirements
For consuming the NuGet package:
- Any .NET implementation compatible with .NET Standard 2.0 (e.g., .NET Framework 4.6.1+, .NET Core 2.0+, .NET 5+, Unity, Xamarin)
For building this repository (library, tests, examples):
- .NET SDK 10.0 or higher
- C# 13.0 (as provided by the .NET 10 SDK)
License
MIT License - see LICENSE file
Specification
Based on CiA DS 306 Version 1.4.0 (December 15, 2021) "Electronic data sheet specification for CANopen"
Support
For questions or issues:
- GitHub Issues: https://github.com/dborgards/eds-dcf-net/issues
EdsDcfNet - Professional CANopen EDS/DCF processing in C# .NET
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
| .NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
| .NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
| .NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
| MonoAndroid | monoandroid was computed. |
| MonoMac | monomac was computed. |
| MonoTouch | monotouch was computed. |
| Tizen | tizen40 was computed. tizen60 was computed. |
| Xamarin.iOS | xamarinios was computed. |
| Xamarin.Mac | xamarinmac was computed. |
| Xamarin.TVOS | xamarintvos was computed. |
| Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- No dependencies.
-
net10.0
- No dependencies.
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 1.7.1 | 14 | 3/4/2026 |
| 1.7.1-beta.1 | 18 | 3/4/2026 |
| 1.7.0 | 87 | 2/28/2026 |
| 1.7.0-beta.2 | 36 | 2/28/2026 |
| 1.7.0-beta.1 | 40 | 2/28/2026 |
| 1.6.2-beta.2 | 41 | 2/28/2026 |
| 1.6.2-beta.1 | 36 | 2/28/2026 |
| 1.6.1 | 88 | 2/28/2026 |
| 1.6.1-beta.1 | 37 | 2/28/2026 |
| 1.6.0 | 86 | 2/28/2026 |
| 1.6.0-beta.1 | 39 | 2/27/2026 |
| 1.5.0 | 88 | 2/26/2026 |
| 1.5.0-beta.4 | 37 | 2/25/2026 |
| 1.5.0-beta.3 | 40 | 2/24/2026 |
| 1.5.0-beta.2 | 38 | 2/23/2026 |
| 1.5.0-beta.1 | 38 | 2/23/2026 |
| 1.4.8 | 138 | 2/21/2026 |
| 1.4.8-beta.1 | 44 | 2/21/2026 |
| 1.4.7 | 83 | 2/21/2026 |
| 1.4.6 | 82 | 2/21/2026 |