From d6d9cd933a79e64f63c507d94922585e4ca7ef54 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E6=A2=A6=E8=BF=9C?= <1063331231@qq.com> Date: Mon, 26 May 2025 21:29:04 +0800 Subject: [PATCH] =?UTF-8?q?fix:=E4=B8=9A=E5=8A=A1=E6=8C=87=E4=BB=A4?= =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sgs/app/cmd/control/AnnealStopCommand.java | 12 +++- .../sgs/app/cmd/control/DryStartCommand.java | 1 + .../sgs/app/cmd/control/DryStopCommand.java | 1 + .../sgs/app/cmd/control/HeatStartCommand.java | 1 + .../sgs/app/cmd/control/SolutionAddCommand.java | 68 ++++++++++++++++++++++ .../sgs/app/cmd/control/SolutionReduceCommand.java | 64 ++++++++++++++++++++ .../model/bo/status/device/HeatModuleState.java | 1 + .../device/module/SolutionModuleService.java | 19 ++++++ .../iflytop/sgs/common/enums/SystemConfigCode.java | 4 +- 9 files changed, 166 insertions(+), 5 deletions(-) create mode 100644 src/main/java/com/iflytop/sgs/app/cmd/control/SolutionAddCommand.java create mode 100644 src/main/java/com/iflytop/sgs/app/cmd/control/SolutionReduceCommand.java diff --git a/src/main/java/com/iflytop/sgs/app/cmd/control/AnnealStopCommand.java b/src/main/java/com/iflytop/sgs/app/cmd/control/AnnealStopCommand.java index a580500..3aa2efd 100644 --- a/src/main/java/com/iflytop/sgs/app/cmd/control/AnnealStopCommand.java +++ b/src/main/java/com/iflytop/sgs/app/cmd/control/AnnealStopCommand.java @@ -1,12 +1,16 @@ package com.iflytop.sgs.app.cmd.control; +import cn.hutool.core.lang.Assert; 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; import com.iflytop.sgs.common.annotation.CommandMapping; import com.iflytop.sgs.common.enums.HeatModuleCode; import com.iflytop.sgs.common.enums.HeatingType; +import com.iflytop.sgs.common.exception.AppException; +import com.iflytop.sgs.common.result.ResultCode; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; @@ -26,10 +30,12 @@ public class AnnealStopCommand extends BaseCommandHandler { @Override public CompletableFuture handle(CmdDTO cmdDTO) { - HeatModuleCode heatModuleCode = HeatModuleCode.heat_module_04; + HeatModuleCode annealHeatModuleCode = HeatModuleCode.heat_module_04;//退火模块 + HeatModuleState heatModuleState=deviceStateService.getDeviceState().getHeatModuleByCode(annealHeatModuleCode);//获取退火区的状态 + Assert.isTrue(heatModuleState.getHeatingType().equals(HeatingType.annealing),()->new AppException(ResultCode.CRAFT_RUNNING));//判断退火区状态 return runAsync(() -> { - heatModuleService.heatRodClose(cmdDTO.getCommandId(), cmdDTO.getCommand(), heatModuleCode); - deviceStateService.getDeviceState().getHeatModuleByCode(heatModuleCode).setHeatingType(HeatingType.stop); + heatModuleService.heatRodClose(cmdDTO.getCommandId(), cmdDTO.getCommand(), annealHeatModuleCode);//关闭加热棒 + deviceStateService.getDeviceState().getHeatModuleByCode(annealHeatModuleCode).setHeatingType(HeatingType.stop);//设置退火区退火状态 }); } } 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 bcce7c0..14e7a25 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 @@ -1,5 +1,6 @@ package com.iflytop.sgs.app.cmd.control; +import cn.hutool.core.lang.Assert; import cn.hutool.json.JSONArray; import com.iflytop.sgs.app.core.BaseCommandHandler; import com.iflytop.sgs.app.model.bo.status.device.HeatModuleState; diff --git a/src/main/java/com/iflytop/sgs/app/cmd/control/DryStopCommand.java b/src/main/java/com/iflytop/sgs/app/cmd/control/DryStopCommand.java index 4cb20e8..b53b889 100644 --- a/src/main/java/com/iflytop/sgs/app/cmd/control/DryStopCommand.java +++ b/src/main/java/com/iflytop/sgs/app/cmd/control/DryStopCommand.java @@ -1,5 +1,6 @@ package com.iflytop.sgs.app.cmd.control; +import cn.hutool.core.lang.Assert; import cn.hutool.json.JSONArray; import com.iflytop.sgs.app.core.BaseCommandHandler; import com.iflytop.sgs.app.model.bo.status.device.HeatModuleState; 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 887880f..6aff91b 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 @@ -1,5 +1,6 @@ package com.iflytop.sgs.app.cmd.control; +import cn.hutool.core.lang.Assert; import cn.hutool.json.JSONArray; import com.iflytop.sgs.app.core.BaseCommandHandler; import com.iflytop.sgs.app.model.bo.status.device.HeatModuleState; diff --git a/src/main/java/com/iflytop/sgs/app/cmd/control/SolutionAddCommand.java b/src/main/java/com/iflytop/sgs/app/cmd/control/SolutionAddCommand.java new file mode 100644 index 0000000..b18c33a --- /dev/null +++ b/src/main/java/com/iflytop/sgs/app/cmd/control/SolutionAddCommand.java @@ -0,0 +1,68 @@ +package com.iflytop.sgs.app.cmd.control; + +import cn.hutool.core.lang.Assert; +import cn.hutool.json.JSONArray; +import com.iflytop.sgs.app.core.BaseCommandHandler; +import com.iflytop.sgs.app.model.bo.Point3D; +import com.iflytop.sgs.app.model.bo.status.device.TransferModuleState; +import com.iflytop.sgs.app.model.dto.CmdDTO; +import com.iflytop.sgs.app.service.api.DevicePositionService; +import com.iflytop.sgs.app.service.api.SystemConfigService; +import com.iflytop.sgs.app.service.device.DeviceStateService; +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; +import com.iflytop.sgs.common.enums.SystemConfigCode; +import com.iflytop.sgs.common.enums.ValveStateCode; +import com.iflytop.sgs.common.enums.data.DevicePositionCode; +import com.iflytop.sgs.common.exception.AppException; +import com.iflytop.sgs.common.result.ResultCode; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.concurrent.CompletableFuture; + +/** + * 添加溶液 + */ +@Slf4j +@Component +@RequiredArgsConstructor +@CommandMapping("solution_add")//业务指令注解 +public class SolutionAddCommand extends BaseCommandHandler { + private final SolutionModuleService solutionModuleService; + private final DeviceStateService deviceStateService; + private final DevicePositionService devicePositionService; + private final TransferModuleService transferModuleService; + private final SystemConfigService systemConfigService; + + @Override + public CompletableFuture handle(CmdDTO cmdDTO) { + String solution=cmdDTO.getStringParam("solution"); + ValveStateCode valveStateCode=ValveStateCode.valueOf(solution);//解析加液通道 + double volume=cmdDTO.getDoubleParam("volume");//解析加液量 + JSONArray jsonArray =cmdDTO.getJSONArrayParam("index");//解析加液列 + Double scale = Double.valueOf(systemConfigService.getSystemConfigValueByCode(valveStateCode.getSystemConfigCode()));//获取转换系数 + Double position = volume * scale; + Point3D liquidAreaTrayPoint = devicePositionService.getPosition(DevicePositionCode.liquidAreaTrayPoint).getPoint3D(); //获取加液区上方点位 + Double solutionModuleMotorDownInTubeAddPositon = devicePositionService.getPosition(DevicePositionCode.solutionModuleMotorDownInTubeAddPositon).getPositon(); //加液模块电机下降进入试管加液位置 + Double trayTubeHorizontalSpacingDistance = devicePositionService.getPosition(DevicePositionCode.trayTubeHorizontalSpacingDistance).getDistance(); //加液模块电机下降进入试管加液位置 + return runAsync(() -> { + solutionModuleService.liquidValveSwitch(cmdDTO.getCommandId(),cmdDTO.getCommand(),valveStateCode);//电磁阀对应通道打开 + TransferModuleState transferModuleState=deviceStateService.getDeviceState().getTransferModule();//获取机械臂状态 + Assert.isTrue(transferModuleState.isTrayStatus(),()->new AppException(ResultCode.OPERATION_NOT_ALLOWED));//判断机械臂是否有托盘 + solutionModuleService.solutionMotorMove(cmdDTO.getCommandId(), cmdDTO.getCommand(), 0);//加液机械臂上升 + transferModuleService.transferMove(cmdDTO.getCommandId(), cmdDTO.getCommand(), liquidAreaTrayPoint);//移动至加液位置 + solutionModuleService.solutionMotorMove(cmdDTO.getCommandId(), cmdDTO.getCommand(), solutionModuleMotorDownInTubeAddPositon);//加液机械臂下降 + //开始加液 + for (int i = 0; i < jsonArray.size(); i++) { + solutionModuleService.liquidPumpMove(cmdDTO.getCommandId(),cmdDTO.getCommand(),position);//加液 + transferModuleService.transferXMoveBy(cmdDTO.getCommandId(),cmdDTO.getCommand(),-trayTubeHorizontalSpacingDistance);//机械臂左移试管间距 + } + solutionModuleService.solutionMotorMove(cmdDTO.getCommandId(), cmdDTO.getCommand(), 0);//加液机械臂上升 + transferModuleService.transferMove(cmdDTO.getCommandId(), cmdDTO.getCommand(), liquidAreaTrayPoint);//移动至加液位置 + }); + } +} + diff --git a/src/main/java/com/iflytop/sgs/app/cmd/control/SolutionReduceCommand.java b/src/main/java/com/iflytop/sgs/app/cmd/control/SolutionReduceCommand.java new file mode 100644 index 0000000..238c09c --- /dev/null +++ b/src/main/java/com/iflytop/sgs/app/cmd/control/SolutionReduceCommand.java @@ -0,0 +1,64 @@ +package com.iflytop.sgs.app.cmd.control; + +import cn.hutool.core.lang.Assert; +import cn.hutool.json.JSONArray; +import com.iflytop.sgs.app.core.BaseCommandHandler; +import com.iflytop.sgs.app.model.bo.Point3D; +import com.iflytop.sgs.app.model.bo.status.device.TransferModuleState; +import com.iflytop.sgs.app.model.dto.CmdDTO; +import com.iflytop.sgs.app.service.api.DevicePositionService; +import com.iflytop.sgs.app.service.api.SystemConfigService; +import com.iflytop.sgs.app.service.device.DeviceStateService; +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; +import com.iflytop.sgs.common.enums.ValveStateCode; +import com.iflytop.sgs.common.enums.data.DevicePositionCode; +import com.iflytop.sgs.common.exception.AppException; +import com.iflytop.sgs.common.result.ResultCode; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.concurrent.CompletableFuture; + +/** + * 抽取溶液 + */ +@Slf4j +@Component +@RequiredArgsConstructor +@CommandMapping("solution_reduce")//业务指令注解 +public class SolutionReduceCommand extends BaseCommandHandler { + private final SolutionModuleService solutionModuleService; + private final DeviceStateService deviceStateService; + private final DevicePositionService devicePositionService; + private final TransferModuleService transferModuleService; + private final SystemConfigService systemConfigService; + + @Override + public CompletableFuture handle(CmdDTO cmdDTO) { + double volume=cmdDTO.getDoubleParam("volume");//解析加液量 + JSONArray jsonArray =cmdDTO.getJSONArrayParam("index");//解析加液列 + Double position = volume;//蠕动泵移动距离 + Point3D liquidAreaTrayPoint = devicePositionService.getPosition(DevicePositionCode.liquidAreaTrayPoint).getPoint3D(); //获取加液区上方点位 + Double solutionModuleMotorDownInTubeExtPositon = devicePositionService.getPosition(DevicePositionCode.solutionModuleMotorDownInTubeExtPositon).getPositon(); //加液模块电机下降进入试管抽液位置 + Double trayTubeHorizontalSpacingDistance = devicePositionService.getPosition(DevicePositionCode.trayTubeHorizontalSpacingDistance).getDistance(); //加液模块电机下降进入试管加液位置 + + return runAsync(() -> { + solutionModuleService.liquidValveSwitch(cmdDTO.getCommandId(),cmdDTO.getCommand(),ValveStateCode.waste);//电磁阀废液通道打开 + TransferModuleState transferModuleState=deviceStateService.getDeviceState().getTransferModule();//获取机械臂状态 + Assert.isTrue(transferModuleState.isTrayStatus(),()->new AppException(ResultCode.OPERATION_NOT_ALLOWED));//判断机械臂是否有托盘 + solutionModuleService.solutionMotorMove(cmdDTO.getCommandId(), cmdDTO.getCommand(), 0);//加液机械臂上升 + transferModuleService.transferMove(cmdDTO.getCommandId(), cmdDTO.getCommand(), liquidAreaTrayPoint);//移动至加液位置 + solutionModuleService.solutionMotorMove(cmdDTO.getCommandId(), cmdDTO.getCommand(), solutionModuleMotorDownInTubeExtPositon);//加液机械臂下降 + for (int i = 0; i < jsonArray.size(); i++) { + solutionModuleService.liquidPumpMove(cmdDTO.getCommandId(),cmdDTO.getCommand(),-position);//加液 + transferModuleService.transferXMoveBy(cmdDTO.getCommandId(),cmdDTO.getCommand(),-trayTubeHorizontalSpacingDistance);//机械臂左移试管间距 + } + solutionModuleService.solutionMotorMove(cmdDTO.getCommandId(), cmdDTO.getCommand(), 0);//加液机械臂上升 + transferModuleService.transferMove(cmdDTO.getCommandId(), cmdDTO.getCommand(), liquidAreaTrayPoint);//移动至加液位置 + }); + } +} + diff --git a/src/main/java/com/iflytop/sgs/app/model/bo/status/device/HeatModuleState.java b/src/main/java/com/iflytop/sgs/app/model/bo/status/device/HeatModuleState.java index 86c6575..6e180cf 100644 --- a/src/main/java/com/iflytop/sgs/app/model/bo/status/device/HeatModuleState.java +++ b/src/main/java/com/iflytop/sgs/app/model/bo/status/device/HeatModuleState.java @@ -41,4 +41,5 @@ public class HeatModuleState { public HeatModuleState(HeatModuleCode moduleCode) { this.moduleCode = moduleCode; } + } diff --git a/src/main/java/com/iflytop/sgs/app/service/device/module/SolutionModuleService.java b/src/main/java/com/iflytop/sgs/app/service/device/module/SolutionModuleService.java index 7e4f6c3..a0472de 100644 --- a/src/main/java/com/iflytop/sgs/app/service/device/module/SolutionModuleService.java +++ b/src/main/java/com/iflytop/sgs/app/service/device/module/SolutionModuleService.java @@ -8,6 +8,7 @@ import com.iflytop.sgs.common.cmd.CommandFuture; import com.iflytop.sgs.common.cmd.DeviceCommandBundle; import com.iflytop.sgs.common.cmd.DeviceCommandGenerator; import com.iflytop.sgs.common.constant.CommandStatus; +import com.iflytop.sgs.common.enums.ValveStateCode; import com.iflytop.sgs.common.utils.CommandUtil; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -102,5 +103,23 @@ public class SolutionModuleService { CommandUtil.wait(deviceCommandFuture); } + /** + * 加液泵加液 + */ + public void liquidPumpMove(String cmdId, String cmdCode, double position) throws Exception { + DeviceCommandBundle deviceCommandBundle = DeviceCommandGenerator.liquidPumpMoveBy(position); + CommandFuture deviceCommandFuture = deviceCommandService.sendCommand(cmdId, cmdCode, deviceCommandBundle); + CommandUtil.wait(deviceCommandFuture); + + } + /** + * 电磁阀转换通道 + * */ + public void liquidValveSwitch(String cmdId, String cmdCode,ValveStateCode valveStateCode) throws Exception{ + DeviceCommandBundle deviceCommand = DeviceCommandGenerator.valveTurn(valveStateCode.getChannel()); + CommandFuture deviceCommandFuture = deviceCommandService.sendCommand(cmdId, cmdCode, deviceCommand); + CommandUtil.wait(deviceCommandFuture); + } + } 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 e435b72..0fdb185 100644 --- a/src/main/java/com/iflytop/sgs/common/enums/SystemConfigCode.java +++ b/src/main/java/com/iflytop/sgs/common/enums/SystemConfigCode.java @@ -3,8 +3,8 @@ package com.iflytop.sgs.common.enums; import lombok.Getter; /** - * 加热模块code枚举 - * 格式为 "heat_module_01" ~ "heat_module_06" + * 系统配置累 + * */ @Getter public enum SystemConfigCode {