Browse Source

fix:增加预充开始 结束功能

master
王梦远 2 months ago
parent
commit
a99500344d
  1. 1
      src/main/java/com/iflytop/sgs/app/cmd/control/AnnealStopCommand.java
  2. 2
      src/main/java/com/iflytop/sgs/app/cmd/control/LiquidAddCommand.java
  3. 62
      src/main/java/com/iflytop/sgs/app/cmd/control/LiquidPreFillStartCommand.java
  4. 52
      src/main/java/com/iflytop/sgs/app/cmd/control/LiquidPreFillStopCommand.java
  5. 4
      src/main/java/com/iflytop/sgs/app/model/entity/Solutions.java
  6. 9
      src/main/java/com/iflytop/sgs/app/service/device/module/SolutionModuleService.java
  7. 18
      src/main/java/com/iflytop/sgs/common/enums/data/DevicePositionCode.java
  8. 1
      src/main/java/com/iflytop/sgs/common/result/ResultCode.java
  9. 11
      src/main/resources/sql/init.sql

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

@ -39,7 +39,6 @@ public class AnnealStopCommand extends BaseCommandHandler {
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.getHeatingType().equals(HeatingType.annealing), () -> new AppException(ResultCode.TARGET_HEAT_MODULE_NOT_ANNEAL));//判断退火区状态
heatModuleService.heatRodClose(cmdDTO.getCommandId(), cmdDTO.getCommand(), targetHeatModuleCode);//关闭加热棒

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

