Browse Source

fix:业务指令修改

master
王梦远 2 months ago
parent
commit
d6d9cd933a
  1. 12
      src/main/java/com/iflytop/sgs/app/cmd/control/AnnealStopCommand.java
  2. 1
      src/main/java/com/iflytop/sgs/app/cmd/control/DryStartCommand.java
  3. 1
      src/main/java/com/iflytop/sgs/app/cmd/control/DryStopCommand.java
  4. 1
      src/main/java/com/iflytop/sgs/app/cmd/control/HeatStartCommand.java
  5. 68
      src/main/java/com/iflytop/sgs/app/cmd/control/SolutionAddCommand.java
  6. 64
      src/main/java/com/iflytop/sgs/app/cmd/control/SolutionReduceCommand.java
  7. 1
      src/main/java/com/iflytop/sgs/app/model/bo/status/device/HeatModuleState.java
  8. 19
      src/main/java/com/iflytop/sgs/app/service/device/module/SolutionModuleService.java
  9. 4
      src/main/java/com/iflytop/sgs/common/enums/SystemConfigCode.java

12
src/main/java/com/iflytop/sgs/app/cmd/control/AnnealStopCommand.java

@ -1,12 +1,16 @@
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.status.device.HeatModuleState;
import com.iflytop.sgs.app.model.dto.CmdDTO;
import com.iflytop.sgs.app.service.device.DeviceStateService;
import com.iflytop.sgs.app.service.device.module.HeatModuleService;
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.exception.AppException;
import com.iflytop.sgs.common.result.ResultCode;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
@ -26,10 +30,12 @@ public class AnnealStopCommand extends BaseCommandHandler {
@Override
public CompletableFuture<Void> handle(CmdDTO cmdDTO) {
HeatModuleCode heatModuleCode = HeatModuleCode.heat_module_04;
HeatModuleCode annealHeatModuleCode = HeatModuleCode.heat_module_04;//退火模块
HeatModuleState heatModuleState=deviceStateService.getDeviceState().getHeatModuleByCode(annealHeatModuleCode);//获取退火区的状态
Assert.isTrue(heatModuleState.getHeatingType().equals(HeatingType.annealing),()->new AppException(ResultCode.CRAFT_RUNNING));//判断退火区状态
return runAsync(() -> {
heatModuleService.heatRodClose(cmdDTO.getCommandId(), cmdDTO.getCommand(), heatModuleCode);
deviceStateService.getDeviceState().getHeatModuleByCode(heatModuleCode).setHeatingType(HeatingType.stop);
heatModuleService.heatRodClose(cmdDTO.getCommandId(), cmdDTO.getCommand(), annealHeatModuleCode);//关闭加热棒
deviceStateService.getDeviceState().getHeatModuleByCode(annealHeatModuleCode).setHeatingType(HeatingType.stop);//设置退火区退火状态
});
}
}

1
src/main/java/com/iflytop/sgs/app/cmd/control/DryStartCommand.java

@ -1,5 +1,6 @@
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.status.device.HeatModuleState;

1
src/main/java/com/iflytop/sgs/app/cmd/control/DryStopCommand.java

@ -1,5 +1,6 @@
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.status.device.HeatModuleState;

1
src/main/java/com/iflytop/sgs/app/cmd/control/HeatStartCommand.java

@ -1,5 +1,6 @@
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.status.device.HeatModuleState;

68
src/main/java/com/iflytop/sgs/app/cmd/control/SolutionAddCommand.java

