Hot-Connect 组管理
Hot-Connect 用于把工具头、机械手末端、移动滑台等"可临时离线"的从站组合标记为非强制存在,未注册 的从站默认仍为 mandatory(缺失会触发 AL_ERROR)。
通过 new HotConnect(masterIndex) 实例化。
使用前提
Hot-Connect 组依赖从站的 Alias 地址(ESC 寄存器 0x0012)。Alias 必须预先烧录到从站 EEPROM,非 0 且组内唯一。Alias=0 的从站不支持 Hot-Connect(ETG.1020 §8.3)。
上限
public static final int MAX_GROUPS = 32;
每个 master 最多支持 32 个 Hot-Connect 组。
组操作
addGroup(int groupId, int aliasAddress, long vendorId, long productCode)
public boolean addGroup(int groupId, int aliasAddress, long vendorId, long productCode)
注册一个 Hot-Connect 组。
参数:
groupId(int) — 用户分配的组 ID(1..65535,同 master 唯一)aliasAddress(int) — 期望 Alias 地址(必须非 0)vendorId(long) — 期望 VendorID,0表示不校验productCode(long) — 期望 ProductCode,0表示不校验
返回值:
boolean— 成功返回true
removeGroup(int groupId)
public boolean removeGroup(int groupId)
移除指定组。
getGroupStatus(int groupId)
public HotConnectStatus getGroupStatus(int groupId)
查询某个组当前的 Present / Absent 状态。
clearAll()
public void clearAll()
清空当前 master 上所有 Hot-Connect 组定义。通常在重新 SetNetwork 前调用。
getGroupCount()
public int getGroupCount()
返回当前已注册的 Hot-Connect 组数。0 表示无 HC 配置(所有从站均按 mandatory 处理)。
enumerate()
public List<HotConnectGroup> enumerate()
枚举所有已注册组的快照(不可变列表)。
数据结构
HotConnectStatus 枚举:
public enum HotConnectStatus {
UNKNOWN(-1), // 未注册或查询失败
ABSENT(0), // 当前扫描中未探测到
PRESENT(1); // 当前扫描中探测到
}
HotConnectGroup
public static class HotConnectGroup {
public final int groupId; // 组 ID
public final int aliasAddress; // 期望 Alias
public final long vendorId; // 期望 VendorID (0=不校验)
public final long productCode; // 期望 ProductCode (0=不校验)
public final boolean isPresent; // 是否在最近扫描中存在
public final int detectedSlaveIndex; // 命中的 从站索引 (0=未匹配)
public HotConnectStatus getStatus(); // PRESENT / ABSENT
}
完整示例
HotConnect hc = new HotConnect(master.MasterIndex);
// 1. 注册两个工具头组
hc.addGroup(1, 1001, 0, 0); // 工具头 1, alias=1001
hc.addGroup(2, 1002, 0, 0); // 工具头 2, alias=1002
// 2. 进入 OP 后查询状态
master.setState(EcState.OP);
master.Start();
for (HotConnect.HotConnectGroup g : hc.enumerate()) {
System.out.printf("组 %d (alias=%d): %s, 命中从站=%d%n",
g.groupId, g.aliasAddress, g.getStatus(), g.detectedSlaveIndex);
}
// 3. 检查工具头 1 是否在线
if (hc.getGroupStatus(1) == HotConnect.HotConnectStatus.PRESENT) {
System.out.println("工具头 1 已连接");
}
// 4. 卸下整套设备时清空所有组
hc.clearAll();
与 SlaveOffline / SlaveOnline 的关系
Hot-Connect 组缺失不会触发 SlaveOffline 事件(因为该从站本就允许缺失)。如需热插拔自修复,请订阅 master.Events().addSlaveIdentityMismatchListener,并在确认换件后调用 master.AcknowledgeSlaveReplacement。