Browse Source

feat:业务控制设备实现

master
白凤吉 6 months ago
parent
commit
ba0dcb53bf
  1. 2
      src/main/java/com/qyft/gd/device/service/DeviceService.java
  2. 143
      src/main/java/com/qyft/gd/device/service/DeviceStepService.java
  3. 16
      src/main/java/com/qyft/gd/model/bo/AddLiquid.java
  4. 2
      src/main/java/com/qyft/gd/service/CMDService.java
  5. 75
      src/main/java/com/qyft/gd/service/CraftsStepService.java

2
src/main/java/com/qyft/gd/device/service/DeviceService.java

@ -242,7 +242,7 @@ public class DeviceService {
* @param pumpId 泵id
* @param volume 液体体积
*/
public synchronized boolean addLiquid(String pumpId, int volume) {
public synchronized boolean addLiquid(long pumpId, int volume) {
Map<String, Object> params = new HashMap<>();
params.put("pumpId", pumpId);
params.put("volume", volume);

143
src/main/java/com/qyft/gd/device/service/DeviceStepService.java

@ -0,0 +1,143 @@
package com.qyft.gd.device.service;
import com.qyft.gd.model.bo.AddLiquid;
import com.qyft.gd.service.BaseDataService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
import java.util.function.BooleanSupplier;
/**
* 设备步骤操作
*/
@Service
@RequiredArgsConstructor
public class DeviceStepService {
DeviceService deviceService;
BaseDataService baseDataService;
/**
* 抬起托盘
*
* @param heaterId 加热区id
*/
public void upTray(String heaterId) {
deviceService.raiseTray(heaterId);
}
/**
* 降下托盘
*
* @param heaterId 加热区id
*/
public void downTray(String heaterId) {
deviceService.lowerTray(heaterId);
}
/**
* 添加溶液
*
* @param tubeCoordinateList 需要添加溶液的试管坐标list: x,y,z 字符
* @param addLiquidList 需要添加的溶液
*/
public boolean addLiquid(List<String> tubeCoordinateList, List<AddLiquid> addLiquidList) {
List<Boolean> results = new ArrayList<>();
for (String tubeCoordinate : tubeCoordinateList) {
String[] tubeCoordinateArray = tubeCoordinate.split(",");
int x = Integer.parseInt(tubeCoordinateArray[0]);
int y = Integer.parseInt(tubeCoordinateArray[1]);
int z = Integer.parseInt(tubeCoordinateArray[2]);
results.add(deviceService.moveLiquidArmToPoint(x, y, z));//加液孔对准试管
for (AddLiquid addLiquid : addLiquidList) {//依次添加溶液
results.add(deviceService.addLiquid(addLiquid.getPumpId(), addLiquid.getVolume()));
}
}
return results.stream().allMatch(Boolean::booleanValue);
}
/**
* 将指定加热区的托盘移至加液区
*
* @param heaterId 加热区id
*/
public boolean moveToSol(String heaterId) {
//从内存中获取加热区拍子点位
//机械臂移动到拍子上方
//张开夹爪
//向下移动机械臂确保夹爪闭合可以夹住拍子
//闭合夹爪
//解除拍子密封
//向上移动机械臂确保不会发生碰撞的高度
//拍子存放区高度 -1
//从内存中获取拍子存放区点位
//移动机械臂至拍子存放区点位
//向下移动机械臂使拍子落入拍子存放区
//张开夹爪放下拍子
//向上移动机械臂脱离拍子存放区
//移动机械臂至加热区
//张开夹爪
//向下移动机械臂确保夹爪闭合可以夹住托盘
//闭合夹爪
//向上移动机械臂确保不会发生碰撞的高度
//从内存中获取加液区点位
//移动机械臂至加液区点位
//向下移动机械臂放下托盘
//张开夹爪
//向上移动机械臂脱离托盘
return true;
}
//移至加热
public boolean moveToHeater(int heaterId) {
return true;
}
//摇匀
public boolean shaking() {
return true;
}
//开始加热
public boolean startHeating(int heaterId) {
return true;
}
//停止加热
public boolean stopHeating(int heaterId) {
return true;
}
//拍照
public boolean takePhoto() {
return true;
}
//移至异常
public boolean moveToExc() {
return true;
}
//移除异常
public boolean moveOutToExc() {
return true;
}
/**
* 等待
*
* @param millis 毫秒
*/
private boolean delay(int millis) {
try {
Thread.sleep(millis);
return true;
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
return false;
}
}

16
src/main/java/com/qyft/gd/model/bo/AddLiquid.java

@ -0,0 +1,16 @@
package com.qyft.gd.model.bo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
/**
* 添加溶液
*/
@Schema(description = "添加溶液")
@Data
public class AddLiquid {
@Schema(description = "泵id")
private Long pumpId;
@Schema(description = "加液量")
private Integer volume;
}

2
src/main/java/com/qyft/gd/service/CMDService.java

@ -156,7 +156,7 @@ public class CMDService {
// TODO 溶液id 容量
Map<String, Object> params = cmdForm.getParams();
cmdList.add(() -> deviceService.moveLiquidArmToPoint(1,2,3));
cmdList.add(() -> deviceService.addLiquid((String) params.get("pumpId"), ((Integer)params.get("volume"))));
cmdList.add(() -> deviceService.addLiquid((Long) params.get("pumpId"), ((Integer)params.get("volume"))));
initExecutorThread(cmdList, cmdForm);
return true;
}

75
src/main/java/com/qyft/gd/service/CraftsStepService.java

@ -1,6 +1,5 @@
package com.qyft.gd.service;
import com.qyft.gd.device.service.DeviceService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
@ -10,14 +9,12 @@ import java.util.concurrent.Executors;
import java.util.concurrent.Future;
/**
* 设备步骤操作
* 工艺操作
*/
@Service
@RequiredArgsConstructor
public class CraftsStepService {
private final DeviceService deviceService;
private final ExecutorService executorService = Executors.newCachedThreadPool();
private final ConcurrentHashMap<Long, Future<?>> taskMap = new ConcurrentHashMap<>();
@ -71,74 +68,4 @@ public class CraftsStepService {
}
}
//抬起托盘
public void upTray(int heaterId) {
deviceService.raiseTray("11");
}
//降下托盘
public void downTray(int heaterId) {
deviceService.lowerTray("11");
}
//添加溶液(先固定16个试管全进行加液)
public void addLiquid() {
}
//移至加液
public void moveToSol() {
}
//移至加热
public void moveToHeater(int heaterId) {
}
//摇匀
public void shaking() {
}
//开始加热
public void startHeating(int heaterId) {
}
//停止加热
public void stopHeating(int heaterId) {
}
//拍照
public void takePhoto() {
}
//移至异常
public void moveToExc() {
}
//移除异常
public void moveOutToExc() {
}
/**
* 等待
*
* @param millis 毫秒
*/
private boolean delay(int millis) {
try {
Thread.sleep(millis);
return true;
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
return false;
}
}
Loading…
Cancel
Save