Browse Source

1、增加工艺和手动业务指令的后置传感器判断

2、手动业务指令和工艺指令申请同一个转运模组,满足工艺执行过程中手动操作的需求
master
王梦远 2 months ago
parent
commit
0ed9d23dd7
  1. 9
      src/main/java/com/iflytop/sgs/app/cmd/control/CleanStartCommand.java
  2. 55
      src/main/java/com/iflytop/sgs/app/cmd/control/DrainLiquidCommand.java
  3. 14
      src/main/java/com/iflytop/sgs/app/cmd/control/LiquidAddCommand.java
  4. 7
      src/main/java/com/iflytop/sgs/app/cmd/control/LiquidPreFillStartCommand.java
  5. 23
      src/main/java/com/iflytop/sgs/app/cmd/control/LiquidPreFillStopCommand.java
  6. 7
      src/main/java/com/iflytop/sgs/app/cmd/control/LiquidReduceCommand.java
  7. 15
      src/main/java/com/iflytop/sgs/app/cmd/control/MoveToAnnealAreaCommand.java
  8. 27
      src/main/java/com/iflytop/sgs/app/cmd/control/MoveToFeedAreaCommand.java
  9. 13
      src/main/java/com/iflytop/sgs/app/cmd/control/MoveToHeatAreaCommand.java
  10. 13
      src/main/java/com/iflytop/sgs/app/cmd/control/MoveToLiquidAreaCommand.java
  11. 7
      src/main/java/com/iflytop/sgs/app/cmd/control/OutTrayCommand.java
  12. 13
      src/main/java/com/iflytop/sgs/app/cmd/control/XOriginCommand.java
  13. 11
      src/main/java/com/iflytop/sgs/app/cmd/control/ZOriginCommand.java
  14. 8
      src/main/java/com/iflytop/sgs/app/cmd/debug/DebugMotorXOriginCommand.java
  15. 1
      src/main/java/com/iflytop/sgs/app/cmd/selftest/LiquidPreFillCommand.java
  16. 9
      src/main/java/com/iflytop/sgs/app/cmd/selftest/MoveTestCommand.java
  17. 1
      src/main/java/com/iflytop/sgs/app/cmd/selftest/TrayOutCommand.java
  18. 3
      src/main/java/com/iflytop/sgs/app/controller/CraftsController.java
  19. 1
      src/main/java/com/iflytop/sgs/app/model/entity/Crafts.java
  20. 1
      src/main/java/com/iflytop/sgs/app/service/api/CraftMonitorService.java
  21. 46
      src/main/java/com/iflytop/sgs/app/service/crafts/CraftsStepService.java
  22. 10
      src/main/java/com/iflytop/sgs/app/service/device/DeviceStopService.java
  23. 2
      src/main/java/com/iflytop/sgs/app/service/device/module/HeatModuleService.java
  24. 9
      src/main/java/com/iflytop/sgs/app/service/device/module/TransferModuleService.java
  25. 3
      src/main/java/com/iflytop/sgs/app/ws/server/WebSocketServer.java
  26. 3
      src/main/java/com/iflytop/sgs/common/enums/CraftsTransferTypeCode.java
  27. 6
      src/main/java/com/iflytop/sgs/common/result/ResultCode.java
  28. 2
      src/main/java/com/iflytop/sgs/hardware/service/GDDeviceStatusServiceImpl.java

9
src/main/java/com/iflytop/sgs/app/cmd/control/CleanStartCommand.java

