白凤吉 2 months ago
parent
commit
2eae41593c
  1. 1
      src/main/java/com/iflytop/gd/app/command/control/FilledSolutionStopCommand.java
  2. 1
      src/main/java/com/iflytop/gd/app/command/control/SolutionAddCommand.java
  3. 13
      src/main/java/com/iflytop/gd/app/core/CraftsContext.java
  4. 2
      src/main/java/com/iflytop/gd/app/model/bo/status/device/DeviceState.java
  5. 3
      src/main/java/com/iflytop/gd/app/model/bo/status/device/HeatModuleState.java
  6. 13
      src/main/java/com/iflytop/gd/app/model/bo/status/device/TrayState.java
  7. 46
      src/main/java/com/iflytop/gd/app/service/api/CraftsService.java
  8. 20
      src/main/java/com/iflytop/gd/app/service/crafts/CraftsStepService.java
  9. 18
      src/main/java/com/iflytop/gd/app/service/device/DeviceCommandTempUtilService.java
  10. 18
      src/main/java/com/iflytop/gd/app/service/device/module/CapModuleService.java
  11. 1
      src/main/java/com/iflytop/gd/app/service/device/module/SolutionModuleService.java
  12. 2
      src/main/java/com/iflytop/gd/app/service/scheduled/FetchTemperatureScheduledTask.java
  13. 8
      src/main/resources/sql/init.sql

1
src/main/java/com/iflytop/gd/app/command/control/FilledSolutionStopCommand.java

@ -39,6 +39,7 @@ public class FilledSolutionStopCommand extends BaseCommandHandler {
} }
}); });
} }
Thread.sleep(1000);
solutionModuleService.dualRobotOrigin(); solutionModuleService.dualRobotOrigin();
}); });
} }

1
src/main/java/com/iflytop/gd/app/command/control/SolutionAddCommand.java

@ -86,6 +86,7 @@ public class SolutionAddCommand extends BaseCommandHandler {
CommandUtil.wait(futuresList.toArray(new CommandFuture[0])); CommandUtil.wait(futuresList.toArray(new CommandFuture[0]));
} }
} }
Thread.sleep(1000);
solutionModuleService.dualRobotOrigin(); solutionModuleService.dualRobotOrigin();
deviceStateService.getCommandMutexState().get().setSolutionAddCommandExecuting(false); deviceStateService.getCommandMutexState().get().setSolutionAddCommandExecuting(false);
deviceStateService.getDeviceState().getSolutionModule().setPumping(false); deviceStateService.getDeviceState().getSolutionModule().setPumping(false);

13
src/main/java/com/iflytop/gd/app/core/CraftsContext.java

