类 Slave

java.lang.Object
com.darra.ethercat.slave.Slave

public class Slave extends Object
EtherCAT 从站 封装从站级别的操作: SDO 读写、SoE/FoE/EoE/AoE/VoE 协议、寄存器访问等

属性风格: PascalCase 方法名 (匹配 C# 命名), 不使用 get/set 前缀

不变值使用 public final 字段, 动态值使用无前缀方法, 可读写属性使用重载方法

  • 字段详细资料

    • SlaveNum

      public final short SlaveNum
      从站编号 (构造后不变)
    • MasterIndex

      public final short MasterIndex
      所属主站编号 (构造后不变)
  • 构造器详细资料

    • Slave

      public Slave(short masterIndex, short slaveIndex)
  • 方法详细资料

    • Events

      public SlaveEvents Events()
      从站事件集合 (对齐 C# Slave.Events)
    • CoE

      public CoE CoE()
      CoE (CANopen over EtherCAT) 协议实例
    • SoE

      public SoE SoE()
      SoE (Servo over EtherCAT) 协议实例
    • FoE

      public FoE FoE()
      FoE (File over EtherCAT) 协议实例
    • EoE

      public EoE EoE()
      EoE (Ethernet over EtherCAT) 协议实例
    • AoE

      public AoE AoE()
      AoE (ADS over EtherCAT) 协议实例
    • VoE

      public VoE VoE()
      VoE (Vendor specific over EtherCAT) 协议实例
    • FSoE

      public FSoE FSoE()
      FSoE (Functional Safety over EtherCAT) 协议实例
    • DC

      public DC DC()
      DC (Distributed Clocks) 配置实例
    • PDO

      public PDO PDO()
      PDO (过程数据对象) 访问实例
    • SlavePdo

      public SlavePdo SlavePdo()
      SlavePdo 实例
    • Diagnostics

      public SlaveStats Diagnostics()
      从站统计信息
    • Topology

      public SlaveTopology Topology()
      从站拓扑信息
    • CiA402

      public CiA402 CiA402()
      CiA 402 驱动器协议实例
    • CiA401

      public CiA401 CiA401()
      CiA 401 I/O 模块协议实例
    • MDP

      public MDP MDP()
      MDP (Modular Device Profile) 辅助实例
    • Esi

      public Esi Esi()
      ESI (EtherCAT Slave Information) 实例
    • StartupParameters

      public Startup.StartupParameterList StartupParameters()
      Startup 参数列表
    • AliasAddress

      public short AliasAddress()
      从站别名地址
    • Name

      public String Name()
      从站名称 (来自 EEPROM). 异常默认 "".

      C 原型为缓冲区式 int GetSlaveName(mi, si, char* buf, int buf_size) — 必须由调用方分配缓冲区传入. 此前误用 String GetSlaveName(mi, si) (缺 buf/buf_size 实参), C 端读寄存器垃圾当指针写入, 破坏原生栈导致 STATUS_STACK_OVERFLOW 整进程崩溃; try/catch 无法拦截原生崩溃. 现对齐 C# 基准.

    • DriveName

      public String DriveName()
      设备名称 (来自 SDO 0x1008). 异常默认 "". 见 Name() 修复说明.
    • VendorId

      public int VendorId()
      厂商 ID
    • ProductId

      public int ProductId()
      产品 ID
    • RevId

      public int RevId()
      修订版本号
    • Revision

      public int Revision()
      修订版本号别名
    • SerialNumber

      public int SerialNumber()
      序列号
    • ConfigAddr

      public short ConfigAddr()
      配置地址
    • Index

      public int Index()
      从站索引别名
    • State

      public EcState State()
      当前 EtherCAT 状态
    • ErrorCode

      public EtherCATTypes.EcALState ErrorCode()
      错误码 (AL Status Code)
    • StateLive

      public EcState StateLive()
      当前 EtherCAT 状态 (强制实时读, 绕过缓存). 异常默认 UNKNOWN.
    • ErrorCodeLive

      public EtherCATTypes.EcALState ErrorCodeLive()
      错误码 (AL Status Code, 强制实时读, 绕过缓存). 异常默认 0.
    • WcContributed

      public EcatSlaveDiag.EcWcContributed WcContributed()
      本周期该从站是否贡献了应有 WKC (内核 per-slave 位).

      native byte GetSlaveWcState 有符号, & 0xFF 还原 unsigned; 1=在线贡献, 0=没贡献(疑似掉站), 0xFF=未知(契约未就绪). DLL 未导出时降级 UNKNOWN.

      返回:
      EcatSlaveDiag.EcWcContributed 枚举 (诚实, 不臆造在线/掉站)
    • AlStatusMirror

      public EcatSlaveDiag.EcAlStatusMirror AlStatusMirror()
      从站 AL 状态镜像 (内核 round-robin 填的 16bit raw, 低字节 AL State / 有 Error 高字节 Code).

      native short GetSlaveAlStatusMirror 有符号, & 0xFFFF 还原 unsigned 后 由 EcatSlaveDiag.EcAlStatusMirror.fromRaw(int) 拆位映射枚举; raw==0 时 isKnown()=false. DLL 未导出时降级为 raw=0 (未知).

      返回:
      EcatSlaveDiag.EcAlStatusMirror 解析对象 (含 AL State + Error + AL Status Code)
    • MailboxHealth

      public EcatSlaveDiag.EcMailboxHealth MailboxHealth()
      从站邮箱健康度 (调 GetSlaveMailboxHealth, 薄读零帧).

      EcatSlaveDiag.EcMailboxHealth.DEGRADED 表示从站仍在 OP, 但邮箱通道半失效 (CoE/SDO 可能阻塞); native byte 有符号, & 0xFF 还原 unsigned 后映射枚举. 对齐 C# Slave.MailboxHealth (EcMailboxHealth) / C++ MailboxHealth(). DLL 未导出时降级 UNKNOWN.

      返回:
      EcatSlaveDiag.EcMailboxHealth 枚举 (UNKNOWN / HEALTHY / DEGRADED)
    • IsFreeRunDemoted

      public boolean IsFreeRunDemoted()
      该从站是否被迫降级到 FreeRun 同步模式 (调 GetSlaveFreeRunDemoted, 薄读零帧).

      true 仅当 "配置期要 DC 但运行中被迫退到 FreeRun"; 本就只支持 FreeRun 的从站 (如 EL7041) 正常工作时返回 false. native byte != 0 即已降级. 对齐 C# Slave.IsFreeRunDemoted / C++ IsFreeRunDemoted() / Rust free_run_demoted(). 异常默认 false (假设正常更安全).

      返回:
      是否被降级 FreeRun
    • HealthDegradedCount

      public long HealthDegradedCount()
      从站健康降级累计次数 (调 GetSlaveHealthDegradedCount, 薄读零帧).

      邮箱半失效连续累计计数 (≈秒数), 0=健康或未评估; 持续累加表示半失效未恢复, 内核 StateGuard 在半失效持续 >=3 秒后会自动修复. native uint32, 上层用 long & 0xFFFFFFFFL 还原 unsigned. 对齐 C# Slave.HealthDegradedCount (uint) / C++ HealthDegradedCount() (uint32_t) / Rust health_degraded_count(). R1: 仅计数观测, 不改 WKC. 异常默认 0.

      返回:
      健康降级累计次数 (unsigned uint32, 已 & 0xFFFFFFFFL 还原)
    • RecoverMailboxHealth

      public boolean RecoverMailboxHealth()
      手动触发该从站邮箱半失效修复 (调 RecoverSlaveMailboxHealth).

      残留 A 邮箱半失效时主动触发恢复 — 显式运维动作, 不是静默掩盖. 通常无需手动调用, 内核 StateGuard 在半失效持续 >=3 秒后会自动修复. native 返回 C BOOL (4 字节), JNA boolean 默认按 4 字节 BOOL 编组, 与 C# 默认 bool 对齐. 对齐 C# Slave.RecoverMailboxHealth() / C++ RecoverMailboxHealth() / Rust recover_mailbox_health(). 异常默认 false.

      返回:
      true=修复尝试已触发; false=参数无效 / 当前无需修复 / DLL 未导出
    • IsLost

      public boolean IsLost()
      从站是否丢失. 异常默认 true (假设丢失更安全).
    • HasDC

      public boolean HasDC()
      是否支持 DC. 异常默认 false (跳过 DC 配置更安全).
    • ActivePorts

      public byte ActivePorts()
      活动端口
    • Ibits

      public short Ibits()
      输入数据位数
    • Ibytes

      public int Ibytes()
      输入数据字节数
    • Ioffset

      public int Ioffset()
      输入数据偏移
    • Istartbit

      public byte Istartbit()
      输入起始位
    • Obits

      public short Obits()
      输出数据位数
    • Obytes

      public int Obytes()
      输出数据字节数
    • Ooffset

      public int Ooffset()
      输出数据偏移
    • Ostartbit

      public byte Ostartbit()
      输出起始位
    • BlockLRW

      public boolean BlockLRW()
      Block LRW 标志
    • EbusCurrent

      public short EbusCurrent()
      E-bus 电流消耗 (mA)
    • Eep8ByteAddressing

      public boolean Eep8ByteAddressing()
      EEPROM 8 字节寻址
    • EepPDI

      public byte EepPDI()
      物理接口 (PDI) 类型
    • CoEdetails

      public byte CoEdetails()
      CoE 协议详情
    • FoEdetails

      public byte FoEdetails()
      FoE 协议详情
    • EoEdetails

      public byte EoEdetails()
      EoE 协议详情
    • SoEdetails

      public byte SoEdetails()
      SoE 协议详情
    • MbxProto

      public short MbxProto()
      邮箱协议类型. 异常默认 0 (无邮箱, 跳过测试).
    • MbxLength

      public short MbxLength()
      邮箱发送缓冲区大小
    • MbxReadLength

      public short MbxReadLength()
      邮箱读取长度
    • MbxReadOffset

      public short MbxReadOffset()
      邮箱读取偏移
    • MbxWriteOffset

      public short MbxWriteOffset()
      邮箱写入偏移
    • MbxCount

      public byte MbxCount()
      邮箱计数器
    • FMMU0Function

      public byte FMMU0Function()
      FMMU0 功能类型
    • FMMU1Function

      public byte FMMU1Function()
      FMMU1 功能类型
    • FMMU2Function

      public byte FMMU2Function()
      FMMU2 功能类型
    • FMMU3Function

      public byte FMMU3Function()
      FMMU3 功能类型
    • DCActive

      public int DCActive()
      DC AssignActivate 值 (0=禁用, 非0=已激活)
    • DCCycle0

      public int DCCycle0()
      SYNC0 周期 (纳秒)
    • DCCycle1

      public int DCCycle1()
      SYNC1 周期 (纳秒)
    • DCShift

      public int DCShift()
      DC 相位偏移 (纳秒)
    • DCNext

      public int DCNext()
      DC 下一个从站索引
    • DCPrevious

      public int DCPrevious()
      DC 上一个从站索引
    • PDelay

      public int PDelay()
      传播延迟
    • EntryPort

      public byte EntryPort()
      入口端口
    • ParentPort

      public byte ParentPort()
      父端口号
    • ParentStation

      public int ParentStation()
      拓扑信息: 父从站 **索引** (1-based, 注意不是 station address). 0 表示父节点是主站. 来自 C 端 slave_t.topo.parent ("parent slave index, 0=master"). 命名是历史遗留 — 实际是 index 不是 station addr (configadr = 0x1000 + index). 不要直接用作 station addr 比较, 必要时 +0x1000 转 configadr.
    • PhysicalType

      public byte PhysicalType()
      拓扑类型
    • TopologyByte

      public byte TopologyByte()
      拓扑信息
    • Group

      public byte Group()
      从站组归属 (0-7) - 读取
    • Group

      public void Group(byte value)
      从站组归属 (0-7) - 写入
    • IsOptional

      public boolean IsOptional()
      可选从站标记 - 读取
    • IsOptional

      public void IsOptional(boolean value)
      可选从站标记 - 写入
    • SupportsFrameRepeat

      public boolean SupportsFrameRepeat()
      帧重发支持标记 - 读取
    • SupportsFrameRepeat

      public void SupportsFrameRepeat(boolean value)
      帧重发支持标记 - 写入
    • DCReceiveTimeA

      public int DCReceiveTimeA()
      端口 A 接收时间 (纳秒)
    • DCReceiveTimeB

      public int DCReceiveTimeB()
      端口 B 接收时间 (纳秒)
    • DCReceiveTimeC

      public int DCReceiveTimeC()
      端口 C 接收时间 (纳秒)
    • DCReceiveTimeD

      public int DCReceiveTimeD()
      端口 D 接收时间 (纳秒)
    • GetWatchdogConfig

      public int[] GetWatchdogConfig()
      获取看门狗配置 (寄存器值)
      返回:
      [分频器, PDI超时, PD超时], 失败返回 null
    • GetWatchdogStatus

      public int[] GetWatchdogStatus()
      获取看门狗状态
      返回:
      [是否过期(0/1), 计数器, 分频器, 超时值], 失败返回 null
    • RedundancyActivated

      public boolean RedundancyActivated()
      冗余是否已激活 (从站通过冗余路径通信)
    • PrimaryLinkBroken

      public boolean PrimaryLinkBroken()
      主线路是否断路
    • SecondaryLinkBroken

      public boolean SecondaryLinkBroken()
      冗余线路是否断路
    • HasEsi

      public boolean HasEsi()
      是否已加载 ESI 文件
    • EsiVersion

      public String EsiVersion()
      ESI 文件版本, 未加载返回空串
    • HasMDP

      public boolean HasMDP()
      是否支持 Modular Device Profile
    • VendorName

      public String VendorName()
      厂商名称 (来自 ESI 文件)
    • SetEsiFile

      public int SetEsiFile(String filePath)
      设置从站 ESI 文件路径
      参数:
      filePath - ESI 文件路径
      返回:
      0=成功, 负数=错误
    • readRegister

      public byte[] readRegister(int offset, int size)
      读取从站寄存器 (FPRD)
      参数:
      offset - 寄存器地址偏移
      size - 读取字节数
      返回:
      寄存器数据, 失败返回 null
    • writeRegister

      public boolean writeRegister(int offset, byte[] data)
      写入从站寄存器 (FPWR)
      参数:
      offset - 寄存器地址偏移
      data - 写入数据
      返回:
      是否成功
    • writeDLPort

      public boolean writeDLPort(byte value)
      写入从站 DL Port 控制寄存器 (0x0101)
      参数:
      value - DLPORT 值 (0x00=Auto, 0x03=P0关, 0x0C=P1关, 0x30=P2关)
      返回:
      是否成功
    • readDLPort

      public byte readDLPort()
      读取从站 DL Port 控制寄存器 (0x0101)
      返回:
      DLPORT 当前值 (读失败返回 0)
    • readEeprom

      public byte[] readEeprom(int byteOffset, int byteLength)
      读取从站 SII EEPROM 字节区域 (按 word 循环, 内部走 SIIReadWord)
    • writeEeprom

      public boolean writeEeprom(int byteOffset, byte[] data)
      写入从站 SII EEPROM 字节区域. 要求 byteOffset 和 data.length 偶数. 调用方需先 SIIAcquire.
    • configureSyncManager

      public boolean configureSyncManager(int smIndex, int startAddr, int length, int control, boolean enable)
      配置 SyncManager
      参数:
      smIndex - SM 编号 (0-7)
      startAddr - SM 起始物理地址
      length - SM 缓冲区长度 (字节)
      control - SM 控制字节 (方向/模式等)
      enable - 是否启用
      返回:
      是否成功
    • configureFMMU

      public boolean configureFMMU(int fmmuIndex, int logicalAddr, int length, int logicalStartBit, int logicalEndBit, int physicalAddr, int physicalStartBit, int fmmuType, boolean enable)
      配置 FMMU
      参数:
      fmmuIndex - FMMU 编号 (0-15)
      logicalAddr - 逻辑起始地址
      length - 映射长度 (字节)
      logicalStartBit - 逻辑起始位
      logicalEndBit - 逻辑结束位
      physicalAddr - 物理起始地址
      physicalStartBit - 物理起始位
      fmmuType - FMMU 类型 (1=输入, 2=输出)
      enable - 是否启用
      返回:
      是否成功
    • enableOutputSyncManager

      public boolean enableOutputSyncManager()
      启用输出 SyncManager (对应 C# EnableOutputSyncManager)
      返回:
      是否成功
    • disableOutputSyncManager

      public boolean disableOutputSyncManager()
      禁用输出 SyncManager (对应 C# DisableOutputSyncManager)
      返回:
      是否成功
    • SetWatchdog

      public boolean SetWatchdog(int timeoutMs)
      设置过程数据看门狗超时 (毫秒), 0=禁用
    • SetPdiWatchdog

      public boolean SetPdiWatchdog(int timeoutMs)
      设置 PDI 看门狗超时 (毫秒), 0=禁用
    • SetState

      public boolean SetState(EcState targetState, int timeoutMs)
      设置从站 EtherCAT 状态
      参数:
      targetState - 目标状态
      timeoutMs - 超时时间 (毫秒)
      返回:
      是否成功
    • SetState

      public boolean SetState(EcState targetState)
      设置从站 EtherCAT 状态 (默认 3000ms 超时)
    • ConfigureDC

      public void ConfigureDC(int sync0CycleNs, int sync1CycleNs, int shiftNs)
      配置 DC 同步
      参数:
      sync0CycleNs - SYNC0 周期 (纳秒)
      sync1CycleNs - SYNC1 周期 (纳秒)
      shiftNs - 相位偏移 (纳秒)
    • DisableDC

      public void DisableDC()
      禁用 DC 同步
    • toString

      public String toString()
      覆盖:
      toString 在类中 Object
    • writeOutput

      public void writeOutput(byte[] data)
      写入从站输出数据
      参数:
      data - 要写入的字节数组
    • writeOutputByte

      public void writeOutputByte(int offset, byte value)
      写入从站输出单字节
      参数:
      offset - 偏移量 (字节)
      value - 要写入的值
    • GetSlaveIdentity

      public int[] GetSlaveIdentity()
      获取从站身份信息
      返回:
      身份信息数组 [VendorId, ProductCode, RevisionNo, SerialNo], 失败返回 null
    • VerifySlaveIdentity

      public boolean VerifySlaveIdentity(int vendorId, int productCode, int revisionNo, int serialNo, boolean checkRev, boolean checkSerial)
      验证从站身份是否匹配
      参数:
      vendorId - 期望的厂商 ID
      productCode - 期望的产品代码
      revisionNo - 期望的修订号
      serialNo - 期望的序列号
      checkRev - 是否检查修订号
      checkSerial - 是否检查序列号
      返回:
      是否匹配
    • GetEsmTimeouts

      public int[] GetEsmTimeouts()
      获取从站 ESM 状态转换超时配置
      返回:
      超时数组 [IP, PS, SO, OS, SP, PI, BI, IB] (毫秒), 失败返回 null
    • SetEsmTimeouts

      public boolean SetEsmTimeouts(int ip, int ps, int so, int os, int sp, int pi, int bi, int ib)
      设置从站 ESM 状态转换超时配置
      参数:
      ip - Init -> PreOp (ms)
      ps - PreOp -> SafeOp (ms)
      so - SafeOp -> OP (ms)
      os - OP -> SafeOp (ms)
      sp - SafeOp -> PreOp (ms)
      pi - PreOp -> Init (ms)
      bi - Any -> Boot (ms)
      ib - Boot -> Init (ms)
      返回:
      是否成功
    • GetOpOnlyFlag

      public boolean GetOpOnlyFlag()
      获取从站 OpOnly 标志 (仅在 OP 状态下交换数据)
      返回:
      是否为 OpOnly
    • SetErrorAck

      public boolean SetErrorAck(boolean setAck)
      设置从站错误确认 (清除 AL 错误)
      参数:
      setAck - true=确认错误, false=清除确认
      返回:
      是否成功
    • GetDeviceEmulationFlag

      public boolean GetDeviceEmulationFlag()
      获取从站设备仿真标志
      返回:
      是否为仿真设备
    • GetNeedsStartupReconfig

      public boolean GetNeedsStartupReconfig()
      获取从站是否需要启动重配置 (热插拔后)
      返回:
      是否需要重配置
    • ClearNeedsStartupReconfig

      public void ClearNeedsStartupReconfig()
      清除从站启动重配置标志
    • configureFromEsi

      public boolean configureFromEsi()
      从 ESI 文件自动配置从站 (SM/FMMU/PDO 映射) 读取从站 ESI 信息, 自动配置 SyncManager、FMMU 和 PDO 映射
      返回:
      配置是否成功
    • ConfigByEsi

      public boolean ConfigByEsi()
      根据 ESI 文件自动配置从站 (对应 C# ConfigByEsi) 综合执行: AutoConfigureSM + ConfigureDC, 一步完成从站配置。
      返回:
      是否成功