类 SlaveStateQueue
java.lang.Object
com.darra.ethercat.sugar.SlaveStateQueue
- 所有已实现的接口:
AutoCloseable
从站状态变化事件 ->
BlockingQueue 与 Stream 适配器.
设计同 DiagnosticQueue, 但订阅的是 SlaveStateChanged 事件.
容量满默认丢弃最早事件 (不阻塞 PDO 线程).
典型用法 — 等待全网进入 OP:
try (SlaveStateQueue q = SlaveStateQueue.attach(master, 256)) {
master.setState(EcState.OP);
long deadline = System.currentTimeMillis() + 30_000;
while (System.currentTimeMillis() < deadline) {
StateChangeEvent ev = q.poll(500, TimeUnit.MILLISECONDS);
if (ev != null && ev.newState == EcState.OP) {
if (allOp(master)) break;
}
}
}
也支持把事件流导成 Stream, 用 Stream API 实时处理:
q.streamUntilClosed()
.filter(ev -> ev.newState == EcState.PRE_OP)
.forEach(ev -> logger.warn("从站 {} 跌回 PreOp", ev.slaveIndex));
- 从以下版本开始:
- 2026-05
-
嵌套类概要
嵌套类 -
方法概要
修饰符和类型方法说明static SlaveStateQueueattach(EtherCATMaster master, int capacity) 创建并注册到 master, 满了丢弃最早.voidclose()带超时取.pollNow()非阻塞取.intsize()当前队列长度.阻塞 Stream — 用take()持续供给, 直到 close.take()阻塞取一条.
-
方法详细资料
-
attach
创建并注册到 master, 满了丢弃最早. -
take
阻塞取一条. -
poll
public SlaveStateQueue.StateChangeEvent poll(long timeout, TimeUnit unit) throws InterruptedException 带超时取. -
pollNow
非阻塞取. -
size
public int size()当前队列长度. -
streamUntilClosed
阻塞 Stream — 用take()持续供给, 直到 close. 适合 forEach 风格消费. 使用方需在独立线程 上跑这个 stream, 否则会阻塞主线程. -
close
public void close()- 指定者:
close在接口中AutoCloseable
-