From d9a99461e1a74473c195dd7007baa74a0a495f1a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B?= <1063331231@qq.com> Date: Thu, 12 Jun 2025 23:38:38 +0800 Subject: [PATCH] =?UTF-8?q?=E7=B3=BB=E7=BB=9F=E9=85=8D=E7=BD=AE=E5=8F=82?= =?UTF-8?q?=E6=95=B0=E9=87=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../iflytop/sgs/app/service/api/CraftsService.java | 12 ++++++-- .../sgs/app/service/crafts/CraftsStepService.java | 35 ++++++---------------- .../service/device/module/HeatModuleService.java | 5 ++-- .../iflytop/sgs/common/enums/SystemConfigCode.java | 20 ++++++------- .../com/iflytop/sgs/common/result/ResultCode.java | 4 ++- 5 files changed, 34 insertions(+), 42 deletions(-) diff --git a/src/main/java/com/iflytop/sgs/app/service/api/CraftsService.java b/src/main/java/com/iflytop/sgs/app/service/api/CraftsService.java index 29bdc91..ec16a86 100644 --- a/src/main/java/com/iflytop/sgs/app/service/api/CraftsService.java +++ b/src/main/java/com/iflytop/sgs/app/service/api/CraftsService.java @@ -23,6 +23,7 @@ import com.iflytop.sgs.app.service.device.DeviceStateService; import com.iflytop.sgs.app.service.device.module.HeatModuleService; import com.iflytop.sgs.app.ws.server.WebSocketSender; import com.iflytop.sgs.common.enums.HeatModuleCode; +import com.iflytop.sgs.common.enums.SystemConfigCode; import com.iflytop.sgs.common.enums.automaton.CraftEvents; import com.iflytop.sgs.common.enums.automaton.CraftStates; import com.iflytop.sgs.common.exception.AppException; @@ -61,6 +62,7 @@ public class CraftsService extends ServiceImpl { private ExecutorService executor; private final DeviceStateService deviceStateService; private final ObjectProvider craftsStateObjectProvider; + private final SystemConfigService systemConfigService; @PostConstruct public void init() { @@ -102,16 +104,22 @@ public class CraftsService extends ServiceImpl { heatModuleCode = heatModuleState.getModuleCode(); } } else { + //判断加热区温度是否达标 if (futureMap.containsKey(heatModuleCode)) {//校验指定加热模块是否正在执行工艺 log.error("工艺正在执行中,不可重复开始执行。"); throw new AppException(ResultCode.CRAFT_RUNNING); } } + //判断温度 + Double coldTemperature = systemConfigService.getSystemConfigDoubleByCode(SystemConfigCode.fan_stop_temperature);//加热区能能够执行加热的最低温度 + double currentTemperature = deviceStateService.getDeviceState().getHeatModuleByCode(heatModuleCode).getTemperature(); + if (currentTemperature > coldTemperature) { + log.error("加热模块温度过高"); + throw new AppException(ResultCode.HEAT_MODULE_TEMPERATURE_IS_HEIGHT); + } craftMonitor.setHeatId(heatModuleCode); craftMonitorService.save(craftMonitor); log.info("准备开始工艺,加热模块{},工艺{}", heatModuleCode, craft.getName()); - //TODO 传感器校验heatModuleCode是否被占用 - // 校验已有上下文状态,仅允许在 READY、STOPPED 或 FINISHED 状态下重置 // CraftsContext existing = contextMap.get(heatModuleCode); // if (existing != null) { diff --git a/src/main/java/com/iflytop/sgs/app/service/crafts/CraftsStepService.java b/src/main/java/com/iflytop/sgs/app/service/crafts/CraftsStepService.java index 1f6278d..43a6ffb 100644 --- a/src/main/java/com/iflytop/sgs/app/service/crafts/CraftsStepService.java +++ b/src/main/java/com/iflytop/sgs/app/service/crafts/CraftsStepService.java @@ -32,6 +32,7 @@ import org.springframework.stereotype.Service; import java.time.LocalDateTime; import java.util.ArrayList; import java.util.List; +import java.util.concurrent.CompletableFuture; /** * 工艺步骤执行服务 @@ -232,22 +233,6 @@ public class CraftsStepService { log.info("工艺{},将X轴移动至目标加热模块托盘夹取点", heatModuleCode); transferModuleService.transferXMove(heatModuleTrayClawPoint3D.getX());//将X轴移动至目标加热模块托盘夹取点 log.info("工艺{},Z轴下降至夹取点", heatModuleCode); - //判断温度 - Double coldTemperature = systemConfigService.getSystemConfigDoubleByCode(SystemConfigCode.fan_stop_temperature);//降温至 - double currentTemperature = deviceStateService.getDeviceState().getHeatModuleByCode(heatModuleCode).getTemperature(); - if (currentTemperature > coldTemperature) { - log.info("工艺{},散热打开", heatModuleCode); - heatModuleService.fanStart(heatModuleCode);//散热打开 - deviceStateService.getDeviceState().getHeatModuleByCode(heatModuleCode).setFanOpen(true); //设置加热区风扇打开 -// while (!codeIsSuitable(heatModuleCode, coldTemperature)) { -// delay(5); -// } - delay(60); - log.info("工艺{},散热关闭", heatModuleCode); - heatModuleService.fanClose(heatModuleCode);//散热关闭 - deviceStateService.getDeviceState().getHeatModuleByCode(heatModuleCode).setFanOpen(false); //设置加热区风扇关闭 - } - transferModuleService.transferZMove(heatModuleTrayClawPoint3D.getZ());//Z轴下降至夹取点,使托盘落入石墨加热盘 log.info("工艺{},X轴移出卡槽", heatModuleCode); transferModuleService.transferXMoveBy(transferModuleXPickTrayMoveDistance);//X轴移出卡槽 @@ -292,7 +277,7 @@ public class CraftsStepService { Double volume = params.getDouble("volume");//量 JSONArray jsonArray = params.getJSONArray("columns");//列数 Double height = params.getDouble("height");//下降进入试管的高度 - if (height > 54) { + if (height > 54) {//到达试管底部的最大距离 throw new AppException(ResultCode.CRAFT_PARAMS_MISTAKE); } Integer channel = container.getChannel();//获取阀门通道 @@ -466,16 +451,14 @@ public class CraftsStepService { craftMonitor.setCurrentStepResult(String.valueOf(result)); craftMonitorService.saveOrUpdate(craftMonitor); /*工艺监控清理上步的记录*/ - - Double temperature = params.getDouble("temperature");//温度 Integer time = params.getInt("time");//秒 - deviceStateService.getDeviceState().getHeatModuleByCode(heatModuleCode).setHeatingType(HeatingType.heating); //设置加热区状态 加热中 deviceStateService.getDeviceState().getHeatModuleByCode(heatModuleCode).setTargetTemperature(temperature);//将加热温度设定为目标温度 log.info("工艺{},开始加热", heatModuleCode); - heatModuleService.heatRodOpen(heatModuleCode, temperature); + heatModuleService.fanClose(heatModuleCode);//关闭风扇 + heatModuleService.heatRodOpen(heatModuleCode, temperature);//打开加热棒 while (!heatIsSuitable(heatModuleCode, temperature)) {//判断温度是否到达 delay(1); } @@ -736,8 +719,8 @@ public class CraftsStepService { log.info("工艺{},关闭加热棒", heatModuleCode); webSocketService.pushCraftsDebug(CraftsDebugGenerator.generateJson(heatModuleCode.toString(), "关闭加热棒", "")); heatModuleService.heatRodClose(heatModuleCode);//关闭加热棒 -// heatModuleService.fanStart(heatModuleCode);//散热打开 -// deviceStateService.getDeviceState().getHeatModuleByCode(heatModuleCode).setFanOpen(true); //设置加热区风扇打开 + heatModuleService.fanStart(heatModuleCode);//散热打开 + deviceStateService.getDeviceState().getHeatModuleByCode(heatModuleCode).setFanOpen(true); //设置加热区风扇打开 deviceStateService.getDeviceState().getHeatModuleByCode(heatModuleCode).setStartHeatTime(null);//开始加热时间 deviceStateService.getDeviceState().getHeatModuleByCode(heatModuleCode).setTargetTime(null);//加热器目标加热时间 deviceStateService.getDeviceState().getHeatModuleByCode(heatModuleCode).setHeatingType(HeatingType.stop); //设置加热区状态 @@ -866,7 +849,7 @@ public class CraftsStepService { } /* - * 检测加热区降温温度是否合适 + * 检测加热区升温度是否合适 * */ public boolean heatIsSuitable(HeatModuleCode heatModuleCode, Double temperature) throws Exception { double currentTemperature = deviceStateService.getDeviceState().getHeatModuleByCode(heatModuleCode).getTemperature(); @@ -875,9 +858,9 @@ public class CraftsStepService { } /* - * 检测加热区升温温度是否合适 + * 检测加热区降温温度是否合适 * */ - public boolean codeIsSuitable(HeatModuleCode heatModuleCode, Double temperature) throws Exception { + public boolean coldIsSuitable(HeatModuleCode heatModuleCode, Double temperature) throws Exception { double currentTemperature = deviceStateService.getDeviceState().getHeatModuleByCode(heatModuleCode).getTemperature(); log.info("工艺{},当前温度{}",heatModuleCode,currentTemperature); webSocketService.pushCraftsDebug(CraftsDebugGenerator.generateJson(heatModuleCode.toString(), "加热区温度", currentTemperature)); diff --git a/src/main/java/com/iflytop/sgs/app/service/device/module/HeatModuleService.java b/src/main/java/com/iflytop/sgs/app/service/device/module/HeatModuleService.java index 6d574cf..8038b5e 100644 --- a/src/main/java/com/iflytop/sgs/app/service/device/module/HeatModuleService.java +++ b/src/main/java/com/iflytop/sgs/app/service/device/module/HeatModuleService.java @@ -138,12 +138,11 @@ public class HeatModuleService { * 获取一个空闲加热区 */ public HeatModuleState getIdleHeatModule() { - //List heatModuleStateList=deviceStateService.getDeviceState().getHeatModule(); - //heatModuleStateList.removeIf(heatModuleState -> heatModuleState.getModuleCode().equals(HeatModuleCode.heat_module_04)); for (HeatModuleState heatModuleState : deviceStateService.getDeviceState().getHeatModule()) { boolean flag = true; for (TrayState trayState : deviceStateService.getDeviceState().getTrays()) { - if (heatModuleState.getModuleCode().equals(trayState.getHeatModuleCode())) { + if (heatModuleState.getModuleCode().equals(HeatModuleCode.heat_module_04) || + heatModuleState.getModuleCode().equals(trayState.getHeatModuleCode())) { flag = false; break; } diff --git a/src/main/java/com/iflytop/sgs/common/enums/SystemConfigCode.java b/src/main/java/com/iflytop/sgs/common/enums/SystemConfigCode.java index d65ce43..c61eae1 100644 --- a/src/main/java/com/iflytop/sgs/common/enums/SystemConfigCode.java +++ b/src/main/java/com/iflytop/sgs/common/enums/SystemConfigCode.java @@ -7,20 +7,20 @@ import lombok.Getter; */ @Getter public enum SystemConfigCode { - water("水加液系数"), - thick("浓硝酸加液系数"), - thin("稀硝酸加液系数"), - back_flow_distance("回吸放滴落距离"), - pre_fill_distance("加液预充距离"), - drain_distance("加液排空距离"), - reduce_distance("过量抽液距离"), + water("水加液系数 标准2"), + thick("浓硝酸加液系数 标准2"), + thin("稀硝酸加液系数 标准2"), + back_flow_distance("回吸放滴落距离 0-0.2"), + pre_fill_distance("加液预充距离 最小17"), + drain_distance("加液排空距离 最小17"), + reduce_distance("过量抽液距离 7左右"), cycle_clean_max("允许的最大清洁次数"), - liquid_max_speed("蠕动泵最大转速限制"), + liquid_max_speed("蠕动泵最大转速限制 150"), door_origin_is_ignore("忽略门自检"), crafts_end_beep_times("工艺结束蜂鸣器响次数"), fan_stop_temperature("风扇关闭的温度设置"), - pre_fill_when_open_service("开机是否预充"), - pre_fill_distance_when_open_service("开机预充距离"), + pre_fill_when_open_service("开机是否预充 默认true"), + pre_fill_distance_when_open_service("开机预充距离 最小3"), ; private final String description; diff --git a/src/main/java/com/iflytop/sgs/common/result/ResultCode.java b/src/main/java/com/iflytop/sgs/common/result/ResultCode.java index 821fc36..9c08ed0 100644 --- a/src/main/java/com/iflytop/sgs/common/result/ResultCode.java +++ b/src/main/java/com/iflytop/sgs/common/result/ResultCode.java @@ -70,7 +70,9 @@ public enum ResultCode implements IResultCode, Serializable { HEAT_MODULE_NO_IDLE("6033", "加热模块无空闲"), TRANSFER_MODULE_YES_TRAY("6034", "夹爪存在托盘"), NOT_ALLOWED_HEAT_MODULE("6035", "不允许选择的加热区"), - FEED_AREA_EXIST_TRAY("6036", "上料区无托盘"),; + FEED_AREA_EXIST_TRAY("6036", "上料区无托盘"), + FAN_START_FAIL("6037", "散热打开失败"), + HEAT_MODULE_TEMPERATURE_IS_HEIGHT("6038", "目标加热区温度过高"); /** 状态码 */ private final String code; /** 提示信息 */