@ -0,0 +1,68 @@
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.TransferModuleState;
import com.iflytop.sgs.app.model.dto.CmdDTO;
import com.iflytop.sgs.app.service.api.DevicePositionService;
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.SystemConfigCode;
import com.iflytop.sgs.common.enums.ValveStateCode;
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;
import java.util.concurrent.CompletableFuture;
/**
* 添加溶液
*/
@Slf4j
@Component
@RequiredArgsConstructor
@CommandMapping("solution_add")//业务指令注解
public class SolutionAddCommand extends BaseCommandHandler {
private final SolutionModuleService solutionModuleService;
private final DeviceStateService deviceStateService;
private final DevicePositionService devicePositionService;
private final TransferModuleService transferModuleService;
private final SystemConfigService systemConfigService;
@Override
public CompletableFuture<Void> handle(CmdDTO cmdDTO) {
String solution=cmdDTO.getStringParam("solution");
ValveStateCode valveStateCode=ValveStateCode.valueOf(solution);//解析加液通道
double volume=cmdDTO.getDoubleParam("volume");//解析加液量
JSONArray jsonArray =cmdDTO.getJSONArrayParam("index");//解析加液列
Double scale = Double.valueOf(systemConfigService.getSystemConfigValueByCode(valveStateCode.getSystemConfigCode()));//获取转换系数
Double position = volume * scale;
Point3D liquidAreaTrayPoint = devicePositionService.getPosition(DevicePositionCode.liquidAreaTrayPoint).getPoint3D(); //获取加液区上方点位
Double solutionModuleMotorDownInTubeAddPositon = devicePositionService.getPosition(DevicePositionCode.solutionModuleMotorDownInTubeAddPositon).getPositon(); //加液模块电机下降进入试管加液位置
Double trayTubeHorizontalSpacingDistance = devicePositionService.getPosition(DevicePositionCode.trayTubeHorizontalSpacingDistance).getDistance(); //加液模块电机下降进入试管加液位置
return runAsync(() -> {
solutionModuleService.liquidValveSwitch(cmdDTO.getCommandId(),cmdDTO.getCommand(),valveStateCode);//电磁阀对应通道打开
TransferModuleState transferModuleState=deviceStateService.getDeviceState().getTransferModule();//获取机械臂状态
Assert.isTrue(transferModuleState.isTrayStatus(),()->new AppException(ResultCode.OPERATION_NOT_ALLOWED));//判断机械臂是否有托盘
solutionModuleService.solutionMotorMove(cmdDTO.getCommandId(), cmdDTO.getCommand(), 0);//加液机械臂上升
transferModuleService.transferMove(cmdDTO.getCommandId(), cmdDTO.getCommand(), liquidAreaTrayPoint);//移动至加液位置
solutionModuleService.solutionMotorMove(cmdDTO.getCommandId(), cmdDTO.getCommand(), solutionModuleMotorDownInTubeAddPositon);//加液机械臂下降
//开始加液
for (int i = 0; i < jsonArray.size(); i++) {
solutionModuleService.liquidPumpMove(cmdDTO.getCommandId(),cmdDTO.getCommand(),position);//加液
transferModuleService.transferXMoveBy(cmdDTO.getCommandId(),cmdDTO.getCommand(),-trayTubeHorizontalSpacingDistance);//机械臂左移试管间距
}
solutionModuleService.solutionMotorMove(cmdDTO.getCommandId(), cmdDTO.getCommand(), 0);//加液机械臂上升
transferModuleService.transferMove(cmdDTO.getCommandId(), cmdDTO.getCommand(), liquidAreaTrayPoint);//移动至加液位置
});
}
}

64
src/main/java/com/iflytop/sgs/app/cmd/control/SolutionReduceCommand.java

