You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

77 lines
3.8 KiB

2 months ago
  1. package com.iflytop.sgs.app.cmd;
  2. import com.iflytop.sgs.app.core.BaseCommandHandler;
  3. import com.iflytop.sgs.app.model.bo.Point3D;
  4. import com.iflytop.sgs.app.model.dto.CmdDTO;
  5. import com.iflytop.sgs.app.service.DeviceCommandUtilService;
  6. import com.iflytop.sgs.app.service.DevicePositionService;
  7. import com.iflytop.sgs.app.service.DeviceStateService;
  8. import com.iflytop.sgs.app.service.GantryArmService;
  9. import com.iflytop.sgs.common.annotation.CommandMapping;
  10. import com.iflytop.sgs.common.enums.HeatModuleCode;
  11. import com.iflytop.sgs.common.enums.data.DevicePositionCode;
  12. import com.iflytop.sgs.common.exception.AppException;
  13. import com.iflytop.sgs.common.result.ResultCode;
  14. import lombok.RequiredArgsConstructor;
  15. import lombok.extern.slf4j.Slf4j;
  16. import org.springframework.stereotype.Component;
  17. import java.util.concurrent.CompletableFuture;
  18. /**
  19. * 移至加热 todo wmy 需要改
  20. */
  21. @Slf4j
  22. @Component
  23. @RequiredArgsConstructor
  24. @CommandMapping("move_to_heat_area")//业务指令注解
  25. public class MoveToHeatAreaCommand extends BaseCommandHandler {
  26. private final DeviceCommandUtilService deviceCommandUtilService;
  27. private final DevicePositionService devicePositionService;
  28. private final GantryArmService gantryArmService;
  29. private final DeviceStateService deviceStateService;
  30. @Override
  31. public CompletableFuture<Void> handle(CmdDTO cmdDTO) throws Exception {
  32. if (deviceStateService.getCommandState().get().isMoveToHeatAreaCommandExecuting()) {
  33. throw new AppException(ResultCode.COMMAND_ALREADY_EXECUTING);
  34. }
  35. if (deviceStateService.getCommandState().get().isMoveToSolutionAreaCommandExecuting()) {
  36. throw new AppException(ResultCode.CMD_BUSY);
  37. }
  38. try {
  39. deviceStateService.getCommandState().get().setMoveToHeatAreaCommandExecuting(true);
  40. } catch (Exception e) {
  41. deviceStateService.getCommandState().get().setMoveToHeatAreaCommandExecuting(false);
  42. throw e;
  43. }
  44. String heatId = cmdDTO.getStringParam("heatId");
  45. HeatModuleCode heatModuleId = HeatModuleCode.valueOf(heatId);
  46. //加液电机升起的安全高度
  47. double liquidMotorSafeDistance = devicePositionService.getPosition(DevicePositionCode.clawTrayGrip).getDistance();
  48. //获取机械臂夹取托盘的横向距离
  49. double clawTrayGrip = devicePositionService.getPosition(DevicePositionCode.clawTrayGrip).getDistance();
  50. //获取机械臂夹取托盘的纵向高度
  51. double clawTrayHeight = devicePositionService.getPosition(DevicePositionCode.clawTrayHeight).getDistance();
  52. //获取指定加热模块上方点位
  53. Point3D heatAreaTrayClawPoint3D = deviceCommandUtilService.getHeatAreaTrayClawPoint3D(heatModuleId);
  54. return runAsync(() -> {
  55. try {
  56. //升高加液电机高度
  57. deviceCommandUtilService.motorLiquidMove(cmdDTO.getCommandId(),cmdDTO.getCommand(),liquidMotorSafeDistance);
  58. //移动机械臂到加热区上方 此时机械臂夹着托盘
  59. deviceCommandUtilService.gantryMove(cmdDTO.getCommandId(), cmdDTO.getCommand(), heatAreaTrayClawPoint3D); //将机械臂移动至加热模块上方
  60. //下降z轴,夹爪脱离机械臂
  61. deviceCommandUtilService.gantryZMove(clawTrayHeight);
  62. //移动x轴向右脱离托盘
  63. deviceCommandUtilService.gantryXMoveBy(cmdDTO.getCommandId(), cmdDTO.getCommand(), -clawTrayGrip);
  64. //z轴返回原点
  65. deviceCommandUtilService.motorLiquidMove(0);
  66. } finally {
  67. deviceStateService.setGantryArmStateIdle(true);
  68. deviceStateService.getCommandState().get().setMoveToHeatAreaCommandExecuting(false);
  69. }
  70. });
  71. }
  72. }