ENI/DENI 配置管理
支持 ENI 标准格式 (EtherCATConfig) 和 DENI 扩展格式 (DarraEtherCATConfiguration)。
- 使用 Darra 配置工具连接从站、配置 PDO/DC/启动参数
- 导出 DENI 文件 (
.deni) - 在代码中使用
SetENI()+Build()加载配置
加载配置
用户 SDK 只走 SetENI。SetENI(path) 加载 DENI/ENI XML,到 Build() 才生效。C# 没有公开的 LoadConfigJson 方法。
SetENI(string eniPath)
public DarraEtherCAT SetENI(string eniPath)
加载 DENI 或 ENI XML。路径在 Build() 时生效。
参数:
eniPath(string) — DENI 或 ENI 配置文件路径
热启动:
Build() 把 DENI/ENI 文件全文交给原生统一引擎(与 C/C++/Python/Rust/Java SDK 同一条加载路径),按文件热启动,不整片读 SII/EEPROM:
- 统计线上从站数量
- 分配地址
- 核对每个从站的 Vendor + Product 是否与 DENI 一致(身份取自 DENI,不回读 EEPROM)
- 一致则套用文件里的全配置(网卡 / SM / FMMU / InitCmd / DC / SDO / 看门狗 / 分组)
数量对不上,或 Vendor/Product 对不上,退回完整扫描。
TwinCAT 的 ENI 同样:身份对上就套文件,不对才全扫。
示例:
var master = new DarraEtherCAT()
.SetENI(@"C:\EtherCAT\MyProject.deni")
.Build()
.Master;
if (master == null)
{
Console.WriteLine("初始化失败");
return;
}
master.SetState(EcState.OP);
SaveXMLConfiguration / TrySaveCache / LoadXMLConfiguration / ApplyXMLConfiguration / LoadAndApplyXMLConfiguration / LoadAndAutoConfigure / MasterXMLConfiguration 是 GUI 与 PLC 中间层内部 API(C# internal + InternalsVisibleTo),不要在应用代码里调用,也不要当作用户 SDK 文档入口。
SaveXMLConfiguration / TrySaveCache 写 deni-*.xml 缓存时,看门狗用文件里已有的值,不再从总线重读。
无 DENI、需要 ESI 自动匹配时,用 SetEsiFile / SetEsiFiles + EnableAutoStartup(),见 ESI 文件管理 与 初始化。
Validate()
public ValidationResult Validate()
验证配置是否完整,不执行 Build(),用于预检查。
返回值:
public class ValidationResult
{
public bool IsValid { get; } // 验证是否通过
public IReadOnlyList<string> Errors { get; } // 验证错误列表(通过时为空)
}
当前检查项:已设置网口或 ENI 配置、ENI 文件存在、未达主站实例上限。
示例:
var result = new DarraEtherCAT().SetENI(@"C:\EtherCAT\MyProject.deni").Validate();
if (!result.IsValid)
{
foreach (var err in result.Errors)
Console.WriteLine(err);
return;
}
保存配置
保存配置 / 启动快照在主站自愈窗口内采用有限等待(秒级上限,短轮询),超时返回错误,不会长时间挂起。
导出运行时配置为 DENI 文件的功能由 Darra 主界面和 PLC 中间层提供(菜单"导出 DENI"),不通过 SDK 对外开放。
SDK 用户的标准工作流是:
- 在 Darra 主界面或 PLC 中完成配置并导出 DENI 文件
- 在代码中使用
SetENI(path).Build()加载已有的 ENI/DENI 文件
如果需要"扫描当前硬件并自动生成配置文件",请使用 Darra 主界面或 PLC 端的向导功能。
完整示例
var master = new DarraEtherCAT()
.SetENI(@"C:\EtherCAT\MyProject.deni")
.Build()
.Master;
if (master == null) return;
master.SetState(EcState.OP);
ENI/DENI 配置与初始化与构造(SetENI() / Build() 流式初始化)和 ESI 文件管理配合使用。Hot-Connect 组管理详见 Hot-Connect。