diff --git a/src/main/java/com/iflytop/sgs/app/cmd/control/AnnealStartCommand.java b/src/main/java/com/iflytop/sgs/app/cmd/control/AnnealStartCommand.java index 1d71f10..2676e8c 100644 --- a/src/main/java/com/iflytop/sgs/app/cmd/control/AnnealStartCommand.java +++ b/src/main/java/com/iflytop/sgs/app/cmd/control/AnnealStartCommand.java @@ -40,6 +40,8 @@ public class AnnealStartCommand extends BaseCommandHandler { throw new AppException(ResultCode.HEAT_TEMPERATURE_NULL); } return runAsync(() -> { + heatModuleService.fanClose(cmdDTO.getCommandId(), cmdDTO.getCommand(), heatModuleCode);//关闭风扇 + deviceStateService.getDeviceState().getHeatModuleByCode(heatModuleCode).setFanOpen(false);//同步状态 heatModuleService.heatRodOpen(cmdDTO.getCommandId(), cmdDTO.getCommand(), heatModuleCode, targetTemperature);//开启加热 deviceStateService.getDeviceState().getHeatModuleByCode(heatModuleCode).setHeatingType(HeatingType.annealing);//状态修改为退火中 heatModuleState.setTargetTemperature(targetTemperature);//将退火温度设定为目标温度 diff --git a/src/main/java/com/iflytop/sgs/app/cmd/control/DrainLiquidCommand.java b/src/main/java/com/iflytop/sgs/app/cmd/control/DrainLiquidCommand.java index bc56fac..c89ce24 100644 --- a/src/main/java/com/iflytop/sgs/app/cmd/control/DrainLiquidCommand.java +++ b/src/main/java/com/iflytop/sgs/app/cmd/control/DrainLiquidCommand.java @@ -8,7 +8,6 @@ import com.iflytop.sgs.app.service.api.DevicePositionService; import com.iflytop.sgs.app.service.api.SystemConfigService; import com.iflytop.sgs.app.service.device.DeviceSensorService; import com.iflytop.sgs.app.service.device.DeviceStateService; -import com.iflytop.sgs.app.service.device.module.HeatModuleService; import com.iflytop.sgs.app.service.device.module.SolutionModuleService; import com.iflytop.sgs.app.service.device.module.TransferModuleService; import com.iflytop.sgs.common.annotation.CommandMapping; @@ -33,7 +32,6 @@ import java.util.concurrent.CompletableFuture; @RequiredArgsConstructor @CommandMapping("drain_liquid")//业务指令注解 public class DrainLiquidCommand extends BaseCommandHandler { - private final HeatModuleService heatModuleService; private final TransferModuleService transferModuleService; private final DevicePositionService devicePositionService; diff --git a/src/main/java/com/iflytop/sgs/app/cmd/control/DryStartCommand.java b/src/main/java/com/iflytop/sgs/app/cmd/control/DryStartCommand.java index 85fd746..78703ae 100644 --- a/src/main/java/com/iflytop/sgs/app/cmd/control/DryStartCommand.java +++ b/src/main/java/com/iflytop/sgs/app/cmd/control/DryStartCommand.java @@ -37,6 +37,8 @@ public class DryStartCommand extends BaseCommandHandler { throw new AppException(ResultCode.HEAT_TEMPERATURE_NULL); } return runAsync(() -> { + heatModuleService.fanClose(cmdDTO.getCommandId(), cmdDTO.getCommand(), heatModuleCode);//关闭风扇 + deviceStateService.getDeviceState().getHeatModuleByCode(heatModuleCode).setFanOpen(false);//同步状态 heatModuleService.heatRodOpen(cmdDTO.getCommandId(), cmdDTO.getCommand(), heatModuleCode, targetTemperature); deviceStateService.getDeviceState().getHeatModuleByCode(heatModuleCode).setHeatingType(HeatingType.drying); //设置加热区状态 烘干中 heatModuleState.setTargetTemperature(targetTemperature);//将烘干温度设定为目标温度 diff --git a/src/main/java/com/iflytop/sgs/app/cmd/control/FanStartCommand.java b/src/main/java/com/iflytop/sgs/app/cmd/control/FanStartCommand.java index c97e985..56e085b 100644 --- a/src/main/java/com/iflytop/sgs/app/cmd/control/FanStartCommand.java +++ b/src/main/java/com/iflytop/sgs/app/cmd/control/FanStartCommand.java @@ -1,7 +1,6 @@ package com.iflytop.sgs.app.cmd.control; import com.iflytop.sgs.app.core.BaseCommandHandler; -import com.iflytop.sgs.app.model.bo.status.device.HeatModuleState; import com.iflytop.sgs.app.model.dto.CmdDTO; import com.iflytop.sgs.app.service.device.DeviceStateService; import com.iflytop.sgs.app.service.device.module.HeatModuleService; @@ -30,13 +29,10 @@ public class FanStartCommand extends BaseCommandHandler { String heatModuleCodeStr = cmdDTO.getStringParam("heatModuleCode"); HeatModuleCode heatModuleCode = HeatModuleCode.valueOf(heatModuleCodeStr); - HeatModuleState heatModuleState = deviceStateService.getDeviceState().getHeatModuleByCode(heatModuleCode); return runAsync(() -> { - if (!heatModuleState.getHeatingType().equals(HeatingType.stop)) {//加热棒加热状态 - heatModuleService.heatRodClose(cmdDTO.getCommandId(), cmdDTO.getCommand(), heatModuleCode);//关闭加热棒 - deviceStateService.getDeviceState().getHeatModuleByCode(heatModuleCode).setHeatingType(HeatingType.stop);//同步状态 - } + heatModuleService.heatRodClose(cmdDTO.getCommandId(), cmdDTO.getCommand(), heatModuleCode);//关闭加热棒 + deviceStateService.getDeviceState().getHeatModuleByCode(heatModuleCode).setHeatingType(HeatingType.stop);//同步状态 heatModuleService.fanStart(cmdDTO.getCommandId(), cmdDTO.getCommand(), heatModuleCode);//打开风扇 deviceStateService.getDeviceState().getHeatModuleByCode(heatModuleCode).setFanOpen(true);//同步状态 }); diff --git a/src/main/java/com/iflytop/sgs/app/cmd/control/HeatStartCommand.java b/src/main/java/com/iflytop/sgs/app/cmd/control/HeatStartCommand.java index a7ac93e..c029e54 100644 --- a/src/main/java/com/iflytop/sgs/app/cmd/control/HeatStartCommand.java +++ b/src/main/java/com/iflytop/sgs/app/cmd/control/HeatStartCommand.java @@ -37,6 +37,8 @@ public class HeatStartCommand extends BaseCommandHandler { throw new AppException(ResultCode.HEAT_TEMPERATURE_NULL); } return runAsync(() -> { + heatModuleService.fanClose(cmdDTO.getCommandId(), cmdDTO.getCommand(), heatModuleCode);//关闭风扇 + deviceStateService.getDeviceState().getHeatModuleByCode(heatModuleCode).setFanOpen(false);//同步状态 heatModuleService.heatRodOpen(cmdDTO.getCommandId(), cmdDTO.getCommand(), heatModuleCode, targetTemperature);//打开加热棒 deviceStateService.getDeviceState().getHeatModuleByCode(heatModuleCode).setHeatingType(HeatingType.heating); //设置加热区状态 加热中 heatModuleState.setTargetTemperature(targetTemperature);//将加热温度设定为目标温度 diff --git a/src/main/java/com/iflytop/sgs/app/controller/CraftsController.java b/src/main/java/com/iflytop/sgs/app/controller/CraftsController.java index e3261ae..93145b9 100644 --- a/src/main/java/com/iflytop/sgs/app/controller/CraftsController.java +++ b/src/main/java/com/iflytop/sgs/app/controller/CraftsController.java @@ -38,7 +38,7 @@ public class CraftsController { private final CraftsService craftsService; private final DeviceStateService deviceStateService; - @Operation(summary = "根据矿石id获取工艺列表") + @Operation(summary = "获取工艺列表") @GetMapping("/list") public PageResult getPage(BasePageQuery pageQuery) { IPage result = craftsService.getPage(pageQuery); diff --git a/src/main/java/com/iflytop/sgs/app/controller/HeatController.java b/src/main/java/com/iflytop/sgs/app/controller/HeatController.java index dd5b32b..f8d3000 100644 --- a/src/main/java/com/iflytop/sgs/app/controller/HeatController.java +++ b/src/main/java/com/iflytop/sgs/app/controller/HeatController.java @@ -31,18 +31,15 @@ public class HeatController { @Operation(summary = "加热模块设定目标温度") @PostMapping("/target-temperature") public Result setTargetTemperature(@Valid @RequestBody SetTargetTemperatureVO setTargetTemperatureVO) { - Double annealTemperature = systemConfigService.getSystemConfigDoubleByCode(SystemConfigCode.anneal_temperature);//抽液时针下降高度 - Double dryTemperature = systemConfigService.getSystemConfigDoubleByCode(SystemConfigCode.dry_temperature);//抽液时针下降高度 - Double heatTemperature = systemConfigService.getSystemConfigDoubleByCode(SystemConfigCode.heat_temperature);//抽液时针下降高度 - if(setTargetTemperatureVO.getHeatTemperature()>heatTemperature){ + Double annealTemperature = systemConfigService.getSystemConfigDoubleByCode(SystemConfigCode.anneal_temperature);//退火温度极限值 + Double dryTemperature = systemConfigService.getSystemConfigDoubleByCode(SystemConfigCode.dry_temperature);//烘干温度极限值 + Double heatTemperature = systemConfigService.getSystemConfigDoubleByCode(SystemConfigCode.heat_temperature);//加热温度极限值 + if (setTargetTemperatureVO.getHeatTemperature() != null && setTargetTemperatureVO.getHeatTemperature() > heatTemperature) return Result.failed("加热温度超过设定值!"); - } - if(setTargetTemperatureVO.getDryTemperature()>dryTemperature){ + if (setTargetTemperatureVO.getDryTemperature() != null && setTargetTemperatureVO.getDryTemperature() > dryTemperature) return Result.failed("烘干温度超过设定值!"); - } - if(setTargetTemperatureVO.getAnnealTemperature()>annealTemperature){ + if (setTargetTemperatureVO.getAnnealTemperature() != null && setTargetTemperatureVO.getAnnealTemperature() > annealTemperature) return Result.failed("退火温度超过设定值"); - } heatModuleService.setTargetTemperature(setTargetTemperatureVO); return Result.success(); } diff --git a/src/main/java/com/iflytop/sgs/app/core/BaseCommandHandler.java b/src/main/java/com/iflytop/sgs/app/core/BaseCommandHandler.java index 57693ef..bd02b14 100644 --- a/src/main/java/com/iflytop/sgs/app/core/BaseCommandHandler.java +++ b/src/main/java/com/iflytop/sgs/app/core/BaseCommandHandler.java @@ -30,4 +30,4 @@ public abstract class BaseCommandHandler implements CommandHandler { CompletableFuture.allOf(responseFutures) .get(120, TimeUnit.SECONDS); } -} \ No newline at end of file +} 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 9351b74..7fb22f0 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 @@ -20,6 +20,7 @@ import com.iflytop.sgs.app.model.vo.CraftMonitorVO; import com.iflytop.sgs.app.model.vo.CraftStatusVO; import com.iflytop.sgs.app.model.vo.SetCraftsVO; import com.iflytop.sgs.app.service.crafts.CraftsStepService; +import com.iflytop.sgs.app.service.device.DeviceSensorService; 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; @@ -63,10 +64,11 @@ public class CraftsService extends ServiceImpl { private final ConcurrentHashMap contextMap = new ConcurrentHashMap<>(); @Getter private final ConcurrentHashMap> futureMap = new ConcurrentHashMap<>(); - private ExecutorService executor; private final DeviceStateService deviceStateService; private final ObjectProvider craftsStateObjectProvider; private final SystemConfigService systemConfigService; + private final DeviceSensorService deviceSensorService; + private ExecutorService executor; @PostConstruct public void init() { @@ -100,10 +102,15 @@ public class CraftsService extends ServiceImpl { log.error("此加热区工艺正在执行中,不可重复开始执行。"); throw new AppException(ResultCode.CRAFT_RUNNING); } -// if (futureMap.containsKey(heatModuleCode)) {//校验指定加热模块是否正在执行工艺 -// log.error("工艺正在执行中,不可重复开始执行。"); -// throw new AppException(ResultCode.CRAFT_RUNNING); -// } + } + try { + boolean heatTrayExist = deviceSensorService.getTrayStateByHeatModuleCode(heatModuleCode);//获取加热区托盘 + if (heatTrayExist) { + throw new AppException(ResultCode.CRAFT_IDLE_HEAT_MODULE_NOT_FOUND); + } + } catch (Exception e) { + log.error("获取加热区传感器信号失败!"); + throw new AppException(ResultCode.HARDWARE_ERROR); } //判断温度 Double coldTemperature = systemConfigService.getSystemConfigDoubleByCode(SystemConfigCode.fan_stop_temperature);//加热区能能够执行加热的最低温度 @@ -329,6 +336,6 @@ public class CraftsService extends ServiceImpl { Page craftsPage = new Page<>(pageQuery.getPageNum(), pageQuery.getPageSize()); // 分页查询矿石数据 - return this.baseMapper.selectPage(craftsPage, new QueryWrapper<>()); + return this.baseMapper.selectPage(craftsPage, new QueryWrapper().orderByDesc("create_time")); } } diff --git a/src/main/java/com/iflytop/sgs/app/service/api/HeatService.java b/src/main/java/com/iflytop/sgs/app/service/api/HeatService.java index 9a76994..6b0dd26 100644 --- a/src/main/java/com/iflytop/sgs/app/service/api/HeatService.java +++ b/src/main/java/com/iflytop/sgs/app/service/api/HeatService.java @@ -16,14 +16,17 @@ public class HeatService { private final DeviceStateService deviceStateService; public void setTargetTemperature(SetTargetTemperatureVO setTargetTemperatureVO) { - HeatModuleState heatModuleState=deviceStateService.getDeviceState().getHeatModuleByCode(setTargetTemperatureVO.getModuleCode()); - heatModuleState.setAnnealTemperature(setTargetTemperatureVO.getAnnealTemperature()); - heatModuleState.setDryTemperature(setTargetTemperatureVO.getDryTemperature()); - heatModuleState.setHeatTemperature(setTargetTemperatureVO.getHeatTemperature()); + HeatModuleState heatModuleState = deviceStateService.getDeviceState().getHeatModuleByCode(setTargetTemperatureVO.getModuleCode()); + if (setTargetTemperatureVO.getAnnealTemperature() != null) + heatModuleState.setAnnealTemperature(setTargetTemperatureVO.getAnnealTemperature()); + if (setTargetTemperatureVO.getDryTemperature() != null) + heatModuleState.setDryTemperature(setTargetTemperatureVO.getDryTemperature()); + if (setTargetTemperatureVO.getHeatTemperature() != null) + heatModuleState.setHeatTemperature(setTargetTemperatureVO.getHeatTemperature()); } - public void setEnable(SetHeatModuleEnableVO setHeatModuleEnableVO){ + public void setEnable(SetHeatModuleEnableVO setHeatModuleEnableVO) { deviceStateService.getDeviceState().getHeatModuleByCode(setHeatModuleEnableVO.getModuleCode()).setEnable(setHeatModuleEnableVO.getEnable()); } } 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 6674534..939f014 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 @@ -8,6 +8,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.iflytop.sgs.app.core.CraftsDebugGenerator; import com.iflytop.sgs.app.model.bo.CraftsStep; import com.iflytop.sgs.app.model.bo.Point3D; +import com.iflytop.sgs.app.model.bo.status.device.TrayState; import com.iflytop.sgs.app.model.bo.status.device.TubeState; import com.iflytop.sgs.app.model.entity.Container; import com.iflytop.sgs.app.model.entity.CraftMonitor; @@ -24,6 +25,7 @@ import com.iflytop.sgs.app.ws.server.WebSocketSender; import com.iflytop.sgs.common.constant.WebSocketMessageType; import com.iflytop.sgs.common.enums.*; import com.iflytop.sgs.common.enums.cmd.CmdBeepMode; +import com.iflytop.sgs.common.enums.data.CraftsPreHeatType; import com.iflytop.sgs.common.enums.data.DevicePositionCode; import com.iflytop.sgs.common.exception.AppException; import com.iflytop.sgs.common.result.ResultCode; @@ -58,7 +60,7 @@ public class CraftsStepService { private final SystemConfigService systemConfigService; private final DeviceLightSoundService deviceLightSoundService; private final CraftMonitorService craftMonitorService; - private DoorModuleService doorModuleService; + private final DoorModuleService doorModuleService; /** * 执行单个工艺步骤 @@ -90,17 +92,30 @@ public class CraftsStepService { * 退火区预热 * */ public boolean preHeat(HeatModuleCode heatModuleCode, JSONObject params, CraftMonitor craftMonitor) throws Exception { + Double temperature = params.getDouble("temperature"); - log.info("工艺{},预热", HeatModuleCode.heat_module_04); - heatModuleService.heatRodOpen(HeatModuleCode.heat_module_04, temperature); - deviceStateService.getDeviceState().getHeatModuleByCode(HeatModuleCode.heat_module_04).setTargetTemperature(temperature);//设置加热温度 - deviceStateService.getDeviceState().getHeatModuleByCode(HeatModuleCode.heat_module_04).setHeatingType(HeatingType.heating);//加热中 - webSocketService.pushCraftsDebug(CraftsDebugGenerator.generateJson(HeatModuleCode.heat_module_04.toString(), "退火区加热中", temperature)); + String type = params.getStr("type"); + CraftsPreHeatType preHeatType= CraftsPreHeatType.valueOf(type); + if(preHeatType.equals(CraftsPreHeatType.anneal)){ + heatModuleService.fanClose(HeatModuleCode.heat_module_04);//关闭风扇 + deviceStateService.getDeviceState().getHeatModuleByCode(HeatModuleCode.heat_module_04).setFanOpen(false);//同步状态 + heatModuleService.heatRodOpen(HeatModuleCode.heat_module_04, temperature); + deviceStateService.getDeviceState().getHeatModuleByCode(HeatModuleCode.heat_module_04).setTargetTemperature(temperature);//设置加热温度 + deviceStateService.getDeviceState().getHeatModuleByCode(HeatModuleCode.heat_module_04).setHeatingType(HeatingType.heating);//加热中 + webSocketService.pushCraftsDebug(CraftsDebugGenerator.generateJson(HeatModuleCode.heat_module_04.toString(), "退火区预热中", temperature)); + }else{ + heatModuleService.fanClose(heatModuleCode);//关闭风扇 + deviceStateService.getDeviceState().getHeatModuleByCode(heatModuleCode).setFanOpen(false);//同步状态 + heatModuleService.heatRodOpen(heatModuleCode, temperature); + deviceStateService.getDeviceState().getHeatModuleByCode(heatModuleCode).setTargetTemperature(temperature);//设置加热温度 + deviceStateService.getDeviceState().getHeatModuleByCode(heatModuleCode).setHeatingType(HeatingType.heating);//加热中 + webSocketService.pushCraftsDebug(CraftsDebugGenerator.generateJson(heatModuleCode.toString(), "加热区预热中", temperature)); + } return true; } /* - * 执行加稀硝酸 浓硝酸 清洗前关门 前端开门按钮设置为不可操作 + * 执行加稀硝酸 浓硝酸 清洗前关门 前端 开门 按钮设置为不可操作 * */ public void doorClose() throws HardwareException, InterruptedException { doorModuleService.doorClose(); @@ -112,7 +127,7 @@ public class CraftsStepService { } /* - * 执行加稀硝酸 浓硝酸 清洗后关门 前端开门按钮设置为可操作 + * 执行加稀硝酸 浓硝酸 清洗后关门 前端 开门 按钮设置为可操作 * */ public void doorAble() { deviceStateService.getDeviceState().getDoorModule().setActionable(true); @@ -126,16 +141,13 @@ public class CraftsStepService { /*关门*/ doorClose(); - log.info("工艺{},-------------------------------------加稀硝酸-------------------------------------", heatModuleCode); /*工艺监控*/ - log.info("工艺{},工艺监控", heatModuleCode); List finishColumns = new ArrayList<>(); craftMonitor.setCurrentStepResult(CraftsMonitorResultCode.add_liquid_column.getDescription() + Arrays.toString(finishColumns.toArray())); craftMonitorService.saveMonitor(craftMonitor); /*工艺监控结束*/ /*获取配置信息*/ - log.info("工艺{},获取配置信息", heatModuleCode); deviceStateService.getDeviceState().getSolutionModule().setPumping(true); Double transferModuleXPickTrayMoveDistance = devicePositionService.getPosition(DevicePositionCode.transferModuleXPickTrayMoveDistance).getDistance();//获取转运模块X轴拿取托盘进出卡槽移动距离 Point3D feedAreaTrayPoint3D = devicePositionService.getPosition(DevicePositionCode.feedAreaTrayPoint).getPoint3D();//获取上料区托盘夹取位置点 @@ -152,13 +164,12 @@ public class CraftsStepService { double scale = systemConfigService.getSystemConfigDoubleByCode(SystemConfigCode.valueOf(solutions.getCode()));//获取转换比 Double solutionModuleMotorDownInTubeAddPositon = devicePositionService.getPosition(DevicePositionCode.solutionModuleMotorDownInTubeAddPositon).getPositon(); //加液模块电机下降进入试管加液位置 double addLiquidDistance = volume * scale; - Point3D heatArea1TrayClawPoint = devicePositionService.getPosition(DevicePositionCode.heatArea1TrayClawPoint).getPoint3D();//加热位1坐标 + Point3D heatArea1TrayClawPoint = devicePositionService.getPosition(DevicePositionCode.heatArea1TrayClawPoint).getPoint3D();//加热位1 坐标 Double liquidAreaPreFillPoint = devicePositionService.getPosition(DevicePositionCode.liquidAreaPreFillPoint).getPositon(); //预充时加液臂下降位置 Double backFlowDistance = systemConfigService.getSystemConfigDoubleByCode(SystemConfigCode.back_flow_distance);//防低落距离 double pumpNormalSpeed = systemConfigService.getSystemConfigDoubleByCode(SystemConfigCode.pump_normal_speed);//蠕动泵正常转速 /*获取参数结束*/ - log.info("工艺{},申请转运模组并等待", heatModuleCode); transferModuleService.requestTransferModule(CraftsTransferTypeCode.move_thin);//申请转运模组并等待 deviceStateService.getDeviceState().getTrayByHeatModuleCode(heatModuleCode).setUseArm(true);//使用机械臂标志 @@ -166,51 +177,41 @@ public class CraftsStepService { /*移动至加液区开始*/ boolean feedTrayExist = deviceSensorService.getSensorStatus(DeviceSensorCode.LIQUID_TRAY_EXIST);//获取上料区传感器状态 Assert.isTrue(feedTrayExist, () -> new AppException(ResultCode.FEED_AREA_NO_TRAY)); - log.info("工艺{},加液机械臂上升", heatModuleCode); solutionModuleService.solutionMotorMoveZero();//加液机械臂上升 - transferModuleService.transferMoveZero();//z轴上升 - log.info("工艺{},机械臂移动至上料区", heatModuleCode); + transferModuleService.transferMove(liquidAreaTrayPoint3D);//移动至加液时托盘位置点 + boolean clawTrayExist = deviceSensorService.getSensorStatus(DeviceSensorCode.CLAW_TRAY_EXIST);//获取传感器状态 + Assert.isTrue(!clawTrayExist, () -> new AppException(ResultCode.CRAFT_SOLUTION_EXIST_TRAY));//加液区无托盘 + webSocketService.pushCraftsDebug(CraftsDebugGenerator.generateJson(heatModuleCode.toString(), "机械臂移动至上料区", feedAreaTrayPoint3D)); - log.info("工艺{},将X轴移动至上料区托盘夹取点 + 进出卡槽移动距离", heatModuleCode); + transferModuleService.transferMoveZero();//z轴上升 transferModuleService.transferXMove(feedAreaTrayPoint3D.getX() + transferModuleXPickTrayMoveDistance);//将X轴移动至上料区托盘夹取点 + 进出卡槽移动距离 - log.info("工艺{},Z轴下降至夹取点,使托盘落入石墨加热盘", heatModuleCode); feedTrayExist = deviceSensorService.getSensorStatus(DeviceSensorCode.LIQUID_TRAY_EXIST);//获取上料区传感器状态 Assert.isTrue(feedTrayExist, () -> new AppException(ResultCode.FEED_AREA_NO_TRAY)); transferModuleService.transferZMove(feedAreaTrayPoint3D.getZ());//Z轴下降至夹取点,使托盘落入石墨加热盘 - log.info("工艺{},X轴进入卡槽", heatModuleCode); transferModuleService.transferXMoveBy(-transferModuleXPickTrayMoveDistance);//X轴进入卡槽 deviceStateService.getDeviceState().getSolutionModule().setFeedAreaTrayStatus(false);//加热区托盘状态 deviceStateService.getDeviceState().getTrayByHeatModuleCode(heatModuleCode).setInFeedArea(false);//托盘状态 - log.info("工艺{},Z轴抬升至最高", heatModuleCode); transferModuleService.transferZMoveZero();//Z轴抬升至最高 webSocketService.pushCraftsDebug(CraftsDebugGenerator.generateJson(heatModuleCode.toString(), "机械臂移动至加液区", DevicePositionCode.liquidAreaTrayPoint.name())); - log.info("工艺{},移动至加液时托盘位置点", heatModuleCode); transferModuleService.transferMove(liquidAreaTrayPoint3D);//移动至加液时托盘位置点 deviceStateService.getDeviceState().getSolutionModule().setPumping(true);//正在加液 deviceStateService.getDeviceState().getTrayByHeatModuleCode(heatModuleCode).setInSolutionPositon(true);//托盘状态 - boolean clawTrayExist = deviceSensorService.getSensorStatus(DeviceSensorCode.CLAW_TRAY_EXIST);//获取传感器状态 + clawTrayExist = deviceSensorService.getSensorStatus(DeviceSensorCode.CLAW_TRAY_EXIST);//获取传感器状态 Assert.isTrue(clawTrayExist, () -> new AppException(ResultCode.CRAFT_SOLUTION_NO_TRAY));//加液区无托盘 /*移动至加液区结束*/ /*预充开始*/ - log.info("工艺{},预充开始", heatModuleCode); transferModuleService.transferXMove(heatArea1TrayClawPoint.getX());//转运模块移动至加热位1 - log.info("工艺{},加液机械臂下降至预充位置", heatModuleCode); feedTrayExist = deviceSensorService.getSensorStatus(DeviceSensorCode.LIQUID_TRAY_EXIST);//获取传感器状态 Assert.isTrue(!feedTrayExist, () -> new AppException(ResultCode.FEED_AREA_EXIST_TRAY));//上料区存在托盘 solutionModuleService.solutionMotorMove(liquidAreaPreFillPoint);//加液机械臂下降至至预充点位 - log.info("工艺{},电磁阀对应通道打开", heatModuleCode); solutionModuleService.liquidValveSwitch(SolutionCode.waste);//电磁阀对应通道打开 solutionModuleService.liquidPumpSetSpeed(pumpNormalSpeed);//设置泵的正常转速 - log.info("工艺{},排空", heatModuleCode); solutionModuleService.liquidPumpMove(-drainDistance);//排空 - log.info("工艺{},电磁阀对应通道打开", heatModuleCode); solutionModuleService.liquidValveSwitchByChannel(channel);//电磁阀对应通道打开 - log.info("工艺{},预充", heatModuleCode); solutionModuleService.liquidPumpMove(preFillDistance);//预充 solutionModuleService.liquidPumpMove(-backFlowDistance);//预充 - log.info("工艺{},加液机械臂上升", heatModuleCode); solutionModuleService.solutionMotorMoveZero();//加液机械臂上升 /*预充结束*/ @@ -233,14 +234,10 @@ public class CraftsStepService { for (int i = 0; i < columns.size(); i++) { webSocketService.pushCraftsDebug(CraftsDebugGenerator.generateJson(heatModuleCode.toString(), "移动加液机械臂到指定试管", i)); double distance = Math.abs(columns.get(i) - 5) * trayTubeHorizontalSpacingDistance;//机械臂右移距离 - log.info("工艺{},机械臂移动到试管位置{}", heatModuleCode, i); transferModuleService.transferXMove(liquidAreaTrayPoint3D.getX() + distance);//机械臂移动到试管位置 - log.info("工艺{},加液机械臂下降", heatModuleCode); solutionModuleService.solutionMotorMove(solutionModuleMotorDownInTubeAddPositon);//加液机械臂下降 webSocketService.pushCraftsDebug(CraftsDebugGenerator.generateJson(heatModuleCode.toString(), "添加溶液", addLiquidDistance)); - log.info("工艺{},加液", heatModuleCode); solutionModuleService.liquidPumpMove(addLiquidDistance);//加液 position - log.info("工艺{},加液机械臂上升", heatModuleCode); solutionModuleService.solutionMotorMoveZero();//加液机械臂上升 /*工艺监控开始*/ finishColumns.add(i); @@ -257,15 +254,11 @@ public class CraftsStepService { boolean heatModuleTrayExist = deviceSensorService.getTrayStateByHeatModuleCode(heatModuleCode);//目标加热模块有无托盘 Assert.isTrue(!heatModuleTrayExist, () -> new AppException(ResultCode.CRAFT_HEAT_EXIST_TRAY));//提示被占用 webSocketService.pushCraftsDebug(CraftsDebugGenerator.generateJson(heatModuleCode.toString(), "机械臂移动至加热区", heatModuleCode)); - log.info("工艺{},加液机械臂上升", heatModuleCode); solutionModuleService.solutionMotorMoveZero();//加液机械臂上升 - log.info("工艺{},将X轴移动至目标加热模块托盘夹取点", heatModuleCode); transferModuleService.transferXMove(heatModuleTrayClawPoint3D.getX());//将X轴移动至目标加热模块托盘夹取点 heatModuleTrayExist = deviceSensorService.getTrayStateByHeatModuleCode(heatModuleCode);//目标加热模块有无托盘 Assert.isTrue(!heatModuleTrayExist, () -> new AppException(ResultCode.CRAFT_HEAT_EXIST_TRAY));//提示被占用 - log.info("工艺{},Z轴下降至夹取点", heatModuleCode); transferModuleService.transferZMove(heatModuleTrayClawPoint3D.getZ());//Z轴下降至夹取点,使托盘落入石墨加热盘 - log.info("工艺{},X轴移出卡槽", heatModuleCode); transferModuleService.transferXMoveBy(transferModuleXPickTrayMoveDistance);//X轴移出卡槽 transferModuleService.transferZMoveZero();//Z轴抬升至最高 deviceStateService.getDeviceState().getHeatModuleByCode(heatModuleCode).setTrayStatus(true);//加热区托盘状态 @@ -291,18 +284,15 @@ public class CraftsStepService { public boolean addThick(HeatModuleCode heatModuleCode, JSONObject params, CraftMonitor craftMonitor) throws Exception { try { - log.info("工艺{},------------------------------加浓硝酸---------------------------", heatModuleCode); /*关门*/ doorClose(); /*工艺监控*/ - log.info("工艺{},工艺监控", heatModuleCode); List finishColumns = new ArrayList<>(); craftMonitor.setCurrentStepResult(CraftsMonitorResultCode.add_liquid_column.getDescription() + Arrays.toString(finishColumns.toArray())); craftMonitorService.saveMonitor(craftMonitor); /*工艺监控结束*/ /*获取配置信息*/ - log.info("工艺{},获取配置信息", heatModuleCode); deviceStateService.getDeviceState().getSolutionModule().setPumping(true); Double transferModuleXPickTrayMoveDistance = devicePositionService.getPosition(DevicePositionCode.transferModuleXPickTrayMoveDistance).getDistance();//获取转运模块X轴拿取托盘进出卡槽移动距离 Point3D liquidAreaTrayPoint3D = devicePositionService.getPosition(DevicePositionCode.liquidAreaTrayPoint).getPoint3D();//获取加液时托盘位置点 @@ -340,7 +330,6 @@ public class CraftsStepService { } - log.info("工艺{},申请转运模组并等待", heatModuleCode); transferModuleService.requestTransferModule(CraftsTransferTypeCode.move_thick);//申请转运模组并等待 deviceStateService.getDeviceState().getTrayByHeatModuleCode(heatModuleCode).setUseArm(true);//使用机械臂标志 @@ -348,32 +337,28 @@ public class CraftsStepService { /*移动至加液区*/ boolean heatTrayExist = deviceSensorService.getTrayStateByHeatModuleCode(heatModuleCode);//获取加热区托盘 Assert.isTrue(heatTrayExist, () -> new AppException(ResultCode.CRAFT_HEAT_NO_TRAY));//目标加热区无托盘 - log.info("工艺{},加热区存在托盘", heatModuleCode); - log.info("工艺{},机械臂移动至加热区", heatModuleCode); + transferModuleService.transferMove(liquidAreaTrayPoint3D);//移动至加液时托盘位置点 + boolean clawTrayExist = deviceSensorService.getSensorStatus(DeviceSensorCode.CLAW_TRAY_EXIST);//获取传感器状态 + Assert.isTrue(!clawTrayExist, () -> new AppException(ResultCode.CRAFT_SOLUTION_EXIST_TRAY));//加液区存在托盘 + webSocketService.pushCraftsDebug(CraftsDebugGenerator.generateJson(heatModuleCode.toString(), "机械臂移动至加热区", heatModuleCode.name())); - log.info("工艺{},将X轴移动至目标加热模块托盘夹取点 + 进出卡槽移动距离", heatModuleCode); transferModuleService.transferXMove(heatModuleTrayClawPoint3D.getX() + transferModuleXPickTrayMoveDistance);//将X轴移动至目标加热模块托盘夹取点 + 进出卡槽移动距离 - log.info("工艺{},Z轴下降至夹取点", heatModuleCode); heatTrayExist = deviceSensorService.getTrayStateByHeatModuleCode(heatModuleCode);//获取加热区托盘 Assert.isTrue(heatTrayExist, () -> new AppException(ResultCode.CRAFT_HEAT_NO_TRAY));//目标加热区无托盘 transferModuleService.transferZMove(heatModuleTrayClawPoint3D.getZ());//Z轴下降至夹取点 - log.info("工艺{},X轴进入卡槽", heatModuleCode); transferModuleService.transferXMoveBy(-transferModuleXPickTrayMoveDistance);//X轴进入卡槽 deviceStateService.getDeviceState().getHeatModuleByCode(heatModuleCode).setTrayStatus(false);//加热区托盘状态 deviceStateService.getDeviceState().getTrayByHeatModuleCode(heatModuleCode).setInHeatModule(false);//托盘状态 - log.info("工艺{},Z轴抬升至最高", heatModuleCode); transferModuleService.transferZMoveZero();//Z轴抬升至最高 webSocketService.pushCraftsDebug(CraftsDebugGenerator.generateJson(heatModuleCode.toString(), "机械臂移动至加液区", DevicePositionCode.liquidAreaTrayPoint.name())); - log.info("工艺{},移动至加液时托盘位置点", heatModuleCode); transferModuleService.transferMove(liquidAreaTrayPoint3D);//移动至加液时托盘位置点 deviceStateService.getDeviceState().getTrayByHeatModuleCode(heatModuleCode).setInSolutionPositon(true);//托盘状态 - boolean clawTrayExist = deviceSensorService.getSensorStatus(DeviceSensorCode.CLAW_TRAY_EXIST);//获取传感器状态 + clawTrayExist = deviceSensorService.getSensorStatus(DeviceSensorCode.CLAW_TRAY_EXIST);//获取传感器状态 Assert.isTrue(clawTrayExist, () -> new AppException(ResultCode.TARGET_HEAT_MODULE_NO_TRAY));//加液区无托盘 /*移动至加液区结束*/ /*开始抽液*/ - log.info("工艺{},开始抽液", heatModuleCode); solutionModuleService.liquidValveSwitch(SolutionCode.waste);//电磁阀转换到废液 solutionModuleService.liquidPumpSetSpeed(pumpReduceSpeed);//设置泵的抽取转速 List reduceColumns = new ArrayList<>(); @@ -387,14 +372,10 @@ public class CraftsStepService { for (int i = 0; i < reduceColumns.size(); i++) { webSocketService.pushCraftsDebug(CraftsDebugGenerator.generateJson(heatModuleCode.toString(), "移动加液机械臂到指定试管", i)); double distance = Math.abs(reduceColumns.get(i) - 5) * trayTubeHorizontalSpacingDistance;//机械臂右移距离 - log.info("工艺{},机械臂移动到试管位置{}", heatModuleCode, i); transferModuleService.transferXMove(liquidAreaTrayPoint3D.getX() + distance);//机械臂移动到试管位置 - log.info("工艺{},加液机械臂下降", heatModuleCode); solutionModuleService.solutionMotorMove(solutionModuleMotorDownInTubeExtPositon + height);//加液机械臂下降 webSocketService.pushCraftsDebug(CraftsDebugGenerator.generateJson(heatModuleCode.toString(), "抽取溶液", addLiquidDistance)); - log.info("工艺{},加液", heatModuleCode); solutionModuleService.liquidPumpMove(-reduceDistance);//加液 position - log.info("工艺{},加液机械臂上升", heatModuleCode); solutionModuleService.solutionMotorMoveZero();//加液机械臂上升 } solutionModuleService.liquidPumpMove(-backFlowDistance);//预充 @@ -406,34 +387,25 @@ public class CraftsStepService { /*预充开始*/ boolean feedTrayExist = deviceSensorService.getSensorStatus(DeviceSensorCode.LIQUID_TRAY_EXIST);//获取传感器状态 Assert.isTrue(!feedTrayExist, () -> new AppException(ResultCode.FEED_AREA_EXIST_TRAY));//上料区有托盘 - log.info("工艺{},预充开始", heatModuleCode); - log.info("工艺{},加液机械臂上升", heatModuleCode); solutionModuleService.solutionMotorMoveZero();//加液机械臂上升 transferModuleService.transferXMove(heatArea1TrayClawPoint.getX());//转运模块移动至加热位1 feedTrayExist = deviceSensorService.getSensorStatus(DeviceSensorCode.LIQUID_TRAY_EXIST);//获取传感器状态 Assert.isTrue(!feedTrayExist, () -> new AppException(ResultCode.FEED_AREA_EXIST_TRAY));//上料区有托盘 solutionModuleService.solutionMotorMove(liquidAreaPreFillPoint);//加液机械臂下降至至预充点位 - log.info("工艺{},电磁阀对应通道打开", heatModuleCode); solutionModuleService.liquidValveSwitch(SolutionCode.waste);//电磁阀对应通道打开 solutionModuleService.liquidPumpSetSpeed(pumpNormalSpeed);//设置泵的正常转速 - log.info("工艺{},排空", heatModuleCode); solutionModuleService.liquidPumpMove(-drainDistance);//排空 - log.info("工艺{},电磁阀对应通道打开", heatModuleCode); solutionModuleService.liquidValveSwitchByChannel(channel);//电磁阀对应通道打开 - log.info("工艺{},预充", heatModuleCode); solutionModuleService.liquidPumpMove(preFillDistance);//预充 solutionModuleService.liquidPumpMove(-backFlowDistance);//预充 - log.info("工艺{},加液机械臂上升", heatModuleCode); solutionModuleService.solutionMotorMoveZero();//加液机械臂上升 /*预充结束*/ /*移动至加液区*/ - log.info("工艺{},移动至加液区", heatModuleCode); transferModuleService.transferMove(liquidAreaTrayPoint3D);//移动至加液至托盘位置点 /*移动至加液区*/ /*开始加液*/ - log.info("工艺{},开始加液", heatModuleCode); List addColumns; if (jsonArray != null) { addColumns = new ArrayList<>(); @@ -447,14 +419,10 @@ public class CraftsStepService { for (int i = 0; i < addColumns.size(); i++) { webSocketService.pushCraftsDebug(CraftsDebugGenerator.generateJson(heatModuleCode.toString(), "移动加液机械臂到指定试管", addColumns.get(i))); double distance = Math.abs(addColumns.get(i) - 5) * trayTubeHorizontalSpacingDistance;//机械臂右移距离 - log.info("工艺{},机械臂移动到试管位置{}", heatModuleCode, i); transferModuleService.transferXMove(liquidAreaTrayPoint3D.getX() + distance);//机械臂移动到试管位置 - log.info("工艺{},加液机械臂下降", heatModuleCode); solutionModuleService.solutionMotorMove(solutionModuleMotorDownInTubeAddPositon);//加液机械臂下降 webSocketService.pushCraftsDebug(CraftsDebugGenerator.generateJson(heatModuleCode.toString(), "添加溶液", addLiquidDistance)); - log.info("工艺{},加液", heatModuleCode); solutionModuleService.liquidPumpMove(addLiquidDistance);//加液 position - log.info("工艺{},加液机械臂上升", heatModuleCode); solutionModuleService.solutionMotorMoveZero();//加液机械臂上升 /*工艺监控开始*/ finishColumns.add(i); @@ -468,19 +436,14 @@ public class CraftsStepService { /*结束加液*/ /*移动至加热区*/ - log.info("工艺{},移动至加热区", heatModuleCode); boolean heatModuleTrayExist = deviceSensorService.getTrayStateByHeatModuleCode(heatModuleCode);//目标加热模块有无托盘 Assert.isTrue(!heatModuleTrayExist, () -> new AppException(ResultCode.CRAFT_HEAT_EXIST_TRAY));//提示被占用 webSocketService.pushCraftsDebug(CraftsDebugGenerator.generateJson(heatModuleCode.toString(), "机械臂移动至加热区", heatModuleCode)); - log.info("工艺{},加液机械臂上升", heatModuleCode); solutionModuleService.solutionMotorMoveZero();//加液机械臂上升 - log.info("工艺{},将X轴移动至目标加热模块托盘夹取点", heatModuleCode); transferModuleService.transferXMove(heatModuleTrayClawPoint3D.getX());//将X轴移动至目标加热模块托盘夹取点 - log.info("工艺{},Z轴下降至夹取点", heatModuleCode); heatModuleTrayExist = deviceSensorService.getTrayStateByHeatModuleCode(heatModuleCode);//目标加热模块有托盘 Assert.isTrue(!heatModuleTrayExist, () -> new AppException(ResultCode.CRAFT_HEAT_EXIST_TRAY));//提示被占用 transferModuleService.transferZMove(heatModuleTrayClawPoint3D.getZ());//Z轴下降至夹取点,使托盘落入石墨加热盘 - log.info("工艺{},X轴移出卡槽", heatModuleCode); transferModuleService.transferXMoveBy(transferModuleXPickTrayMoveDistance);//X轴移出卡槽 transferModuleService.transferZMoveZero();//Z轴抬升至最高 deviceStateService.getDeviceState().getHeatModuleByCode(heatModuleCode).setTrayStatus(true);//加热区托盘状态 @@ -515,15 +478,12 @@ public class CraftsStepService { deviceStateService.getDeviceState().getHeatModuleByCode(heatModuleCode).setHeatingType(HeatingType.heating); //设置加热区状态 加热中 deviceStateService.getDeviceState().getHeatModuleByCode(heatModuleCode).setTargetTemperature(temperature);//将加热温度设定为目标温度 - log.info("工艺{},开始加热", heatModuleCode); heatModuleService.fanClose(heatModuleCode);//关闭风扇 deviceStateService.getDeviceState().getHeatModuleByCode(heatModuleCode).setFanOpen(false); //设置加热区风扇关闭 heatModuleService.heatRodOpen(heatModuleCode, temperature);//打开加热棒 while (!heatIsSuitable(heatModuleCode, temperature)) {//判断温度是否到达 TimeUnit.SECONDS.sleep(1); } - log.info("工艺{},温度达到", heatModuleCode); - log.info("工艺{},恒温时间", time); webSocketService.pushCraftsDebug(CraftsDebugGenerator.generateJson(heatModuleCode.toString(), "温度达到", temperature)); deviceStateService.getDeviceState().getHeatModuleByCode(heatModuleCode).setHeatingType(HeatingType.constant); //恒温中 deviceStateService.getDeviceState().getHeatModuleByCode(heatModuleCode).setStartHeatTime(LocalDateTime.now());//开始加热时间 @@ -531,10 +491,7 @@ public class CraftsStepService { int clock = 0; int cycle = time / 60; int seconds = time % 60; - log.info("工艺{},恒温时间分钟:", cycle); - log.info("工艺{},恒温时间秒数:", seconds); while (cycle > 0) { - log.info("工艺,恒温第{}分:", cycle); TimeUnit.SECONDS.sleep(60); cycle--; clock = clock + 60; @@ -545,11 +502,9 @@ public class CraftsStepService { /*保存到工艺监控*/ } TimeUnit.SECONDS.sleep(seconds); - log.info("工艺,恒温结束:"); deviceStateService.getDeviceState().getHeatModuleByCode(heatModuleCode).setStartHeatTime(null);//开始加热时间 deviceStateService.getDeviceState().getHeatModuleByCode(heatModuleCode).setTargetTime(null);//加热器目标加热时间 deviceStateService.getDeviceState().getHeatModuleByCode(heatModuleCode).setHeatingType(HeatingType.finish); //加热完成 - log.info("工艺{},加热结束", heatModuleCode); webSocketService.pushCraftsDebug(CraftsDebugGenerator.generateJson(heatModuleCode.toString(), "加热结束,持续时间", time)); return true; } catch (Exception e) { @@ -564,7 +519,6 @@ public class CraftsStepService { * */ public boolean clean(HeatModuleCode heatModuleCode, JSONObject params, CraftMonitor craftMonitor) throws Exception { try { - log.info("工艺{},----------------------------------清洗---------------------------------------------", heatModuleCode); /*关门*/ doorClose(); /*保存到监控开始*/ @@ -604,23 +558,20 @@ public class CraftsStepService { webSocketService.pushCraftsDebug(CraftsDebugGenerator.generateJson(heatModuleCode.toString(), "机械臂移动至加热区", heatModuleTrayClawPoint3D)); /*获取参数结束*/ - log.info("工艺{},申请转运模组并等待", heatModuleCode); transferModuleService.requestTransferModule(CraftsTransferTypeCode.move_thick);//申请转运模组并等待 deviceStateService.getDeviceState().getTrayByHeatModuleCode(heatModuleCode).setUseArm(true);//使用机械臂标志 - log.info("工艺{},加液机械臂上升", heatModuleCode); solutionModuleService.solutionMotorMoveZero();//加液机械臂上升 - log.info("工艺{},将X轴移动至目标加热模块托盘夹取点 + 进出卡槽移动距离", heatModuleCode); + transferModuleService.transferMove(liquidAreaTrayPoint3D);//移动至加液时托盘位置点 + boolean clawTrayExist = deviceSensorService.getSensorStatus(DeviceSensorCode.CLAW_TRAY_EXIST);//获取传感器状态 + Assert.isTrue(!clawTrayExist, () -> new AppException(ResultCode.CRAFT_SOLUTION_EXIST_TRAY));//加液区存在托盘 + transferModuleService.transferXMove(heatModuleTrayClawPoint3D.getX() + transferModuleXPickTrayMoveDistance);//将X轴移动至目标加热模块托盘夹取点 + 进出卡槽移动距离 - log.info("工艺{},Z轴下降至夹取点", heatModuleCode); heatModuleTrayExist = deviceSensorService.getTrayStateByHeatModuleCode(heatModuleCode);//目标加热模块有无托盘 Assert.isTrue(heatModuleTrayExist, () -> new AppException(ResultCode.CRAFT_TARGET_HEAT_NO_TRAY));//提示工艺加热区无托盘 transferModuleService.transferZMove(heatModuleTrayClawPoint3D.getZ());//Z轴下降至夹取点 - log.info("工艺{},X轴进入卡槽", heatModuleCode); transferModuleService.transferXMoveBy(-transferModuleXPickTrayMoveDistance);//X轴进入卡槽 - log.info("工艺{},Z轴抬升至最高", heatModuleCode); transferModuleService.transferZMoveZero();//Z轴抬升至最高 - log.info("工艺{},机械臂移动至加液区", heatModuleCode); webSocketService.pushCraftsDebug(CraftsDebugGenerator.generateJson(heatModuleCode.toString(), "机械臂移动至加液区", liquidAreaTrayPoint3D)); transferModuleService.transferMove(liquidAreaTrayPoint3D);//移动至加液时托盘位置点 deviceStateService.getDeviceState().getHeatModuleByCode(heatModuleCode).setTrayStatus(false);//加热区托盘状态 @@ -644,15 +595,10 @@ public class CraftsStepService { for (int j = 0; j < columns.size(); j++) { double distance = Math.abs(columns.get(j) - 5) * trayTubeHorizontalSpacingDistance;//x轴移动距离 webSocketService.pushCraftsDebug(CraftsDebugGenerator.generateJson(heatModuleCode.toString(), "机械臂移动到试管位置", j)); - log.info("工艺{},机械臂移动到试管位置", heatModuleCode); transferModuleService.transferXMove(liquidAreaTrayPoint3D.getX() + distance);//机械臂移动到试管位置 - log.info("工艺{},加液模块下降进入试管抽取位置", heatModuleCode); solutionModuleService.solutionMotorMove(solutionModuleMotorDownInTubeExtPositon + height);//加液模块下降进入试管抽取位置 - log.info("工艺{},电磁阀对应通道打开", heatModuleCode); - log.info("工艺{},蠕动泵抽水", heatModuleCode); solutionModuleService.liquidPumpMove(-reduceThickDistance);//蠕动泵抽浓硝酸 - log.info("工艺{},加液模块上升至最高,移出试管", heatModuleCode); solutionModuleService.solutionMotorMoveZero();//加液模块上升至最高,移出试管 } /*抽液结束*/ @@ -667,7 +613,6 @@ public class CraftsStepService { /*预充开始*/ boolean feedTrayExist = deviceSensorService.getSensorStatus(DeviceSensorCode.LIQUID_TRAY_EXIST);//获取传感器状态 Assert.isTrue(!feedTrayExist, () -> new AppException(ResultCode.FEED_AREA_EXIST_TRAY));//上料区有托盘 - log.info("工艺{},清洗-预充开始", heatModuleCode); solutionModuleService.solutionMotorMoveZero();//加液机械臂上升 transferModuleService.transferXMove(heatArea1TrayClawPoint.getX());//转运模块移动至加热位1 feedTrayExist = deviceSensorService.getSensorStatus(DeviceSensorCode.LIQUID_TRAY_EXIST);//获取传感器状态 @@ -679,26 +624,19 @@ public class CraftsStepService { solutionModuleService.liquidPumpMove(preFillDistance);//预充 solutionModuleService.liquidPumpMove(-backFlowDistance);//防滴落 solutionModuleService.solutionMotorMoveZero();//加液机械臂上升 - log.info("工艺{},清洗开始", heatModuleCode); transferModuleService.transferMove(liquidAreaTrayPoint3D);//移动至加液时托盘位置点 /*预充结束*/ /*加*/ - log.info("工艺{},电磁阀蒸馏水通道打开", heatModuleCode); solutionModuleService.liquidValveSwitch(SolutionCode.water);//电磁阀对应通道打开 for (int j = 0; j < columns.size(); j++) { double distance = Math.abs(columns.get(j) - 5) * trayTubeHorizontalSpacingDistance;//x轴移动距离 webSocketService.pushCraftsDebug(CraftsDebugGenerator.generateJson(heatModuleCode.toString(), "机械臂移动到试管位置", j)); - log.info("工艺{},机械臂移动到试管位置", heatModuleCode); transferModuleService.transferXMove(liquidAreaTrayPoint3D.getX() + distance);//机械臂移动到试管位置 - log.info("工艺{},加液模块下降进入试管抽取位置", heatModuleCode); solutionModuleService.solutionMotorMove(solutionModuleMotorDownInTubeAddPositon);//加液模块下降进入试管加液位置 - log.info("工艺{},蠕动泵加水", heatModuleCode); solutionModuleService.liquidPumpMove(cleanWaterDistance);//蠕动泵加水 - log.info("工艺{},加液模块上升至最高,移出试管", heatModuleCode); solutionModuleService.solutionMotorMoveZero();//加液模块上升至最高,移出试管 } solutionModuleService.liquidPumpMove(-backFlowDistance);//防滴落 - log.info("工艺{},电磁阀废液通道打开", heatModuleCode); TimeUnit.SECONDS.sleep(1);//当前线程休眠1秒 /*抽*/ solutionModuleService.liquidValveSwitch(SolutionCode.waste);//电磁阀对应通道打开 @@ -706,15 +644,10 @@ public class CraftsStepService { for (int j = 0; j < columns.size(); j++) { double distance = Math.abs(columns.get(j) - 5) * trayTubeHorizontalSpacingDistance;//x轴移动距离 webSocketService.pushCraftsDebug(CraftsDebugGenerator.generateJson(heatModuleCode.toString(), "机械臂移动到试管位置", j)); - log.info("工艺{},机械臂移动到试管位置", heatModuleCode); transferModuleService.transferXMove(liquidAreaTrayPoint3D.getX() + distance);//机械臂移动到试管位置 - log.info("工艺{},加液模块下降进入试管抽取位置", heatModuleCode); solutionModuleService.solutionMotorMove(solutionModuleMotorDownInTubeExtPositon + height);//加液模块下降进入试管抽取位置 - log.info("工艺{},电磁阀对应通道打开", heatModuleCode); - log.info("工艺{},蠕动泵抽水", heatModuleCode); solutionModuleService.liquidPumpMove(-reduceWaterDistance);//抽水 - log.info("工艺{},加液模块上升至最高,移出试管", heatModuleCode); solutionModuleService.solutionMotorMoveZero();//加液模块上升至最高,移出试管 } craftMonitor.setDeviceState(JSONUtil.toJsonStr(deviceStateService.getDeviceState())); @@ -724,22 +657,17 @@ public class CraftsStepService { } /*清洗结束*/ - log.info("工艺{},将X轴移动至目标加热模块托盘夹取点", heatModuleCode); transferModuleService.transferXMove(heatModuleTrayClawPoint3D.getX());//将X轴移动至目标加热模块托盘夹取点 - log.info("工艺{},Z轴下降至夹取点,使托盘落入石墨加热盘", heatModuleCode); heatModuleTrayExist = deviceSensorService.getTrayStateByHeatModuleCode(heatModuleCode);//目标加热模块有无托盘 Assert.isTrue(!heatModuleTrayExist, () -> new AppException(ResultCode.CRAFT_HEAT_EXIST_TRAY));//提示工艺加热区被占用 transferModuleService.transferZMove(heatModuleTrayClawPoint3D.getZ());//Z轴下降至夹取点,使托盘落入石墨加热盘 - log.info("工艺{},X轴移出卡槽", heatModuleCode); transferModuleService.transferXMoveBy(transferModuleXPickTrayMoveDistance);//X轴移出卡槽 - log.info("工艺{},Z轴抬升至最高", heatModuleCode); transferModuleService.transferZMoveZero();//Z轴抬升至最高 deviceStateService.getDeviceState().getHeatModuleByCode(heatModuleCode).setTrayStatus(true);//加热区托盘状态 deviceStateService.getDeviceState().getTrayByHeatModuleCode(heatModuleCode).setInHeatModule(true);//托盘状态 deviceStateService.getDeviceState().getSolutionModule().setPumping(false);//正在加液 deviceStateService.getDeviceState().getTrayByHeatModuleCode(heatModuleCode).setInSolutionPositon(false);//托盘状态 doorAble();//开门 - log.info("工艺{},释放转运模组", heatModuleCode); transferModuleService.releaseTransferModule();//释放转运模组 return true; } catch (Exception e) { @@ -770,9 +698,7 @@ public class CraftsStepService { heatModuleService.heatRodOpen(heatModuleCode, temperature);//打开加热棒 deviceStateService.getDeviceState().getHeatModuleByCode(heatModuleCode).setHeatingType(HeatingType.heating); //设置加热区状态 烘干中 deviceStateService.getDeviceState().getHeatModuleByCode(heatModuleCode).setTargetTemperature(temperature);//将加热温度设定为目标温度 - log.info("工艺{},开始加热", heatModuleCode); heatModuleService.heatRodOpen(heatModuleCode, temperature); - log.info("工艺{},判断当前温度是否在设置温度范围内", heatModuleCode); while (!heatIsSuitable(heatModuleCode, temperature)) { //判断当前温度是否在设置温度范围内 TimeUnit.SECONDS.sleep(1); } @@ -790,9 +716,7 @@ public class CraftsStepService { craftMonitor.setCurrentStepResult(CraftsMonitorResultCode.heat_time.getDescription() + ":" + clock / 60); craftMonitorService.saveMonitor(craftMonitor); } - log.info("工艺{},恒温中", heatModuleCode); TimeUnit.SECONDS.sleep(seconds); - log.info("工艺{},关闭加热棒", heatModuleCode); webSocketService.pushCraftsDebug(CraftsDebugGenerator.generateJson(heatModuleCode.toString(), "关闭加热棒", "")); heatModuleService.heatRodClose(heatModuleCode);//关闭加热棒 CompletableFuture.runAsync(() -> { @@ -835,35 +759,22 @@ public class CraftsStepService { while (deviceSensorService.getTrayStateByHeatModuleCode(HeatModuleCode.heat_module_04)) {//判断退火区是否被占用 TimeUnit.SECONDS.sleep(1);//等待1秒 } - log.info("工艺{},机械臂移动至加热区", heatModuleCode); webSocketService.pushCraftsDebug(CraftsDebugGenerator.generateJson(heatModuleCode.toString(), "机械臂移动至加热区", heatModuleCode)); - log.info("工艺{},申请使用转运模块", heatModuleCode); transferModuleService.requestTransferModule(CraftsTransferTypeCode.move_anneal);//申请使用转运模块 - log.info("工艺{},加液机械臂上升", heatModuleCode); solutionModuleService.solutionMotorMoveZero();//加液机械臂上升 - log.info("工艺{},将X轴移动至目标加热模块托盘夹取点", heatModuleCode); transferModuleService.transferXMove(heatModuleTrayClawPoint3D.getX() + transferModuleXPickTrayMoveDistance);//将X轴移动至目标加热模块托盘夹取点 - log.info("工艺{},Z轴下降至夹取点,使托盘落入石墨加热盘", heatModuleCode); heatModuleTrayExist = deviceSensorService.getTrayStateByHeatModuleCode(heatModuleCode); Assert.isTrue(heatModuleTrayExist, () -> new AppException(ResultCode.CRAFT_TARGET_HEAT_NO_TRAY));//提示加热模块无托盘 transferModuleService.transferZMove(heatModuleTrayClawPoint3D.getZ());//Z轴下降至夹取点,使托盘落入石墨加热盘 - log.info("工艺{},X轴移出入槽", heatModuleCode); transferModuleService.transferXMoveBy(-transferModuleXPickTrayMoveDistance);//X轴移出入槽 - log.info("工艺{},Z轴抬升至最高", heatModuleCode); transferModuleService.transferZMoveZero();//Z轴抬升至最高 - log.info("工艺{},机械臂移动至退火区", heatModuleCode); webSocketService.pushCraftsDebug(CraftsDebugGenerator.generateJson(heatModuleCode.toString(), "机械臂移动至退火区", HeatModuleCode.heat_module_04)); - log.info("工艺{},将X轴移动至退火热模块托盘夹取点", heatModuleCode); transferModuleService.transferXMove(annealTrayClawPoint3D.getX());//将X轴移动至退火热模块托盘夹取点 - log.info("工艺{},Z轴下降至夹取点,使托盘落入石墨加热盘", heatModuleCode); boolean heatModule04TrayExist = deviceSensorService.getTrayStateByHeatModuleCode(HeatModuleCode.heat_module_04); Assert.isTrue(!heatModule04TrayExist, () -> new AppException(ResultCode.CRAFT_HEAT_EXIST_TRAY));//提示退火模块存在托盘 transferModuleService.transferZMove(annealTrayClawPoint3D.getZ());//Z轴下降至夹取点,使托盘落入石墨加热盘 - log.info("工艺{},X轴移出卡槽", heatModuleCode); transferModuleService.transferXMoveBy(transferModuleXPickTrayMoveDistance);//X轴移出卡槽 - log.info("工艺{},Z轴抬升至最高", heatModuleCode); transferModuleService.transferZMoveZero();//Z轴抬升至最高 - log.info("工艺{},释放转运模组", heatModuleCode); transferModuleService.releaseTransferModule();//释放转运模组 deviceStateService.getDeviceState().getHeatModuleByCode(heatModuleCode).setTrayStatus(false);//加热区托盘状态 deviceStateService.getDeviceState().getTrayByHeatModuleCode(heatModuleCode).setInHeatModule(false);//托盘状态 @@ -873,7 +784,6 @@ public class CraftsStepService { webSocketService.pushCraftsDebug(CraftsDebugGenerator.generateJson(HeatModuleCode.heat_module_04.name(), "打开加热棒", temperature)); deviceStateService.getDeviceState().getHeatModuleByCode(HeatModuleCode.heat_module_04).setHeatingType(HeatingType.heating); //设置加热区状态 加热中 deviceStateService.getDeviceState().getHeatModuleByCode(HeatModuleCode.heat_module_04).setTargetTemperature(temperature);//将加热温度设定为目标温度 - log.info("工艺{},开始加热", heatModuleCode); heatModuleService.heatRodOpen(HeatModuleCode.heat_module_04, temperature);//打开加热棒 //判断当前温度是否在设置温度范围内 while (!heatIsSuitable(HeatModuleCode.heat_module_04, temperature)) { @@ -893,39 +803,26 @@ public class CraftsStepService { craftMonitor.setCurrentStepResult(CraftsMonitorResultCode.heat_time.getDescription() + ":" + clock / 60); craftMonitorService.saveMonitor(craftMonitor); } - log.info("工艺{},恒温中", HeatModuleCode.heat_module_04); TimeUnit.SECONDS.sleep(seconds); deviceStateService.getDeviceState().getHeatModuleByCode(HeatModuleCode.heat_module_04).setStartHeatTime(null);//开始加热时间 deviceStateService.getDeviceState().getHeatModuleByCode(HeatModuleCode.heat_module_04).setTargetTime(null);//加热器目标加热时间 - log.info("工艺{},加热完毕", heatModuleCode); - log.info("工艺{},获取转运模组锁", heatModuleCode); transferModuleService.requestTransferModule(CraftsTransferTypeCode.move_heat);//获取转运模组锁 deviceStateService.getDeviceState().getTrayByHeatModuleCode(heatModuleCode).setUseArm(true);//使用机械臂标志 - log.info("工艺{},Z轴抬升至最高", heatModuleCode); transferModuleService.transferZMoveZero();//Z轴抬升至最高 - log.info("工艺{},将X轴移动至目标加热模块托盘夹取点", heatModuleCode); transferModuleService.transferXMove(annealTrayClawPoint3D.getX() + transferModuleXPickTrayMoveDistance);//将X轴移动至目标退火模块托盘夹取点 - log.info("工艺{},Z轴下降至夹取点,使托盘落入石墨加热盘", heatModuleCode); heatModule04TrayExist = deviceSensorService.getTrayStateByHeatModuleCode(HeatModuleCode.heat_module_04); Assert.isTrue(heatModule04TrayExist, () -> new AppException(ResultCode.CRAFT_HEAT_NO_TRAY));//提示退火区无托盘 transferModuleService.transferZMove(annealTrayClawPoint3D.getZ());//Z轴下降至夹取点,使托盘落入石墨加热盘 - log.info("工艺{},X移入卡槽", heatModuleCode); transferModuleService.transferXMoveBy(-transferModuleXPickTrayMoveDistance);//X移入卡槽 - log.info("工艺{},Z轴抬升至最高", heatModuleCode); transferModuleService.transferZMoveZero();//Z轴抬升至最高 - log.info("工艺{},将X轴移动至目标加热模块托盘夹取点", heatModuleCode); transferModuleService.transferXMove(heatModuleTrayClawPoint3D.getX());//将X轴移动至目标加热模块托盘夹取点 - log.info("工艺{},Z轴下降至夹取点,使托盘落入石墨加热盘", heatModuleCode); heatModuleTrayExist = deviceSensorService.getTrayStateByHeatModuleCode(heatModuleCode); Assert.isTrue(!heatModuleTrayExist, () -> new AppException(ResultCode.CRAFT_HEAT_EXIST_TRAY));//提示加热模块存在托盘 transferModuleService.transferZMove(heatModuleTrayClawPoint3D.getZ());//Z轴下降至夹取点,使托盘落入石墨加热盘 - log.info("工艺{},X轴移出卡槽", heatModuleCode); transferModuleService.transferXMoveBy(transferModuleXPickTrayMoveDistance);//X轴移出卡槽 - log.info("工艺{},Z轴抬升至最高", heatModuleCode); transferModuleService.transferZMoveZero();//Z轴抬升至最高 - log.info("工艺{},转运模组释放", heatModuleCode); transferModuleService.releaseTransferModule();//释放转运模组 heatModuleService.fanClose(heatModuleCode);//关闭风扇 deviceStateService.getDeviceState().getHeatModuleByCode(heatModuleCode).setFanOpen(false); //设置加热区风扇关闭 @@ -944,21 +841,12 @@ public class CraftsStepService { /* * 检测加热区升温度是否合适 * */ - public boolean heatIsSuitable(HeatModuleCode heatModuleCode, Double temperature) throws Exception { + public boolean heatIsSuitable(HeatModuleCode heatModuleCode, Double temperature){ double currentTemperature = deviceStateService.getDeviceState().getHeatModuleByCode(heatModuleCode).getTemperature(); webSocketService.pushCraftsDebug(CraftsDebugGenerator.generateJson(heatModuleCode.toString(), "加热区温度", currentTemperature)); return currentTemperature > (temperature - 3); } - /* - * 检测加热区降温温度是否合适 - * */ - 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)); - return currentTemperature < (temperature + 3); - } /** * 工艺执行完毕 @@ -968,6 +856,8 @@ public class CraftsStepService { TimeUnit.SECONDS.sleep(2);//当前线程休眠2秒 deviceLightSoundService.closeBeep(); craftMonitorService.remove(new LambdaQueryWrapper().eq(CraftMonitor::getHeatId, heatModuleCode)); + List trayList = deviceStateService.getDeviceState().getTrays(); + trayList.removeIf((tray) -> tray.getHeatModuleCode() != null && tray.getHeatModuleCode().equals(heatModuleCode)); } diff --git a/src/main/java/com/iflytop/sgs/app/service/device/module/TransferModuleService.java b/src/main/java/com/iflytop/sgs/app/service/device/module/TransferModuleService.java index a4d1d6c..7311dc2 100644 --- a/src/main/java/com/iflytop/sgs/app/service/device/module/TransferModuleService.java +++ b/src/main/java/com/iflytop/sgs/app/service/device/module/TransferModuleService.java @@ -31,7 +31,6 @@ public class TransferModuleService { private final BlockingQueue thickQueue = new ArrayBlockingQueue<>(3); private final BlockingQueue annealQueue = new ArrayBlockingQueue<>(3); private final BlockingQueue heatQueue = new ArrayBlockingQueue<>(1); - private final BlockingQueue feedQueue = new ArrayBlockingQueue<>(3); /** * 申请使用转运模块。 @@ -53,9 +52,6 @@ public class TransferModuleService { deviceStateService.getDeviceState().getTransferModule().setIdle(false); return true; } - case move_feed: - feedQueue.add(current); - break; case move_heat: heatQueue.add(current); break; @@ -82,9 +78,7 @@ public class TransferModuleService { } else { // 模块空闲时,再判断当前线程是否是“四个队列”里优先级最高且队头的那个 Thread head = null; - if (!feedQueue.isEmpty()) { - head = feedQueue.peek(); - } else if (!thinQueue.isEmpty()) { + if (!thinQueue.isEmpty()) { head = thinQueue.peek(); } else if (!heatQueue.isEmpty()) { head = heatQueue.peek(); @@ -139,9 +133,6 @@ public class TransferModuleService { */ private void removeCurrentFromQueue(CraftsTransferTypeCode type, Thread current) { switch (type) { - case move_feed: - feedQueue.remove(current); - break; case move_heat: heatQueue.remove(current); break; diff --git a/src/main/java/com/iflytop/sgs/common/enums/CraftsTransferTypeCode.java b/src/main/java/com/iflytop/sgs/common/enums/CraftsTransferTypeCode.java index ad9705d..703bca0 100644 --- a/src/main/java/com/iflytop/sgs/common/enums/CraftsTransferTypeCode.java +++ b/src/main/java/com/iflytop/sgs/common/enums/CraftsTransferTypeCode.java @@ -11,7 +11,7 @@ public enum CraftsTransferTypeCode { move_thin("移动至加液区加稀硝酸"), move_anneal("移动至退火区"), move_heat("移动至加热区"), - move_feed("移动至上料区"), + //move_feed("移动至上料区"), move_by_manual("手动指令操作"),; private String description; 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 9e52e25..01635da 100644 --- a/src/main/java/com/iflytop/sgs/common/enums/SystemConfigCode.java +++ b/src/main/java/com/iflytop/sgs/common/enums/SystemConfigCode.java @@ -29,10 +29,10 @@ public enum SystemConfigCode { fan_start_keep_time("烘干后风扇开启开始降温的时间(秒)"), pump_reduce_speed("蠕动泵抽液速度 0-300"), pump_normal_speed("蠕动泵正常速度 标准值300"), - anneal_temperature("退火温度 标准值400"), - dry_temperature("烘干温度 标准值135"), - heat_temperature("加热温度 标准值100"), - needle_drop_height("抽液针下降高度 标准55") + anneal_temperature("最高退火温度 标准值450"), + dry_temperature("最高烘干温度 标准值135"), + heat_temperature("最高加热温度 标准值100"), + needle_drop_height("最大抽液针下降高度 标准55") ; private final String description; diff --git a/src/main/java/com/iflytop/sgs/common/enums/data/CraftsPreHeatType.java b/src/main/java/com/iflytop/sgs/common/enums/data/CraftsPreHeatType.java new file mode 100644 index 0000000..e797699 --- /dev/null +++ b/src/main/java/com/iflytop/sgs/common/enums/data/CraftsPreHeatType.java @@ -0,0 +1,12 @@ +package com.iflytop.sgs.common.enums.data; + +import lombok.Getter; + +/** + * 工艺预热加热位选择 + */ +@Getter +public enum CraftsPreHeatType { + heat, + anneal, +} 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 1a7a4aa..989ef9b 100644 --- a/src/main/java/com/iflytop/sgs/common/result/ResultCode.java +++ b/src/main/java/com/iflytop/sgs/common/result/ResultCode.java @@ -45,7 +45,8 @@ public enum ResultCode implements IResultCode, Serializable { CRAFT_SOLUTION_NO_TRAY("4008", "工艺 加液区无托盘"), HEAT_TEMPERATURE_NULL("4009", "请先配置该加热区温度"), CRAFT_HEAT_EXIST_TRAY("4010", "工艺 加热区已经存在托盘"), - CRAFT_HEAT_NO_TRAY("4010", "工艺 加热区无存在托盘"), + CRAFT_HEAT_NO_TRAY("4011", "工艺 加热区无存在托盘"), + CRAFT_SOLUTION_EXIST_TRAY("4012", "工艺 夹爪存在无托盘"), //============================ 5xxx:系统 & 第三方 ============================ SYSTEM_ERROR("5000", "系统内部错误"), SERVICE_UNAVAILABLE("5001", "服务暂不可用"),