|
|
@ -1,5 +1,7 @@ |
|
|
|
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.HeatModuleState; |
|
|
@ -12,6 +14,8 @@ 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.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; |
|
|
@ -33,36 +37,26 @@ public class AnnealStartCommand extends BaseCommandHandler { |
|
|
|
|
|
|
|
@Override |
|
|
|
public CompletableFuture<Void> handle(CmdDTO cmdDTO) { |
|
|
|
//TODO 判断退火加热模块传感器是否有托盘 |
|
|
|
String targetHeatModuleCodeStr = cmdDTO.getStringParam("heatModuleCode"); |
|
|
|
HeatModuleCode targetHeatModuleCode = HeatModuleCode.valueOf(targetHeatModuleCodeStr);//目标加热模块 |
|
|
|
HeatModuleCode annealHeatModuleCode = HeatModuleCode.heat_module_04;//退火模块 |
|
|
|
if(!annealHeatModuleCode.equals(targetHeatModuleCode)) {//目标加热模块不是退火模块 |
|
|
|
//TODO 判断目标加热模块传感器是否有托盘,如果没有托盘的话提示错误 |
|
|
|
JSONArray heatModuleCodeJsonArray = cmdDTO.getJSONArrayParam("heatModuleCode"); |
|
|
|
if (heatModuleCodeJsonArray.size() > 1 && !heatModuleCodeJsonArray.getStr(0).equals(HeatModuleCode.heat_module_04.name())) {//参数校验 设备问题参数固定位[heat_module_04] |
|
|
|
throw new AppException(ResultCode.PARAMETER_TYPE_MISMATCH); |
|
|
|
} |
|
|
|
|
|
|
|
Point3D targetHeatModuleTrayClawPoint3D = heatModuleService.getHeatModuleTrayClawPoint3D(targetHeatModuleCode);//获取目标加热模块托盘夹取点 |
|
|
|
Double transferModuleXPickTrayMoveDistance = devicePositionService.getPosition(DevicePositionCode.transferModuleXPickTrayMoveDistance).getDistance();//获取转运模块X轴拿取托盘进出卡槽移动距离 |
|
|
|
Double transferModuleZPickTrayDownPositon = devicePositionService.getPosition(DevicePositionCode.transferModuleZPickTrayDownPositon).getPositon();//获取转运模块Z轴拿取托盘时下降的高度位置 |
|
|
|
Point3D annealHeatModuleTrayClawPoint3D = heatModuleService.getHeatModuleTrayClawPoint3D(annealHeatModuleCode);//获取退火加热模块托盘夹取点 |
|
|
|
HeatModuleState heatModuleState = deviceStateService.getDeviceState().getHeatModuleByCode(annealHeatModuleCode);//获取设定的退火温度 |
|
|
|
double targetTemperature = heatModuleState.getAnnealTemperature(); |
|
|
|
heatModuleState.setTargetTemperature(targetTemperature);//将退火温度设定为目标温度 |
|
|
|
|
|
|
|
return runAsync(() -> { |
|
|
|
if(!annealHeatModuleCode.equals(targetHeatModuleCode)) {//目标加热模块不是退火模块 |
|
|
|
transferModuleService.transferXMove(cmdDTO.getCommandId(), cmdDTO.getCommand(), targetHeatModuleTrayClawPoint3D.getX() + transferModuleXPickTrayMoveDistance);//将X轴移动至夹取点 + 移动距离 |
|
|
|
transferModuleService.transferZMove(cmdDTO.getCommandId(), cmdDTO.getCommand(), transferModuleZPickTrayDownPositon);//将Z轴下降至托盘夹取点高度 |
|
|
|
transferModuleService.transferXMoveBy(cmdDTO.getCommandId(), cmdDTO.getCommand(), -transferModuleXPickTrayMoveDistance);//X轴进入卡槽 |
|
|
|
transferModuleService.transferZMoveZero(cmdDTO.getCommandId(), cmdDTO.getCommand());//Z轴抬升至最高 |
|
|
|
transferModuleService.transferXMove(cmdDTO.getCommandId(), cmdDTO.getCommand(), annealHeatModuleTrayClawPoint3D.getX());//将X轴移动至托盘夹取点 |
|
|
|
transferModuleService.transferZMove(cmdDTO.getCommandId(), cmdDTO.getCommand(), transferModuleZPickTrayDownPositon);//Z轴下降至夹取点,使托盘落入石墨加热盘 |
|
|
|
transferModuleService.transferXMoveBy(cmdDTO.getCommandId(), cmdDTO.getCommand(), transferModuleXPickTrayMoveDistance);//X轴移出卡槽 |
|
|
|
transferModuleService.transferZMoveZero(cmdDTO.getCommandId(), cmdDTO.getCommand());//Z轴抬升至最高 |
|
|
|
for (int i = 0; i < heatModuleCodeJsonArray.size(); i++) { |
|
|
|
String targetHeatModuleCodeStr = heatModuleCodeJsonArray.getStr(i); |
|
|
|
HeatModuleCode targetHeatModuleCode = HeatModuleCode.valueOf(targetHeatModuleCodeStr);//目标退火模块 |
|
|
|
Assert.isTrue(targetHeatModuleCode != null, () -> new AppException(ResultCode.PARAMETER_TYPE_MISMATCH));//参数检验 |
|
|
|
HeatModuleState heatModuleState=deviceStateService.getDeviceState().getHeatModuleByCode(targetHeatModuleCode);//获取加热模块状态 |
|
|
|
Assert.isTrue(heatModuleState.isTrayStatus(), () -> new AppException(ResultCode.TARGET_HEAT_MODULE_NO_TRAY));//检测是否有托盘 |
|
|
|
double targetTemperature = heatModuleState.getAnnealTemperature();//获取设定的退火温度 |
|
|
|
heatModuleState.setTargetTemperature(targetTemperature);//将退火温度设定为目标温度 |
|
|
|
heatModuleService.heatRodOpen(cmdDTO.getCommandId(), cmdDTO.getCommand(), targetHeatModuleCode, targetTemperature);//开启加热 |
|
|
|
deviceStateService.getDeviceState().getHeatModuleByCode(targetHeatModuleCode).setHeatingType(HeatingType.annealing);//状态修改为退火中 |
|
|
|
} |
|
|
|
heatModuleService.heatRodOpen(cmdDTO.getCommandId(), cmdDTO.getCommand(), annealHeatModuleCode, targetTemperature);//开启加热 |
|
|
|
deviceStateService.getDeviceState().getHeatModuleByCode(annealHeatModuleCode).setHeatingType(HeatingType.annealing);//状态修改为退火中 |
|
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|