package com.mes.step; import com.mes.core.StationConfig; import com.mes.core.StationContext; import com.mes.device.IDeviceDriver; /** * 读取设备数据步骤 * 在流程开始时读取设备数据并显示,不阻塞流程 */ public class ReadDeviceDataStep extends AbstractStep { public ReadDeviceDataStep() { super("read_device_data", "读取设备数据"); this.async = false; this.requiresUserInteraction = false; } @Override public boolean execute(StationContext context) { // 检查设备是否启用 if (!context.isDeviceEnabled()) { log.debug("[{}] 设备未启用,跳过读取", context.getStationCode()); return true; } IDeviceDriver driver = context.getDeviceDriver(); if (driver == null || !driver.isConnected()) { log.warn("[{}] 设备未连接,无法读取数据", context.getStationCode()); return true; // 不阻塞流程 } try { StationConfig config = StationConfig.getInstance(); // 读取第一行设备数据 StationConfig.DeviceInfoRow row1 = config.getDeviceInfoRow(0); if (row1 != null) { int presetCount = driver.readRegister(row1.getPresetAddress()); int finishedCount = driver.readRegister(row1.getFinishedAddress()); context.setPresetCount(presetCount); context.setFinishedCount(finishedCount); log.debug("[{}] 读取第一行设备数据: 预设={}, 完成={}", context.getStationCode(), presetCount, finishedCount); } // 读取第二行设备数据(如果配置了) StationConfig.DeviceInfoRow row2 = config.getDeviceInfoRow(1); if (row2 != null) { IDeviceDriver driver2 = context.getDeviceDriver2(); if (driver2 != null && driver2.isConnected()) { int presetCount2 = driver2.readRegister(row2.getPresetAddress()); int finishedCount2 = driver2.readRegister(row2.getFinishedAddress()); context.setPresetCount2(presetCount2); context.setFinishedCount2(finishedCount2); context.setDeviceConnected2(true); log.debug("[{}] 读取第二行设备数据: 预设={}, 完成={}", context.getStationCode(), presetCount2, finishedCount2); } else { // 第二个设备未连接 context.setPresetCount2(-1); context.setFinishedCount2(-1); context.setDeviceConnected2(false); log.debug("[{}] 第二行设备未连接", context.getStationCode()); } } // 更新UI显示 context.updateUI(); } catch (Exception e) { log.error("[{}] 读取设备数据失败: {}", context.getStationCode(), e.getMessage()); // 不阻塞流程 } return true; } @Override public boolean canExecute(StationContext context) { // 总是可以执行 return true; } @Override public boolean canSkip(StationContext context) { // 设备未启用时可以跳过 return !context.isDeviceEnabled(); } }