类 DiagnosticStream
java.lang.Object
com.darra.ethercat.sugar.DiagnosticStream
诊断 / 紧急消息 (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
-
方法概要
修饰符和类型方法说明static Stream<CoE.DiagnosticMessage> diagnostics(Slave slave) ETG.1510 诊断消息流 (0x10F3).static Stream<CoE.DiagnosticMessage> diagnosticsByCode(Slave slave, int diagCode) 按 DiagCode 过滤诊断消息.static Stream<CoE.DiagnosticMessage> diagnosticsBySeverity(Slave slave, short severityMask) 按 Flags 类型过滤.static Stream<CoE.EmergencyMessage> emergencies(Slave slave) 紧急消息流 (CoE EMCY 历史记录).static Stream<CoE.EmergencyMessage> emergenciesByCode(Slave slave, short errorCode) 按 ErrorCode 过滤紧急消息流.static Stream<CoE.EmergencyMessage> emergenciesByRegister(Slave slave, byte registerMask) 按 ErrorRegister 高位过滤 (CiA-301 §8.4.1.2 错误寄存器位标志).static longemergencyCount(Slave slave) 紧急消息总数 (适合做仪表盘 KPI).static Stream<CoE.DiagnosticMessage> latestDiagnostics(Slave slave, int limit) 取最新 N 条诊断消息 (按 SubIndex 倒序, ETG.1510 子索引从老到新递增).static Stream<CoE.EmergencyMessage> recentEmergencies(Slave slave, int limit) 取最近 N 条紧急消息.
-
方法详细资料
-
emergencies
紧急消息流 (CoE EMCY 历史记录). -
emergenciesByCode
按 ErrorCode 过滤紧急消息流.- 参数:
errorCode- CiA-301 错误码 (如 0x8130 = SYNC error)
-
emergenciesByRegister
按 ErrorRegister 高位过滤 (CiA-301 §8.4.1.2 错误寄存器位标志). -
recentEmergencies
取最近 N 条紧急消息. 按 Timestamp 倒序排列, 限制数量.注意: SDK 内部缓存最多 64 条, 调
limit > 64不会拿到更多历史. -
emergencyCount
紧急消息总数 (适合做仪表盘 KPI). -
diagnostics
ETG.1510 诊断消息流 (0x10F3). -
diagnosticsByCode
按 DiagCode 过滤诊断消息. -
diagnosticsBySeverity
按 Flags 类型过滤. ETG.1510 Flags 低 4 位为消息严重性 (Info/Warning/Error/...).- 参数:
severityMask- 严重性掩码
-
latestDiagnostics
取最新 N 条诊断消息 (按 SubIndex 倒序, ETG.1510 子索引从老到新递增).
-