类 CoE
java.lang.Object
com.darra.ethercat.slave.CoE
- 所有已实现的接口:
IMailboxProtocol
CoE (CANopen over EtherCAT) 完整实现
对齐 C# CoEInstance: SDO 读写、对象字典、紧急消息、诊断消息、CiA 子对象、访问权限
-
嵌套类概要
嵌套类修饰符和类型类说明static classCoE SDO Abort 异常 (CoE SDO Abort exception).static classCoE 访问权限异常static class0x10F3 诊断历史元数据 / 0x10F3 diagnosis history meta (ETG.1020 Table 48/49).static classETG.1510 诊断消息static class对象字典完整树static class紧急消息结构 (CiA 301) 与 C# Master.Events_EmcyRecorder.EmergencyMessage / Python EmergencyMessage / CPP EmergencyMessage / Rust EmergencyMessage 字段对齐.static classCoE 对象访问权限标志 (ETG.1000.6)class对象字典 - 包含多个子索引条目class对象字典条目 - 支持类型化读写与访问权限检查static classObjectEntry 的类字典容器 -
构造器概要
构造器 -
方法概要
修饰符和类型方法说明booleanacknowledgeDiagnostic(int msgIdx) 确认指定 subindex (6..255) 已处理 / acknowledge diagnosis messages up to msgIdx.void清除紧急消息历史booleancontainsKey(short index) 检查给定索引是否存在 (对齐 C# ContainsKey)booleancontainsKey(String key) 检查给定字符串键是否存在protected Executor默认 Executor, 子类或用户可覆盖以使用自定义线程池 (Default Executor, subclass or user can override for custom thread pool)。获取 CiA 401 I/O 模块实例 (对齐 C# CiA401 属性) 从站不支持 CiA 401 时返回 null获取 CiA 402 伺服驱动器实例 (对齐 C# CiA402 属性) 从站不支持 CiA 402 时返回 nullintgetCount()对象字典中的对象数量 (对齐 C# Count)int读取设备协议编号 (0x1000 Device Type 低 16 位)获取紧急消息历史 (通过 EMCY 记录 API)getEntryDescription(short index, byte subindex) 直接读单个 Entry Description (DataType/BitLength/ObjAccess/Name).long最后一次邮箱事务的协议层错误码 (CoE=SDO Abort, FoE=FoE Error, SoE=SoE Error, 等). 0 表示无错误或不适用.获取最后一次 SDO 操作的错误码 (对齐 C# Slave/CoE.cs:45-60 LastSdoError 模式).最后一次邮箱事务的统一状态.getObjectDescription(short index) 直接读单个对象 Description (DataType/MaxSub/Name).获取已加载的 OD 列表协议名称 ("CoE" / "FoE" / "SoE" / "AoE" / "EoE" / "VoE" / "FSoE").byte协议类型 (ECT_MBXT_*): AoE=0x01, EoE=0x02, CoE=0x03, FoE=0x04, SoE=0x05, FSoE=0x08, VoE=0x0F.short获取从站索引 (get slave index)邮箱统计快照.boolean对象字典是否正在异步加载boolean从站是否支持 CoE 邮箱协议 (读 SII mbx_proto bit 2).直接通过 CoE SDO Information Service 加载对象字典.加载完整 OD 树结构 (对齐 C# ODList getter + LoadODList) 调用 GetSlaveSDOList + GetSlavePointer_SDO_WithODList异步加载对象字典 (对齐 C# LoadODListAsync)ODList()获取对象字典列表 (通过 loadODList 加载)parseCompleteAccessData(byte[] caData, CoE.ObjectDictionary od) 解析 Complete Access 读取的原始字节数据,按子索引拆分。int快速轮询 0x10F3:04 NewAvailable 标志 / fast poll 0x10F3:04.byte[]readDiagnosticMessage(int msgIdx, int bufSize) 读指定 subindex (6..255) 的诊断消息原始字节 / read a single diagnosis message.读取诊断历史消息 (0x10F3, ETG.1510, 对齐 C# ReadDiagnosticMessages)读 0x10F3 元数据 / read 0x10F3 meta (Max / Newest / Acked / Flags).CompletableFuture<Map<Long, byte[]>> ReadMultipleAsync(List<int[]> entries) 批量 SDO 读取 — 一次调用读取多个对象 异步执行, 不阻塞调用线程void重置邮箱统计计数器.byte[]SDORead(short index, byte subIndex) SDO 读取 (默认超时, 无 CompleteAccess)byte[]SDORead(short index, byte subIndex, boolean completeAccess) SDO 读取 (默认超时, 指定 CompleteAccess)byte[]SDORead(short index, byte subIndex, boolean completeAccess, int timeoutMs) SDO 读取 (原始字节, 支持 CompleteAccess)byte[]SDORead(short index, byte subIndex, int timeoutMs) SDO 读取 (原始字节, 无 CompleteAccess)CompletableFuture<byte[]> sdoReadAsync(short index, byte subIndex) 异步读取 SDO (无 CompleteAccess, Asynchronously read SDO without CompleteAccess)CompletableFuture<byte[]> sdoReadAsync(short index, byte subIndex, boolean completeAccess) 异步读取 SDO (Asynchronously read SDO).CompletableFuture<byte[]> SDOReadAsync(short index, byte subIndex) SDOReadAsync(short, byte, boolean)无 CompleteAccess 版。CompletableFuture<byte[]> SDOReadAsync(short index, byte subIndex, boolean completeAccess) 异步读取 SDO (失败返回 null, 不抛 CoEAbortException; 对齐 C#SDOReadAsync)。SDOReadDouble(short index, byte subIndex) 读取 DoubleSDOReadFloat(short index, byte subIndex) 读取 FloatSDOReadInt16(short index, byte subIndex) 读取 Int16SDOReadInt32(short index, byte subIndex) 读取 Int32SDOReadInt8(short index, byte subIndex) 读取 Int8SDOReadString(short index, byte subIndex) 读取 StringSDOReadUInt16(short index, byte subIndex) 读取 UInt16 (以 int 返回)SDOReadUInt32(short index, byte subIndex) 读取 UInt32 (以 long 返回)booleanSDOWrite(short index, byte subIndex, byte[] data) SDO 写入 (默认超时, 无 CompleteAccess)booleanSDOWrite(short index, byte subIndex, byte[] data, boolean completeAccess) SDO 写入 (默认超时, 指定 CompleteAccess)booleanSDOWrite(short index, byte subIndex, byte[] data, boolean completeAccess, int timeoutMs) SDO 写入 (原始字节, 支持 CompleteAccess)booleanSDOWrite(short index, byte subIndex, byte[] data, int timeoutMs) SDO 写入 (原始字节, 无 CompleteAccess)sdoWriteAsync(short index, byte subIndex, byte[] data) 异步写入 SDO (无 CompleteAccess, Asynchronously write SDO without CompleteAccess)sdoWriteAsync(short index, byte subIndex, byte[] data, boolean completeAccess) 异步写入 SDO (Asynchronously write SDO).SDOWriteAsync(short index, byte subIndex, byte[] data) SDOWriteAsync(short, byte, byte[], boolean)无 CompleteAccess 版。SDOWriteAsync(short index, byte subIndex, byte[] data, boolean completeAccess) 异步写入 SDO (失败返回 false, 不抛 CoEAbortException; 对齐 C#SDOWriteAsync)。booleanSDOWriteByte(short index, byte subIndex, byte value) booleanSDOWriteDouble(short index, byte subIndex, double value) booleanSDOWriteFloat(short index, byte subIndex, float value) booleanSDOWriteInt16(short index, byte subIndex, short value) booleanSDOWriteInt32(short index, byte subIndex, int value) booleanSDOWriteUInt16(short index, byte subIndex, int value) booleanSDOWriteUInt32(short index, byte subIndex, long value)
-
构造器详细资料
-
CoE
public CoE(short masterIndex, short slaveIndex)
-
-
方法详细资料
-
getLastSdoError
获取最后一次 SDO 操作的错误码 (对齐 C# Slave/CoE.cs:45-60 LastSdoError 模式).实装策略 (managed): SDK 端在每次 SDORead/SDOWrite 调用后, 把 abort code 缓存 到 instance 字段
lastSdoError, 此 getter 仅返回 cached 值. 不再依赖 DLL 端 GetLastSdoError 导出 (避免 thread-local 跨 JNI 边界的复杂性).调用模式:
byte[] data = coe.SDORead(0x6041, (byte)0); if (data == null) { SDOError err = coe.getLastSdoError(); // 拿到具体 abort code }- 返回:
- 最近一次 SDO 操作的错误码; 操作成功返回
EtherCATTypes.SDOError.NO_ERROR.
-
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- 返回:
- 协议类型 0x03 (CoE) / protocol type 0x03 (CoE).
-
getProtocolName
从接口复制的说明:IMailboxProtocol协议名称 ("CoE" / "FoE" / "SoE" / "AoE" / "EoE" / "VoE" / "FSoE").
Protocol name literal.- 指定者:
getProtocolName在接口中IMailboxProtocol- 返回:
- 协议名称 "CoE" / protocol name "CoE".
-
isSupported
public boolean isSupported()从站是否支持 CoE 邮箱协议 (读 SII mbx_proto bit 2).
Whether the slave supports CoE (SII mbx_proto bit 2). Falls back totrueon native-side failure so legacy callers that never validated support before reading SDO keep working.- 指定者:
isSupported在接口中IMailboxProtocol
-
getLastStatus
从接口复制的说明:IMailboxProtocol最后一次邮箱事务的统一状态. 初始为MailboxStatus.PENDING.
Status of the most recent mailbox transaction; initial value isMailboxStatus.PENDING.- 指定者:
getLastStatus在接口中IMailboxProtocol- 返回:
- 最近一次邮箱事务状态 / last transaction status.
-
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- 返回:
- 最近一次协议层错误码 / last protocol-level error code.
-
getStatistics
邮箱统计快照.
Mailbox statistics snapshot.[审计补齐 roundSDKSAN2] 经真实导出的 native EcxMbxGetStats 拉取, 与 C# CoE.Statistics 同源. native 未就绪时降级空快照.
- 指定者:
getStatistics在接口中IMailboxProtocol
-
resetStatistics
public void resetStatistics()重置邮箱统计计数器.
Reset mailbox statistics counters.[审计补齐 roundSDKSAN2] 真调 native EcxMbxResetStats 重置 per-slave/ per-protocol 统计, 同时清理 Java 端的 lastStatus / lastErrorCode 缓存.
- 指定者:
resetStatistics在接口中IMailboxProtocol
-
SDORead
public byte[] SDORead(short index, byte subIndex, boolean completeAccess, int timeoutMs) SDO 读取 (原始字节, 支持 CompleteAccess)- 参数:
index- 对象索引subIndex- 子索引completeAccess- 是否使用 Complete Access 模式 (一次读取所有子索引)timeoutMs- 超时 (毫秒)- 返回:
- 数据字节数组, 失败返回 null
-
SDORead
public byte[] SDORead(short index, byte subIndex, int timeoutMs) SDO 读取 (原始字节, 无 CompleteAccess)- 参数:
index- 对象索引subIndex- 子索引timeoutMs- 超时 (毫秒)- 返回:
- 数据字节数组, 失败返回 null
-
SDORead
public byte[] SDORead(short index, byte subIndex) SDO 读取 (默认超时, 无 CompleteAccess) -
SDORead
public byte[] SDORead(short index, byte subIndex, boolean completeAccess) SDO 读取 (默认超时, 指定 CompleteAccess) -
SDOWrite
public boolean SDOWrite(short index, byte subIndex, byte[] data, boolean completeAccess, int timeoutMs) SDO 写入 (原始字节, 支持 CompleteAccess)- 参数:
index- 对象索引subIndex- 子索引data- 数据completeAccess- 是否使用 Complete Access 模式timeoutMs- 超时 (毫秒)- 返回:
- 是否成功
-
SDOWrite
public boolean SDOWrite(short index, byte subIndex, byte[] data, int timeoutMs) SDO 写入 (原始字节, 无 CompleteAccess) -
SDOWrite
public boolean SDOWrite(short index, byte subIndex, byte[] data) SDO 写入 (默认超时, 无 CompleteAccess) -
SDOWrite
public boolean SDOWrite(short index, byte subIndex, byte[] data, boolean completeAccess) SDO 写入 (默认超时, 指定 CompleteAccess) -
defaultExecutor
默认 Executor, 子类或用户可覆盖以使用自定义线程池 (Default Executor, subclass or user can override for custom thread pool)。仅在按 masterIndex 反查不到父 master 串行闸时 (未 build 的单测场景) 作为回退; 正常 build 后的主站走父闸串行, 不经此 executor。
-
sdoReadAsync
异步读取 SDO (Asynchronously read SDO). 对齐 C# CoEInstance.SDOReadAsync. 经父 master 串行闸排队隔离, 调用方拿 future 不堵线程。- 参数:
index- SDO 索引 (SDO index)subIndex- 子索引 (sub-index)completeAccess- 完全访问模式 (complete access mode)- 返回:
- 包含响应字节数组的 CompletableFuture (CompletableFuture with response bytes)
- 抛出:
CoE.CoEAbortException- 读取失败 (SDO Abort / read failure), 经 future 异常抛回
-
sdoReadAsync
异步读取 SDO (无 CompleteAccess, Asynchronously read SDO without CompleteAccess) -
sdoWriteAsync
public CompletableFuture<Boolean> sdoWriteAsync(short index, byte subIndex, byte[] data, boolean completeAccess) 异步写入 SDO (Asynchronously write SDO). 对齐 C# CoEInstance.SDOWriteAsync. 经父 master 串行闸排队隔离, 调用方拿 future 不堵线程。- 参数:
index- SDO 索引 (SDO index)subIndex- 子索引 (sub-index)data- 数据 (payload bytes)completeAccess- 完全访问模式 (complete access mode)- 返回:
- 成功为 true 的 CompletableFuture (CompletableFuture resolving to true on success)
- 抛出:
CoE.CoEAbortException- 写入失败 (SDO Abort / write failure), 经 future 异常抛回
-
sdoWriteAsync
异步写入 SDO (无 CompleteAccess, Asynchronously write SDO without CompleteAccess) -
SDOReadAsync
异步读取 SDO (失败返回 null, 不抛 CoEAbortException; 对齐 C#SDOReadAsync)。 经父 master 串行闸排队隔离, 与同主站其它 EtherCAT 操作串行, 不并发打邮箱。- 参数:
index- 对象索引subIndex- 子索引completeAccess- 完全访问 (整对象读)- 返回:
- CompletableFuture<byte[]> — 数据; 失败 (含 NotPresent/状态让路) 完成为 null。
取消返回的 future (
cancel(true)) 会调 native AbortNetwork 让阻塞中的邮箱往返返回。
-
SDOReadAsync
SDOReadAsync(short, byte, boolean)无 CompleteAccess 版。 -
SDOWriteAsync
public CompletableFuture<Boolean> SDOWriteAsync(short index, byte subIndex, byte[] data, boolean completeAccess) 异步写入 SDO (失败返回 false, 不抛 CoEAbortException; 对齐 C#SDOWriteAsync)。 经父 master 串行闸排队隔离, 与同主站其它 EtherCAT 操作串行, 不并发打邮箱。- 参数:
index- 对象索引subIndex- 子索引data- 要写入的数据 (不能为 null/空)completeAccess- 完全访问 (整对象写)- 返回:
- CompletableFuture<Boolean> — 成功为 true。取消会调 native AbortNetwork。
-
SDOWriteAsync
SDOWriteAsync(short, byte, byte[], boolean)无 CompleteAccess 版。 -
getSlaveIndex
public short getSlaveIndex()获取从站索引 (get slave index) -
SDOReadInt8
读取 Int8 -
SDOReadInt16
读取 Int16 -
SDOReadInt32
读取 Int32 -
SDOReadUInt16
读取 UInt16 (以 int 返回) -
SDOReadUInt32
读取 UInt32 (以 long 返回) -
SDOReadFloat
读取 Float -
SDOReadDouble
读取 Double -
SDOReadString
读取 String -
ReadMultipleAsync
批量 SDO 读取 — 一次调用读取多个对象 异步执行, 不阻塞调用线程- 参数:
entries- 要读取的 (index, subindex) 列表, 每个元素为 int[2]- 返回:
- CompletableFuture 结果 Map, key 为 (index<<8|subindex) 编码, value 为数据 (失败为 null)
-
SDOWriteInt16
public boolean SDOWriteInt16(short index, byte subIndex, short value) -
SDOWriteInt32
public boolean SDOWriteInt32(short index, byte subIndex, int value) -
SDOWriteUInt16
public boolean SDOWriteUInt16(short index, byte subIndex, int value) -
SDOWriteUInt32
public boolean SDOWriteUInt32(short index, byte subIndex, long value) -
SDOWriteFloat
public boolean SDOWriteFloat(short index, byte subIndex, float value) -
SDOWriteDouble
public boolean SDOWriteDouble(short index, byte subIndex, double value) -
SDOWriteByte
public boolean SDOWriteByte(short index, byte subIndex, byte value) -
ODList
获取对象字典列表 (通过 loadODList 加载)- 返回:
- 按 OD 索引分组的 ObjectEntry Map
-
loadODList
加载完整 OD 树结构 (对齐 C# ODList getter + LoadODList) 调用 GetSlaveSDOList + GetSlavePointer_SDO_WithODList -
loadObjectDictionary
直接通过 CoE SDO Information Service 加载对象字典. 不依赖 GetSlaveSDOList 缓存, 每次实时从从站拉 OD 索引 + 详情.- 返回:
- 解析后的 OD 列表; 失败返回 null.
-
getObjectDescription
直接读单个对象 Description (DataType/MaxSub/Name).- 返回:
- ObjectDictionary 元数据 (不含子条目); 失败返回 null.
-
getEntryDescription
直接读单个 Entry Description (DataType/BitLength/ObjAccess/Name).- 返回:
- ObjectEntry; 失败返回 null.
-
loadODListAsync
异步加载对象字典 (对齐 C# LoadODListAsync) -
isODListLoading
public boolean isODListLoading()对象字典是否正在异步加载 -
getODList
获取已加载的 OD 列表 -
getCount
public int getCount()对象字典中的对象数量 (对齐 C# Count) -
containsKey
public boolean containsKey(short index) 检查给定索引是否存在 (对齐 C# ContainsKey) -
containsKey
检查给定字符串键是否存在 -
GetEmergencyHistory
获取紧急消息历史 (通过 EMCY 记录 API) -
ClearEmergencyHistory
public void ClearEmergencyHistory()清除紧急消息历史 -
readDiagnosticMessages
读取诊断历史消息 (0x10F3, ETG.1510, 对齐 C# ReadDiagnosticMessages) -
getDeviceProfile
public int getDeviceProfile()读取设备协议编号 (0x1000 Device Type 低 16 位) -
getCiA402
获取 CiA 402 伺服驱动器实例 (对齐 C# CiA402 属性) 从站不支持 CiA 402 时返回 null -
getCiA401
获取 CiA 401 I/O 模块实例 (对齐 C# CiA401 属性) 从站不支持 CiA 401 时返回 null -
parseCompleteAccessData
解析 Complete Access 读取的原始字节数据,按子索引拆分。 规则 (ETG.1000.6 §5.6.2): - SubIndex 0 始终填充到 16 位 (2字节) - BIT 类型连续打包,下一个非 BIT 类型从下一个字节边界开始- 参数:
caData- Complete Access 读取的原始字节数据od- 对应的对象字典条目 (需已加载 OE 列表)- 返回:
- 按子索引拆分的字节数组字典 (key = 实际子索引号)
-
pollHasNewDiagnostic
public int pollHasNewDiagnostic()快速轮询 0x10F3:04 NewAvailable 标志 / fast poll 0x10F3:04. 无新消息时不读完整历史, 适合高频轮询.
Light-weight polling that avoids reading the entire history when no new diagnosis message is present.- 返回:
- 1=有新消息 / new diag available, 0=无 / none, -1=通信失败 / comm failure.
-
readDiagnosticMeta
读 0x10F3 元数据 / read 0x10F3 meta (Max / Newest / Acked / Flags).- 返回:
- DiagMeta 对象 / meta object; null 表示通信失败 / null on failure.
-
readDiagnosticMessage
public byte[] readDiagnosticMessage(int msgIdx, int bufSize) 读指定 subindex (6..255) 的诊断消息原始字节 / read a single diagnosis message.- 参数:
msgIdx- 消息 subindex (6..255) / message sub-index.bufSize- 接收缓冲区大小 / buffer capacity in bytes.- 返回:
- 实际读取的字节数组, 长度 = native 实际写入; null 表示失败.
Byte array trimmed to the actually-filled length; null on failure.
-
acknowledgeDiagnostic
public boolean acknowledgeDiagnostic(int msgIdx) 确认指定 subindex (6..255) 已处理 / acknowledge diagnosis messages up to msgIdx. 从站按 ring 模式清理 无效输入:'<'= ack_subidx 的消息.- 参数:
msgIdx- 要确认的最后一个 subindex / last sub-index acknowledged.- 返回:
- true=OK, false=失败 / false on failure.
-