@ -0,0 +1,64 @@
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.TransferModuleState;
import com.iflytop.sgs.app.model.dto.CmdDTO;
import com.iflytop.sgs.app.service.api.DevicePositionService;
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.ValveStateCode;
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;
import java.util.concurrent.CompletableFuture;
/**
* 抽取溶液
*/
@Slf4j
@Component
@RequiredArgsConstructor
@CommandMapping("solution_reduce")//业务指令注解
public class SolutionReduceCommand extends BaseCommandHandler {
private final SolutionModuleService solutionModuleService;
private final DeviceStateService deviceStateService;
private final DevicePositionService devicePositionService;
private final TransferModuleService transferModuleService;
private final SystemConfigService systemConfigService;
@Override
public CompletableFuture<Void> handle(CmdDTO cmdDTO) {
double volume=cmdDTO.getDoubleParam("volume");//解析加液量
JSONArray jsonArray =cmdDTO.getJSONArrayParam("index");//解析加液列
Double position = volume;//蠕动泵移动距离
Point3D liquidAreaTrayPoint = devicePositionService.getPosition(DevicePositionCode.liquidAreaTrayPoint).getPoint3D(); //获取加液区上方点位
Double solutionModuleMotorDownInTubeExtPositon = devicePositionService.getPosition(DevicePositionCode.solutionModuleMotorDownInTubeExtPositon).getPositon(); //加液模块电机下降进入试管抽液位置
Double trayTubeHorizontalSpacingDistance = devicePositionService.getPosition(DevicePositionCode.trayTubeHorizontalSpacingDistance).getDistance(); //加液模块电机下降进入试管加液位置
return runAsync(() -> {
solutionModuleService.liquidValveSwitch(cmdDTO.getCommandId(),cmdDTO.getCommand(),ValveStateCode.waste);//电磁阀废液通道打开
TransferModuleState transferModuleState=deviceStateService.getDeviceState().getTransferModule();//获取机械臂状态
Assert.isTrue(transferModuleState.isTrayStatus(),()->new AppException(ResultCode.OPERATION_NOT_ALLOWED));//判断机械臂是否有托盘
solutionModuleService.solutionMotorMove(cmdDTO.getCommandId(), cmdDTO.getCommand(), 0);//加液机械臂上升
transferModuleService.transferMove(cmdDTO.getCommandId(), cmdDTO.getCommand(), liquidAreaTrayPoint);//移动至加液位置
solutionModuleService.solutionMotorMove(cmdDTO.getCommandId(), cmdDTO.getCommand(), solutionModuleMotorDownInTubeExtPositon);//加液机械臂下降
for (int i = 0; i < jsonArray.size(); i++) {
solutionModuleService.liquidPumpMove(cmdDTO.getCommandId(),cmdDTO.getCommand(),-position);//加液
transferModuleService.transferXMoveBy(cmdDTO.getCommandId(),cmdDTO.getCommand(),-trayTubeHorizontalSpacingDistance);//机械臂左移试管间距
}
solutionModuleService.solutionMotorMove(cmdDTO.getCommandId(), cmdDTO.getCommand(), 0);//加液机械臂上升
transferModuleService.transferMove(cmdDTO.getCommandId(), cmdDTO.getCommand(), liquidAreaTrayPoint);//移动至加液位置
});
}
}

1
src/main/java/com/iflytop/sgs/app/model/bo/status/device/HeatModuleState.java

@ -41,4 +41,5 @@ public class HeatModuleState {
public HeatModuleState(HeatModuleCode moduleCode) {
this.moduleCode = moduleCode;
}
}

19
src/main/java/com/iflytop/sgs/app/service/device/module/SolutionModuleService.java

@ -8,6 +8,7 @@ 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.constant.CommandStatus;
import com.iflytop.sgs.common.enums.ValveStateCode;
import com.iflytop.sgs.common.utils.CommandUtil;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@ -102,5 +103,23 @@ public class SolutionModuleService {
CommandUtil.wait(deviceCommandFuture);
}
/**
* 加液泵加液
*/
public void liquidPumpMove(String cmdId, String cmdCode, double position) throws Exception {
DeviceCommandBundle deviceCommandBundle = DeviceCommandGenerator.liquidPumpMoveBy(position);
CommandFuture deviceCommandFuture = deviceCommandService.sendCommand(cmdId, cmdCode, deviceCommandBundle);
CommandUtil.wait(deviceCommandFuture);
}
/**
* 电磁阀转换通道
* */
public void liquidValveSwitch(String cmdId, String cmdCode,ValveStateCode valveStateCode) throws Exception{
DeviceCommandBundle deviceCommand = DeviceCommandGenerator.valveTurn(valveStateCode.getChannel());
CommandFuture deviceCommandFuture = deviceCommandService.sendCommand(cmdId, cmdCode, deviceCommand);
CommandUtil.wait(deviceCommandFuture);
}
}

4
src/main/java/com/iflytop/sgs/common/enums/SystemConfigCode.java

@ -3,8 +3,8 @@ package com.iflytop.sgs.common.enums;
import lombok.Getter;
/**
* 加热模块code枚举
* 格式为 "heat_module_01" ~ "heat_module_06"
* 系统配置累
*
*/
@Getter
public enum SystemConfigCode {

Loading…
Cancel
Save