类 MasterDiagnosticsInfo
java.lang.Object
com.darra.ethercat.master.MasterDiagnosticsInfo
主站诊断信息类 - 帧/错误/抖动统计使用5秒滑动窗口, 0.2秒刷新
通过 master.getDiagnosticsInfo() 访问
使用示例:
MasterDiagnosticsInfo diag = master.getDiagnosticsInfo();
diag.setEnabled(true);
System.out.println("丢包率: " + diag.getPacketLossRate());
System.out.println("频率: " + diag.getRTcnt() + " Hz");
System.out.println("抖动: " + diag.getAvgJitterUs() + " us");
-
嵌套类概要
嵌套类修饰符和类型类说明static class故障点信息 (断线或 CRC 故障)static class诊断数据快照 — 一次性获取所有诊断指标的一致副本static classPDO 丢帧诊断 - 通过 master.getDiagnosticsInfo().getPDO() 访问static classdiagnostics_summary_t 的 JNA 镜像 (C 端 struct, 无 #pragma pack). -
方法概要
修饰符和类型方法说明获取所有故障点 (断线 + CRC 故障)double获取最近5秒平均抖动 (微秒)获取当前故障点, 有故障时返回第一个故障点, 无故障返回 nulldouble获取总线平均抖动 (微秒)double获取总线干净最大抖动 (微秒, 排除SMI) 对齐 C# BusCleanMaxJitterUslong获取总线频率 (Hz) - RT 帧发送频率double获取通讯负载 (%) — 一个 PDO 周期内, 报文发送到接收占用的时间百分比.double获取总线最大抖动 (微秒)double获取报文往返延迟 (微秒, 发送→接收) 对齐 C# BusRoundtripUsint获取实际周期时间 (微秒) - 实时值long获取每秒错误数, 5秒平均float过慢帧率 (0.0 ~ 1.0) — 最近 5 秒滑窗.double邮箱收发延迟 - 平均 (微秒)。double邮箱收发延迟 - 最大 (微秒)。float丢包率 (0.0 ~ 1.0) — 最近 5 秒滑窗.getPDO()获取 PDO 丢帧诊断 通过 master.getDiagnosticsInfo().getPDO() 访问long主端口最近5秒错误数获取环网模式描述intgetRTcnt()获取每秒帧数 (Hz), 5秒平均long副端口最近5秒错误数long获取SMI累计次数 对齐 C# SmiCountdouble获取SMI峰值抖动 (微秒) 对齐 C# SmiPeakUs获取诊断数据的一致快照 一次调用返回所有诊断指标的快照, 避免多次单独读取导致数据不一致int获取 DC 同步窗口阈值 (纳秒)获取时序模式描述获取拓扑描述字符串 读取原生 topology_mode 字节, 翻译由 DLL 支撑 (对齐 C#/C++/C/Rust SDK, 它们都下沉到 DLL EcDiagStrings_TopologyDescription).int获取原生拓扑模式字节 直接读取摘要结构的 topology_mode 字段 (由内核拓扑检测写入).short获取最差链路质量百分比 (0-100%)int获取最差链路质量的从站索引boolean获取诊断采集是否启用boolean主端口是否正常 (有流量且5秒内无错误)boolean冗余是否激活 (双端口均有流量)boolean副端口是否正常 (有流量且5秒内无错误, 无冗余时始终 false)readSlaveErrorCounters(int slaveIndex) 读取指定从站的错误计数器 (寄存器 0x0300-0x030B)voidreset()重置所有诊断统计voidsetEnabled(boolean enable) 设置诊断采集开关 启用后开始记录帧计数、抖动、错误率等统计数据。voidsetSyncWindowThreshold(int thresholdNs) 设置 DC 同步窗口阈值 (纳秒), 超过阈值触发 DCSyncLost 事件toString()
-
方法详细资料
-
isEnabled
public boolean isEnabled()获取诊断采集是否启用 -
setEnabled
public void setEnabled(boolean enable) 设置诊断采集开关 启用后开始记录帧计数、抖动、错误率等统计数据。 默认关闭。PDO 丢帧统计、冗余检测、DC 同步等功能不受此开关影响。 -
getPacketLossRate
public float getPacketLossRate()丢包率 (0.0 ~ 1.0) — 最近 5 秒滑窗. 用户原话 (2026-04-27): "丢包率 = 发出 vs 接收, 过慢 (pipeline) 不算". 算法: max(0, ΣTX - ΣRX - 2 帧 pipeline) / ΣTX, 内核统一计算 (单一数据源). 对齐 C# PacketLossRate. -
getLateFrameRate
public float getLateFrameRate()过慢帧率 (0.0 ~ 1.0) — 最近 5 秒滑窗. idx 出 8 帧窗的 stale 帧 kernel drop, 不计入丢包. 全双工正常 pipeline 下不该出现. 对齐 C# LateFrameRate. -
getRTcnt
public int getRTcnt()获取每秒帧数 (Hz), 5秒平均 -
getErrorCnt
public long getErrorCnt()获取每秒错误数, 5秒平均 -
getCycleTimeSpan
public int getCycleTimeSpan()获取实际周期时间 (微秒) - 实时值 -
getAvgJitterUs
public double getAvgJitterUs()获取最近5秒平均抖动 (微秒) -
getMailboxLatencyUs
public double getMailboxLatencyUs()邮箱收发延迟 - 最大 (微秒)。[2026-05-21 PDO 纯内核化改造] 旧
getMaxJitterUs()("应用抖动") 测的是 异步通知线程被 PDO 每周期唤醒的间隔抖动。PDO 过程数据已是纯内核 RT 收发 + GlobalIO 共享内存指针零拷贝, 应用层直接读写过程映像, 不存在"用户态每周期通知" 环节, 该指标失去意义。现语义: 邮箱 (CoE/SoE/FoE/EoE/AoE/VoE 等非周期、请求-响应) 事务的收发往返 时延 —— 从请求发出到响应返回的最大耗时 (最近 1 秒结算)。平均值见
getMailboxLatencyAvgUs()。 -
getMailboxLatencyAvgUs
public double getMailboxLatencyAvgUs()邮箱收发延迟 - 平均 (微秒)。见getMailboxLatencyUs()。 -
getBusCycleHz
public long getBusCycleHz()获取总线频率 (Hz) - RT 帧发送频率 -
getBusMaxJitterUs
public double getBusMaxJitterUs()获取总线最大抖动 (微秒) -
getBusAvgJitterUs
public double getBusAvgJitterUs()获取总线平均抖动 (微秒) -
getBusRoundtripUs
public double getBusRoundtripUs()获取报文往返延迟 (微秒, 发送→接收) 对齐 C# BusRoundtripUs -
getBusLoadPercent
public double getBusLoadPercent()获取通讯负载 (%) — 一个 PDO 周期内, 报文发送到接收占用的时间百分比. 计算: BusRoundtripUs / CycleTimeSpan × 100. 含义: 无效输入:'<'30% 健康, 链路宽裕 30-70% 中等, 升频率/加从站需谨慎 >70% 接近极限, 必须降频或减少从站 对齐 C# BusLoadPercent. -
getBusCleanMaxJitterUs
public double getBusCleanMaxJitterUs()获取总线干净最大抖动 (微秒, 排除SMI) 对齐 C# BusCleanMaxJitterUs -
getSmiCount
public long getSmiCount()获取SMI累计次数 对齐 C# SmiCount -
getSmiPeakUs
public double getSmiPeakUs()获取SMI峰值抖动 (微秒) 对齐 C# SmiPeakUs -
isPrimaryPortOk
public boolean isPrimaryPortOk()主端口是否正常 (有流量且5秒内无错误) -
isSecondaryPortOk
public boolean isSecondaryPortOk()副端口是否正常 (有流量且5秒内无错误, 无冗余时始终 false) -
getPrimaryPortErrors
public long getPrimaryPortErrors()主端口最近5秒错误数 -
getSecondaryPortErrors
public long getSecondaryPortErrors()副端口最近5秒错误数 -
isRedundancyActive
public boolean isRedundancyActive()冗余是否激活 (双端口均有流量) -
getWorstSlaveIndex
public int getWorstSlaveIndex()获取最差链路质量的从站索引 -
getWorstLinkQuality
public short getWorstLinkQuality()获取最差链路质量百分比 (0-100%) -
getSyncWindowThreshold
public int getSyncWindowThreshold()获取 DC 同步窗口阈值 (纳秒) -
setSyncWindowThreshold
public void setSyncWindowThreshold(int thresholdNs) 设置 DC 同步窗口阈值 (纳秒), 超过阈值触发 DCSyncLost 事件 -
reset
public void reset()重置所有诊断统计 -
GetSnapshot
获取诊断数据的一致快照 一次调用返回所有诊断指标的快照, 避免多次单独读取导致数据不一致- 返回:
- 诊断快照
-
readSlaveErrorCounters
读取指定从站的错误计数器 (寄存器 0x0300-0x030B)- 参数:
slaveIndex- 从站编号 (1-based)- 返回:
- 错误计数器数据
-
getPDO
获取 PDO 丢帧诊断 通过 master.getDiagnosticsInfo().getPDO() 访问 -
getBreakPoint
获取当前故障点, 有故障时返回第一个故障点, 无故障返回 null -
getAllBreakPoints
获取所有故障点 (断线 + CRC 故障) -
getTopologyMode
public int getTopologyMode()获取原生拓扑模式字节 直接读取摘要结构的 topology_mode 字段 (由内核拓扑检测写入). 取值: 0=线性, 1=环形, 2=环+分支. 失败返回 0xFF.- 返回:
- 原生 topology_mode 字节 (无符号, 0-255)
-
getTopologyDescription
获取拓扑描述字符串 读取原生 topology_mode 字节, 翻译由 DLL 支撑 (对齐 C#/C++/C/Rust SDK, 它们都下沉到 DLL EcDiagStrings_TopologyDescription).- 返回:
- 拓扑描述: "线性" / "环形" / "环+分支", 未知或 DLL 不可用时 "未知"
-
getTimingMode
获取时序模式描述- 返回:
- 时序模式字符串: "FreeRun" / "DC Sync0" / "DC Sync01"
-
getRingMode
获取环网模式描述- 返回:
- 环网模式: "无冗余" / "双向冗余" / "降级(仅primary)"
-
toString
-