类 DC
-
嵌套类概要
嵌套类修饰符和类型类说明static enumDC 同步模式 (对齐 C# DcSyncMode, ETG.1020)static class同步窗口状态 -
构造器概要
构造器 -
方法概要
修饰符和类型方法说明booleanConfigureDC(int sync0CycleNs, int sync1CycleNs, int shiftNs) 配置 DC 同步 (参数单位: 纳秒) 对齐 C# Slave.ConfigureDC — 成功返回 true, 失败 (底层抛异常) 返回 false.booleanConfigureDC(DC.DcSyncMode mode) 按模式配置 DC (默认参数)booleanConfigureDC(DC.DcSyncMode mode, int sync0CycleNs, int sync1CycleNs, int shiftNs) 根据同步模式配置 DC (ETG.1020) FreeRun: 禁用 SYNC0/SYNC1 SmSynchron: 禁用 SYNC0/SYNC1, SM 同步 DcSynchron: 配置 SYNC0 信号 DcSynchron01: 配置 SYNC0 + SYNC1 信号获取当前 DC 同步模式 (对齐 C# CurrentDcSyncMode).int查询本从站 ESI 声明的 DC 同步模式 (对齐 C SDK esi_dll_get_device_dc_sync_mode / native EcEsi_GetDeviceDcSyncMode, 序号 1606).void禁用 DC 同步voidenableContinuousMeasurement(boolean enable, int intervalSec) 启用/禁用持续传播延迟测量 (ETG.1500 5.13.2)voidenableDriftCompensation(boolean enable, int maxDriftNs, int correctionFactor) 启用/禁用 DC 漂移补偿long主站最近一次 PDO 周期从参考时钟从站 FRMW 取回的 64-bit DC 系统时间 (纳秒).int获取所有 DC 从站中的最大同步偏差 (纳秒)int当前参考时钟从站索引 (1-based).获取同步窗口状态booleanhasDC()从站是否启用 DC (ESC 硬件 bit, 对齐 C# Slave.HasDC).booleanESI 是否声明此从站使用 DC 同步 (对齐 C# Slave.HasEsiDcSync / C SDK esi_dll_has_esi_dc_sync).booleanisAllSlavesInSync(int thresholdNs) 检查所有 DC 从站是否都在同步窗口内int获取从站传播延迟 (纳秒)void重置所有从站的同步窗口统计void重置同步窗口统计
-
构造器详细资料
-
DC
public DC(short masterIndex, short slaveIndex)
-
-
方法详细资料
-
ConfigureDC
public boolean ConfigureDC(int sync0CycleNs, int sync1CycleNs, int shiftNs) 配置 DC 同步 (参数单位: 纳秒) 对齐 C# Slave.ConfigureDC — 成功返回 true, 失败 (底层抛异常) 返回 false. 注意: 底层 SetSyncBySlaveIndex 本身无返回码, 真实硬件错误需通过主站 LastError 查询.- 参数:
sync0CycleNs- SYNC0 周期sync1CycleNs- SYNC1 周期, 0=禁用shiftNs- 相位偏移- 返回:
- true=派发成功, false=底层异常
-
DisableDC
public void DisableDC()禁用 DC 同步 -
hasDC
public boolean hasDC()从站是否启用 DC (ESC 硬件 bit, 对齐 C# Slave.HasDC). 与 Slave.hasDC() 同源, 此处提供 DC 命名空间下的便捷入口. -
dcSyncModeFromEsi
public int dcSyncModeFromEsi()查询本从站 ESI 声明的 DC 同步模式 (对齐 C SDK esi_dll_get_device_dc_sync_mode / native EcEsi_GetDeviceDcSyncMode, 序号 1606).返回值 (与 native esi_parser EsiDevice::dc_sync_mode 一致):
- -2 = 参数非法 / 从站未绑定 ESI Device (调用方应退化为 hasDC())
- -1 = ESI 未声明 <Dc> 节点 (从站不用 DC, 应跑 FreeRun)
- 0 = ESI <Dc> 存在但无 OpMode → FreeRun
- 1 = SM-Sync (启用 SM 但 AssignActivate 无 0x100)
- 2 = DC-Sync0 (EL7041-1000 / Ezi-SERVO2 等)
- 3 = DC-Sync01
前提: 已 EcEsi_LoadDirectory + EcEsi_AutoMatchAll 把 ESI 绑定到从站 (测试程序 Phase3a 在进 PreOp 之后临时加载/绑定). 未绑定时返回 -2.
- 返回:
- 上述枚举值; native 不可用返回 -2
-
hasEsiDcSync
public boolean hasEsiDcSync()ESI 是否声明此从站使用 DC 同步 (对齐 C# Slave.HasEsiDcSync / C SDK esi_dll_has_esi_dc_sync).hasDC() 仅反映 ESC 硬件 bit, 不代表应用层使用 DC; 启用 DC 前应同时 检查 hasDC() 无效输入:'&'无效输入:'&' hasEsiDcSync(). 用于过滤例如 EL6022 / EK1110 / GCAN-8200 这类 ESC 报 DC capable 但 ESI 未声明 DC OpMode 的从站, 避免强写 DCCUC=0x0300 导致 DC 寄存器 FPWR wkc=0 (active=0x0000 如实 FAIL) 或 PreOP→SafeOP 卡死.
[2026-05-20 根因修复] 此前用 managed
EsiManager.getFiles()缓存查表, 但 Java SDKsetEsiFiles()从未把路径加载进 managed 缓存 (pendingEsiPaths 只 add 不 consume), 故缓存恒空 → 永远 fallback 到 hasDC() → EL6022/EK1110 被误判要测 DC. 现改用 native EcEsi_GetDeviceDcSyncMode (序号 1606), 与已真机验证的 C/C++ SDK 完全 一致: dc_sync_mode >= 2 (DC-Sync0/01) 才算 ESI 真声明 DC.判定: EcEsi_GetDeviceDcSyncMode >= 2 → 真; 0/1 (FreeRun/SM-Sync) 与 -1 (ESI 无<Dc>) → 假; 未绑定 (-2) → 退化为 hasDC() 保守不误关.
- 返回:
- 是否声明使用 DC OpMode
-
PropagationDelay
public int PropagationDelay()获取从站传播延迟 (纳秒) -
GetSyncWindowStatus
获取同步窗口状态- 返回:
- 状态, 不支持DC或读取失败返回 null
-
ResetSyncWindowStats
public void ResetSyncWindowStats()重置同步窗口统计 -
enableContinuousMeasurement
public void enableContinuousMeasurement(boolean enable, int intervalSec) 启用/禁用持续传播延迟测量 (ETG.1500 5.13.2)- 参数:
enable- 是否启用intervalSec- 测量间隔 (秒), 0=使用默认值 (10秒) (对齐 C# intervalSec)
-
enableDriftCompensation
public void enableDriftCompensation(boolean enable, int maxDriftNs, int correctionFactor) 启用/禁用 DC 漂移补偿- 参数:
enable- 是否启用maxDriftNs- 漂移阈值 (纳秒), 超过此值才进行补偿correctionFactor- 补偿增益 (0-1024, 表示 0.0-1.0)
-
isAllSlavesInSync
public boolean isAllSlavesInSync(int thresholdNs) 检查所有 DC 从站是否都在同步窗口内- 参数:
thresholdNs- 同步阈值 (纳秒), 由 DLL 内部判断- 返回:
- 所有从站在同步窗口内返回 true
-
getMaxSyncDifference
public int getMaxSyncDifference()获取所有 DC 从站中的最大同步偏差 (纳秒)- 返回:
- 最大同步偏差 (纳秒), 失败返回 -1
-
resetAllSyncWindowStats
public void resetAllSyncWindowStats()重置所有从站的同步窗口统计 -
getMasterDCTime
public long getMasterDCTime()主站最近一次 PDO 周期从参考时钟从站 FRMW 取回的 64-bit DC 系统时间 (纳秒). ETG 2000-01-01 纪元. 应用层可用此值为事件/日志加时间戳.
Master's latest 64-bit DC system time (ns, ETG 2000-01-01 epoch) read back via FRMW on the reference clock slave. Useful for time-stamping events and log entries consistent with slave DC clocks.- 返回:
- DC 时间 (纳秒) / DC time in nanoseconds; 0 表示 DC 未激活 / 0 if DC not active.
-
getReferenceClockSlaveIndex
public int getReferenceClockSlaveIndex()当前参考时钟从站索引 (1-based). 由 DLL 在 configdc 阶段自动选为第一个 DC-capable 从站, 用户无需配置.
Reference clock slave index (1-based). The DLL picks this duringconfigdc; no user action required.- 返回:
- 参考时钟从站索引 / reference clock slave index; 0 表示网络中无 DC 从站.
-
ConfigureDC
根据同步模式配置 DC (ETG.1020) FreeRun: 禁用 SYNC0/SYNC1 SmSynchron: 禁用 SYNC0/SYNC1, SM 同步 DcSynchron: 配置 SYNC0 信号 DcSynchron01: 配置 SYNC0 + SYNC1 信号- 参数:
mode- DC 同步模式sync0CycleNs- SYNC0 周期 (纳秒), 仅 DcSynchron 模式使用sync1CycleNs- SYNC1 周期 (纳秒), 仅 DcSynchron01 模式使用shiftNs- 相位偏移 (纳秒), 仅 DcSynchron 模式使用
-
ConfigureDC
按模式配置 DC (默认参数) -
CurrentDcSyncMode
获取当前 DC 同步模式 (对齐 C# CurrentDcSyncMode). 通过 native GetDcSyncMode (内部读 0x1C32:01) 判断真实同步模式, 回退到 DC 寄存器状态推断. 协议算法已下沉到 Darra.Core.dll, SDK 公开代码不再出现 SDO 0x1C32 / 0x1C33 数字.- 返回:
- 当前 DC 同步模式
-