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 快照已保存");
}
}