diff --git a/src/main/java/com/iflytop/sgs/app/cmd/control/CleanStartCommand.java b/src/main/java/com/iflytop/sgs/app/cmd/control/CleanStartCommand.java index 67bed0b..7ee9600 100644 --- a/src/main/java/com/iflytop/sgs/app/cmd/control/CleanStartCommand.java +++ b/src/main/java/com/iflytop/sgs/app/cmd/control/CleanStartCommand.java @@ -55,26 +55,28 @@ public class CleanStartCommand extends BaseCommandHandler { return runAsync(() -> { deviceStateService.getDeviceState().getSolutionModule().setIdle(false);//设置占用 deviceStateService.getDeviceState().getSolutionModule().setPumping(true);//设置正在加液 + solutionModuleService.solutionMotorMoveZero(cmdDTO.getCommandId(), cmdDTO.getCommand());//加液模块上升 transferModuleService.transferMove(cmdDTO.getCommandId(), cmdDTO.getCommand(), liquidAreaTrayPoint3D);//移动至加液时托盘位置点 boolean clawTrayExist = deviceSensorService.getSensorStatus(DeviceSensorCode.CLAW_TRAY_EXIST);//监测夹爪是否有托盘 Assert.isTrue(clawTrayExist, () -> new AppException(ResultCode.TARGET_HEAT_MODULE_NO_TRAY));//夹爪必须有托盘 - solutionModuleService.solutionMotorMove(cmdDTO.getCommandId(), cmdDTO.getCommand(), solutionModuleMotorDownInTubeExtPositon);//加液模块下降进入试管抽取位置 - solutionModuleService.liquidPumpMove(cmdDTO.getCommandId(), cmdDTO.getCommand(), 0.1);//todo 测试准确后打开 pumpPosition - solutionModuleService.solutionMotorMoveZero(cmdDTO.getCommandId(), cmdDTO.getCommand());//加液模块上升 - for (int i = 0; i < cycle; i++) { - for (int j = 0; j < jsonArray.size(); j++) { - int column = jsonArray.getInt(i); - solutionModuleService.solutionMotorMove(cmdDTO.getCommandId(), cmdDTO.getCommand(), solutionModuleMotorDownInTubeExtPositon);//加液模块下降进入试管抽取位置 + for (int j = 0; j < jsonArray.size(); j++) { + int column = jsonArray.getInt(j); + double distance = (column - 1) * trayTubeHorizontalSpacingDistance;//x轴移动距离 + transferModuleService.transferXMove(cmdDTO.getCommandId(), cmdDTO.getCommand(), liquidAreaTrayPoint3D.getX() + distance);//机械臂移动到试管位置 + solutionModuleService.solutionMotorMove(cmdDTO.getCommandId(), cmdDTO.getCommand(), solutionModuleMotorDownInTubeExtPositon);//加液模块下降进入试管抽取位置 + for (int i = 0; i < cycle; i++) { solutionModuleService.liquidValveSwitch(cmdDTO.getCommandId(), cmdDTO.getCommand(), ValveStateCode.water);//电磁阀对应通道打开 + Thread.sleep(500); solutionModuleService.liquidPumpMove(cmdDTO.getCommandId(), cmdDTO.getCommand(), 0.1);//八通道蠕动泵 cleanWaterVolume * waterScale * 8 + solutionModuleService.liquidValveSwitch(cmdDTO.getCommandId(), cmdDTO.getCommand(), ValveStateCode.waste);//电磁阀对应通道打开 + Thread.sleep(500); solutionModuleService.liquidPumpMove(cmdDTO.getCommandId(), cmdDTO.getCommand(), 0.1);//八通道蠕动泵 - double distance = (column - 1) * trayTubeHorizontalSpacingDistance;//x轴移动距离 - transferModuleService.transferXMove(cmdDTO.getCommandId(), cmdDTO.getCommand(), liquidAreaTrayPoint3D.getX() + distance);//机械臂移动到试管位置 - } - + solutionModuleService.solutionMotorMoveZero(cmdDTO.getCommandId(), cmdDTO.getCommand());//加液模块上升至最高,移出试管 } + + solutionModuleService.solutionMotorMoveZero(cmdDTO.getCommandId(), cmdDTO.getCommand());//加液模块上升至最高,移出试管 deviceStateService.getDeviceState().getSolutionModule().setIdle(true);//设置占用解除 deviceStateService.getDeviceState().getSolutionModule().setPumping(false);//设置加液结束 diff --git a/src/main/java/com/iflytop/sgs/app/cmd/control/MoveToFeedAreaCommand.java b/src/main/java/com/iflytop/sgs/app/cmd/control/MoveToFeedAreaCommand.java index beb01b4..ba1a2f7 100644 --- a/src/main/java/com/iflytop/sgs/app/cmd/control/MoveToFeedAreaCommand.java +++ b/src/main/java/com/iflytop/sgs/app/cmd/control/MoveToFeedAreaCommand.java @@ -65,6 +65,8 @@ public class MoveToFeedAreaCommand extends BaseCommandHandler { transferModuleService.transferXMoveBy(cmdDTO.getCommandId(), cmdDTO.getCommand(), transferModuleXPickTrayMoveDistance);//X轴移出卡槽 transferModuleService.transferZMoveZero(cmdDTO.getCommandId(), cmdDTO.getCommand());//Z轴抬升至最高 } else { + boolean feedTrayExist = deviceSensorService.getTrayStateByHeatModuleCode(targetHeatModuleCode);//获取传感器状态 + Assert.isTrue(feedTrayExist, () -> new AppException(ResultCode.TARGET_HEAT_MODULE_NO_TRAY));//加热区无托盘 Point3D targetHeatModuleTrayClawPoint3D = heatModuleService.getHeatModuleTrayClawPoint3D(targetHeatModuleCode);//获取目标加热模块托盘夹取点 transferModuleService.transferXMove(cmdDTO.getCommandId(), cmdDTO.getCommand(), targetHeatModuleTrayClawPoint3D.getX() + transferModuleXPickTrayMoveDistance);//将X轴移动至目标加热模块托盘夹取点 + 进出卡槽移动距离 transferModuleService.transferZMove(cmdDTO.getCommandId(), cmdDTO.getCommand(), targetHeatModuleTrayClawPoint3D.getZ());//Z轴下降至夹取点,使托盘落入石墨加热盘 diff --git a/src/main/java/com/iflytop/sgs/app/cmd/control/MoveToLiquidAreaCommand.java b/src/main/java/com/iflytop/sgs/app/cmd/control/MoveToLiquidAreaCommand.java index 01946b8..5afbfd2 100644 --- a/src/main/java/com/iflytop/sgs/app/cmd/control/MoveToLiquidAreaCommand.java +++ b/src/main/java/com/iflytop/sgs/app/cmd/control/MoveToLiquidAreaCommand.java @@ -68,6 +68,8 @@ public class MoveToLiquidAreaCommand extends BaseCommandHandler { deviceStateService.getDeviceState().getSolutionModule().setFeedAreaTrayStatus(false);//设定上料区托盘状态 //deviceStateService.getDeviceState().getTrayByHeatModuleCode(targetHeatModuleCode).setInFeedArea(false);//设定托盘不在上料区中 todo 报错 } else {//有加热模块参数 + boolean feedTrayExist = deviceSensorService.getTrayStateByHeatModuleCode(targetHeatModuleCode);//获取传感器状态 + Assert.isTrue(feedTrayExist, () -> new AppException(ResultCode.TARGET_HEAT_MODULE_NO_TRAY));//加热区无托盘 Point3D targetHeatModuleTrayClawPoint3D = heatModuleService.getHeatModuleTrayClawPoint3D(targetHeatModuleCode);//获取目标加热模块托盘夹取点 transferModuleService.transferXMove(cmdDTO.getCommandId(), cmdDTO.getCommand(), targetHeatModuleTrayClawPoint3D.getX() + transferModuleXPickTrayMoveDistance);//将X轴移动至目标加热模块托盘夹取点 + 进出卡槽移动距离 transferModuleService.transferZMove(cmdDTO.getCommandId(), cmdDTO.getCommand(), targetHeatModuleTrayClawPoint3D.getZ());//Z轴下降至夹取点,使托盘落入石墨加热盘 diff --git a/src/main/java/com/iflytop/sgs/app/cmd/control/XOriginCommand.java b/src/main/java/com/iflytop/sgs/app/cmd/control/XOriginCommand.java index 053c4cc..f8baa57 100644 --- a/src/main/java/com/iflytop/sgs/app/cmd/control/XOriginCommand.java +++ b/src/main/java/com/iflytop/sgs/app/cmd/control/XOriginCommand.java @@ -1,12 +1,17 @@ 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.dto.CmdDTO; import com.iflytop.sgs.app.service.device.DeviceCommandService; +import com.iflytop.sgs.app.service.device.DeviceSensorService; import com.iflytop.sgs.common.annotation.CommandMapping; 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.enums.DevicePartId; +import com.iflytop.sgs.common.exception.AppException; +import com.iflytop.sgs.common.result.ResultCode; import com.iflytop.sgs.common.utils.CommandUtil; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -23,10 +28,14 @@ import java.util.concurrent.CompletableFuture; @CommandMapping("x_origin") public class XOriginCommand extends BaseCommandHandler { private final DeviceCommandService deviceCommandService; + private final DeviceSensorService deviceSensorService; @Override public CompletableFuture handle(CmdDTO cmdDTO) { return runAsync(() -> { + //确保z轴的高度 + Double zPosition = deviceSensorService.getMotorPosition(DevicePartId.ZM); + Assert.isTrue(zPosition <50, () -> new AppException(ResultCode.SOLUTION_MODULE_NO_TRAY)); DeviceCommandBundle deviceCommand = DeviceCommandGenerator.transferXOrigin(); CommandFuture deviceCommandFuture = deviceCommandService.sendCommand(cmdDTO.getCommandId(), cmdDTO.getCommand(), deviceCommand); CommandUtil.wait(deviceCommandFuture); diff --git a/src/main/java/com/iflytop/sgs/app/cmd/selftest/MoveTestCommand.java b/src/main/java/com/iflytop/sgs/app/cmd/selftest/MoveTestCommand.java index eeaa364..168ecb5 100644 --- a/src/main/java/com/iflytop/sgs/app/cmd/selftest/MoveTestCommand.java +++ b/src/main/java/com/iflytop/sgs/app/cmd/selftest/MoveTestCommand.java @@ -69,11 +69,6 @@ public class MoveTestCommand extends BaseCommandHandler { transferModuleService.transferZMove(cmdDTO.getCommandId(), cmdDTO.getCommand(), feedAreaTrayPoint3D.getZ());//Z轴下降至夹取点,使托盘落入上料区 transferModuleService.transferZMoveZero(cmdDTO.getCommandId(), cmdDTO.getCommand());//Z轴抬升至最高 webSocketService.pushSelfMoveTest(SelfMoveTestGenerator.generateJson(cmdDTO.getCommandId(), cmdDTO.getCommand(), "4、z轴电机检测完毕", 100)); - - if(clawTrayExist){ - transferModuleService.transferMove(cmdDTO.getCommandId(), cmdDTO.getCommand(),feedAreaTrayPoint3D);//转移至加液区托盘点位 - - } } finally { deviceStateService.getCommandMutexState().get().setMoveTest(false); } 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 1db462d..5b77b71 100644 --- a/src/main/java/com/iflytop/sgs/common/result/ResultCode.java +++ b/src/main/java/com/iflytop/sgs/common/result/ResultCode.java @@ -61,7 +61,8 @@ public enum ResultCode implements IResultCode, Serializable { FEED_AREA_NO_TRAY("6028", "上料区无托盘"), SOLUTION_MODULE_IS_BUSY("6029", "加液模块正忙"), ANNEAL_MODULE_EXIST_TRAY("6030", "退火模块存在托盘"), - HAVE_IN_ANNEAL_MODULE("6031", "已经在退热模块"); + HAVE_IN_ANNEAL_MODULE("6031", "已经在退热模块"), + Z_IS_NOT_SAFE("6032", "Z轴位置不安全"),; /** 状态码 */ private final String code; /** 提示信息 */