|
|
@ -13,16 +13,20 @@ 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.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; |
|
|
|
|
|
|
@ -42,28 +46,29 @@ public class OutTrayCommand extends BaseCommandHandler { |
|
|
|
private final DeviceSensorService deviceSensorService; |
|
|
|
private final SolutionModuleService solutionModuleService; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
public CompletableFuture<Void> handle(CmdDTO cmdDTO) throws Exception { |
|
|
|
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));//上料区不能存在托盘 |
|
|
|
String targetHeatModuleCodeStr = cmdDTO.getStringParam("heatModuleCode"); |
|
|
|
HeatModuleCode targetHeatModuleCode = HeatModuleCode.valueOf(targetHeatModuleCodeStr);//目标加热模块 |
|
|
|
if (targetHeatModuleCode == HeatModuleCode.heat_module_04) { |
|
|
|
throw new AppException(ResultCode.NOT_ALLOWED_HEAT_MODULE); |
|
|
|
throw new AppException(ResultCode.NOT_ALLOWED_HEAT_MODULE);//不允许的加热模块 |
|
|
|
} |
|
|
|
boolean liquidTrayExist = deviceSensorService.getSensorStatus(DeviceSensorCode.LIQUID_TRAY_EXIST);//获取上料区托盘状态 |
|
|
|
Assert.isTrue(!liquidTrayExist, () -> new AppException(ResultCode.OPERATION_NOT_ALLOWED));//上料区不能存在托盘 |
|
|
|
Double transferModuleXPickTrayMoveDistance = devicePositionService.getPosition(DevicePositionCode.transferModuleXPickTrayMoveDistance).getDistance();//获取转运模块X轴拿取托盘进出卡槽移动距离 |
|
|
|
Point3D feedAreaTrayPoint3D = devicePositionService.getPosition(DevicePositionCode.feedAreaTrayPoint).getPoint3D();//获取上料区托盘夹爪位置点 |
|
|
|
Point3D targetHeatModuleTrayClawPoint3D = heatModuleService.getHeatModuleTrayClawPoint3D(targetHeatModuleCode);//获取目标加热模块托盘夹取点 |
|
|
|
deviceStateService.getCommandMutexState().get().setTransferCommandExecuting(true); |
|
|
|
return runAsync(() -> { |
|
|
|
try { |
|
|
|
transferModuleService.requestTransferModule(CraftsTransferTypeCode.move_feed);//申请使用转运模块 |
|
|
|
boolean liquidTrayExistAgain = deviceSensorService.getSensorStatus(DeviceSensorCode.LIQUID_TRAY_EXIST);//获取上料区托盘状态 |
|
|
|
Assert.isTrue(!liquidTrayExistAgain, () -> new AppException(ResultCode.OPERATION_NOT_ALLOWED));//上料区不能存在托盘 |
|
|
|
solutionModuleService.solutionMotorMoveZero(cmdDTO.getCommandId(), cmdDTO.getCommand());//加液机械臂上升 |
|
|
|
boolean heatTrayExist = deviceSensorService.getTrayStateByHeatModuleCode(targetHeatModuleCode);//获取传感器状态 |
|
|
|
Assert.isTrue(heatTrayExist, () -> new AppException(ResultCode.TARGET_HEAT_MODULE_NO_TRAY));//加热区无托盘 |
|
|
|
//deviceStateService.getDeviceState().getTrayByHeatModuleCode(targetHeatModuleCode).setUseArm(true);//使用机械臂标志 |
|
|
|
transferModuleService.transferXMove(cmdDTO.getCommandId(), cmdDTO.getCommand(), targetHeatModuleTrayClawPoint3D.getX() + transferModuleXPickTrayMoveDistance);//将X轴移动至目标加热模块托盘夹取点 + 进出卡槽移动距离 |
|
|
|
transferModuleService.transferZMove(cmdDTO.getCommandId(), cmdDTO.getCommand(), targetHeatModuleTrayClawPoint3D.getZ());//Z轴下降至夹取点,使托盘落入石墨加热盘 |
|
|
|
transferModuleService.transferXMoveBy(cmdDTO.getCommandId(), cmdDTO.getCommand(), -transferModuleXPickTrayMoveDistance);//X轴进入卡槽 |
|
|
@ -75,12 +80,13 @@ public class OutTrayCommand extends BaseCommandHandler { |
|
|
|
transferModuleService.transferZMoveZero(cmdDTO.getCommandId(), cmdDTO.getCommand());//Z轴抬升至最高 |
|
|
|
deviceStateService.getDeviceState().getTransferModule().setTrayStatus(false);//设定托盘夹爪为FALSE |
|
|
|
deviceStateService.getDeviceState().getHeatModuleByCode(targetHeatModuleCode).setTrayStatus(false);//设定目标加热模块托盘状态 |
|
|
|
//deviceStateService.getDeviceState().getSolutionModule().setFeedAreaTrayStatus(true);//设定上料区托盘状态 |
|
|
|
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 { |
|
|
|
deviceStateService.getCommandMutexState().get().setTransferCommandExecuting(false); |
|
|
|
// deviceStateService.getDeviceState().getTrayByHeatModuleCode(targetHeatModuleCode).setUseArm(false);//使用机械臂标志 |
|
|
|
transferModuleService.releaseTransferModule();//释放转运模组 |
|
|
|
} |
|
|
|
}); |
|
|
|
} |
|
|
|