类 DiagnosticStream

java.lang.Object
com.darra.ethercat.sugar.DiagnosticStream

public final class DiagnosticStream extends Object
诊断 / 紧急消息 (CoE EMCY + ETG.1510 0x10F3) 的 Stream API 包装.

主线 CoE.GetEmergencyHistory() / CoE.readDiagnosticMessages() 返回 List<...>, 完全可以 .stream(); 但有几个常用查询模式 (按 错误码筛, 按时间排序, 取最新 N 条) 写起来啰嗦. 本类封装这些套路.

典型用法:

 Slave s = master.getSlave(3);

 // 1. 最近 10 条紧急消息 (按时间倒序)
 DiagnosticStream.recentEmergencies(s, 10).forEach(System.out::println);

 // 2. 只看某个错误码 (例如 0x8130 — Sync Error)
 DiagnosticStream.emergenciesByCode(s, (short) 0x8130).forEach(this::report);

 // 3. 是否曾发生过严重故障 (任意 register != 0)
 boolean hadFault = DiagnosticStream.emergencies(s)
     .anyMatch(e -> (e.ErrorRegister & 0xFF) != 0);

 // 4. 诊断消息 (0x10F3) 流 — 适合管线传给上层 UI
 DiagnosticStream.diagnostics(s).forEach(d -> ui.append(d.toString()));
 

所有方法对 null/已释放的 Slave 返回空 Stream, 不抛异常.

从以下版本开始:
2026-05
  • 方法详细资料

    • emergencies

      public static Stream<CoE.EmergencyMessage> emergencies(Slave slave)
      紧急消息流 (CoE EMCY 历史记录).
    • emergenciesByCode

      public static Stream<CoE.EmergencyMessage> emergenciesByCode(Slave slave, short errorCode)
      按 ErrorCode 过滤紧急消息流.
      参数:
      errorCode - CiA-301 错误码 (如 0x8130 = SYNC error)
    • emergenciesByRegister

      public static Stream<CoE.EmergencyMessage> emergenciesByRegister(Slave slave, byte registerMask)
      按 ErrorRegister 高位过滤 (CiA-301 §8.4.1.2 错误寄存器位标志).
    • recentEmergencies

      public static Stream<CoE.EmergencyMessage> recentEmergencies(Slave slave, int limit)
      取最近 N 条紧急消息. 按 Timestamp 倒序排列, 限制数量.

      注意: SDK 内部缓存最多 64 条, 调 limit > 64 不会拿到更多历史.

    • emergencyCount

      public static long emergencyCount(Slave slave)
      紧急消息总数 (适合做仪表盘 KPI).
    • diagnostics

      public static Stream<CoE.DiagnosticMessage> diagnostics(Slave slave)
      ETG.1510 诊断消息流 (0x10F3).
    • diagnosticsByCode

      public static Stream<CoE.DiagnosticMessage> diagnosticsByCode(Slave slave, int diagCode)
      按 DiagCode 过滤诊断消息.
    • diagnosticsBySeverity

      public static Stream<CoE.DiagnosticMessage> diagnosticsBySeverity(Slave slave, short severityMask)
      按 Flags 类型过滤. ETG.1510 Flags 低 4 位为消息严重性 (Info/Warning/Error/...).
      参数:
      severityMask - 严重性掩码
    • latestDiagnostics

      public static Stream<CoE.DiagnosticMessage> latestDiagnostics(Slave slave, int limit)
      取最新 N 条诊断消息 (按 SubIndex 倒序, ETG.1510 子索引从老到新递增).