类 FSoE

java.lang.Object
com.darra.ethercat.slave.FSoE
所有已实现的接口:
IMailboxProtocol

public class FSoE extends Object implements IMailboxProtocol
FSoE (Functional Safety over EtherCAT) 完整实现 对齐 C# FSoEInstance: 连接管理、安全状态机、MDP 多连接支持、看门狗配置 合并原 SafetyManager / SafeMdp 功能 包含: - FSoE 状态枚举、错误码、命令类型、结构体 - SafeMdp: MDP 包装器 (单从站多连接) - SafetyManager: 多连接管理器 - fsoe_crc16 / fsoe_crc16_fast: CRC16 校验计算
  • 字段详细资料

    • CRC16_CCITT_FALSE

      public static final FSoE.FSoECrc16 CRC16_CCITT_FALSE
      预置的 CCITT-False 实例
  • 构造器详细资料

    • FSoE

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

    • fsoeCrc16

      public static int fsoeCrc16(byte[] data)
      计算 FSoE CRC16 校验值 (CCITT-False 算法)
      参数:
      data - 输入数据
      返回:
      CRC16 值
    • fsoeCrc16Fast

      public static int fsoeCrc16Fast(byte[] data)
      使用查找表加速计算 FSoE CRC16
      参数:
      data - 输入数据
      返回:
      CRC16 值
    • getProtocolType

      public byte getProtocolType()
      从接口复制的说明: IMailboxProtocol
      协议类型 (ECT_MBXT_*): AoE=0x01, EoE=0x02, CoE=0x03, FoE=0x04, SoE=0x05, FSoE=0x08, VoE=0x0F.
      Protocol type constant (ECT_MBXT_*).
      指定者:
      getProtocolType 在接口中 IMailboxProtocol
      返回:
      协议类型 0x08 (FSoE).
    • getProtocolName

      public String getProtocolName()
      从接口复制的说明: IMailboxProtocol
      协议名称 ("CoE" / "FoE" / "SoE" / "AoE" / "EoE" / "VoE" / "FSoE").
      Protocol name literal.
      指定者:
      getProtocolName 在接口中 IMailboxProtocol
      返回:
      协议名称 "FSoE".
    • isSupported

      public boolean isSupported()
      从站是否支持 FSoE 邮箱协议 (委托给 IsCapable()).
      Whether the slave supports FSoE (delegates to IsCapable()).
      指定者:
      isSupported 在接口中 IMailboxProtocol
    • getLastStatus

      public MailboxStatus getLastStatus()
      从接口复制的说明: IMailboxProtocol
      最后一次邮箱事务的统一状态. 初始为 MailboxStatus.PENDING.
      Status of the most recent mailbox transaction; initial value is MailboxStatus.PENDING.
      指定者:
      getLastStatus 在接口中 IMailboxProtocol
      返回:
      最近一次邮箱事务状态.
    • getLastErrorCode

      public long getLastErrorCode()
      从接口复制的说明: IMailboxProtocol
      最后一次邮箱事务的协议层错误码 (CoE=SDO Abort, FoE=FoE Error, SoE=SoE Error, 等). 0 表示无错误或不适用.
      Protocol-level error code of the last transaction (CoE SDO abort, FoE error code, SoE error, etc.). Zero means no error or not applicable.
      指定者:
      getLastErrorCode 在接口中 IMailboxProtocol
      返回:
      最近一次协议层错误码 (FSoE Error).
    • getStatistics

      public MailboxStatistics getStatistics()
      邮箱统计快照.
      Mailbox statistics snapshot.

      [审计补齐 roundSDKSAN2] 经真实导出的 native EcxMbxGetStats 拉取.

      指定者:
      getStatistics 在接口中 IMailboxProtocol
    • resetStatistics

      public void resetStatistics()
      重置邮箱统计.
      Reset mailbox statistics.

      [审计补齐 roundSDKSAN2] 真调 native EcxMbxResetStats 重置统计.

      指定者:
      resetStatistics 在接口中 IMailboxProtocol
    • IsCapable

      public boolean IsCapable()
      从站是否支持 FSoE
    • Initialize

      public boolean Initialize(FSoE.FSoEConnectionConfig config)
      初始化 FSoE 连接
      参数:
      config - 连接配置
      返回:
      是否成功
    • ConnectionState

      public FSoE.FSoEState ConnectionState()
      获取当前 FSoE 连接状态
    • ConnectionId

      public int ConnectionId()
      获取 FSoE 连接 ID (从 FSoEGetStatus 中获取)
    • IsInitialized

      public boolean IsInitialized()
      是否已初始化 (通过 FSoEGetStatus 检查)
    • InFailsafe

      public boolean InFailsafe()
      是否处于失效安全模式
    • WatchdogExpired

      public boolean WatchdogExpired()
      看门狗是否过期 (通过 FSoEGetStatus 检查)
    • LastError

      public FSoE.FSoEError LastError()
      获取最后错误代码
    • SafeInputData

      public byte[] SafeInputData(int bufferSize)
      获取安全输入数据
      参数:
      bufferSize - 缓冲区大小
      返回:
      安全输入数据, 失败返回 null
    • SafeInputData

      public byte[] SafeInputData()
      获取安全输入数据 (默认缓冲区 64 字节)
      返回:
      安全输入数据, 失败返回 null
    • SetSafeOutputData

      public boolean SetSafeOutputData(byte[] data)
      设置安全输出数据
      参数:
      data - 安全输出数据
      返回:
      是否成功
    • RequestState

      public boolean RequestState(FSoE.FSoEState targetState)
      请求切换到指定 FSoE 状态
      参数:
      targetState - 目标状态
      返回:
      是否成功
    • RequestData

      public boolean RequestData()
      请求进入数据交换状态
    • RequestFailsafe

      public boolean RequestFailsafe()
      请求进入失效安全状态
    • Status

      public FSoE.FSoEConnectionStatus Status()
      获取完整连接状态 (通过 FSoEGetStatus 一次性获取所有字段)
    • CrcErrorCount

      public int CrcErrorCount()
      获取 FSoE CRC 错误计数 (通过 FSoEGetStatus)
    • WatchdogErrorCount

      public int WatchdogErrorCount()
      获取看门狗超时计数 (通过 FSoEGetStatus)
    • FramesSent

      public int FramesSent()
      获取发送帧数 (通过 FSoEGetStatus)
    • FramesReceived

      public int FramesReceived()
      获取接收有效帧数 (通过 FSoEGetStatus)
    • ConnectionCount

      public int ConnectionCount()
      获取主站的 FSoE 连接数量
    • InitializeMdp

      public boolean InitializeMdp(FSoE.SafeModuleConfig[] moduleConfigs)
      初始化 MDP 多连接模式
      参数:
      moduleConfigs - 各模块的 FSoE 配置
      返回:
      是否成功
    • MdpSafeInputData

      public byte[] MdpSafeInputData(int connectionIndex, int bufferSize)
      获取指定 MDP 连接的安全输入数据
      参数:
      connectionIndex - 连接索引
      bufferSize - 缓冲区大小
      返回:
      安全输入数据, 失败返回 null
    • MdpSafeInputData

      public byte[] MdpSafeInputData(int connectionIndex)
      获取指定 MDP 连接的安全输入数据 (默认缓冲区 64 字节)
      参数:
      connectionIndex - 连接索引
    • SetMdpSafeOutputData

      public boolean SetMdpSafeOutputData(int connectionIndex, byte[] data)
      设置指定 MDP 连接的安全输出数据
      参数:
      connectionIndex - 连接索引
      data - 安全输出数据
    • MdpConnectionState

      public FSoE.FSoEState MdpConnectionState(int connectionIndex)
      获取指定 MDP 连接的状态
      参数:
      connectionIndex - 连接索引
    • ResetConnection

      public boolean ResetConnection()
      重置 FSoE 连接
    • CheckWatchdog

      public boolean CheckWatchdog()
      检查看门狗状态 (true=正常)
    • ClearError

      public void ClearError()
      清除 FSoE 错误
    • WriteOutputFrame

      public boolean WriteOutputFrame(byte[] frameData)
      写入 FSoE 原始输出帧 (对应 C# WriteOutputFrame) 将完整的 FSoE 输出帧数据写入指定连接的安全输出区域。
      参数:
      frameData - 原始帧字节数据
      返回:
      是否成功
    • Close

      public boolean Close()
      关闭 FSoE 连接
    • addDataExchangedListener

      public void addDataExchangedListener(FSoE.FSoEDataExchangeListener listener)
      注册 DataExchanged 监听器 — 每个 PDO 周期触发, 携带当前 FSoE 状态快照.
      参数:
      listener - 监听器回调 (非 null)
    • removeDataExchangedListener

      public void removeDataExchangedListener(FSoE.FSoEDataExchangeListener listener)
      注销 DataExchanged 监听器.
      参数:
      listener - 之前注册的监听器
    • fireDataExchanged

      protected void fireDataExchanged(byte[] safeInputs, byte[] safeOutputs)
      触发 DataExchanged 事件 (由 PDO 周期处理内部调用). 对齐 C# OnDataExchanged: 克隆输入/输出缓冲区, 读取当前状态, 分发到所有监听器. 监听器抛出的异常会被吞掉, 避免阻塞 PDO 周期.
      参数:
      safeInputs - 本周期安全输入 (会被拷贝)
      safeOutputs - 本周期安全输出 (会被拷贝)
    • validateConnId

      public static boolean validateConnId(int connId)
      校验指定 ConnID 是否可用 (未被占用). 对齐 C# FSoEValidateConnId. 注意: 当前 DarraCore JNA 绑定尚未导出 FSoEValidateConnId, 调用会抛出 UnsupportedOperationException. TODO: 在 DarraCore.java 中添加 boolean FSoEValidateConnId(short connId); 声明后移除此限制.
      参数:
      connId - 待校验的连接 ID
      返回:
      true = 可用, false = 已占用或非法 (0)
      抛出:
      UnsupportedOperationException - FFI 绑定未暴露该函数时抛出
    • isConnectionIdAvailable

      public static boolean isConnectionIdAvailable(int connId)
      [2026-04-24 ETG.5120 §5.2.3] 校验 FSoE Connection ID 是否可用.
      Validate whether the specified FSoE Connection ID is available (per ETG.5120 §5.2.3 Table 8 SI3).

      规则 / rules:

      • ConnID 必须 >= 1 (0 非法, 保留) / must be >= 1 (0 is reserved).
      • ConnID 在当前 Master 内必须全局唯一 / must be globally unique.
      典型用法: 配置工具分配新 ConnID 前先调用本 API 确认未冲突, 避免 InitConnection 因重复返回失败.
      Typical use: configuration tools call this before allocating a new ConnID to make sure InitConnection will not fail on a duplicate.
      参数:
      connId - 候选 Connection ID (1..65535) / candidate Connection ID.
      返回:
      true=可用 (未占用且非 0); false=已占用或为 0.
      true when available (non-zero and unused); false otherwise.
    • Dispose

      public void Dispose()
      释放 FSoE 资源