@ -14,6 +14,7 @@ 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.CraftsTransferTypeCode;
import com.iflytop.sgs.common.enums.DeviceSensorCode;
import com.iflytop.sgs.common.enums.SolutionCode;
import com.iflytop.sgs.common.enums.SystemConfigCode;
@ -64,6 +65,11 @@ public class CleanStartCommand extends BaseCommandHandler {
Double backFlowDistance = systemConfigService.getSystemConfigDoubleByCode(SystemConfigCode.back_flow_distance);//防低落距离
return runAsync(() -> {
try {
boolean moduleIdle = deviceStateService.getDeviceState().getTransferModule().isIdle();
if(!moduleIdle){
throw new AppException(ResultCode.CMD_BUSY);//设备忙
}
transferModuleService.requestTransferModule(CraftsTransferTypeCode.move_by_manual);//申请使用转运模块
deviceStateService.getCommandMutexState().get().setTransferCommandExecuting(true);
deviceStateService.getDeviceState().getSolutionModule().setPumping(true);//设置正在加液
solutionModuleService.solutionMotorMoveZero(cmdDTO.getCommandId(), cmdDTO.getCommand());//加液模块上升
@ -80,7 +86,7 @@ public class CleanStartCommand extends BaseCommandHandler {
solutionModuleService.liquidPumpMove(cmdDTO.getCommandId(), cmdDTO.getCommand(), cleanWaterVolume);//八通道蠕动泵 cleanWaterVolume * waterScale * 8
solutionModuleService.solutionMotorMoveZero(cmdDTO.getCommandId(), cmdDTO.getCommand());//加液模块上升至最高移出试管
}
solutionModuleService.liquidPumpMove(-backFlowDistance);//预充
solutionModuleService.liquidPumpMove(-backFlowDistance);//倒吸
for (int j = 0; j < jsonArray.size(); j++) {
int column = jsonArray.getInt(j);
double distance = Math.abs(column - 5) * trayTubeHorizontalSpacingDistance;//x轴移动距离
@ -94,6 +100,7 @@ public class CleanStartCommand extends BaseCommandHandler {
} finally {
deviceStateService.getDeviceState().getSolutionModule().setPumping(false);//设置加液结束
deviceStateService.getCommandMutexState().get().setTransferCommandExecuting(false);
transferModuleService.releaseTransferModule();//释放转运模组
}
});

55
src/main/java/com/iflytop/sgs/app/cmd/control/DrainLiquidCommand.java

@ -3,7 +3,6 @@ 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.Point3D;
import com.iflytop.sgs.app.model.bo.status.device.TrayState;
import com.iflytop.sgs.app.model.dto.CmdDTO;
import com.iflytop.sgs.app.service.api.DevicePositionService;
import com.iflytop.sgs.app.service.api.SystemConfigService;
@ -13,8 +12,8 @@ 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;
import com.iflytop.sgs.common.enums.CraftsTransferTypeCode;
import com.iflytop.sgs.common.enums.DeviceSensorCode;
import com.iflytop.sgs.common.enums.HeatModuleCode;
import com.iflytop.sgs.common.enums.SolutionCode;
import com.iflytop.sgs.common.enums.SystemConfigCode;
import com.iflytop.sgs.common.enums.data.DevicePositionCode;
@ -24,7 +23,6 @@ import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import java.util.List;
import java.util.concurrent.CompletableFuture;
/**
@ -49,32 +47,41 @@ public class DrainLiquidCommand extends BaseCommandHandler {
if (deviceStateService.getCommandMutexState().get().isTransferCommandExecuting()) {
throw new AppException(ResultCode.CMD_BUSY);
}
boolean liquidTrayExist = deviceSensorService.getSensorStatus(DeviceSensorCode.LIQUID_TRAY_EXIST);//获取上料区托盘状态
Assert.isTrue(!liquidTrayExist, () -> new AppException(ResultCode.OPERATION_NOT_ALLOWED));//上料区不能存在托盘
deviceStateService.getCommandMutexState().get().setTransferCommandExecuting(true);
boolean preFillFlag = systemConfigService.getSystemConfigBooleanByCode(SystemConfigCode.pre_fill_when_open_service);
if (!preFillFlag) {
throw new AppException(ResultCode.INVALID_PARAMETER);
}
Point3D heatArea1TrayClawPoint = devicePositionService.getPosition(DevicePositionCode.heatArea1TrayClawPoint).getPoint3D();//加热位1坐标
Double liquidAreaPreFillPoint = devicePositionService.getPosition(DevicePositionCode.liquidAreaPreFillPoint).getPositon(); //预充时加液臂下降位置
Double preFillDistance = systemConfigService.getSystemConfigDoubleByCode(SystemConfigCode.pre_fill_distance_when_open_service);//预充距离
boolean moduleIdle = deviceStateService.getDeviceState().getTransferModule().isIdle();
return runAsync(() -> {
try {
boolean preFillFlag = systemConfigService.getSystemConfigBooleanByCode(SystemConfigCode.pre_fill_when_open_service);
Point3D heatArea1TrayClawPoint = devicePositionService.getPosition(DevicePositionCode.heatArea1TrayClawPoint).getPoint3D();//加热位1坐标
Double liquidAreaPreFillPoint = devicePositionService.getPosition(DevicePositionCode.liquidAreaPreFillPoint).getPositon(); //预充时加液臂下降位置
Double preFillDistance = systemConfigService.getSystemConfigDoubleByCode(SystemConfigCode.pre_fill_distance_when_open_service);//预充距离
if (preFillFlag) {
solutionModuleService.solutionMotorMoveZero();//加液机械臂上升
transferModuleService.transferZMoveZero();//Z轴抬升至最高
transferModuleService.transferXMove(heatArea1TrayClawPoint.getX());//转运模块移动至加热位1
solutionModuleService.solutionMotorMove(liquidAreaPreFillPoint);//加液机械臂下降至至预充点位
solutionModuleService.liquidValveSwitch(SolutionCode.waste);//电磁阀对应通道打开
solutionModuleService.liquidPumpMove(-preFillDistance);//排空
solutionModuleService.liquidValveSwitch(SolutionCode.thin);//电磁阀对应通道打开
solutionModuleService.liquidPumpMove(-preFillDistance);//排空
solutionModuleService.liquidValveSwitch(SolutionCode.thick);//电磁阀对应通道打开
solutionModuleService.liquidPumpMove(-preFillDistance);//排空
solutionModuleService.liquidValveSwitch(SolutionCode.water);//电磁阀对应通道打开
solutionModuleService.liquidPumpMove(-preFillDistance);//排空
solutionModuleService.solutionMotorMoveZero();//回原点
boolean liquidTrayExist = deviceSensorService.getSensorStatus(DeviceSensorCode.LIQUID_TRAY_EXIST);//获取上料区托盘状态
Assert.isTrue(!liquidTrayExist, () -> new AppException(ResultCode.OPERATION_NOT_ALLOWED));//上料区不能存在托盘
if (!moduleIdle) {
throw new AppException(ResultCode.CMD_BUSY);//设备忙
}
transferModuleService.requestTransferModule(CraftsTransferTypeCode.move_by_manual);//申请使用转运模块
deviceStateService.getCommandMutexState().get().setTransferCommandExecuting(true);
solutionModuleService.solutionMotorMoveZero();//加液机械臂上升
transferModuleService.transferZMoveZero();//Z轴抬升至最高
transferModuleService.transferXMove(heatArea1TrayClawPoint.getX());//转运模块移动至加热位1
liquidTrayExist = deviceSensorService.getSensorStatus(DeviceSensorCode.LIQUID_TRAY_EXIST);//获取上料区托盘状态
Assert.isTrue(!liquidTrayExist, () -> new AppException(ResultCode.OPERATION_NOT_ALLOWED));//上料区不能存在托盘
solutionModuleService.solutionMotorMove(liquidAreaPreFillPoint);//加液机械臂下降至至预充点位
solutionModuleService.liquidValveSwitch(SolutionCode.waste);//电磁阀对应通道打开
solutionModuleService.liquidPumpMove(-preFillDistance);//排空
solutionModuleService.liquidValveSwitch(SolutionCode.thin);//电磁阀对应通道打开
solutionModuleService.liquidPumpMove(-preFillDistance);//排空
solutionModuleService.liquidValveSwitch(SolutionCode.thick);//电磁阀对应通道打开
solutionModuleService.liquidPumpMove(-preFillDistance);//排空
solutionModuleService.liquidValveSwitch(SolutionCode.water);//电磁阀对应通道打开
solutionModuleService.liquidPumpMove(-preFillDistance);//排空
solutionModuleService.solutionMotorMoveZero();//回原点
} finally {
deviceStateService.getCommandMutexState().get().setTransferCommandExecuting(false);
transferModuleService.releaseTransferModule();//释放转运模组
}
});
}

14
src/main/java/com/iflytop/sgs/app/cmd/control/LiquidAddCommand.java

@ -16,8 +16,8 @@ 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.CraftsTransferTypeCode;
import com.iflytop.sgs.common.enums.DeviceSensorCode;
import com.iflytop.sgs.common.enums.SolutionCode;
import com.iflytop.sgs.common.enums.SystemConfigCode;
import com.iflytop.sgs.common.enums.data.DevicePositionCode;
import com.iflytop.sgs.common.exception.AppException;
@ -62,9 +62,14 @@ public class LiquidAddCommand extends BaseCommandHandler {
Container container = containerService.getById(containerId);
Solutions solutions = solutionsService.getById(container.getSolutionId());//获取溶液
Assert.isTrue(!jsonArray.isEmpty(), () -> new AppException(ResultCode.INVALID_PARAMETER));//确定选中了列
deviceStateService.getCommandMutexState().get().setTransferCommandExecuting(true);
return runAsync(() -> {
try {
boolean moduleIdle = deviceStateService.getDeviceState().getTransferModule().isIdle();
if(!moduleIdle){
throw new AppException(ResultCode.CMD_BUSY);//设备忙
}
transferModuleService.requestTransferModule(CraftsTransferTypeCode.move_by_manual);//申请使用转运模块
deviceStateService.getCommandMutexState().get().setTransferCommandExecuting(true);
deviceStateService.getDeviceState().getSolutionModule().setPumping(true);//设置正在加液
solutionModuleService.solutionMotorMoveZero(cmdDTO.getCommandId(), cmdDTO.getCommand());//加液机械臂上升至0
transferModuleService.transferMove(cmdDTO.getCommandId(), cmdDTO.getCommand(), liquidAreaTrayPoint);//移动至加液位置
@ -92,11 +97,12 @@ public class LiquidAddCommand extends BaseCommandHandler {
solutionModuleService.solutionMotorMoveZero(cmdDTO.getCommandId(), cmdDTO.getCommand());//加液机械臂上升
}
}
solutionModuleService.liquidPumpMove(-backFlowDistance);//预充
solutionModuleService.liquidPumpMove(-backFlowDistance);//倒吸
transferModuleService.transferMove(cmdDTO.getCommandId(), cmdDTO.getCommand(), liquidAreaTrayPoint);//移动至加液位置
deviceStateService.getDeviceState().getSolutionModule().setPumping(false);//设置加液结束
} finally {
deviceStateService.getDeviceState().getSolutionModule().setPumping(false);//设置加液结束
deviceStateService.getCommandMutexState().get().setTransferCommandExecuting(false);
transferModuleService.releaseTransferModule();//释放转运模组
}
});

7
src/main/java/com/iflytop/sgs/app/cmd/control/LiquidPreFillStartCommand.java

@ -11,6 +11,7 @@ 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.CraftsTransferTypeCode;
import com.iflytop.sgs.common.enums.SolutionCode;
import com.iflytop.sgs.common.enums.data.DevicePositionCode;
import com.iflytop.sgs.common.exception.AppException;
@ -48,6 +49,11 @@ public class LiquidPreFillStartCommand extends BaseCommandHandler {
Double liquidAreaPreFillPoint = devicePositionService.getPosition(DevicePositionCode.liquidAreaPreFillPoint).getPositon(); //预充时加液臂下降位置
return runAsync(() -> {
try {
boolean moduleIdle = deviceStateService.getDeviceState().getTransferModule().isIdle();
if(!moduleIdle){
throw new AppException(ResultCode.CMD_BUSY);//设备忙
}
transferModuleService.requestTransferModule(CraftsTransferTypeCode.move_by_manual);//申请使用转运模块
deviceStateService.getCommandMutexState().get().setSolutionAddCommandExecuting(true);
deviceStateService.getDeviceState().getSolutionModule().setPumping(true);//设置正在加液
solutionModuleService.liquidValveSwitch(cmdDTO.getCommandId(), cmdDTO.getCommand(), solutionCode);//电磁阀对应的酸液通道打开
@ -56,6 +62,7 @@ public class LiquidPreFillStartCommand extends BaseCommandHandler {
solutionModuleService.liquidPumpRotateForward(cmdDTO.getCommandId(), cmdDTO.getCommand());//预充开始
} finally {
deviceStateService.getCommandMutexState().get().setSolutionAddCommandExecuting(false);
transferModuleService.releaseTransferModule();//释放转运模组
}
});
}

23
src/main/java/com/iflytop/sgs/app/cmd/control/LiquidPreFillStopCommand.java

@ -5,8 +5,12 @@ import com.iflytop.sgs.app.model.dto.CmdDTO;
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.CraftsTransferTypeCode;
import com.iflytop.sgs.common.enums.SystemConfigCode;
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;
@ -24,15 +28,26 @@ public class LiquidPreFillStopCommand extends BaseCommandHandler {
private final SolutionModuleService solutionModuleService;
private final DeviceStateService deviceStateService;
private final SystemConfigService systemConfigService;
private final TransferModuleService transferModuleService;
@Override
public CompletableFuture<Void> handle(CmdDTO cmdDTO) {
Double backFlowDistance = systemConfigService.getSystemConfigDoubleByCode(SystemConfigCode.back_flow_distance);//防低落距离
return runAsync(() -> {
solutionModuleService.liquidPumpStop(cmdDTO.getCommandId(), cmdDTO.getCommand());//停止预充
solutionModuleService.liquidPumpMove(-backFlowDistance);//预充
solutionModuleService.solutionMotorMoveZero(cmdDTO.getCommandId(), cmdDTO.getCommand());//加液机械臂归0
deviceStateService.getDeviceState().getSolutionModule().setPumping(false);//设置加液结束
try {
boolean moduleIdle = deviceStateService.getDeviceState().getTransferModule().isIdle();
if (!moduleIdle) {
throw new AppException(ResultCode.CMD_BUSY);//设备忙
}
transferModuleService.requestTransferModule(CraftsTransferTypeCode.move_by_manual);//申请使用转运模块
solutionModuleService.liquidPumpStop(cmdDTO.getCommandId(), cmdDTO.getCommand());//停止预充
solutionModuleService.liquidPumpMove(-backFlowDistance);//预充
solutionModuleService.solutionMotorMoveZero(cmdDTO.getCommandId(), cmdDTO.getCommand());//加液机械臂归0
deviceStateService.getDeviceState().getSolutionModule().setPumping(false);//设置加液结束
} finally {
transferModuleService.releaseTransferModule();//释放转运模组
}
});
}
}

7
src/main/java/com/iflytop/sgs/app/cmd/control/LiquidReduceCommand.java

@ -12,6 +12,7 @@ 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.CraftsTransferTypeCode;
import com.iflytop.sgs.common.enums.DeviceSensorCode;
import com.iflytop.sgs.common.enums.SolutionCode;
import com.iflytop.sgs.common.enums.SystemConfigCode;
@ -56,6 +57,11 @@ public class LiquidReduceCommand extends BaseCommandHandler {
double reduceNumber = systemConfigService.getSystemConfigDoubleByCode(SystemConfigCode.reduce_distance);//抽液volume配置
return runAsync(() -> {
try {
boolean moduleIdle = deviceStateService.getDeviceState().getTransferModule().isIdle();
if (!moduleIdle) {
throw new AppException(ResultCode.CMD_BUSY);//设备忙
}
transferModuleService.requestTransferModule(CraftsTransferTypeCode.move_by_manual);//申请使用转运模块
deviceStateService.getCommandMutexState().get().setTransferCommandExecuting(true);
solutionModuleService.solutionMotorMoveZero(cmdDTO.getCommandId(), cmdDTO.getCommand());//加液模块上升
transferModuleService.transferMove(cmdDTO.getCommandId(), cmdDTO.getCommand(), liquidAreaTrayPoint3D);//移动至加液时托盘位置点
@ -78,6 +84,7 @@ public class LiquidReduceCommand extends BaseCommandHandler {
deviceStateService.getDeviceState().getSolutionModule().setPumping(false);//设置加液结束
}finally {
deviceStateService.getCommandMutexState().get().setTransferCommandExecuting(false);
transferModuleService.releaseTransferModule();//释放转运模组
}
});

15
src/main/java/com/iflytop/sgs/app/cmd/control/MoveToAnnealAreaCommand.java

@ -11,6 +11,7 @@ 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;
import com.iflytop.sgs.common.enums.CraftsTransferTypeCode;
import com.iflytop.sgs.common.enums.DeviceSensorCode;
import com.iflytop.sgs.common.enums.HeatModuleCode;
import com.iflytop.sgs.common.enums.data.DevicePositionCode;
@ -58,9 +59,14 @@ public class MoveToAnnealAreaCommand extends BaseCommandHandler {
Point3D feedAreaTrayPoint3D = devicePositionService.getPosition(DevicePositionCode.feedAreaTrayPoint).getPoint3D();//获取上料区托盘夹爪位置点
return runAsync(() -> {
try {
deviceStateService.getCommandMutexState().get().setTransferCommandExecuting(true);
boolean annealTrayExist = deviceSensorService.getSensorStatus(DeviceSensorCode.HEATER_TRAY_4_EXIST);//获取传感器状态
Assert.isTrue(!annealTrayExist, () -> new AppException(ResultCode.ANNEAL_MODULE_EXIST_TRAY));//退火位不能有托盘
boolean moduleIdle = deviceStateService.getDeviceState().getTransferModule().isIdle();
if (!moduleIdle) {
throw new AppException(ResultCode.CMD_BUSY);//设备忙
}
transferModuleService.requestTransferModule(CraftsTransferTypeCode.move_by_manual);//申请使用转运模块
deviceStateService.getCommandMutexState().get().setTransferCommandExecuting(true);
solutionModuleService.solutionMotorMoveZero(cmdDTO.getCommandId(), cmdDTO.getCommand());//加液机械臂上升
if (heatModuleCode == null) {
transferModuleService.transferMove(cmdDTO.getCommandId(), cmdDTO.getCommand(), liquidAreaTrayPoint);//移动至加液位置
@ -69,6 +75,8 @@ public class MoveToAnnealAreaCommand extends BaseCommandHandler {
boolean feedTrayExist = deviceSensorService.getSensorStatus(DeviceSensorCode.LIQUID_TRAY_EXIST);//上料区是否有托盘
Assert.isTrue(feedTrayExist, () -> new AppException(ResultCode.FEED_AREA_NO_TRAY));//上料区必须有托盘
transferModuleService.transferXMove(cmdDTO.getCommandId(), cmdDTO.getCommand(), feedAreaTrayPoint3D.getX() + transferModuleXPickTrayMoveDistance);//将X轴移动至上料区托盘夹取点 + 进出卡槽移动距离
feedTrayExist = deviceSensorService.getSensorStatus(DeviceSensorCode.LIQUID_TRAY_EXIST);//上料区是否有托盘
Assert.isTrue(feedTrayExist, () -> new AppException(ResultCode.FEED_AREA_NO_TRAY));//上料区必须有托盘
transferModuleService.transferZMove(cmdDTO.getCommandId(), cmdDTO.getCommand(), feedAreaTrayPoint3D.getZ());//Z轴下降至夹取点使托盘落入石墨加热盘
transferModuleService.transferXMoveBy(cmdDTO.getCommandId(), cmdDTO.getCommand(), -transferModuleXPickTrayMoveDistance);//X轴进入卡槽
}
@ -77,17 +85,22 @@ public class MoveToAnnealAreaCommand extends BaseCommandHandler {
Assert.isTrue(heatTrayExist, () -> new AppException(ResultCode.TARGET_HEAT_MODULE_NO_TRAY));//加热模块无托盘
Point3D heatModuleTrayClawPoint3D = heatModuleService.getHeatModuleTrayClawPoint3D(heatModuleCode);//获取加热模块托盘夹取点
transferModuleService.transferXMove(cmdDTO.getCommandId(), cmdDTO.getCommand(), heatModuleTrayClawPoint3D.getX() + transferModuleXPickTrayMoveDistance);//将X轴移动至加热区托盘夹取点 + 进出卡槽移动距离
heatTrayExist = deviceSensorService.getTrayStateByHeatModuleCode(heatModuleCode);//获取转移加热区的传感器状态
Assert.isTrue(heatTrayExist, () -> new AppException(ResultCode.TARGET_HEAT_MODULE_NO_TRAY));//加热模块无托盘
transferModuleService.transferZMove(cmdDTO.getCommandId(), cmdDTO.getCommand(), heatModuleTrayClawPoint3D.getZ());//Z轴下降至夹取点使托盘落入石墨加热盘
transferModuleService.transferXMoveBy(cmdDTO.getCommandId(), cmdDTO.getCommand(), -transferModuleXPickTrayMoveDistance);//X轴进入卡槽
deviceStateService.getDeviceState().getHeatModuleByCode(targetHeatModuleCode).setTrayStatus(false);//设定目标加热模块托盘状态
}
transferModuleService.transferZMoveZero(cmdDTO.getCommandId(), cmdDTO.getCommand());//Z轴抬升至最高
transferModuleService.transferXMove(cmdDTO.getCommandId(), cmdDTO.getCommand(), targetHeatModuleTrayClawPoint3D.getX());//将X轴移动至目标加热模块托盘夹取点
annealTrayExist = deviceSensorService.getSensorStatus(DeviceSensorCode.HEATER_TRAY_4_EXIST);//获取传感器状态
Assert.isTrue(!annealTrayExist, () -> new AppException(ResultCode.ANNEAL_MODULE_EXIST_TRAY));//退火位不能有托盘
transferModuleService.transferZMove(cmdDTO.getCommandId(), cmdDTO.getCommand(), targetHeatModuleTrayClawPoint3D.getZ());//Z轴下降至夹取点使托盘落入石墨加热盘
transferModuleService.transferXMoveBy(cmdDTO.getCommandId(), cmdDTO.getCommand(), transferModuleXPickTrayMoveDistance);//X轴移出卡槽
transferModuleService.transferZMoveZero(cmdDTO.getCommandId(), cmdDTO.getCommand());//Z轴抬升至最高
} finally {
deviceStateService.getCommandMutexState().get().setTransferCommandExecuting(false);
transferModuleService.releaseTransferModule();//释放转运模组
}
});
}

27
src/main/java/com/iflytop/sgs/app/cmd/control/MoveToFeedAreaCommand.java

@ -11,6 +11,7 @@ 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;
import com.iflytop.sgs.common.enums.CraftsTransferTypeCode;
import com.iflytop.sgs.common.enums.DeviceSensorCode;
import com.iflytop.sgs.common.enums.HeatModuleCode;
import com.iflytop.sgs.common.enums.data.DevicePositionCode;
@ -55,40 +56,54 @@ public class MoveToFeedAreaCommand extends BaseCommandHandler {
Double transferModuleXPickTrayMoveDistance = devicePositionService.getPosition(DevicePositionCode.transferModuleXPickTrayMoveDistance).getDistance();//获取转运模块X轴拿取托盘进出卡槽移动距离
Point3D feedAreaTrayPoint3D = devicePositionService.getPosition(DevicePositionCode.feedAreaTrayPoint).getPoint3D();//获取上料区托盘夹爪位置点
Point3D liquidAreaTrayPoint3D = devicePositionService.getPosition(DevicePositionCode.liquidAreaTrayPoint).getPoint3D();//获取加液区托盘夹爪位置点
deviceStateService.getCommandMutexState().get().setTransferCommandExecuting(true);
return runAsync(() -> {
try {
boolean feedTrayExist = deviceSensorService.getSensorStatus(DeviceSensorCode.LIQUID_TRAY_EXIST);//获取上料区位托盘状态
Assert.isTrue(!feedTrayExist, () -> new AppException(ResultCode.FEED_AREA_EXIST_TRAY));//上料区存在托盘
boolean moduleIdle = deviceStateService.getDeviceState().getTransferModule().isIdle();
if (!moduleIdle) {
throw new AppException(ResultCode.CMD_BUSY);//设备忙
}
transferModuleService.requestTransferModule(CraftsTransferTypeCode.move_by_manual);//申请使用转运模块
deviceStateService.getCommandMutexState().get().setTransferCommandExecuting(true);
solutionModuleService.solutionMotorMoveZero(cmdDTO.getCommandId(), cmdDTO.getCommand());//加液机械臂上升
if (targetHeatModuleCode == null) {
transferModuleService.transferMove(cmdDTO.getCommandId(), cmdDTO.getCommand(), liquidAreaTrayPoint3D);//移动至加液位置
boolean clawTrayExist = deviceSensorService.getSensorStatus(DeviceSensorCode.CLAW_TRAY_EXIST);//获取夹爪位托盘状态
Assert.isTrue(clawTrayExist, () -> new AppException(ResultCode.OPERATION_NOT_ALLOWED));//夹爪托盘必须存在
//deviceStateService.getDeviceState().getTrayByHeatModuleCode(targetHeatModuleCode).setInSolutionPositon(false);//设定托盘不在加液位中
transferModuleService.transferXMove(cmdDTO.getCommandId(), cmdDTO.getCommand(), feedAreaTrayPoint3D.getX());//将X轴移动至上料区位置点
feedTrayExist = deviceSensorService.getSensorStatus(DeviceSensorCode.LIQUID_TRAY_EXIST);//获取上料区位托盘状态
Assert.isTrue(!feedTrayExist, () -> new AppException(ResultCode.FEED_AREA_EXIST_TRAY));//上料区存在托盘
transferModuleService.transferZMove(cmdDTO.getCommandId(), cmdDTO.getCommand(), feedAreaTrayPoint3D.getZ());//Z轴下降至夹取点使托盘落入上料区
transferModuleService.transferXMoveBy(cmdDTO.getCommandId(), cmdDTO.getCommand(), transferModuleXPickTrayMoveDistance);//X轴移出卡槽
transferModuleService.transferZMoveZero(cmdDTO.getCommandId(), cmdDTO.getCommand());//Z轴抬升至最高
deviceStateService.getDeviceState().getSolutionModule().setFeedAreaTrayStatus(true);//设定上料区托盘状态
} else {
boolean heatTrayExist = deviceSensorService.getTrayStateByHeatModuleCode(targetHeatModuleCode);//获取传感器状态
Assert.isTrue(heatTrayExist, () -> new AppException(ResultCode.TARGET_HEAT_MODULE_NO_TRAY));//加热区无托盘
Point3D targetHeatModuleTrayClawPoint3D = heatModuleService.getHeatModuleTrayClawPoint3D(targetHeatModuleCode);//获取目标加热模块托盘夹取点
Point3D targetHeatModuleTrayClawPoint3D = heatModuleService.getHeatModuleTrayClawPoint3D(targetHeatModuleCode);//获取目标加热模块托盘夹取点
transferModuleService.transferXMove(cmdDTO.getCommandId(), cmdDTO.getCommand(), targetHeatModuleTrayClawPoint3D.getX() + transferModuleXPickTrayMoveDistance);//将X轴移动至目标加热模块托盘夹取点 + 进出卡槽移动距离
heatTrayExist = deviceSensorService.getTrayStateByHeatModuleCode(targetHeatModuleCode);//获取传感器状态
Assert.isTrue(heatTrayExist, () -> new AppException(ResultCode.TARGET_HEAT_MODULE_NO_TRAY));//加热区无托盘
transferModuleService.transferZMove(cmdDTO.getCommandId(), cmdDTO.getCommand(), targetHeatModuleTrayClawPoint3D.getZ());//Z轴下降至夹取点使托盘落入石墨加热盘
transferModuleService.transferXMoveBy(cmdDTO.getCommandId(), cmdDTO.getCommand(), -transferModuleXPickTrayMoveDistance);//X轴进入卡槽
deviceStateService.getDeviceState().getTransferModule().setTrayStatus(true);//设定托盘在机械臂上
transferModuleService.transferZMoveZero(cmdDTO.getCommandId(), cmdDTO.getCommand());//Z轴抬升至最高
transferModuleService.transferXMove(cmdDTO.getCommandId(), cmdDTO.getCommand(), feedAreaTrayPoint3D.getX());//将X轴移动至上料区位置点
feedTrayExist = deviceSensorService.getSensorStatus(DeviceSensorCode.LIQUID_TRAY_EXIST);//获取上料区位托盘状态
Assert.isTrue(!feedTrayExist, () -> new AppException(ResultCode.FEED_AREA_EXIST_TRAY));//上料区存在托盘
transferModuleService.transferZMove(cmdDTO.getCommandId(), cmdDTO.getCommand(), feedAreaTrayPoint3D.getZ());//Z轴下降至夹取点使托盘落入上料区
transferModuleService.transferXMoveBy(cmdDTO.getCommandId(), cmdDTO.getCommand(), transferModuleXPickTrayMoveDistance);//X轴移出卡槽
transferModuleService.transferZMoveZero(cmdDTO.getCommandId(), cmdDTO.getCommand());//Z轴抬升至最高
deviceStateService.getDeviceState().getTransferModule().setTrayStatus(false);//设定托盘夹爪为FALSE
deviceStateService.getDeviceState().getHeatModuleByCode(targetHeatModuleCode).setTrayStatus(false);//设定目标加热模块托盘状态
deviceStateService.getDeviceState().getSolutionModule().setFeedAreaTrayStatus(true);//设定上料区托盘状态
}
deviceStateService.getDeviceState().getSolutionModule().setFeedAreaTrayStatus(true);//设定上料区托盘状态
}finally {
} finally {
deviceStateService.getCommandMutexState().get().setTransferCommandExecuting(false);
transferModuleService.releaseTransferModule();//释放转运模组
}
});
});
}
}

13
src/main/java/com/iflytop/sgs/app/cmd/control/MoveToHeatAreaCommand.java

@ -11,6 +11,7 @@ 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;
import com.iflytop.sgs.common.enums.CraftsTransferTypeCode;
import com.iflytop.sgs.common.enums.DeviceSensorCode;
import com.iflytop.sgs.common.enums.HeatModuleCode;
import com.iflytop.sgs.common.enums.data.DevicePositionCode;
@ -54,6 +55,13 @@ public class MoveToHeatAreaCommand extends BaseCommandHandler {
deviceStateService.getCommandMutexState().get().setTransferCommandExecuting(true);
return runAsync(() -> {
try {
boolean heatTrayExist = deviceSensorService.getTrayStateByHeatModuleCode(targetHeatModuleCode);//获取传感器状态
Assert.isTrue(!heatTrayExist, () -> new AppException(ResultCode.TARGET_HEAT_MODULE_OCCUPIED));//加热区存在托盘
boolean moduleIdle = deviceStateService.getDeviceState().getTransferModule().isIdle();
if (!moduleIdle) {
throw new AppException(ResultCode.CMD_BUSY);//设备忙
}
transferModuleService.requestTransferModule(CraftsTransferTypeCode.move_by_manual);//申请使用转运模块
solutionModuleService.solutionMotorMoveZero(cmdDTO.getCommandId(), cmdDTO.getCommand());//加液机械臂上升
transferModuleService.transferMove(cmdDTO.getCommandId(), cmdDTO.getCommand(), liquidAreaTrayPoint3D);//移动至加液位置
boolean clawTrayExist = deviceSensorService.getSensorStatus(DeviceSensorCode.CLAW_TRAY_EXIST);//获取传感器状态
@ -61,17 +69,22 @@ public class MoveToHeatAreaCommand extends BaseCommandHandler {
boolean feedTrayExist = deviceSensorService.getSensorStatus(DeviceSensorCode.LIQUID_TRAY_EXIST);//获取上料区传感器状态
Assert.isTrue(feedTrayExist, () -> new AppException(ResultCode.FEED_AREA_NO_TRAY));//上料区必须存在托盘
transferModuleService.transferXMove(cmdDTO.getCommandId(), cmdDTO.getCommand(), feedAreaTrayPoint3D.getX() + transferModuleXPickTrayMoveDistance);//将X轴移动至上料区托盘夹取点 + 进出卡槽移动距离
feedTrayExist = deviceSensorService.getSensorStatus(DeviceSensorCode.LIQUID_TRAY_EXIST);//获取上料区传感器状态
Assert.isTrue(feedTrayExist, () -> new AppException(ResultCode.FEED_AREA_NO_TRAY));//上料区必须存在托盘
transferModuleService.transferZMove(cmdDTO.getCommandId(), cmdDTO.getCommand(), feedAreaTrayPoint3D.getZ());//Z轴下降至夹取点使托盘落入石墨加热盘
transferModuleService.transferXMoveBy(cmdDTO.getCommandId(), cmdDTO.getCommand(), -transferModuleXPickTrayMoveDistance);//X轴进入卡槽
transferModuleService.transferZMoveZero(cmdDTO.getCommandId(), cmdDTO.getCommand());//Z轴抬升至最高
}
transferModuleService.transferXMove(cmdDTO.getCommandId(), cmdDTO.getCommand(), targetHeatModuleTrayClawPoint3D.getX());//将X轴移动至目标加热模块托盘夹取点
heatTrayExist = deviceSensorService.getTrayStateByHeatModuleCode(targetHeatModuleCode);//获取传感器状态
Assert.isTrue(!heatTrayExist, () -> new AppException(ResultCode.TARGET_HEAT_MODULE_OCCUPIED));//加热区存在托盘
transferModuleService.transferZMove(cmdDTO.getCommandId(), cmdDTO.getCommand(), targetHeatModuleTrayClawPoint3D.getZ());//Z轴下降至夹取点使托盘落入石墨加热盘
transferModuleService.transferXMoveBy(cmdDTO.getCommandId(), cmdDTO.getCommand(), transferModuleXPickTrayMoveDistance);//X轴移出卡槽
transferModuleService.transferZMoveZero(cmdDTO.getCommandId(), cmdDTO.getCommand());//Z轴抬升至最高
deviceStateService.getDeviceState().getHeatModuleByCode(targetHeatModuleCode).setTrayStatus(true);//设置目标加热区有托盘
} finally {
deviceStateService.getCommandMutexState().get().setTransferCommandExecuting(false);
transferModuleService.releaseTransferModule();//释放转运模组
}
});
}

13
src/main/java/com/iflytop/sgs/app/cmd/control/MoveToLiquidAreaCommand.java

@ -11,6 +11,7 @@ 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;
import com.iflytop.sgs.common.enums.CraftsTransferTypeCode;
import com.iflytop.sgs.common.enums.DeviceSensorCode;
import com.iflytop.sgs.common.enums.HeatModuleCode;
import com.iflytop.sgs.common.enums.data.DevicePositionCode;
@ -55,9 +56,14 @@ public class MoveToLiquidAreaCommand extends BaseCommandHandler {
Point3D feedAreaTrayPoint3D = devicePositionService.getPosition(DevicePositionCode.feedAreaTrayPoint).getPoint3D();//获取上料区托盘夹爪位置点
Point3D liquidAreaTrayPoint3D = devicePositionService.getPosition(DevicePositionCode.liquidAreaTrayPoint).getPoint3D();//获取加液时托盘位置点
Assert.isTrue(deviceStateService.getDeviceState().getSolutionModule().isIdle(), () -> new AppException(ResultCode.SOLUTION_MODULE_IS_BUSY));//判断加液模块状态
deviceStateService.getCommandMutexState().get().setTransferCommandExecuting(true);
return runAsync(() -> {
try {
boolean moduleIdle = deviceStateService.getDeviceState().getTransferModule().isIdle();
if (!moduleIdle) {
throw new AppException(ResultCode.CMD_BUSY);//设备忙
}
transferModuleService.requestTransferModule(CraftsTransferTypeCode.move_by_manual);//申请使用转运模块
deviceStateService.getCommandMutexState().get().setTransferCommandExecuting(true);
solutionModuleService.solutionMotorMoveZero(cmdDTO.getCommandId(), cmdDTO.getCommand());//加液机械臂上升
transferModuleService.transferMove(cmdDTO.getCommandId(), cmdDTO.getCommand(), liquidAreaTrayPoint3D);//移动至加液位置
boolean clawTrayExist = deviceSensorService.getSensorStatus(DeviceSensorCode.CLAW_TRAY_EXIST);//获取传感器状态
@ -67,6 +73,8 @@ public class MoveToLiquidAreaCommand extends BaseCommandHandler {
Assert.isTrue(feedTrayExist, () -> new AppException(ResultCode.FEED_AREA_NO_TRAY));//上料区必须存在托盘
transferModuleService.transferXMove(cmdDTO.getCommandId(), cmdDTO.getCommand(), feedAreaTrayPoint3D.getX() + transferModuleXPickTrayMoveDistance);//将X轴移动至上料区托盘夹取点 + 进出卡槽移动距离
transferModuleService.transferZMove(cmdDTO.getCommandId(), cmdDTO.getCommand(), feedAreaTrayPoint3D.getZ());//Z轴下降至夹取点使托盘落入石墨加热盘
feedTrayExist = deviceSensorService.getSensorStatus(DeviceSensorCode.LIQUID_TRAY_EXIST);//获取传感器状态
Assert.isTrue(feedTrayExist, () -> new AppException(ResultCode.FEED_AREA_NO_TRAY));//上料区必须存在托盘
transferModuleService.transferXMoveBy(cmdDTO.getCommandId(), cmdDTO.getCommand(), -transferModuleXPickTrayMoveDistance);//X轴进入卡槽
transferModuleService.transferZMoveZero(cmdDTO.getCommandId(), cmdDTO.getCommand());//Z轴抬升至最高
deviceStateService.getDeviceState().getSolutionModule().setFeedAreaTrayStatus(false);//设定上料区托盘状态
@ -75,6 +83,8 @@ public class MoveToLiquidAreaCommand extends BaseCommandHandler {
Assert.isTrue(headTrayExist, () -> new AppException(ResultCode.TARGET_HEAT_MODULE_NO_TRAY));//加热区无托盘
Point3D targetHeatModuleTrayClawPoint3D = heatModuleService.getHeatModuleTrayClawPoint3D(targetHeatModuleCode);//获取目标加热模块托盘夹取点
transferModuleService.transferXMove(cmdDTO.getCommandId(), cmdDTO.getCommand(), targetHeatModuleTrayClawPoint3D.getX() + transferModuleXPickTrayMoveDistance);//将X轴移动至目标加热模块托盘夹取点 + 进出卡槽移动距离
headTrayExist = deviceSensorService.getTrayStateByHeatModuleCode(targetHeatModuleCode);//获取传感器状态
Assert.isTrue(headTrayExist, () -> new AppException(ResultCode.TARGET_HEAT_MODULE_NO_TRAY));//加热区无托盘
transferModuleService.transferZMove(cmdDTO.getCommandId(), cmdDTO.getCommand(), targetHeatModuleTrayClawPoint3D.getZ());//Z轴下降至夹取点使托盘落入石墨加热盘
transferModuleService.transferXMoveBy(cmdDTO.getCommandId(), cmdDTO.getCommand(), -transferModuleXPickTrayMoveDistance);//X轴进入卡槽
transferModuleService.transferZMoveZero(cmdDTO.getCommandId(), cmdDTO.getCommand());//Z轴抬升至最高
@ -86,6 +96,7 @@ public class MoveToLiquidAreaCommand extends BaseCommandHandler {
}
}finally {
deviceStateService.getCommandMutexState().get().setTransferCommandExecuting(false);
transferModuleService.releaseTransferModule();//释放转运模组
}
});
}

7
src/main/java/com/iflytop/sgs/app/cmd/control/OutTrayCommand.java

@ -6,7 +6,6 @@ import com.iflytop.sgs.app.model.bo.Point3D;
import com.iflytop.sgs.app.model.bo.status.device.TrayState;
import com.iflytop.sgs.app.model.dto.CmdDTO;
import com.iflytop.sgs.app.service.api.DevicePositionService;
import com.iflytop.sgs.app.service.device.DeviceLightSoundService;
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;
@ -16,17 +15,13 @@ import com.iflytop.sgs.common.annotation.CommandMapping;
import com.iflytop.sgs.common.enums.CraftsTransferTypeCode;
import com.iflytop.sgs.common.enums.DeviceSensorCode;
import com.iflytop.sgs.common.enums.HeatModuleCode;
import com.iflytop.sgs.common.enums.cmd.CmdBeepMode;
import com.iflytop.sgs.common.enums.data.DevicePositionCode;
import com.iflytop.sgs.common.exception.AppException;
import com.iflytop.sgs.common.result.ResultCode;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.concurrent.CompletableFuture;
@ -83,7 +78,7 @@ public class OutTrayCommand extends BaseCommandHandler {
List<TrayState> trayList = deviceStateService.getDeviceState().getTrays();
for (TrayState trayState : trayList) {
log.info("点击移出托盘按钮{}", trayState.getHeatModuleCode().name());
}//todo 测试是否移除成功
}
trayList.removeIf((tray) -> tray.getHeatModuleCode() != null && tray.getHeatModuleCode().equals(targetHeatModuleCode));
} finally {
transferModuleService.releaseTransferModule();//释放转运模组

13
src/main/java/com/iflytop/sgs/app/cmd/control/XOriginCommand.java

@ -6,10 +6,12 @@ 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.app.service.device.DeviceStateService;
import com.iflytop.sgs.app.service.device.module.TransferModuleService;
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.CraftsTransferTypeCode;
import com.iflytop.sgs.common.enums.DevicePartId;
import com.iflytop.sgs.common.exception.AppException;
import com.iflytop.sgs.common.result.ResultCode;
@ -31,23 +33,30 @@ public class XOriginCommand extends BaseCommandHandler {
private final DeviceCommandService deviceCommandService;
private final DeviceSensorService deviceSensorService;
private final DeviceStateService deviceStateService;
private final TransferModuleService transferModuleService;
@Override
public CompletableFuture<Void> handle(CmdDTO cmdDTO) {
if (deviceStateService.getCommandMutexState().get().isGantryXOriginCommandExecuting()) {
throw new AppException(ResultCode.CMD_BUSY);
}
deviceStateService.getCommandMutexState().get().setGantryXOriginCommandExecuting(true);
return runAsync(() -> {
try {
boolean moduleIdle = deviceStateService.getDeviceState().getTransferModule().isIdle();
if (!moduleIdle) {
throw new AppException(ResultCode.CMD_BUSY);//设备忙
}
transferModuleService.requestTransferModule(CraftsTransferTypeCode.move_by_manual);//申请使用转运模块
deviceStateService.getCommandMutexState().get().setGantryXOriginCommandExecuting(true);
//确保z轴的高度
Double zPosition = deviceSensorService.getMotorPosition(DevicePartId.ZM);
Assert.isTrue(zPosition <50, () -> new AppException(ResultCode.SOLUTION_MODULE_NO_TRAY));
Assert.isTrue(zPosition <50, () -> new AppException(ResultCode.Z_HEIGHT_NO_ALLOWED));
DeviceCommandBundle deviceCommand = DeviceCommandGenerator.transferXOrigin();
CommandFuture deviceCommandFuture = deviceCommandService.sendCommand(cmdDTO.getCommandId(), cmdDTO.getCommand(), deviceCommand);
CommandUtil.wait(deviceCommandFuture);
}finally {
deviceStateService.getCommandMutexState().get().setGantryXOriginCommandExecuting(false);
transferModuleService.releaseTransferModule();//释放转运模组
}
});
}

11
src/main/java/com/iflytop/sgs/app/cmd/control/ZOriginCommand.java

@ -4,10 +4,12 @@ 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.DeviceStateService;
import com.iflytop.sgs.app.service.device.module.TransferModuleService;
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.CraftsTransferTypeCode;
import com.iflytop.sgs.common.exception.AppException;
import com.iflytop.sgs.common.result.ResultCode;
import com.iflytop.sgs.common.utils.CommandUtil;
@ -27,20 +29,27 @@ import java.util.concurrent.CompletableFuture;
public class ZOriginCommand extends BaseCommandHandler {
private final DeviceCommandService deviceCommandService;
private final DeviceStateService deviceStateService;
private final TransferModuleService transferModuleService;
@Override
public CompletableFuture<Void> handle(CmdDTO cmdDTO) {
if (deviceStateService.getCommandMutexState().get().isGantryXOriginCommandExecuting()) {
throw new AppException(ResultCode.CMD_BUSY);
}
deviceStateService.getCommandMutexState().get().setGantryZOriginCommandExecuting(true);
return runAsync(() -> {
try {
boolean moduleIdle = deviceStateService.getDeviceState().getTransferModule().isIdle();
if (!moduleIdle) {
throw new AppException(ResultCode.CMD_BUSY);//设备忙
}
transferModuleService.requestTransferModule(CraftsTransferTypeCode.move_by_manual);//申请使用转运模块
deviceStateService.getCommandMutexState().get().setGantryZOriginCommandExecuting(true);
DeviceCommandBundle deviceCommand = DeviceCommandGenerator.transferZOrigin();
CommandFuture deviceCommandFuture = deviceCommandService.sendCommand(cmdDTO.getCommandId(), cmdDTO.getCommand(), deviceCommand);
CommandUtil.wait(deviceCommandFuture);
} finally {
deviceStateService.getCommandMutexState().get().setGantryZOriginCommandExecuting(false);
transferModuleService.releaseTransferModule();//释放转运模组
}
});
}

8
src/main/java/com/iflytop/sgs/app/cmd/debug/DebugMotorXOriginCommand.java

@ -1,12 +1,17 @@
package com.iflytop.sgs.app.cmd.debug;
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.CommandDebugMapping;
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,13 @@ import java.util.concurrent.CompletableFuture;
@CommandDebugMapping("x_origin")
public class DebugMotorXOriginCommand extends BaseCommandHandler {
private final DeviceCommandService deviceCommandService;
private final DeviceSensorService deviceSensorService;
@Override
public CompletableFuture<Void> handle(CmdDTO cmdDTO) {
return runAsync(() -> {
Double zPosition = deviceSensorService.getMotorPosition(DevicePartId.ZM);
Assert.isTrue(zPosition <50, () -> new AppException(ResultCode.Z_HEIGHT_NO_ALLOWED));
DeviceCommandBundle deviceCommand = DeviceCommandGenerator.transferXOrigin();
CommandFuture deviceCommandFuture = deviceCommandService.sendCommand(cmdDTO.getCommandId(), cmdDTO.getCommand(), deviceCommand);
CommandUtil.wait(deviceCommandFuture);

1
src/main/java/com/iflytop/sgs/app/cmd/selftest/LiquidPreFillCommand.java

@ -1,7 +1,6 @@
package com.iflytop.sgs.app.cmd.selftest;
import com.iflytop.sgs.app.core.BaseCommandHandler;
import com.iflytop.sgs.app.core.SelfMoveTestGenerator;
import com.iflytop.sgs.app.model.bo.Point3D;
import com.iflytop.sgs.app.model.dto.CmdDTO;
import com.iflytop.sgs.app.service.api.DevicePositionService;

9
src/main/java/com/iflytop/sgs/app/cmd/selftest/MoveTestCommand.java

@ -4,9 +4,7 @@ import com.iflytop.sgs.app.core.BaseCommandHandler;
import com.iflytop.sgs.app.core.SelfMoveTestGenerator;
import com.iflytop.sgs.app.model.bo.Point3D;
import com.iflytop.sgs.app.model.dto.CmdDTO;
import com.iflytop.sgs.app.model.entity.SystemConfig;
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;
@ -14,19 +12,16 @@ import com.iflytop.sgs.app.service.device.module.SolutionModuleService;
import com.iflytop.sgs.app.service.device.module.TransferModuleService;
import com.iflytop.sgs.app.ws.server.WebSocketSender;
import com.iflytop.sgs.common.annotation.CommandMapping;
import com.iflytop.sgs.common.enums.*;
import com.iflytop.sgs.common.enums.cmd.CmdColor;
import com.iflytop.sgs.common.enums.DeviceSensorCode;
import com.iflytop.sgs.common.enums.HeatModuleCode;
import com.iflytop.sgs.common.enums.data.DevicePositionCode;
import com.iflytop.sgs.common.exception.AppException;
import com.iflytop.sgs.common.result.ResultCode;
import com.iflytop.sgs.hardware.exception.HardwareException;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.concurrent.CompletableFuture;
/**

1
src/main/java/com/iflytop/sgs/app/cmd/selftest/TrayOutCommand.java

@ -7,7 +7,6 @@ import com.iflytop.sgs.app.model.dto.CmdDTO;
import com.iflytop.sgs.app.service.api.DevicePositionService;
import com.iflytop.sgs.app.service.device.DeviceSensorService;
import com.iflytop.sgs.app.service.device.DeviceStateService;
import com.iflytop.sgs.app.service.device.module.DoorModuleService;
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;

3
src/main/java/com/iflytop/sgs/app/controller/CraftsController.java

@ -10,7 +10,6 @@ import com.iflytop.sgs.app.model.dto.StopCraftsDTO;
import com.iflytop.sgs.app.model.entity.CraftMonitor;
import com.iflytop.sgs.app.model.entity.Crafts;
import com.iflytop.sgs.app.model.vo.CraftMonitorVO;
import com.iflytop.sgs.app.model.vo.OresCraftsListVO;
import com.iflytop.sgs.app.model.vo.SetCraftsVO;
import com.iflytop.sgs.app.service.api.CraftsService;
import com.iflytop.sgs.app.service.device.DeviceStateService;
@ -22,8 +21,6 @@ import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.validation.Valid;
import jakarta.validation.constraints.Min;
import jakarta.validation.constraints.NotNull;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;

1
src/main/java/com/iflytop/sgs/app/model/entity/Crafts.java

@ -5,7 +5,6 @@ import com.iflytop.sgs.common.base.BaseEntity;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Positive;
import lombok.Data;
import lombok.EqualsAndHashCode;

1
src/main/java/com/iflytop/sgs/app/service/api/CraftMonitorService.java

@ -1,7 +1,6 @@
package com.iflytop.sgs.app.service.api;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.iflytop.sgs.app.mapper.CraftMonitorMapper;

46
src/main/java/com/iflytop/sgs/app/service/crafts/CraftsStepService.java

@ -146,6 +146,8 @@ public class CraftsStepService {
log.info("工艺{},将X轴移动至上料区托盘夹取点 + 进出卡槽移动距离", heatModuleCode);
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轴进入卡槽
@ -159,16 +161,16 @@ public class CraftsStepService {
deviceStateService.getDeviceState().getSolutionModule().setPumping(true);//正在加液
deviceStateService.getDeviceState().getTrayByHeatModuleCode(heatModuleCode).setInSolutionPositon(true);//托盘状态
boolean clawTrayExist = deviceSensorService.getSensorStatus(DeviceSensorCode.CLAW_TRAY_EXIST);//获取传感器状态
Assert.isTrue(clawTrayExist, () -> new AppException(ResultCode.TARGET_HEAT_MODULE_NO_TRAY));//加液区无托盘
Assert.isTrue(clawTrayExist, () -> new AppException(ResultCode.CRAFT_SOLUTION_NO_TRAY));//加液区无托盘
/*移动至加液区结束*/
/*预充开始*/
feedTrayExist = deviceSensorService.getSensorStatus(DeviceSensorCode.LIQUID_TRAY_EXIST);//获取传感器状态
Assert.isTrue(!feedTrayExist, () -> new AppException(ResultCode.FEED_AREA_EXIST_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);//电磁阀对应通道打开
@ -224,12 +226,14 @@ public class CraftsStepService {
/*移动至加热区*/
boolean heatModuleTrayExist = deviceSensorService.getTrayStateByHeatModuleCode(heatModuleCode);//目标加热模块有无托盘
Assert.isTrue(!heatModuleTrayExist, () -> new AppException(ResultCode.TARGET_HEAT_MODULE_OCCUPIED));//提示被占用
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);
@ -303,13 +307,15 @@ public class CraftsStepService {
/*移动至加液区*/
boolean heatTrayExist = deviceSensorService.getTrayStateByHeatModuleCode(heatModuleCode);//获取加热区试管架
Assert.isTrue(heatTrayExist, () -> new AppException(ResultCode.TARGET_HEAT_MODULE_NO_TRAY));//目标加热区无托盘
Assert.isTrue(heatTrayExist, () -> new AppException(ResultCode.CRAFT_HEAT_NO_TRAY));//目标加热区无托盘
log.info("工艺{},加热区存在托盘", heatModuleCode);
log.info("工艺{},机械臂移动至加热区", heatModuleCode);
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轴进入卡槽
@ -363,6 +369,8 @@ public class CraftsStepService {
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);//电磁阀对应通道打开
@ -420,13 +428,15 @@ public class CraftsStepService {
/*移动至加热区*/
log.info("工艺{},移动至加热区", heatModuleCode);
boolean heatModuleTrayExist = deviceSensorService.getTrayStateByHeatModuleCode(heatModuleCode);//目标加热模块有无托盘
Assert.isTrue(!heatModuleTrayExist, () -> new AppException(ResultCode.TARGET_HEAT_MODULE_OCCUPIED));//提示被占用
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轴移出卡槽
@ -511,7 +521,7 @@ public class CraftsStepService {
/*获取参数开始*/
deviceStateService.getDeviceState().getSolutionModule().setPumping(true);
Double volume = params.getDouble("volume") == null ? 2.0 : params.getDouble("volume");//加水量
Double volume = params.getDouble("volume");//加水量
Integer cycle = params.getInt("cycle");//次数
Double height = params.getDouble("height");//下降进入试管的高度
if (height > 55) {
@ -546,6 +556,8 @@ public class CraftsStepService {
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轴进入卡槽
@ -600,6 +612,8 @@ public class CraftsStepService {
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);//加液机械臂下降至至预充点位
solutionModuleService.liquidPumpMove(-drainDistance);//排空
solutionModuleService.liquidValveSwitch(SolutionCode.water);//电磁阀对应通道打开
@ -654,6 +668,8 @@ 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轴移出卡槽
@ -730,6 +746,9 @@ public class CraftsStepService {
craftMonitor.setDeviceState(JSONUtil.toJsonStr(deviceStateService.getDeviceState()));
craftMonitor.setCurrentStepResult(CraftsMonitorResultCode.heat_time.getDescription() + ":0");
craftMonitorService.saveMonitor(craftMonitor);
Point3D annealTrayClawPoint3D = heatModuleService.getHeatModuleTrayClawPoint3D(HeatModuleCode.heat_module_04);//获取退火区托盘夹取点
Point3D heatModuleTrayClawPoint3D = heatModuleService.getHeatModuleTrayClawPoint3D(heatModuleCode);//获取目标加热模块托盘夹取点
Double transferModuleXPickTrayMoveDistance = devicePositionService.getPosition(DevicePositionCode.transferModuleXPickTrayMoveDistance).getDistance();//获取转运模块X轴拿取托盘进出卡槽移动距离
Double temperature = params.getDouble("temperature");//退火温度
Integer time = params.getInt("time");//
boolean heatModuleTrayExist = deviceSensorService.getTrayStateByHeatModuleCode(heatModuleCode);
@ -737,9 +756,6 @@ public class CraftsStepService {
while (deviceSensorService.getTrayStateByHeatModuleCode(HeatModuleCode.heat_module_04)) {//判断退火区是否被占用
delay(1);//等待1秒
}
Point3D annealTrayClawPoint3D = heatModuleService.getHeatModuleTrayClawPoint3D(HeatModuleCode.heat_module_04);//获取退火区托盘夹取点
Point3D heatModuleTrayClawPoint3D = heatModuleService.getHeatModuleTrayClawPoint3D(heatModuleCode);//获取目标加热模块托盘夹取点
Double transferModuleXPickTrayMoveDistance = devicePositionService.getPosition(DevicePositionCode.transferModuleXPickTrayMoveDistance).getDistance();//获取转运模块X轴拿取托盘进出卡槽移动距离
log.info("工艺{},机械臂移动至加热区", heatModuleCode);
webSocketService.pushCraftsDebug(CraftsDebugGenerator.generateJson(heatModuleCode.toString(), "机械臂移动至加热区", heatModuleCode));
log.info("工艺{},申请使用转运模块", heatModuleCode);
@ -749,6 +765,8 @@ public class CraftsStepService {
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轴移出入槽
@ -759,6 +777,8 @@ public class CraftsStepService {
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轴移出卡槽
@ -808,8 +828,10 @@ public class CraftsStepService {
log.info("工艺{},Z轴抬升至最高", heatModuleCode);
transferModuleService.transferZMoveZero();//Z轴抬升至最高
log.info("工艺{},将X轴移动至目标加热模块托盘夹取点", heatModuleCode);
transferModuleService.transferXMove(annealTrayClawPoint3D.getX() + transferModuleXPickTrayMoveDistance);//将X轴移动至目标加热模块托盘夹取点
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移入卡槽
@ -819,6 +841,8 @@ 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轴移出卡槽

10
src/main/java/com/iflytop/sgs/app/service/device/DeviceStopService.java

@ -2,14 +2,17 @@ package com.iflytop.sgs.app.service.device;
import com.iflytop.sgs.common.cmd.DeviceCommandBundle;
import com.iflytop.sgs.common.cmd.DeviceCommandGenerator;
import com.iflytop.sgs.hardware.exception.HardwareException;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
@Slf4j
@Service
@RequiredArgsConstructor
public class DeviceStopService {
private final DeviceCommandService deviceCommandService;
private final DeviceLightSoundService deviceLightSoundService;
public void stopAll() {
@ -28,5 +31,12 @@ public class DeviceStopService {
//蠕动泵
DeviceCommandBundle liquidPumpStopDeviceCommandBundle = DeviceCommandGenerator.liquidPumpStop();
deviceCommandService.sendCommand(null, null, liquidPumpStopDeviceCommandBundle);
/*关闭蜂鸣器*/
try {
deviceLightSoundService.closeBeep();
} catch (HardwareException e) {
log.error("急停关闭蜂鸣器失败:{}", e.getMessage());
}
}
}

2
src/main/java/com/iflytop/sgs/app/service/device/module/HeatModuleService.java

@ -17,8 +17,6 @@ import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* 加热模块
*/

9
src/main/java/com/iflytop/sgs/app/service/device/module/TransferModuleService.java

@ -4,7 +4,6 @@ import com.iflytop.sgs.app.model.bo.Point3D;
import com.iflytop.sgs.app.service.api.SystemConfigService;
import com.iflytop.sgs.app.service.device.DeviceCommandService;
import com.iflytop.sgs.app.service.device.DeviceStateService;
import com.iflytop.sgs.app.ws.server.WebSocketSender;
import com.iflytop.sgs.common.cmd.CommandFuture;
import com.iflytop.sgs.common.cmd.DeviceCommandBundle;
import com.iflytop.sgs.common.cmd.DeviceCommandGenerator;
@ -17,8 +16,6 @@ import org.springframework.stereotype.Service;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
/**
* 转运模块
@ -48,6 +45,12 @@ public class TransferModuleService {
// 1. 先把自己加入对应类型的队列尾部
Thread current = Thread.currentThread();
switch (type) {
case move_by_manual:
boolean moduleIdle = deviceStateService.getDeviceState().getTransferModule().isIdle();
if(!moduleIdle){
throw new RuntimeException("转运模块当前正忙");
}
break;
case move_feed:
feedQueue.add(current);
break;

3
src/main/java/com/iflytop/sgs/app/ws/server/WebSocketServer.java

@ -1,13 +1,10 @@
package com.iflytop.sgs.app.ws.server;
import com.iflytop.sgs.app.model.bo.status.device.DeviceState;
import com.iflytop.sgs.app.service.device.DeviceStateService;
import com.iflytop.sgs.common.constant.WebSocketMessageType;
import jakarta.annotation.PostConstruct;
import jakarta.annotation.Resource;
import jakarta.websocket.*;
import jakarta.websocket.server.ServerEndpoint;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

3
src/main/java/com/iflytop/sgs/common/enums/CraftsTransferTypeCode.java

@ -11,7 +11,8 @@ public enum CraftsTransferTypeCode {
move_thin("移动至加液区加稀硝酸"),
move_anneal("移动至退火区"),
move_heat("移动至加热区"),
move_feed("移动至上料区"),;
move_feed("移动至上料区"),
move_by_manual("手动指令操作"),;
private String description;
private CraftsTransferTypeCode(String description) {

6
src/main/java/com/iflytop/sgs/common/result/ResultCode.java

@ -44,6 +44,8 @@ public enum ResultCode implements IResultCode, Serializable {
CRAFT_TARGET_HEAT_NO_TRAY("4007", "工艺 加热区无托盘"),
CRAFT_SOLUTION_NO_TRAY("4008", "工艺 加液区无托盘"),
HEAT_TEMPERATURE_NULL("4009", "请先配置该加热区温度"),
CRAFT_HEAT_EXIST_TRAY("4010", "工艺 加热区已经存在托盘"),
CRAFT_HEAT_NO_TRAY("4010", "工艺 加热区无存在托盘"),
//============================ 5xxx系统 & 第三方 ============================
SYSTEM_ERROR("5000", "系统内部错误"),
SERVICE_UNAVAILABLE("5001", "服务暂不可用"),
@ -72,7 +74,9 @@ public enum ResultCode implements IResultCode, Serializable {
NOT_ALLOWED_HEAT_MODULE("6035", "不允许选择的加热区"),
FEED_AREA_EXIST_TRAY("6036", "上料区存在托盘"),
FAN_START_FAIL("6037", "散热打开失败"),
HEAT_MODULE_TEMPERATURE_IS_HEIGHT("6038", "目标加热区温度过高");
HEAT_MODULE_TEMPERATURE_IS_HEIGHT("6038", "目标加热区温度过高"),
Z_HEIGHT_NO_ALLOWED("6039", "z轴高度不允许"),
;
/** 状态码 */
private final String code;
/** 提示信息 */

2
src/main/java/com/iflytop/sgs/hardware/service/GDDeviceStatusServiceImpl.java

@ -1,6 +1,5 @@
package com.iflytop.sgs.hardware.service;
import cn.hutool.core.util.StrUtil;
import com.iflytop.sgs.common.enums.cmd.CmdDevice;
import com.iflytop.sgs.common.service.GDDeviceStatusService;
import com.iflytop.sgs.hardware.drivers.DIDriver.InputDetectDriver;
@ -10,7 +9,6 @@ import com.iflytop.sgs.hardware.drivers.LeiSaiServoDriver;
import com.iflytop.sgs.hardware.drivers.LiquidValveDriver;
import com.iflytop.sgs.hardware.drivers.StepMotorDriver.StepMotorCtrlDriver;
import com.iflytop.sgs.hardware.exception.HardwareException;
import com.iflytop.sgs.hardware.type.CmdId;
import com.iflytop.sgs.hardware.type.IO.InputIOMId;
import com.iflytop.sgs.hardware.type.IO.OutputIOMId;
import com.iflytop.sgs.hardware.type.Servo.LeisaiServoMId;

Loading…
Cancel
Save