@ -2,9 +2,12 @@ package com.iflytop.gd.app.core;
import cn.hutool.json.JSONUtil; import cn.hutool.json.JSONUtil;
import com.iflytop.gd.app.model.bo.CraftsStep; import com.iflytop.gd.app.model.bo.CraftsStep;
import com.iflytop.gd.app.model.bo.status.device.CraftsState;
import com.iflytop.gd.app.model.bo.status.device.TrayState;
import com.iflytop.gd.app.model.entity.Crafts; import com.iflytop.gd.app.model.entity.Crafts;
import com.iflytop.gd.app.model.entity.Ores; import com.iflytop.gd.app.model.entity.Ores;
import com.iflytop.gd.app.service.crafts.CraftsStepService; import com.iflytop.gd.app.service.crafts.CraftsStepService;
import com.iflytop.gd.app.service.device.DeviceStateService;
import com.iflytop.gd.app.ws.server.WebSocketSender; import com.iflytop.gd.app.ws.server.WebSocketSender;
import com.iflytop.gd.common.constant.WebSocketMessageType; import com.iflytop.gd.common.constant.WebSocketMessageType;
import com.iflytop.gd.common.enums.HeatModuleCode; import com.iflytop.gd.common.enums.HeatModuleCode;
@ -34,6 +37,7 @@ public class CraftsContext implements Runnable {
private final StateMachine<CraftStates, CraftEvents> sm; private final StateMachine<CraftStates, CraftEvents> sm;
private final WebSocketSender webSocketService; private final WebSocketSender webSocketService;
private final CraftsStepService craftsStepService; private final CraftsStepService craftsStepService;
private final DeviceStateService deviceStateService;
private int currentIndex = 0; private int currentIndex = 0;
/** /**
@ -43,23 +47,30 @@ public class CraftsContext implements Runnable {
Crafts craft, Crafts craft,
StateMachineFactory<CraftStates, CraftEvents> factory, StateMachineFactory<CraftStates, CraftEvents> factory,
WebSocketSender webSocketService, WebSocketSender webSocketService,
CraftsStepService craftsStepService) {
CraftsStepService craftsStepService,
DeviceStateService deviceStateService) {
this.heatModuleCode = heatModuleCode; this.heatModuleCode = heatModuleCode;
this.ores = ores; this.ores = ores;
this.craft = craft; this.craft = craft;
this.craftsStepList = JSONUtil.parseArray(craft.getSteps()).toList(CraftsStep.class); this.craftsStepList = JSONUtil.parseArray(craft.getSteps()).toList(CraftsStep.class);
this.webSocketService = webSocketService; this.webSocketService = webSocketService;
this.craftsStepService = craftsStepService; this.craftsStepService = craftsStepService;
this.deviceStateService = deviceStateService;
this.sm = factory.getStateMachine(heatModuleCode.toString()); this.sm = factory.getStateMachine(heatModuleCode.toString());
sm.addStateListener(new StateMachineListenerAdapter<>() { sm.addStateListener(new StateMachineListenerAdapter<>() {
@Override @Override
public void stateEntered(State<CraftStates, CraftEvents> state) { public void stateEntered(State<CraftStates, CraftEvents> state) {
CraftsState craftsState = deviceStateService.getDeviceState().getTrayStateByHeatModuleCode(heatModuleCode).getCrafts();
craftsState.setState(state.getId());
craftsState.setCurrentIndex(currentIndex);
Map<String, Object> dataMap = new HashMap<>(); Map<String, Object> dataMap = new HashMap<>();
dataMap.put("heatId", heatModuleCode); dataMap.put("heatId", heatModuleCode);
dataMap.put("state", state.getId()); dataMap.put("state", state.getId());
dataMap.put("index", currentIndex); dataMap.put("index", currentIndex);
webSocketService.push(WebSocketMessageType.CRAFTS_STATE, dataMap); webSocketService.push(WebSocketMessageType.CRAFTS_STATE, dataMap);
} }
}); });
Mono.from(sm.startReactively()).block(); Mono.from(sm.startReactively()).block();

2
src/main/java/com/iflytop/gd/app/model/bo/status/device/DeviceState.java

@ -75,7 +75,7 @@ public class DeviceState {
public synchronized TrayState getTrayStateByHeatModuleCode(HeatModuleCode heatModuleCode) { public synchronized TrayState getTrayStateByHeatModuleCode(HeatModuleCode heatModuleCode) {
for (TrayState t : tray) { for (TrayState t : tray) {
if (heatModuleCode.equals(t.getHeatModuleId())) {
if (t.getHeatModuleId().equals(heatModuleCode)) {
return t; return t;
} }
} }

3
src/main/java/com/iflytop/gd/app/model/bo/status/device/HeatModuleState.java

@ -30,6 +30,9 @@ public class HeatModuleState {
@Schema(description = "当前加热类型") @Schema(description = "当前加热类型")
private HeatingType heatingType = HeatingType.stop; private HeatingType heatingType = HeatingType.stop;
@Schema(description = "是否正在加热,true为正在加热,false为未加热")//可能去掉这个状态
private boolean heating = false;
@Schema(description = "是否启动散热,true为正在散热,false为未在散热") @Schema(description = "是否启动散热,true为正在散热,false为未在散热")
private boolean fanOpen = false; private boolean fanOpen = false;

13
src/main/java/com/iflytop/gd/app/model/bo/status/device/TrayState.java

@ -1,22 +1,13 @@
package com.iflytop.gd.app.model.bo.status.device; package com.iflytop.gd.app.model.bo.status.device;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.iflytop.gd.common.enums.HeatModuleCode; import com.iflytop.gd.common.enums.HeatModuleCode;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.annotation.PostConstruct;
import lombok.Data; import lombok.Data;
import lombok.RequiredArgsConstructor;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import java.util.UUID; import java.util.UUID;
@Schema(description = "托盘") @Schema(description = "托盘")
@Data @Data
@Component
@Scope("prototype")
@RequiredArgsConstructor
@JsonIgnoreProperties(value = {"advisors", "frozen", "preFiltered", "proxyTargetClass", "targetSource", "exposeProxy", "advisorCount", "proxiedInterfaces", "targetClass"})
public class TrayState { public class TrayState {
@Schema(description = "托盘唯一id") @Schema(description = "托盘唯一id")
private String uuid = UUID.randomUUID().toString(); private String uuid = UUID.randomUUID().toString();
@ -36,13 +27,11 @@ public class TrayState {
@Schema(description = "当前托盘的工艺") @Schema(description = "当前托盘的工艺")
private CraftsState crafts = null; private CraftsState crafts = null;
@PostConstruct
private void init(){
public TrayState() {
for (int i = 0; i < tubes.length; i++) { for (int i = 0; i < tubes.length; i++) {
TubeState tubeState = new TubeState(); TubeState tubeState = new TubeState();
tubeState.setTubeNum(i + 1); tubeState.setTubeNum(i + 1);
tubes[i] = tubeState; tubes[i] = tubeState;
} }
} }
} }

46
src/main/java/com/iflytop/gd/app/service/api/CraftsService.java

@ -4,12 +4,15 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.iflytop.gd.app.core.CraftsContext; import com.iflytop.gd.app.core.CraftsContext;
import com.iflytop.gd.app.mapper.CraftsMapper; import com.iflytop.gd.app.mapper.CraftsMapper;
import com.iflytop.gd.app.model.bo.status.device.CraftsState;
import com.iflytop.gd.app.model.bo.status.device.HeatModuleState; import com.iflytop.gd.app.model.bo.status.device.HeatModuleState;
import com.iflytop.gd.app.model.bo.status.device.TrayState;
import com.iflytop.gd.app.model.entity.Crafts; import com.iflytop.gd.app.model.entity.Crafts;
import com.iflytop.gd.app.model.entity.Ores; import com.iflytop.gd.app.model.entity.Ores;
import com.iflytop.gd.app.model.vo.CraftStatusVO; import com.iflytop.gd.app.model.vo.CraftStatusVO;
import com.iflytop.gd.app.model.vo.SetCraftsVO; import com.iflytop.gd.app.model.vo.SetCraftsVO;
import com.iflytop.gd.app.service.crafts.CraftsStepService; import com.iflytop.gd.app.service.crafts.CraftsStepService;
import com.iflytop.gd.app.service.device.DeviceStateService;
import com.iflytop.gd.app.service.device.module.HeatModuleService; import com.iflytop.gd.app.service.device.module.HeatModuleService;
import com.iflytop.gd.app.ws.server.WebSocketSender; import com.iflytop.gd.app.ws.server.WebSocketSender;
import com.iflytop.gd.common.enums.HeatModuleCode; import com.iflytop.gd.common.enums.HeatModuleCode;
@ -20,6 +23,7 @@ import com.iflytop.gd.common.result.ResultCode;
import jakarta.annotation.PostConstruct; import jakarta.annotation.PostConstruct;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.ObjectProvider;
import org.springframework.statemachine.config.StateMachineFactory; import org.springframework.statemachine.config.StateMachineFactory;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -44,10 +48,14 @@ public class CraftsService extends ServiceImpl<CraftsMapper, Crafts> {
private final WebSocketSender webSocketService; private final WebSocketSender webSocketService;
private final CraftsStepService craftsStepService; private final CraftsStepService craftsStepService;
private final OresService oresService; private final OresService oresService;
private final DeviceStateService deviceStateService;
private final ObjectProvider<CraftsState> craftsStateObjectProvider;
private final ConcurrentHashMap<HeatModuleCode, CraftsContext> contextMap = new ConcurrentHashMap<>(); private final ConcurrentHashMap<HeatModuleCode, CraftsContext> contextMap = new ConcurrentHashMap<>();
private final ConcurrentHashMap<HeatModuleCode, Future<?>> futureMap = new ConcurrentHashMap<>(); private final ConcurrentHashMap<HeatModuleCode, Future<?>> futureMap = new ConcurrentHashMap<>();
private ExecutorService executor; private ExecutorService executor;
@PostConstruct @PostConstruct
public void init() { public void init() {
this.executor = Executors.newCachedThreadPool(); this.executor = Executors.newCachedThreadPool();
@ -98,6 +106,9 @@ public class CraftsService extends ServiceImpl<CraftsMapper, Crafts> {
if (ores == null) { if (ores == null) {
throw new AppException(ResultCode.INVALID_PARAMETER); throw new AppException(ResultCode.INVALID_PARAMETER);
} }
if(deviceStateService.getDeviceState().getSolutionModule().getTrayStatus() == 0){
throw new AppException(ResultCode.SOLUTION_MODULE_NO_TRAY);
}
//判断是否指定加热区id //判断是否指定加热区id
if (heatModuleCode == null) { if (heatModuleCode == null) {
//如果没有指定加热区id则自动获取一个 //如果没有指定加热区id则自动获取一个
@ -109,23 +120,23 @@ public class CraftsService extends ServiceImpl<CraftsMapper, Crafts> {
heatModuleCode = heatModuleState.getModuleCode(); heatModuleCode = heatModuleState.getModuleCode();
} }
} else { } else {
if (futureMap.containsKey(heatModuleCode)) {//校验指定加热模块是否正在执行工艺
log.error("工艺正在执行中,不可重复开始执行。");
throw new AppException(ResultCode.CRAFT_RUNNING);
}
// if (futureMap.containsKey(heatModuleCode)) {//校验指定加热模块是否正在执行工艺
// log.error("工艺正在执行中,不可重复开始执行。");
// throw new AppException(ResultCode.CRAFT_RUNNING);
// }
} }
log.info("准备开始工艺,加热模块{},工艺{}", heatModuleCode, craft.getName()); log.info("准备开始工艺,加热模块{},工艺{}", heatModuleCode, craft.getName());
//TODO 传感器校验heatModuleCode是否被占用 //TODO 传感器校验heatModuleCode是否被占用
// 校验已有上下文状态仅允许在 READYSTOPPED FINISHED 状态下重置 // 校验已有上下文状态仅允许在 READYSTOPPED FINISHED 状态下重置
CraftsContext existing = contextMap.get(heatModuleCode);
if (existing != null) {
CraftStates state = existing.getSm().getState().getId();
if (state == CraftStates.RUNNING || state == CraftStates.PAUSED) {
throw new AppException(ResultCode.CRAFT_RUNNING);
}
clearCraftContext(heatModuleCode);
}
// CraftsContext existing = contextMap.get(heatModuleCode);
// if (existing != null) {
// CraftStates state = existing.getSm().getState().getId();
// if (state == CraftStates.RUNNING || state == CraftStates.PAUSED) {
// throw new AppException(ResultCode.CRAFT_RUNNING);
// }
// clearCraftContext(heatModuleCode);
// }
CraftsContext ctx = new CraftsContext( CraftsContext ctx = new CraftsContext(
heatModuleCode, heatModuleCode,
@ -133,12 +144,21 @@ public class CraftsService extends ServiceImpl<CraftsMapper, Crafts> {
craft, craft,
stateMachineFactory, stateMachineFactory,
webSocketService, webSocketService,
craftsStepService
craftsStepService,
deviceStateService
); );
contextMap.put(heatModuleCode, ctx); contextMap.put(heatModuleCode, ctx);
Future<?> future = executor.submit(ctx); Future<?> future = executor.submit(ctx);
futureMap.put(heatModuleCode, future); futureMap.put(heatModuleCode, future);
TrayState trayState = deviceStateService.getDeviceState().getTrayInSolutionModule();
CraftsState craftsState = craftsStateObjectProvider.getObject();
craftsState.setCraft(craft);
craftsState.setOres(ores);
craftsState.setState(CraftStates.READY);
craftsState.setCurrentIndex(0);
trayState.setCrafts(craftsState);
SetCraftsVO setCraftsVO = new SetCraftsVO(); SetCraftsVO setCraftsVO = new SetCraftsVO();
setCraftsVO.setHeatId(heatModuleCode); setCraftsVO.setHeatId(heatModuleCode);
setCraftsVO.setCraftsName(craft.getName()); setCraftsVO.setCraftsName(craft.getName());

20
src/main/java/com/iflytop/gd/app/service/crafts/CraftsStepService.java

@ -195,29 +195,30 @@ public class CraftsStepService {
Point3D heatAreaCapClawPointPoint3D = heatModuleService.getHeatAreaCapClawPointPoint3D(heatModuleCode);//获取指定加热模块拍子上方点位 Point3D heatAreaCapClawPointPoint3D = heatModuleService.getHeatAreaCapClawPointPoint3D(heatModuleCode);//获取指定加热模块拍子上方点位
Point3D capStorageCapClawPoint3D = devicePositionService.getPosition(DevicePositionCode.capStorageCapClawPoint).getPoint3D();//获取拍子存放区上方点位; Point3D capStorageCapClawPoint3D = devicePositionService.getPosition(DevicePositionCode.capStorageCapClawPoint).getPoint3D();//获取拍子存放区上方点位;
capModuleService.capUpBalanceNoWait();//提升拍子存放区至拍子夹取的高度
gantryModuleService.gantryMove(liquidAreaTrayPoint3D); //将机械臂移动至加液模块上方 gantryModuleService.gantryMove(liquidAreaTrayPoint3D); //将机械臂移动至加液模块上方
gantryModuleService.clawMove(clawTrayPick);//将夹爪打开准备夹取托盘 gantryModuleService.clawMove(clawTrayPick);//将夹爪打开准备夹取托盘
gantryModuleService.gantryZMove(solutionModuleTrayMoveHeight);//下降z轴,使夹爪落入托盘孔位 gantryModuleService.gantryZMove(solutionModuleTrayMoveHeight);//下降z轴,使夹爪落入托盘孔位
gantryModuleService.clawMove(clawTrayGrip);//将夹爪收紧夹住托盘 gantryModuleService.clawMove(clawTrayGrip);//将夹爪收紧夹住托盘
gantryModuleService.gantryZMove(0);//抬升z轴 gantryModuleService.gantryZMove(0);//抬升z轴
deviceStateService.getDeviceState().getSolutionModule().setTrayStatus(0);//加液模块是否有托盘 deviceStateService.getDeviceState().getSolutionModule().setTrayStatus(0);//加液模块是否有托盘
deviceCommandTempUtilService.moveTrayHeatModuleAvoidDown(null);//TODO 结构有问题临时避让 开始移动托盘之前先降下所有加热模块
// deviceCommandTempUtilService.moveTrayHeatModuleAvoidDown(null);//TODO 结构有问题临时避让 开始移动托盘之前先降下所有加热模块
gantryModuleService.gantryMove(heatArea4TrayClawPoint3D);//将携带托盘的机械臂移动至4号加热模块上方 gantryModuleService.gantryMove(heatArea4TrayClawPoint3D);//将携带托盘的机械臂移动至4号加热模块上方
gantryModuleService.gantryMove(heatAreaTrayClawPoint3D);//将携带托盘的机械臂移动至加热模块上方 gantryModuleService.gantryMove(heatAreaTrayClawPoint3D);//将携带托盘的机械臂移动至加热模块上方
// deviceCommandUtilService.heaterMotorMove( heatModuleId, trayLift);//抬升加热位托盘 TODO 结构有问题临时避让 屏蔽 // deviceCommandUtilService.heaterMotorMove( heatModuleId, trayLift);//抬升加热位托盘 TODO 结构有问题临时避让 屏蔽
deviceCommandTempUtilService.moveTrayHeatModuleAvoidUp(heatModuleCode);//TODO 结构有问题临时避让 完毕可以升起了顺带提升目标加热模块
deviceCommandTempUtilService.moveTrayHeatModuleAvoidUpNoWait(heatModuleCode);Thread.sleep(3200);//TODO 结构有问题临时避让 完毕可以升起了顺带提升目标加热模块
gantryModuleService.gantryZMove(heatModuleTrayMoveHeight);//下降z轴,使托盘落入加热模块 gantryModuleService.gantryZMove(heatModuleTrayMoveHeight);//下降z轴,使托盘落入加热模块
gantryModuleService.clawMove(clawTrayPick);//将夹爪打开释放托盘 gantryModuleService.clawMove(clawTrayPick);//将夹爪打开释放托盘
deviceStateService.getDeviceState().getHeatModuleByCode(heatModuleCode).setTrayStatus(1);//加热模块是否存在托盘 deviceStateService.getDeviceState().getHeatModuleByCode(heatModuleCode).setTrayStatus(1);//加热模块是否存在托盘
gantryModuleService.gantryZMove(0);//抬升z轴 gantryModuleService.gantryZMove(0);//抬升z轴
capModuleService.capUpBalance();//提升拍子存放区至拍子夹取的高度
gantryModuleService.gantryMove(capStorageCapClawPoint3D);//移动机械臂至拍子存放区上方 gantryModuleService.gantryMove(capStorageCapClawPoint3D);//移动机械臂至拍子存放区上方
gantryModuleService.clawMove(clawCapPick);//将夹爪打开准备夹取拍子 gantryModuleService.clawMove(clawCapPick);//将夹爪打开准备夹取拍子
gantryModuleService.gantryZMove(capModuleCapMoveHeight);//下降z轴,使夹爪落入拍子升降模块拍子孔位 gantryModuleService.gantryZMove(capModuleCapMoveHeight);//下降z轴,使夹爪落入拍子升降模块拍子孔位
gantryModuleService.clawMove(clawCapGrip);//将夹爪收紧夹住拍子 gantryModuleService.clawMove(clawCapGrip);//将夹爪收紧夹住拍子
gantryModuleService.gantryZMove(0);//抬升z轴 gantryModuleService.gantryZMove(0);//抬升z轴
gantryModuleService.gantryMove(heatAreaCapClawPointPoint3D);//将携带拍子的机械臂移动至加热模块拍子上方 gantryModuleService.gantryMove(heatAreaCapClawPointPoint3D);//将携带拍子的机械臂移动至加热模块拍子上方
capModuleService.capUpBalanceNoWait(); //提升拍子存放区
gantryModuleService.gantryZMove(heatModuleCapMoveHeight);//下降z轴,使夹拍子落入加热模块 gantryModuleService.gantryZMove(heatModuleCapMoveHeight);//下降z轴,使夹拍子落入加热模块
gantryModuleService.clawMove(clawCapPick);//将夹爪打开释放拍子 gantryModuleService.clawMove(clawCapPick);//将夹爪打开释放拍子
deviceStateService.getDeviceState().getHeatModuleByCode(heatModuleCode).setCapExist(true);//加热模块是否存在拍子 deviceStateService.getDeviceState().getHeatModuleByCode(heatModuleCode).setCapExist(true);//加热模块是否存在拍子
@ -226,11 +227,8 @@ public class CraftsStepService {
// trayState.setInHeatModule(true); // trayState.setInHeatModule(true);
heatModuleService.heaterMotorMove(heatModuleCode, trayLower);//下降加热模块托盘 heatModuleService.heaterMotorMove(heatModuleCode, trayLower);//下降加热模块托盘
deviceStateService.getDeviceState().getHeatModuleByCode(heatModuleCode).setTrayUp(0);//加热模块托盘升降状态 deviceStateService.getDeviceState().getHeatModuleByCode(heatModuleCode).setTrayUp(0);//加热模块托盘升降状态
capModuleService.capUpBalance(); //提升拍子存放区
gantryModuleService.gantryMove(capStorageCapClawPoint3D);//移动机械臂至拍子存放区上方 gantryModuleService.gantryMove(capStorageCapClawPoint3D);//移动机械臂至拍子存放区上方
heatModuleService.heaterMotorMove(heatModuleCode, trayLower);//下降加热位托盘
deviceStateService.getDeviceState().getHeatModuleByCode(heatModuleCode).setTrayStatus(1);
solutionModuleService.releaseSolutionModule();//释放加液区 solutionModuleService.releaseSolutionModule();//释放加液区
} }
@ -258,15 +256,15 @@ public class CraftsStepService {
// TrayState trayState = deviceStateService.getTrayInSolutionModule(); // TrayState trayState = deviceStateService.getTrayInSolutionModule();
solutionModuleService.requestSolutionModule();//申请使用加液区并等待 solutionModuleService.requestSolutionModule();//申请使用加液区并等待
capModuleService.capUpBalance(); //提升拍子存放区至拍子夹取的高度
capModuleService.capUpBalanceNoWait(); //提升拍子存放区至拍子夹取的高度
gantryModuleService.gantryMove(heatAreaCapClawPointPoint3D);//将机械臂移动至加热模块拍子上方 gantryModuleService.gantryMove(heatAreaCapClawPointPoint3D);//将机械臂移动至加热模块拍子上方
heatModuleService.heaterMotorMove(heatModuleCode, trayLift);//抬升指定加热位托盘 heatModuleService.heaterMotorMove(heatModuleCode, trayLift);//抬升指定加热位托盘
gantryModuleService.clawMove(clawCapPick);//将夹爪打开准备夹取拍子 gantryModuleService.clawMove(clawCapPick);//将夹爪打开准备夹取拍子
gantryModuleService.gantryZMove(heatModuleCapMoveHeight);//下降z轴,使夹爪落入加热模块拍子孔位 gantryModuleService.gantryZMove(heatModuleCapMoveHeight);//下降z轴,使夹爪落入加热模块拍子孔位
gantryModuleService.clawMove(clawCapGrip);//将夹爪收紧夹住拍子 gantryModuleService.clawMove(clawCapGrip);//将夹爪收紧夹住拍子
deviceStateService.getDeviceState().getHeatModuleByCode(heatModuleCode).setCapExist(false);//加热模块是否存在拍子 deviceStateService.getDeviceState().getHeatModuleByCode(heatModuleCode).setCapExist(false);//加热模块是否存在拍子
gantryModuleService.gantryZMove(0);//抬升z轴
capModuleService.capMotorMoveByNum(-1);//拍子存放模块下降1个拍子位置
capModuleService.capMotorMoveByNumNoWait(-1);//拍子存放模块下降1个拍子位置
gantryModuleService.gantryZMove(0); Thread.sleep(2000);//抬升z轴
gantryModuleService.gantryMove(capStorageCapClawPoint3D);//将携带拍子的机械臂移动至存放区上方 gantryModuleService.gantryMove(capStorageCapClawPoint3D);//将携带拍子的机械臂移动至存放区上方
gantryModuleService.gantryZMove(capModuleCapMoveHeight);//下降z轴,使夹拍子落入存放区 gantryModuleService.gantryZMove(capModuleCapMoveHeight);//下降z轴,使夹拍子落入存放区
gantryModuleService.clawMove(clawCapPick);//将夹爪打开释放夹取的拍子 gantryModuleService.clawMove(clawCapPick);//将夹爪打开释放夹取的拍子
@ -279,10 +277,10 @@ public class CraftsStepService {
gantryModuleService.clawMove(clawTrayGrip);//将夹爪收紧夹住托盘 gantryModuleService.clawMove(clawTrayGrip);//将夹爪收紧夹住托盘
deviceStateService.getDeviceState().getHeatModuleByCode(heatModuleCode).setTrayStatus(0);//加热模块是否存在托盘 deviceStateService.getDeviceState().getHeatModuleByCode(heatModuleCode).setTrayStatus(0);//加热模块是否存在托盘
// trayState.setInHeatModule(false);//托盘是否在加热模块中 // trayState.setInHeatModule(false);//托盘是否在加热模块中
gantryModuleService.gantryZMove(0);//抬升z轴
deviceCommandTempUtilService.moveTrayHeatModuleAvoidDownNoWait(heatModuleCode);//TODO 临时避让下降
gantryModuleService.gantryZMove(0);Thread.sleep(2500);//抬升z轴
// deviceCommandUtilService.heaterMotorMove( heatModuleId, trayLower);//下降加热模块托盘 // deviceCommandUtilService.heaterMotorMove( heatModuleId, trayLower);//下降加热模块托盘
// deviceStateService.setHeatModuleStateTrayUp(heatModuleId, 0);//加热模块托盘升降状态 // deviceStateService.setHeatModuleStateTrayUp(heatModuleId, 0);//加热模块托盘升降状态
deviceCommandTempUtilService.moveTrayHeatModuleAvoidDown(heatModuleCode);//TODO 临时避让下降
gantryModuleService.gantryMove(heatArea4TrayClawPoint3D);//将携带托盘的机械臂移动至4号加热模块上方 gantryModuleService.gantryMove(heatArea4TrayClawPoint3D);//将携带托盘的机械臂移动至4号加热模块上方
gantryModuleService.gantryMove(liquidAreaTrayPoint3D); //将携带托盘的机械臂移动至加液模块上方 gantryModuleService.gantryMove(liquidAreaTrayPoint3D); //将携带托盘的机械臂移动至加液模块上方
deviceCommandTempUtilService.moveTrayHeatModuleAvoidUp(null, heatModuleCode);//TODO 临时避 恢复抬起状态 deviceCommandTempUtilService.moveTrayHeatModuleAvoidUp(null, heatModuleCode);//TODO 临时避 恢复抬起状态

18
src/main/java/com/iflytop/gd/app/service/device/DeviceCommandTempUtilService.java

@ -38,6 +38,15 @@ public class DeviceCommandTempUtilService {
* 临时移动托盘的时候加热模块升降避让 * 临时移动托盘的时候加热模块升降避让
* 该方法会恢复之前升起的状态 * 该方法会恢复之前升起的状态
*/ */
public void moveTrayHeatModuleAvoidUpNoWait(HeatModuleCode targetHeatModuleCode, HeatModuleCode... exceptionHeatModuleCodes) throws Exception {
moveTrayHeatModuleAvoidUpNoWait(null, null, targetHeatModuleCode, exceptionHeatModuleCodes);
}
/**
* 避让抬升
* 临时移动托盘的时候加热模块升降避让
* 该方法会恢复之前升起的状态
*/
public void moveTrayHeatModuleAvoidUp(HeatModuleCode targetHeatModuleCode, HeatModuleCode... exceptionHeatModuleCodes) throws Exception { public void moveTrayHeatModuleAvoidUp(HeatModuleCode targetHeatModuleCode, HeatModuleCode... exceptionHeatModuleCodes) throws Exception {
moveTrayHeatModuleAvoidUp(null, null, targetHeatModuleCode, exceptionHeatModuleCodes); moveTrayHeatModuleAvoidUp(null, null, targetHeatModuleCode, exceptionHeatModuleCodes);
} }
@ -94,6 +103,15 @@ public class DeviceCommandTempUtilService {
* 临时移动托盘的时候加热模块升降避让 * 临时移动托盘的时候加热模块升降避让
* 该方法会下降所有升起的加热模块并且记录 * 该方法会下降所有升起的加热模块并且记录
*/ */
public void moveTrayHeatModuleAvoidDownNoWait(HeatModuleCode targetHeatModuleCode, HeatModuleCode... exceptionHeatModuleCodes) throws Exception {
moveTrayHeatModuleAvoidDownNoWait(null, null, targetHeatModuleCode, exceptionHeatModuleCodes);
}
/**
* 避让下降
* 临时移动托盘的时候加热模块升降避让
* 该方法会下降所有升起的加热模块并且记录
*/
public void moveTrayHeatModuleAvoidDown(HeatModuleCode targetHeatModuleCode, HeatModuleCode... exceptionHeatModuleCodes) throws Exception { public void moveTrayHeatModuleAvoidDown(HeatModuleCode targetHeatModuleCode, HeatModuleCode... exceptionHeatModuleCodes) throws Exception {
moveTrayHeatModuleAvoidDown(null, null, targetHeatModuleCode, exceptionHeatModuleCodes); moveTrayHeatModuleAvoidDown(null, null, targetHeatModuleCode, exceptionHeatModuleCodes);
} }

18
src/main/java/com/iflytop/gd/app/service/device/module/CapModuleService.java

@ -30,6 +30,13 @@ public class CapModuleService {
/** /**
* 将拍子升降区抬升至可以获取的位置 * 将拍子升降区抬升至可以获取的位置
*/ */
public void capUpBalanceNoWait() throws Exception {
capUpBalanceNoWait(null, null);
}
/**
* 将拍子升降区抬升至可以获取的位置
*/
public void capUpBalance() throws Exception { public void capUpBalance() throws Exception {
capUpBalance(null, null); capUpBalance(null, null);
} }
@ -79,7 +86,7 @@ public class CapModuleService {
} }
} }
if (capNum == 0) { if (capNum == 0) {
throw new AppException(ResultCode.CAP_MODULE_NO_CAP);
return;
} }
double capLiftingHeight = devicePositionService.getPosition(DevicePositionCode.capLiftingHeight).getDistance();//每个拍子高度 double capLiftingHeight = devicePositionService.getPosition(DevicePositionCode.capLiftingHeight).getDistance();//每个拍子高度
double capLiftingHeightSum = (6 - capNum) * capLiftingHeight + 21; double capLiftingHeightSum = (6 - capNum) * capLiftingHeight + 21;
@ -169,6 +176,15 @@ public class CapModuleService {
* *
* @param num 1为上升1格-1为下降1格 * @param num 1为上升1格-1为下降1格
*/ */
public void capMotorMoveByNumNoWait(int num) throws Exception {
capMotorMoveByNumNoWait(null, null, num);
}
/**
* 调整拍子升降电机位置
*
* @param num 1为上升1格-1为下降1格
*/
public void capMotorMoveByNum(int num) throws Exception { public void capMotorMoveByNum(int num) throws Exception {
capMotorMoveByNum(null, null, num); capMotorMoveByNum(null, null, num);
} }

1
src/main/java/com/iflytop/gd/app/service/device/module/SolutionModuleService.java

@ -69,6 +69,7 @@ public class SolutionModuleService {
* 释放加液区 * 释放加液区
*/ */
public synchronized void releaseSolutionModule() throws InterruptedException { public synchronized void releaseSolutionModule() throws InterruptedException {
log.info("释放加液模块占用");
deviceStateService.getDeviceState().getSolutionModule().setIdle(true); deviceStateService.getDeviceState().getSolutionModule().setIdle(true);
// 唤醒队列中的第一个线程 // 唤醒队列中的第一个线程
if (!waitingQueue.isEmpty()) { if (!waitingQueue.isEmpty()) {

2
src/main/java/com/iflytop/gd/app/service/scheduled/FetchTemperatureScheduledTask.java

@ -19,7 +19,7 @@ public class FetchTemperatureScheduledTask {
private final GDDeviceStatusService gdDeviceStatusService; private final GDDeviceStatusService gdDeviceStatusService;
private final DeviceStateService deviceStateService; private final DeviceStateService deviceStateService;
@Scheduled(fixedRate = 30000)
@Scheduled(fixedRate = 300000)
public void fetchTemperature() { public void fetchTemperature() {
try { try {
if (!deviceStateService.getDeviceState().isVirtual()) { if (!deviceStateService.getDeviceState().isVirtual()) {

8
src/main/resources/sql/init.sql

@ -56,10 +56,10 @@ CREATE TABLE IF NOT EXISTS container
); );
INSERT OR IGNORE INTO container (id, type, code, solution_id, pump_id, scale,capacity_total, capacity_used) INSERT OR IGNORE INTO container (id, type, code, solution_id, pump_id, scale,capacity_total, capacity_used)
VALUES (1, 0, 'container_01', 1, 'acid_pump_01', 120,5000, 0),
(2, 0, 'container_02', 2, 'acid_pump_02', 100,5000, 2500),
(3, 0, 'container_03', 3, 'acid_pump_03', 111,5000, 2600),
(4, 0, 'container_04', 4, 'acid_pump_04', 107,5000, 4000),
VALUES (1, 0, 'container_01', 1, 'acid_pump_01', 364,5000, 0),
(2, 0, 'container_02', 2, 'acid_pump_02', 133,5000, 2500),
(3, 0, 'container_03', 3, 'acid_pump_03', 160,5000, 2600),
(4, 0, 'container_04', 4, 'acid_pump_04', 163,5000, 4000),
(5, 0, 'container_05', 5, 'acid_pump_05', 117,5000, 2400), (5, 0, 'container_05', 5, 'acid_pump_05', 117,5000, 2400),
(6, 0, 'container_06', 6, 'acid_pump_06', 105,5000, 4500), (6, 0, 'container_06', 6, 'acid_pump_06', 105,5000, 4500),
(7, 0, 'container_07', 7, 'acid_pump_07', 187,5000, 4900), (7, 0, 'container_07', 7, 'acid_pump_07', 187,5000, 4900),

Loading…
Cancel
Save