Browse Source

fix:调整设备状态结构,增加机械臂申请使用方法

master
白凤吉 1 week ago
parent
commit
9f674d3a3d
  1. 3
      src/main/java/com/iflytop/colortitration/app/core/state/DeviceState.java
  2. 2
      src/main/java/com/iflytop/colortitration/app/core/state/TitrationModuleState.java
  3. 3
      src/main/java/com/iflytop/colortitration/app/core/state/TubeState.java
  4. 8
      src/main/java/com/iflytop/colortitration/app/service/DeviceInitService.java
  5. 44
      src/main/java/com/iflytop/colortitration/app/service/module/TransferModuleService.java

3
src/main/java/com/iflytop/colortitration/app/core/state/DeviceState.java

@ -17,9 +17,8 @@ import java.util.Map;
@Component
@JsonIgnoreProperties(value = {"advisors", "frozen", "preFiltered", "proxyTargetClass", "targetSource", "exposeProxy", "advisorCount", "proxiedInterfaces", "targetClass"})
public class DeviceState {
@Schema(description = "滴定模块")
private final Map<MultipleModuleCode, TitrationModule> titrationModuleStateMap = new HashMap<>();
private final Map<MultipleModuleCode, TitrationModuleState> titrationModuleStateMap = new HashMap<>();
@Schema(description = "加热模块")
private final Map<MultipleModuleCode, HeatModuleState> heatModuleStateMap = new HashMap<>();

2
src/main/java/com/iflytop/colortitration/app/core/state/TitrationModule.java → src/main/java/com/iflytop/colortitration/app/core/state/TitrationModuleState.java

@ -14,7 +14,7 @@ import org.springframework.stereotype.Component;
@Scope("prototype")
@RequiredArgsConstructor
@JsonIgnoreProperties(value = {"advisors", "frozen", "preFiltered", "proxyTargetClass", "targetSource", "exposeProxy", "advisorCount", "proxiedInterfaces", "targetClass"})
public class TitrationModule {
public class TitrationModuleState {
@Schema(description = "滴定模块code")
private MultipleModuleCode moduleCode;

3
src/main/java/com/iflytop/colortitration/app/core/state/TubeState.java

@ -43,6 +43,9 @@ public class TubeState {
@Schema(description = "可以使用的滴定模块")
private List<MultipleModuleCode> titrationModuleCodes;
@Schema(description = "当前试管工艺队列的编号")
private Integer queueNum;
public TubeState(Integer bubeNum) {
this.bubeNum = bubeNum;
}

8
src/main/java/com/iflytop/colortitration/app/service/DeviceInitService.java

@ -2,7 +2,7 @@ package com.iflytop.colortitration.app.service;
import com.iflytop.colortitration.app.common.enums.MultipleModuleCode;
import com.iflytop.colortitration.app.core.state.DeviceState;
import com.iflytop.colortitration.app.core.state.TitrationModule;
import com.iflytop.colortitration.app.core.state.TitrationModuleState;
import com.iflytop.colortitration.hardware.service.AppEventBusService;
import com.iflytop.colortitration.hardware.type.appevent.A8kCanBusOnConnectEvent;
import com.iflytop.colortitration.hardware.type.appevent.AppEvent;
@ -19,7 +19,7 @@ public class DeviceInitService {
private final AppEventBusService eventBus;
private boolean isLink = false;
private final DeviceState deviceState;
private final ObjectProvider<TitrationModule> titrationModuleObjectProvider;
private final ObjectProvider<TitrationModuleState> titrationModuleObjectProvider;
@PostConstruct
public void init() {
@ -47,10 +47,10 @@ public class DeviceInitService {
public void initDeviceState() {
log.info("初始化 initDeviceState");
TitrationModule trayModule1 = titrationModuleObjectProvider.getObject();
TitrationModuleState trayModule1 = titrationModuleObjectProvider.getObject();
trayModule1.setModuleCode(MultipleModuleCode.MODULE_1);
deviceState.getTitrationModuleStateMap().put(MultipleModuleCode.MODULE_1, trayModule1);
TitrationModule trayModule2 = titrationModuleObjectProvider.getObject();
TitrationModuleState trayModule2 = titrationModuleObjectProvider.getObject();
trayModule2.setModuleCode(MultipleModuleCode.MODULE_2);
deviceState.getTitrationModuleStateMap().put(MultipleModuleCode.MODULE_2, trayModule2);
log.info("初始化 initDeviceState完毕");

44
src/main/java/com/iflytop/colortitration/app/service/module/TransferModuleService.java

@ -13,6 +13,8 @@ import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.util.concurrent.Semaphore;
/**
* 转运模块
*/
@ -22,6 +24,36 @@ import org.springframework.stereotype.Service;
public class TransferModuleService {
private final DeviceCommandService deviceCommandService;
private final PositionService positionService;
private final Semaphore armSemaphore = new Semaphore(1, true);
/**
* 申请使用机械臂
*/
public void requestTransferModule() {
log.info("申请使用转运机械臂");
try {
armSemaphore.acquire();
log.info("转运机械臂申请成功");
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
throw new RuntimeException("等待转运机械臂空闲失败", e);
}
}
/**
* 释放机械臂
*/
public void releaseTransferModule() {
log.info("释放转运机械臂占用");
armSemaphore.release(); //释放许可证
}
/**
* 查询机械臂是否繁忙
*/
public boolean isTransferModuleBusy() {
return armSemaphore.availablePermits() == 0;
}
/**
* 机械臂回原点
@ -63,10 +95,8 @@ public class TransferModuleService {
*/
public void roboticMoveToTitration(MultipleModuleCode moduleCode) throws Exception {
Point3D position = switch (moduleCode) { //1首先检测试管所在的托盘传感器的值
case MultipleModuleCode.MODULE_1 ->
positionService.getPositionByCode(DevicePositionCode.titrationArea_1).getPoint3D();
case MultipleModuleCode.MODULE_2 ->
positionService.getPositionByCode(DevicePositionCode.titrationArea_2).getPoint3D();
case MultipleModuleCode.MODULE_1 -> positionService.getPositionByCode(DevicePositionCode.titrationArea_1).getPoint3D();
case MultipleModuleCode.MODULE_2 -> positionService.getPositionByCode(DevicePositionCode.titrationArea_2).getPoint3D();
};
// Z轴回零点
DeviceCommand zOriginCommand = DeviceCommandGenerator.zMove(0.0);
@ -86,10 +116,8 @@ public class TransferModuleService {
*/
public void roboticMoveToHeat(MultipleModuleCode moduleCode) throws Exception {
Point3D position = switch (moduleCode) { //1首先检测试管所在的托盘传感器的值
case MultipleModuleCode.MODULE_1 ->
positionService.getPositionByCode(DevicePositionCode.heatArea_1).getPoint3D();
case MultipleModuleCode.MODULE_2 ->
positionService.getPositionByCode(DevicePositionCode.heatArea_2).getPoint3D();
case MultipleModuleCode.MODULE_1 -> positionService.getPositionByCode(DevicePositionCode.heatArea_1).getPoint3D();
case MultipleModuleCode.MODULE_2 -> positionService.getPositionByCode(DevicePositionCode.heatArea_2).getPoint3D();
};
// Z轴回零点
DeviceCommand zOriginCommand = DeviceCommandGenerator.zMove(0.0);

Loading…
Cancel
Save