C# SDK 概述
DarraEtherCAT C# SDK 提供了用于开发 EtherCAT 主站应用程序的类库,支持主站与从站之间的高速实时通信。
本文档对应 C# SDK v2.7.x。版本号可在运行时通过 DllVersionHelper.VersionNumber 查询,详见 DLL 版本信息。
安装
- NuGet 包管理器
- 直接引用 DLL
Install-Package Darra.EtherCAT.Master
或使用 .NET CLI:
dotnet add package Darra.EtherCAT.Master
如果不使用 NuGet,可以直接引用编译好的 DLL:
- 从 下载页面 或配置工具导出目录获取
DarraEtherCAT.dll和DarraEtherCAT.xml - 在项目中添加引用:
<Reference Include="DarraEtherCAT">
<HintPath>lib\DarraEtherCAT.dll</HintPath>
</Reference>
- 确保 SDK 配套的核心运行库随程序一起部署在运行目录中
将 DarraEtherCAT.xml 与 DLL 放在同一目录,即可获得完整的 IntelliSense 方法提示和注释。
系统要求
| 项目 | 要求 |
|---|---|
| 操作系统 | Windows 7+ (推荐 Windows 10/11) |
| .NET | .NET Standard 2.0 (兼容 .NET Framework 4.6.1+ / .NET 6+) |
| 网络适配器 | 常规以太网网卡 |
| 权限 | 管理员权限 |
安装 DarraRT 驱动
DarraRT 驱动提供微秒级实时性能,完全免费。详见 下载页面。
✅ 优势:< 1μs 抖动 · 最优 DC 同步 · 纯软件实时 · 无需专用硬件
快速开始
- 打开 Darra 配置工具,扫描 EtherCAT 网络
- 配置从站参数(PDO 映射、DC 设置等)
- 导出 DENI 配置文件
- 在代码中加载 DENI 文件初始化主站
// ★ 推荐方式: 使用 DENI 文件 (Darra 配置工具一键导出)
var result = new DarraEtherCAT()
.SetENI(@"C:\EtherCAT\MyProject.deni")
.Build();
if (result.Success)
{
var master = result.Master;
master.SetState(EcState.OP);
// 开始通信...
}
备选方式: 自动搜索网卡 (无 DENI 时)
不使用 DENI 时, 用 GetNetworkInfo() 自动扫描所有网卡, 取有从站的那张, 不必硬编码 \Device\NPF_{GUID}:
// 扫所有 NIC 并探测从站数 (耗时 ~500ms-1.5s)
var networks = DarraEtherCAT.GetNetworkInfo(needSlavesNum: true);
// 选有从站的 NIC (一般只会有一张)
var ec = networks.FirstOrDefault(n => n.SlaveNum > 0);
if (ec == null)
{
Console.WriteLine("未发现 EtherCAT 网络");
return;
}
Console.WriteLine($"找到: {ec.Desc} (从站 {ec.SlaveNum} 台, MAC={ec.Mac})");
using var master = new DarraEtherCAT()
.SetNetwork(ec.Name)
.Build()
.Master;
master.SetState(EcState.OP, out _);
- DENI — 生产环境, 一行加载 ESI/PDO/DC 全套参数, 推荐.
- 自动搜索 — 演示 / 工具类应用 / 不需要预配置启动参数的场景.
高级 API
SDK 提供了一组高级 API,简化常见操作流程:
| 功能 | 说明 |
|---|---|
| 一步初始化 (EcInit) | JSON 配置一步完成主站初始化,无需逐步调用 |
| 状态链转换 (SetState) | 自动执行多步状态转换链 |
| 启动参数管线 (AddStartupParameter/Apply) | 批量添加启动参数并一次性应用 |
| CiA 402 驱动状态机 | 一步使能/故障复位/状态解析 |
| EMCY 紧急消息缓冲 | 读取从站紧急消息历史记录 |
| PDO 类型化读写 | 按类型直接读写 PDO 数据(U16/I32/F32 等) |
| 拓扑查询 | 构建并查询从站网络拓扑树 |
快速示例:
// 一步使能伺服驱动器 (CiA 402 通过 slave.CoE.CiA402 访问)
slave.CoE.CiA402.Enable();
// 类型化 PDO 读写
var input = slave.PDO.InputsMapping<ServoInput>();
var output = slave.PDO.OutputsMapping<ServoOutput>();
// 读取紧急消息
var emcyList = slave.CoE.GetEmergencyHistory();
// 拓扑查询
var children = slave.Children;
C# 特有语法糖
除标准 API 外, C# SDK 在 Master.Sugar 命名空间提供一组利用 .NET 语言特性的可选扩展, 让代码更简洁优雅. 详见 C# 特有语法糖 — 包含 Deconstruct 元组解构 / record struct 不可变身份 / Range 索引 / LINQ 筛选 / Span<byte> 零拷贝 PDO / IObservable<T> 事件流 / await foreach 诊断流 / async/await 状态切换. 这些是可选的, 不影响标准 API 使用.
自动健康检查 · Auto health checks
master.Build() 时自动跑, 不匹配 → SDK 日志 Warning:
- 驱动版本比对 — SDK 自动查询实时驱动的内核版本, 跟 SDK 自身 MAJOR.MINOR 比对, 不匹配时给出警告
- RT 核隔离 — SDK 后台检查 CPU 核心隔离配置是否就位, 缺失时提示重装 SDK
错误码本地化 · Error localization
AL Status 描述双语. SDK 默认英文, 中文专用接口给 UI:
string en = ((EcALState)code).GetDescription(); // English (default)
string zh = ((EcALState)code).GetDescriptionChinese(); // 中文 (UI 显示)
var drv = DriverVersionHelper.Get(); // 内核驱动版本
版本兼容
- 同 MAJOR.MINOR 内 PATCH 互相兼容 (例 2.7.0 ↔ 2.7.2), 包管理器升级即可, 不需重装驱动
- MAJOR / MINOR 变化 → 必须重装配套的驱动安装包, 否则会报版本兼容错误