类 FSoE
java.lang.Object
com.darra.ethercat.slave.FSoE
- 所有已实现的接口:
IMailboxProtocol
FSoE (Functional Safety over EtherCAT) 完整实现
对齐 C# FSoEInstance: 连接管理、安全状态机、MDP 多连接支持、看门狗配置
合并原 SafetyManager / SafeMdp 功能
包含:
- FSoE 状态枚举、错误码、命令类型、结构体
- SafeMdp: MDP 包装器 (单从站多连接)
- SafetyManager: 多连接管理器
- fsoe_crc16 / fsoe_crc16_fast: CRC16 校验计算
-
嵌套类概要
嵌套类修饰符和类型类说明static enumFSoE 命令类型static classFSoE 通信参数 (ETG.5120 section 5.2.3)static classFSoE 连接配置static enumFSoE 连接模式static classFSoE 连接状态static enumFSoE 连接类型static final classFSoE 常量定义static class可配置的 CRC-16 实现(默认:CRC-16/CCITT-FALSE)static classFSoE 安全数据交换事件参数 (对齐 C# FSoEDataExchangeEventArgs).static interfaceFSoE 数据交换事件监听器 (对齐 C# DataExchanged 事件).static classFSoE 安全数据更新事件参数static enumFSoE 诊断位定义 (ETG.5001.4 Table 9)static enumFSoE 错误代码static classFSoE 错误事件参数static classFSoE 失效安全事件参数static enumFSoE 失效安全触发原因static final classFSoE 帮助类static classFSoE PDO 帧结构static classFSoE PDO 帧布局配置static enumFSoE 连接状态static classFSoE 状态变化事件参数static interfaceFSoE 错误事件监听器static interfaceFSoE 失效安全事件监听器static interfaceFSoE 安全数据更新事件监听器static interfaceFSoE 状态变化事件监听器static classFSoE MDP (模块化设备配置) 包装器 封装所有 DxSafeMdp* DLL 函数, 支持单从站上的多 FSoE 连接。static classFSoE MDP 设备配置static final classFSoE MDP 对象索引区域定义 (ETG.5001.4)static classFSoE 模块通信参数 (0x9nn1)static classFSoE MDP 模块配置static classFSoE 模块诊断 (0xAnn0)static classFSoE 模块信息 (0x9nn0)static enumFSoE MDP 模块配置文件编号static classFSoE 多连接管理器 -
字段概要
字段 -
构造器概要
构造器 -
方法概要
修饰符和类型方法说明void注册 DataExchanged 监听器 — 每个 PDO 周期触发, 携带当前 FSoE 状态快照.boolean检查看门狗状态 (true=正常)void清除 FSoE 错误booleanClose()关闭 FSoE 连接int获取主站的 FSoE 连接数量int获取 FSoE 连接 ID (从 FSoEGetStatus 中获取)获取当前 FSoE 连接状态int获取 FSoE CRC 错误计数 (通过 FSoEGetStatus)voidDispose()释放 FSoE 资源protected voidfireDataExchanged(byte[] safeInputs, byte[] safeOutputs) 触发 DataExchanged 事件 (由 PDO 周期处理内部调用).int获取接收有效帧数 (通过 FSoEGetStatus)int获取发送帧数 (通过 FSoEGetStatus)static intfsoeCrc16(byte[] data) 计算 FSoE CRC16 校验值 (CCITT-False 算法)static intfsoeCrc16Fast(byte[] data) 使用查找表加速计算 FSoE CRC16long最后一次邮箱事务的协议层错误码 (CoE=SDO Abort, FoE=FoE Error, SoE=SoE Error, 等). 0 表示无错误或不适用.最后一次邮箱事务的统一状态.协议名称 ("CoE" / "FoE" / "SoE" / "AoE" / "EoE" / "VoE" / "FSoE").byte协议类型 (ECT_MBXT_*): AoE=0x01, EoE=0x02, CoE=0x03, FoE=0x04, SoE=0x05, FSoE=0x08, VoE=0x0F.邮箱统计快照.boolean是否处于失效安全模式booleanInitialize(FSoE.FSoEConnectionConfig config) 初始化 FSoE 连接booleanInitializeMdp(FSoE.SafeModuleConfig[] moduleConfigs) 初始化 MDP 多连接模式boolean从站是否支持 FSoEstatic booleanisConnectionIdAvailable(int connId) [2026-04-24 ETG.5120 §5.2.3] 校验 FSoE Connection ID 是否可用.boolean是否已初始化 (通过 FSoEGetStatus 检查)boolean从站是否支持 FSoE 邮箱协议 (委托给IsCapable()).获取最后错误代码MdpConnectionState(int connectionIndex) 获取指定 MDP 连接的状态byte[]MdpSafeInputData(int connectionIndex) 获取指定 MDP 连接的安全输入数据 (默认缓冲区 64 字节)byte[]MdpSafeInputData(int connectionIndex, int bufferSize) 获取指定 MDP 连接的安全输入数据void注销 DataExchanged 监听器.boolean请求进入数据交换状态boolean请求进入失效安全状态booleanRequestState(FSoE.FSoEState targetState) 请求切换到指定 FSoE 状态boolean重置 FSoE 连接void重置邮箱统计.byte[]获取安全输入数据 (默认缓冲区 64 字节)byte[]SafeInputData(int bufferSize) 获取安全输入数据booleanSetMdpSafeOutputData(int connectionIndex, byte[] data) 设置指定 MDP 连接的安全输出数据booleanSetSafeOutputData(byte[] data) 设置安全输出数据Status()获取完整连接状态 (通过 FSoEGetStatus 一次性获取所有字段)static booleanvalidateConnId(int connId) 校验指定 ConnID 是否可用 (未被占用).int获取看门狗超时计数 (通过 FSoEGetStatus)boolean看门狗是否过期 (通过 FSoEGetStatus 检查)booleanWriteOutputFrame(byte[] frameData) 写入 FSoE 原始输出帧 (对应 C# WriteOutputFrame) 将完整的 FSoE 输出帧数据写入指定连接的安全输出区域。
-
字段详细资料
-
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
从接口复制的说明:IMailboxProtocol协议名称 ("CoE" / "FoE" / "SoE" / "AoE" / "EoE" / "VoE" / "FSoE").
Protocol name literal.- 指定者:
getProtocolName在接口中IMailboxProtocol- 返回:
- 协议名称 "FSoE".
-
isSupported
public boolean isSupported()- 指定者:
isSupported在接口中IMailboxProtocol
-
getLastStatus
从接口复制的说明:IMailboxProtocol最后一次邮箱事务的统一状态. 初始为MailboxStatus.PENDING.
Status of the most recent mailbox transaction; initial value isMailboxStatus.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
邮箱统计快照.
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
初始化 FSoE 连接- 参数:
config- 连接配置- 返回:
- 是否成功
-
ConnectionState
获取当前 FSoE 连接状态 -
ConnectionId
public int ConnectionId()获取 FSoE 连接 ID (从 FSoEGetStatus 中获取) -
IsInitialized
public boolean IsInitialized()是否已初始化 (通过 FSoEGetStatus 检查) -
InFailsafe
public boolean InFailsafe()是否处于失效安全模式 -
WatchdogExpired
public boolean WatchdogExpired()看门狗是否过期 (通过 FSoEGetStatus 检查) -
LastError
获取最后错误代码 -
SafeInputData
public byte[] SafeInputData(int bufferSize) 获取安全输入数据- 参数:
bufferSize- 缓冲区大小- 返回:
- 安全输入数据, 失败返回 null
-
SafeInputData
public byte[] SafeInputData()获取安全输入数据 (默认缓冲区 64 字节)- 返回:
- 安全输入数据, 失败返回 null
-
SetSafeOutputData
public boolean SetSafeOutputData(byte[] data) 设置安全输出数据- 参数:
data- 安全输出数据- 返回:
- 是否成功
-
RequestState
请求切换到指定 FSoE 状态- 参数:
targetState- 目标状态- 返回:
- 是否成功
-
RequestData
public boolean RequestData()请求进入数据交换状态 -
RequestFailsafe
public boolean RequestFailsafe()请求进入失效安全状态 -
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
初始化 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
获取指定 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
注册 DataExchanged 监听器 — 每个 PDO 周期触发, 携带当前 FSoE 状态快照.- 参数:
listener- 监听器回调 (非 null)
-
removeDataExchangedListener
注销 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.
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 资源
-