@ -42,7 +42,7 @@ public class LiquidAddCommand extends BaseCommandHandler {
@Override
public CompletableFuture<Void> handle(CmdDTO cmdDTO) {
//todo 更新阀的状态
return runAsync(() -> {

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

@ -0,0 +1,62 @@
package com.iflytop.sgs.app.cmd.control;
import cn.hutool.core.lang.Assert;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
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.model.entity.Solutions;
import com.iflytop.sgs.app.service.api.DevicePositionService;
import com.iflytop.sgs.app.service.api.SolutionsService;
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("liquid_pre_fill_start")//业务指令注解
public class LiquidPreFillStartCommand extends BaseCommandHandler {
private final SolutionModuleService solutionModuleService;
private final DeviceStateService deviceStateService;
private final DevicePositionService devicePositionService;
private final TransferModuleService transferModuleService;
private final SystemConfigService systemConfigService;
private final SolutionsService solutionsService;
@Override
public CompletableFuture<Void> handle(CmdDTO cmdDTO) {
Assert.isTrue(deviceStateService.getDeviceState().getSolutionModule().isIdle(), () -> new AppException(ResultCode.SOLUTION_MODULE_IS_BUSY));//判断当前加液区状态
Integer solutionId = cmdDTO.getIntegerParam("solutionId");//解析参数酸液Id
Solutions solutions = solutionsService.getById(solutionId);//数据库获取酸液信息
Assert.notNull(solutions, () -> new AppException(ResultCode.OPERATION_NOT_ALLOWED));//检验参数
ValveStateCode valveStateCode = ValveStateCode.valueOf(solutions.getCode());//获取对应的电磁阀通道
Point3D liquidAreaTrayPoint = devicePositionService.getPosition(DevicePositionCode.liquidAreaTrayPoint).getPoint3D(); //获取加液区上方点位
double position=devicePositionService.getPosition(DevicePositionCode.solutionPreFillDistance).getDistance();//预充开始
return runAsync(() -> {
deviceStateService.getDeviceState().getSolutionModule().setIdle(true);//设置占用
deviceStateService.getDeviceState().getSolutionModule().setPumping(true);//设置正在加液
solutionModuleService.liquidValveSwitch(cmdDTO.getCommandId(), cmdDTO.getCommand(), valveStateCode);//电磁阀对应的酸液通道打开
solutionModuleService.solutionMotorMove(cmdDTO.getCommandId(), cmdDTO.getCommand(), 0);//加液机械臂上升
transferModuleService.transferMove(cmdDTO.getCommandId(), cmdDTO.getCommand(), liquidAreaTrayPoint);//移动至加液位置
solutionModuleService.liquidPumpMove(cmdDTO.getCommandId(), cmdDTO.getCommand(), position);//预充开始
});
}
}

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

@ -0,0 +1,52 @@
package com.iflytop.sgs.app.cmd.control;
import cn.hutool.core.lang.Assert;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
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.model.entity.Solutions;
import com.iflytop.sgs.app.service.api.DevicePositionService;
import com.iflytop.sgs.app.service.api.SolutionsService;
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("liquid_add")//业务指令注解
public class LiquidPreFillStopCommand extends BaseCommandHandler {
private final SolutionModuleService solutionModuleService;
private final DeviceStateService deviceStateService;
private final DevicePositionService devicePositionService;
private final TransferModuleService transferModuleService;
private final SystemConfigService systemConfigService;
private final SolutionsService solutionsService;
@Override
public CompletableFuture<Void> handle(CmdDTO cmdDTO) {
return runAsync(() -> {
solutionModuleService.liquidPumpStop(cmdDTO.getCommandId(), cmdDTO.getCommand());//停止预充
deviceStateService.getDeviceState().getSolutionModule().setIdle(false);//设置占用解除
deviceStateService.getDeviceState().getSolutionModule().setPumping(false);//设置加液结束
});
}
}

4
src/main/java/com/iflytop/sgs/app/model/entity/Solutions.java

@ -17,4 +17,8 @@ public class Solutions extends BaseEntity {
@Schema(description = "溶液名称")
private String name;
@NotNull
@Schema(description = "溶液code")
private String code;
}

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

@ -112,6 +112,15 @@ public class SolutionModuleService {
CommandUtil.wait(deviceCommandFuture);
}
/**
* 加液泵停止
*/
public void liquidPumpStop(String cmdId, String cmdCode) throws Exception {
DeviceCommandBundle deviceCommandBundle = DeviceCommandGenerator.liquidPumpStop();
CommandFuture deviceCommandFuture = deviceCommandService.sendCommand(cmdId, cmdCode, deviceCommandBundle);
CommandUtil.wait(deviceCommandFuture);
}
/**
* 加液泵排空

18
src/main/java/com/iflytop/sgs/common/enums/data/DevicePositionCode.java

@ -12,6 +12,24 @@ public enum DevicePositionCode {
* 预充防滴落距离
*/
antiDripDistance(DevicePositionType.DISTANCE, "预充防滴落距离"),
/**
* 溶液首次预充距离
* */
solutionPreFillDistance(DevicePositionType.DISTANCE, "溶液首次预充距离"),
/*
* 稀硝酸预充距离
* */
thinPreFillDistance(DevicePositionType.DISTANCE,"稀硝酸预充距离"),
/*
* 浓硝酸预充距离
* */
thickPreFillDistance(DevicePositionType.DISTANCE,"浓硝酸预充距离"),
/**
*
* 蒸馏水预充距离
* */
waterPreFillDistance(DevicePositionType.DISTANCE,"蒸馏水预充距离"),
/**
* 托盘试管水平间距
*/

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

@ -59,6 +59,7 @@ public enum ResultCode implements IResultCode, Serializable {
TRANSFER_MODULE_NO_TRAY("6026", "转运模块无托盘"),
SOLUTION_MODULE_NO_TRAY("6027", "加液模块无托盘"),
FEED_AREA_NO_TRAY("6028", "上料区无托盘"),
SOLUTION_MODULE_IS_BUSY("6029", "加液模块正忙"),
;
/** 状态码 */
private final String code;

11
src/main/resources/sql/init.sql

@ -135,12 +135,13 @@ CREATE TABLE IF NOT EXISTS solutions
(
id INTEGER PRIMARY KEY AUTOINCREMENT,
name VARCHAR NOT NULL,
code VARCHAR NOT NULL,
create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
INSERT OR IGNORE INTO solutions (id, name, create_time, update_time)
VALUES (1, '稀硝酸', '2025-02-18 02:44:07', '2025-02-18 02:44:07'),
(2, '浓硝酸', '2025-02-18 02:44:07', '2025-02-18 02:44:07'),
(3, '蒸馏水', '2025-02-18 02:44:07', '2025-02-18 02:44:07'),
(4, '废液', '2025-02-18 02:46:23', '2025-02-18 02:46:23');
INSERT OR IGNORE INTO solutions (id, name, code, create_time, update_time)
VALUES (1, '稀硝酸', 'thin', '2025-02-18 02:44:07', '2025-02-18 02:44:07'),
(2, '浓硝酸', 'thick', '2025-02-18 02:44:07', '2025-02-18 02:44:07'),
(3, '蒸馏水', 'water', '2025-02-18 02:44:07', '2025-02-18 02:44:07'),
(4, '废液', 'waste', '2025-02-18 02:46:23', '2025-02-18 02:46:23');
Loading…
Cancel
Save