跳到主要内容

ENI 文件读写

ENI(EtherCAT Network Information,ETG.2100)是 IDE / 配置工具导出的网络配置文件。Java SDK 通过纯 Java DOM 解析与生成 ENI XML,无需依赖外部工具。

通过 com.darra.ethercat.utils.Eni 静态类访问。

启动时加载 ENI

推荐使用 EtherCATMaster.Builder.setENI(path) 在构造主站时直接加载 ENI。本工具类适用于离线读取 / 编辑 / 另存场景。

加载 ENI

loadENI(String filePath)

public static EniConfiguration loadENI(String filePath)

解析 ENI XML 文件,返回 EniConfiguration 配置对象。

参数:

  • filePath (String) — ENI 文件路径

返回值:

  • EniConfiguration — 解析结果;文件不存在 / 根节点不是 EtherCATConfig / 解析失败时返回 null

保存 ENI

saveENI(String filePath, EniConfiguration config)

public static boolean saveENI(String filePath, EniConfiguration config)

EniConfiguration 写出为 ETG.2100 EtherCATConfig XML。

参数:

  • filePath (String) — 输出 ENI 文件路径
  • config (EniConfiguration) — 配置对象

返回值:

  • boolean — 写盘成功返回 true

saveENI(EtherCATMaster master, String filePath)

public static boolean saveENI(EtherCATMaster master, String filePath)

从已运行的主站直接抽取 SII 静态视图(VendorID / ProductCode / RevisionNo / ConfigAddr / AliasAddress / Name + LoopCycle)保存为 ENI。

参数:

  • master (EtherCATMaster) — 已扫描完成的主站实例
  • filePath (String) — 输出 ENI 文件路径

返回值:

  • boolean — 写盘成功返回 true

数据结构

public static class EniConfiguration {
public final MasterConfig master; // 主站节点(CycleTime / DcCycleTime / 名称 / ExpectedSlaveCount)
public final List<SlaveConfig> slaves; // 从站列表
public String version; // ENI 版本(默认 "3.0")
}

public static class MasterConfig {
public String name;
public int cycleTimeUs;
public int dcCycleTimeUs;
public int expectedSlaveCount;
}

public static class SlaveConfig {
public String name;
public int vendorId;
public int productCode;
public int revisionNumber;
public int physicalAddress;
public int autoIncAddress;
public int dcAssignActivate;
public int sm2Offset, sm2Length;
public int sm3Offset, sm3Length;
}

完整示例

读取 + 修改 + 另存

// 1. 读取已有 ENI
Eni.EniConfiguration cfg = Eni.loadENI("C:\\projects\\old.xml");
if (cfg == null) {
System.err.println("ENI 解析失败");
return;
}

// 2. 调整周期
cfg.master.cycleTimeUs = 500; // 500us
cfg.master.dcCycleTimeUs = 500_000; // 500us 纳秒级

// 3. 另存
Eni.saveENI("C:\\projects\\new.xml", cfg);

在线主站 → ENI 快照

try (EtherCATMaster master = EtherCATMaster.create()) {
master.SetNetwork("\\Device\\NPF_{...}");
master.setState(EcState.PRE_OP);

// 把当前总线扫描结果导出为 ENI
if (Eni.saveENI(master, "C:\\projects\\snapshot.xml")) {
System.out.println("ENI 快照已保存");
}
}