Browse Source

feat:工艺添加溶液,部分实现

master
白凤吉 3 months ago
parent
commit
ba06c8b808
  1. 12
      src/main/java/com/iflytop/gd/app/model/bo/Point3D.java
  2. 77
      src/main/java/com/iflytop/gd/app/service/CraftsStepService.java
  3. 69
      src/main/java/com/iflytop/gd/app/service/DeviceCommandUtilService.java
  4. 133
      src/main/java/com/iflytop/gd/common/enums/data/DevicePositionCode.java

12
src/main/java/com/iflytop/gd/app/model/bo/Point3D.java

@ -1,14 +1,16 @@
package com.iflytop.gd.app.model.bo; package com.iflytop.gd.app.model.bo;
import lombok.Getter;
import lombok.Data;
@Getter
@Data
public class Point3D { public class Point3D {
private final Double x;
private final Double y;
private final Double z;
private Double x;
private Double y;
private Double z;
public Point3D() {
}
public Point3D(Double x, Double y, Double z) { public Point3D(Double x, Double y, Double z) {
this.x = x; this.x = x;
this.y = y; this.y = y;

77
src/main/java/com/iflytop/gd/app/service/CraftsStepService.java

@ -4,10 +4,8 @@ import cn.hutool.json.JSONObject;
import com.iflytop.gd.app.core.DeviceState; import com.iflytop.gd.app.core.DeviceState;
import com.iflytop.gd.app.model.bo.CraftsStep; import com.iflytop.gd.app.model.bo.CraftsStep;
import com.iflytop.gd.app.model.bo.Point3D; import com.iflytop.gd.app.model.bo.Point3D;
import com.iflytop.gd.common.cmd.CommandFuture;
import com.iflytop.gd.common.cmd.DeviceCommandBundle;
import com.iflytop.gd.common.cmd.DeviceCommandGenerator;
import com.iflytop.gd.common.enums.HeatModuleId; import com.iflytop.gd.common.enums.HeatModuleId;
import com.iflytop.gd.common.enums.data.DevicePositionCode;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -19,6 +17,7 @@ import org.springframework.stereotype.Service;
public class CraftsStepService { public class CraftsStepService {
private final DeviceCommandService deviceCommandService; private final DeviceCommandService deviceCommandService;
private final DeviceCommandUtilService deviceCommandUtilService; private final DeviceCommandUtilService deviceCommandUtilService;
private final DevicePositionService devicePositionService;
/** /**
* 执行单个工艺步骤 * 执行单个工艺步骤
@ -44,38 +43,46 @@ public class CraftsStepService {
* 添加溶液 * 添加溶液
*/ */
private boolean addLiquid(String heatId, JSONObject params) throws Exception { private boolean addLiquid(String heatId, JSONObject params) throws Exception {
//TODO 判断加液区是否空闲
DeviceState.getInstance().waitLiquidIdle();//等待加液区空闲
//TODO 判断托盘电机是否升起
//升起托盘
HeatModuleId heatModuleId = HeatModuleId.valueOf(heatId); HeatModuleId heatModuleId = HeatModuleId.valueOf(heatId);
double heaterMotorMoveUpPosition = 0.0; //TODO 加热位抬升托盘位置 从数据库中获取
deviceCommandUtilService.heaterMotorMove(heatModuleId, heaterMotorMoveUpPosition);
//等待加液区空闲
DeviceState.getInstance().waitLiquidIdle();//等待加液区空闲
double heaterMotorMoveUp = devicePositionService.getPosition(DevicePositionCode.trayLift).getDistance(); //获取加热位抬升托盘位置
deviceCommandUtilService.heaterMotorMove(heatModuleId, heaterMotorMoveUp);//抬升加热位托盘
//TODO 判断托盘是否有拍子 //TODO 判断托盘是否有拍子
//将机械臂移动至托盘上方
Point3D aboveTrayPoint3D = new Point3D(0.0, 0.0, 0.0);//TODO 托盘上方点位 从数据库中获取
deviceCommandUtilService.gantryMove(aboveTrayPoint3D);
//下降机械臂使夹爪可以夹住拍子
double aboveTrayCapPosition = 0.0;//TODO 下降机械臂使夹爪可以夹住拍子的位置 从数据库中获取
deviceCommandUtilService.gantryXMove(aboveTrayCapPosition);
//夹住拍子
double clawClampPosition = 0.0;//TODO 夹拍子收紧度 从数据库中获取
deviceCommandUtilService.clawClamp(clawClampPosition);
//机械臂提升至安全高度
double gantryCarryCapUpSafePosition = 0.0;//TODO 机械臂携带拍子的安全高度位置 从数据库中获取
deviceCommandUtilService.gantryZMove(gantryCarryCapUpSafePosition);
//下降拍子存放区1个位置
deviceCommandUtilService.capMotorMove(-1);
//将机械臂移动至拍子存放区上方
//下降机械臂
//松开夹爪
//将机械臂移动至托盘上方
//下降机械臂使夹爪可以夹住托盘
//机械臂提升至安全位置
//移动机械臂至加液区
//下降机械臂将托盘与试管落入加液区
//松开夹爪
//提升机械臂至安全高度
Point3D heatAreaCapClawPointPoint3D = deviceCommandUtilService.getHeatAreaCapClawPointPoint3D(heatModuleId);//获取托盘上方点位
deviceCommandUtilService.gantryMove(heatAreaCapClawPointPoint3D);//将机械臂移动至拍子上方
double clawCapPick = devicePositionService.getPosition(DevicePositionCode.clawCapPick).getDistance(); //拍子夹取距离
deviceCommandUtilService.clawMove(clawCapPick);//将夹爪张开
double clawDescendDistance = devicePositionService.getPosition(DevicePositionCode.clawDescendDistance).getDistance();//获取下降机械臂使夹爪可以夹住的距离
deviceCommandUtilService.gantryZMove(clawDescendDistance); //下降机械臂使夹爪可以夹住拍子
double clawCapGrip = devicePositionService.getPosition(DevicePositionCode.clawCapGrip).getDistance(); //获取拍子夹紧距离
deviceCommandUtilService.clawMove(clawCapGrip);//将夹爪收紧
double capSafetyHeight = devicePositionService.getPosition(DevicePositionCode.capSafetyHeight).getDistance();//获取移动拍子的安全高度
deviceCommandUtilService.gantryZMoveBy(capSafetyHeight);//机械臂提升至移动拍子的安全高度
deviceCommandUtilService.capMotorMove(-1); //下降拍子存放区1个位置
Point3D capStorageCapClawPoint = devicePositionService.getPosition(DevicePositionCode.capStorageCapClawPoint).getPoint3D();//将机械臂移动至拍子存放区上方;
Point3D capStorageCapClawPointSafetyHeight = new Point3D(capStorageCapClawPoint.getX(), capStorageCapClawPoint.getY(), capStorageCapClawPoint.getZ() + capSafetyHeight);//拍子存放区上方加上移动拍子的安全高度
deviceCommandUtilService.gantryMove(capStorageCapClawPointSafetyHeight);//移动机械臂至拍子存放区上方加上拍子的安全高度
deviceCommandUtilService.gantryZMoveBy(capSafetyHeight);//下降机械臂使拍子落入存放区
deviceCommandUtilService.clawMove(clawCapPick); //松开夹爪放开拍子
deviceCommandUtilService.gantryZMoveBy(capStorageCapClawPoint.getZ());//将机械臂抬升至托盘上方
Point3D heatAreaTrayClaw = deviceCommandUtilService.getHeatAreaTrayClawPoint3D(heatModuleId);//获取指定托盘上方点位
deviceCommandUtilService.gantryMove(heatAreaTrayClaw);//将机械臂移动至托盘上方
double clawTrayPick = devicePositionService.getPosition(DevicePositionCode.clawTrayPick).getDistance();//获取夹爪托盘夹取距离
deviceCommandUtilService.clawMove(clawTrayPick);//将夹爪张开
deviceCommandUtilService.gantryZMove(clawDescendDistance); //下降机械臂使夹爪可以夹住托盘
double clawTrayGrip = devicePositionService.getPosition(DevicePositionCode.clawTrayGrip).getDistance();//获取夹爪托盘夹紧距离
deviceCommandUtilService.clawMove(clawTrayGrip);//将夹爪收紧
double traySafetyHeight = devicePositionService.getPosition(DevicePositionCode.traySafetyHeight).getDistance();//获取移动托盘的安全高度
deviceCommandUtilService.gantryZMoveBy(traySafetyHeight);//机械臂提升至移动托盘的安全高度
Point3D liquidAreaTrayPoint = devicePositionService.getPosition(DevicePositionCode.liquidAreaTrayPoint).getPoint3D();//获取加液区托盘夹爪点
Point3D liquidAreaTrayPointSafetyHeight = new Point3D(liquidAreaTrayPoint.getX(),liquidAreaTrayPoint.getY(), liquidAreaTrayPoint.getZ() + traySafetyHeight);//加液区托盘点位上方加上移动托盘的安全高度
deviceCommandUtilService.gantryMove(liquidAreaTrayPointSafetyHeight);//移动机械臂至加液区托盘点位上方加上移动托盘的安全高度
deviceCommandUtilService.gantryZMoveBy(traySafetyHeight);//下降机械臂将托盘与试管落入加液区
deviceCommandUtilService.clawMove(clawTrayPick);//松开夹爪放下托盘
deviceCommandUtilService.gantryZMoveBy(clawDescendDistance);
//for 根据工艺配置添加溶液 //for 根据工艺配置添加溶液
//加液机械臂移动至第N个试管 //加液机械臂移动至第N个试管
//启动x加液泵添加m毫升溶液 //启动x加液泵添加m毫升溶液
@ -95,12 +102,16 @@ public class CraftsStepService {
* 加热 * 加热
*/ */
private boolean heating(String heatId, JSONObject params) { private boolean heating(String heatId, JSONObject params) {
//if 判断加液区是否有托盘 //if 判断加液区是否有托盘
//将机械臂移动至加液区托盘上方 //将机械臂移动至加液区托盘上方
//下降机械臂使夹爪可以夹住托盘 //下降机械臂使夹爪可以夹住托盘
//夹住托盘 //夹住托盘
//将托盘提升至安全高度 //将托盘提升至安全高度
//将机械臂移动至加热区上方 //将机械臂移动至加热区上方
DeviceState.getInstance().setLiquidIdleTrue();//释放加液区等待
//下降机械臂使托盘与试管落入加热区 //下降机械臂使托盘与试管落入加热区
//将机械臂提升至安全高度 //将机械臂提升至安全高度
//移动机械臂至拍子存放区上方 //移动机械臂至拍子存放区上方

69
src/main/java/com/iflytop/gd/app/service/DeviceCommandUtilService.java

@ -1,10 +1,12 @@
package com.iflytop.gd.app.service; package com.iflytop.gd.app.service;
import com.iflytop.gd.app.model.bo.Point3D; import com.iflytop.gd.app.model.bo.Point3D;
import com.iflytop.gd.app.model.entity.DevicePosition;
import com.iflytop.gd.common.cmd.CommandFuture; import com.iflytop.gd.common.cmd.CommandFuture;
import com.iflytop.gd.common.cmd.DeviceCommandBundle; import com.iflytop.gd.common.cmd.DeviceCommandBundle;
import com.iflytop.gd.common.cmd.DeviceCommandGenerator; import com.iflytop.gd.common.cmd.DeviceCommandGenerator;
import com.iflytop.gd.common.enums.HeatModuleId; import com.iflytop.gd.common.enums.HeatModuleId;
import com.iflytop.gd.common.enums.data.DevicePositionCode;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
@ -16,6 +18,7 @@ import java.util.concurrent.TimeUnit;
@RequiredArgsConstructor @RequiredArgsConstructor
public class DeviceCommandUtilService { public class DeviceCommandUtilService {
private final DeviceCommandService deviceCommandService; private final DeviceCommandService deviceCommandService;
private final DevicePositionService devicePositionService;
/** /**
* 龙门架机械臂移动到指定点 * 龙门架机械臂移动到指定点
@ -58,9 +61,36 @@ public class DeviceCommandUtilService {
} }
/** /**
* 收紧夹爪
* 龙门架机械臂X轴相对移动到指定点
*/ */
public void clawClamp(double position) throws Exception {
public void gantryXMoveBy(double position) throws Exception {
DeviceCommandBundle gantryXMoveDeviceCommand = DeviceCommandGenerator.gantryXMoveBy(position);
CommandFuture gantryXMoveDeviceCommandFuture = deviceCommandService.sendCommand(gantryXMoveDeviceCommand);
commandWait(gantryXMoveDeviceCommandFuture);
}
/**
* 龙门架机械臂Y轴相对移动到指定点
*/
public void gantryYMoveBy(double position) throws Exception {
DeviceCommandBundle gantryXMoveDeviceCommand = DeviceCommandGenerator.gantryYMoveBy(position);
CommandFuture gantryXMoveDeviceCommandFuture = deviceCommandService.sendCommand(gantryXMoveDeviceCommand);
commandWait(gantryXMoveDeviceCommandFuture);
}
/**
* 龙门架机械臂Z轴相对移动到指定点
*/
public void gantryZMoveBy(double position) throws Exception {
DeviceCommandBundle gantryXMoveDeviceCommand = DeviceCommandGenerator.gantryZMoveBy(position);
CommandFuture gantryXMoveDeviceCommandFuture = deviceCommandService.sendCommand(gantryXMoveDeviceCommand);
commandWait(gantryXMoveDeviceCommandFuture);
}
/**
* 移动夹爪
*/
public void clawMove(double position) throws Exception {
DeviceCommandBundle deviceCommand = DeviceCommandGenerator.clawMove(position); DeviceCommandBundle deviceCommand = DeviceCommandGenerator.clawMove(position);
CommandFuture deviceCommandFuture = deviceCommandService.sendCommand(deviceCommand); CommandFuture deviceCommandFuture = deviceCommandService.sendCommand(deviceCommand);
commandWait(deviceCommandFuture); commandWait(deviceCommandFuture);
@ -68,6 +98,7 @@ public class DeviceCommandUtilService {
/** /**
* 调整拍子升降电机位置 * 调整拍子升降电机位置
*
* @param num 1为上升1格-1为下降1格 * @param num 1为上升1格-1为下降1格
*/ */
public void capMotorMove(int num) throws Exception { public void capMotorMove(int num) throws Exception {
@ -102,4 +133,38 @@ public class DeviceCommandUtilService {
CompletableFuture.allOf(responseFutures) CompletableFuture.allOf(responseFutures)
.get(120, TimeUnit.SECONDS); .get(120, TimeUnit.SECONDS);
} }
/////////////////////////////////////////////////获取位置
/**
* 获取指定加热区托盘夹爪点位
*/
public Point3D getHeatAreaTrayClawPoint3D(HeatModuleId heatModuleId) {
DevicePosition devicePosition = switch (heatModuleId) {
case heat_module_01 -> devicePositionService.getPosition(DevicePositionCode.heatArea1TrayClawPoint);
case heat_module_02 -> devicePositionService.getPosition(DevicePositionCode.heatArea2TrayClawPoint);
case heat_module_03 -> devicePositionService.getPosition(DevicePositionCode.heatArea3TrayClawPoint);
case heat_module_04 -> devicePositionService.getPosition(DevicePositionCode.heatArea4TrayClawPoint);
case heat_module_05 -> devicePositionService.getPosition(DevicePositionCode.heatArea5TrayClawPoint);
case heat_module_06 -> devicePositionService.getPosition(DevicePositionCode.heatArea6TrayClawPoint);
};
return devicePosition.getPoint3D();
}
/**
* 获取指定加热区拍子夹爪点位
*/
public Point3D getHeatAreaCapClawPointPoint3D(HeatModuleId heatModuleId) {
DevicePosition devicePosition = switch (heatModuleId) {
case heat_module_01 -> devicePositionService.getPosition(DevicePositionCode.heatArea1CapClawPoint);
case heat_module_02 -> devicePositionService.getPosition(DevicePositionCode.heatArea2CapClawPoint);
case heat_module_03 -> devicePositionService.getPosition(DevicePositionCode.heatArea3CapClawPoint);
case heat_module_04 -> devicePositionService.getPosition(DevicePositionCode.heatArea4CapClawPoint);
case heat_module_05 -> devicePositionService.getPosition(DevicePositionCode.heatArea5CapClawPoint);
case heat_module_06 -> devicePositionService.getPosition(DevicePositionCode.heatArea6CapClawPoint);
};
return devicePosition.getPoint3D();
}
} }

133
src/main/java/com/iflytop/gd/common/enums/data/DevicePositionCode.java

@ -8,109 +8,158 @@ import lombok.Getter;
@Getter @Getter
public enum DevicePositionCode { public enum DevicePositionCode {
/** /**
* 托盘夹取位置
* 试管间距距离
*/ */
trayPick(DevicePositionType.DISTANCE, "托盘夹取位置"),
testTubeSpacing(DevicePositionType.DISTANCE, "试管间距距离"),
/** /**
* 托盘夹紧位置
* 夹爪托盘夹取距离
*/ */
trayGrip(DevicePositionType.DISTANCE, "托盘夹紧位置"),
clawTrayPick(DevicePositionType.DISTANCE, "夹爪托盘夹取距离"),
/** /**
* 加液区原点
* 夹爪托盘夹紧距离
*/ */
liquidAreaOrigin(DevicePositionType.POINT_3D, "加液区原点"),
clawTrayGrip(DevicePositionType.DISTANCE, "夹爪托盘夹紧距离"),
/** /**
* 加热区1原点
* 夹爪试管夹取距离
*/ */
heatArea1Origin(DevicePositionType.POINT_3D, "加热区1原点"),
clawTestTubePick(DevicePositionType.DISTANCE, "夹爪试管夹取距离"),
/** /**
* 加热区2原点
* 夹爪试管夹紧距离
*/ */
heatArea2Origin(DevicePositionType.POINT_3D, "加热区2原点"),
clawTestTubeGrip(DevicePositionType.DISTANCE, "夹爪试管夹紧距离"),
/**
* 夹爪拍子夹取距离
*/
clawCapPick(DevicePositionType.DISTANCE, "夹爪拍子夹取距离"),
/**
* 夹爪拍子夹紧距离
*/
clawCapGrip(DevicePositionType.DISTANCE, "夹爪拍子夹紧距离"),
/**
* 开门距离
*/
doorOpen(DevicePositionType.DISTANCE, "开门距离"),
/**
* 关门距离
*/
doorClose(DevicePositionType.DISTANCE, "关门距离"),
/**
* 托盘抬升距离
*/
trayLift(DevicePositionType.DISTANCE, "托盘抬升距离"),
/**
* 托盘下降距离
*/
trayLower(DevicePositionType.DISTANCE, "托盘下降距离"),
/**
* 夹爪夹取下降距离
*/
clawDescendDistance(DevicePositionType.DISTANCE, "夹爪夹取下降距离"),
/** /**
* 加热区3原点
* 移动拍子安全高度
*/ */
heatArea3Origin(DevicePositionType.POINT_3D, "加热区3原点"),
capSafetyHeight(DevicePositionType.DISTANCE, "移动拍子安全高度"),
/** /**
* 加热区4原点
* 移动托盘安全高度
*/ */
heatArea4Origin(DevicePositionType.POINT_3D, "加热区4原点"),
traySafetyHeight(DevicePositionType.DISTANCE, "移动托盘安全高度"),
/** /**
* 加热区5原点
* 移动试管安全高度
*/ */
heatArea5Origin(DevicePositionType.POINT_3D, "加热区5原点"),
testTubeSafetyHeight(DevicePositionType.DISTANCE, "移动试管安全高度"),
////////////////////////
/** /**
* 加热区6原点
* 拍子存放区拍子夹爪
*/ */
heatArea6Origin(DevicePositionType.POINT_3D, "加热区6原点"),
capStorageCapClawPoint(DevicePositionType.POINT_3D, "拍子存放区拍子夹爪点"),
/** /**
* 试管间距
* 加液区托盘夹爪点
*/ */
testTubeSpacing(DevicePositionType.DISTANCE, "试管间距"),
liquidAreaTrayPoint(DevicePositionType.POINT_3D, "加液区托盘夹爪点"),
/** /**
* 试管夹取位置
* 加热区1托盘夹爪点
*/ */
testTubePick(DevicePositionType.DISTANCE, "试管夹取位置"),
heatArea1TrayClawPoint(DevicePositionType.POINT_3D, "加热区1托盘夹爪点"),
/** /**
* 试管夹紧位置
* 加热区2托盘夹爪点
*/ */
testTubeGrip(DevicePositionType.DISTANCE, "试管夹紧位置"),
heatArea2TrayClawPoint(DevicePositionType.POINT_3D, "加热区2托盘夹爪点"),
/** /**
* 拍子相对原点位置
* 加热区3托盘夹爪点
*/ */
capRelativeToOrigin(DevicePositionType.POINT_3D, "拍子相对原点位置"),
heatArea3TrayClawPoint(DevicePositionType.POINT_3D, "加热区3托盘夹爪点"),
/** /**
* 拍子夹取位置
* 加热区4托盘夹爪点
*/ */
capPick(DevicePositionType.DISTANCE, "拍子夹取位置"),
heatArea4TrayClawPoint(DevicePositionType.POINT_3D, "加热区4托盘夹爪点"),
/** /**
* 拍子夹紧位置
* 加热区5托盘夹爪点
*/ */
capGrip(DevicePositionType.DISTANCE, "拍子夹紧位置"),
heatArea5TrayClawPoint(DevicePositionType.POINT_3D, "加热区5托盘夹爪点"),
/** /**
* 拍子存放区位置
* 加热区6托盘夹爪点
*/ */
capStorage(DevicePositionType.POINT_3D, "拍子存放区位置"),
heatArea6TrayClawPoint(DevicePositionType.POINT_3D, "加热区6托盘夹爪点"),
/** /**
* 拍子相对原点位置
* 加热区1拍子夹爪点
*/ */
capRelativePosition(DevicePositionType.POINT_3D, "拍子相对原点位置"),
heatArea1CapClawPoint(DevicePositionType.POINT_3D, "加热区1拍子夹爪点"),
/** /**
* 托盘相对原点位置
* 加热区2拍子夹爪点
*/ */
trayRelativeToOrigin(DevicePositionType.POINT_3D, "托盘相对原点位置"),
heatArea2CapClawPoint(DevicePositionType.POINT_3D, "加热区2拍子夹爪点"),
/** /**
* 试管相对原点位置
* 加热区3拍子夹爪点
*/ */
testTubeRelativeToOrigin(DevicePositionType.POINT_3D, "试管相对原点位置"),
heatArea3CapClawPoint(DevicePositionType.POINT_3D, "加热区3拍子夹爪点"),
/** /**
* 开门位置
* 加热区4拍子夹爪点
*/ */
doorOpen(DevicePositionType.DISTANCE, "开门位置"),
heatArea4CapClawPoint(DevicePositionType.POINT_3D, "加热区4拍子夹爪点"),
/** /**
* 关门位置
* 加热区5拍子夹爪点
*/ */
doorClose(DevicePositionType.DISTANCE, "关门位置");
heatArea5CapClawPoint(DevicePositionType.POINT_3D, "加热区5拍子夹爪点"),
/**
* 加热区6拍子夹爪点
*/
heatArea6CapClawPoint(DevicePositionType.POINT_3D, "加热区6拍子夹爪点"),
/**
* 拍子存放区夹爪点
*/
capStorageClawPoint(DevicePositionType.POINT_3D, "拍子存放区夹爪点");
private final DevicePositionType type; private final DevicePositionType type;
private final String name; private final String name;

Loading…
Cancel
Save