Browse Source

update

tags/v0
zhaohe 10 months ago
parent
commit
a1895216c5
  1. 2
      src/main/java/a8k/service/app/appctrl/DeviceInitCtrlService.java
  2. 11
      src/main/java/a8k/service/app/appctrl/mainflowctrl/action/SEQ4_PRE_PROCESS.java
  3. 2
      src/main/java/a8k/service/app/devicedriver/basectrl/CodeScaner.java
  4. 208
      src/main/java/a8k/service/app/devicedriver/basectrl/HbotBaseMoveControlService.java
  5. 4
      src/main/java/a8k/service/app/devicedriver/basectrl/HbotModule.java
  6. 4
      src/main/java/a8k/service/app/devicedriver/basectrl/PipetteCtrlModule.java
  7. 2
      src/main/java/a8k/service/app/devicedriver/basectrl/type/HbotRegIndex.java
  8. 2
      src/main/java/a8k/service/app/devicedriver/basectrl/type/PipetteRegIndex.java
  9. 4
      src/main/java/a8k/service/app/devicedriver/calibration/Hbot2DCodeScanPosCalibration.java
  10. 2
      src/main/java/a8k/service/app/devicedriver/commonctrl/HardwareCommonCtrl.java
  11. 19
      src/main/java/a8k/service/app/devicedriver/ctrl/ConsumablesScanCtrl.java
  12. 314
      src/main/java/a8k/service/app/devicedriver/ctrl/HbotControlService.java
  13. 2
      src/main/java/a8k/service/app/devicedriver/ctrl/PipetteGunCtrlService.java
  14. 6
      src/main/java/a8k/service/app/devicedriver/testscript/TestScript.java

2
src/main/java/a8k/service/app/appctrl/DeviceInitCtrlService.java

@ -9,7 +9,7 @@ import a8k.service.debug.AppDebugHelperService;
import a8k.type.checkpoint.CheckResult;
import a8k.type.checkpoint.Checkpoint;
import a8k.service.app.appstate.GStateService;
import a8k.service.app.devicedriver.ctrl.basic.HbotModule;
import a8k.service.app.devicedriver.basectrl.HbotModule;
import a8k.type.exception.AppException;
import jakarta.annotation.PostConstruct;
import jakarta.annotation.Resource;

11
src/main/java/a8k/service/app/appctrl/mainflowctrl/action/SEQ4_PRE_PROCESS.java

@ -3,8 +3,6 @@ package a8k.service.app.appctrl.mainflowctrl.action;
import a8k.OS;
import a8k.service.app.appctrl.mainflowctrl.CondtionMgrService;
import a8k.service.app.appdata.AppProjInfoMgrService;
import a8k.service.app.appstate.type.state.IncubationSubTankState;
import a8k.service.app.appstate.type.state.ProjProcessState;
import a8k.service.debug.AppDebugHelperService;
import a8k.utils.AppExceptionBuilder;
import a8k.service.bases.AppEventBusService;
@ -13,8 +11,7 @@ import a8k.service.app.appctrl.mainflowctrl.base.A8kStepAction;
import a8k.service.app.appstate.*;
import a8k.service.app.appstate.resource.A8kPublicResourceType;
import a8k.service.app.appstate.type.Tube;
import a8k.service.app.appstate.type.state.TubeState;
import a8k.service.app.devicedriver.ctrl.HbotControlService;
import a8k.service.app.devicedriver.basectrl.HbotBaseMoveControlService;
import a8k.service.app.devicedriver.ctrl.ReactionPlatesTransmitCtrl;
import a8k.service.app.devicedriver.ctrl.SampleScanTransportHardwareControler;
import a8k.service.app.devicedriver.ctrl.SamplesPreProcesCtrl;
@ -61,11 +58,11 @@ public class SEQ4_PRE_PROCESS extends A8kStepAction {
@Resource
ReactionPlatesTransmitCtrl reactionPlatesTransmitCtrl;
@Resource
SamplesPreProcesCtrl samplesPreProcesCtrl;
SamplesPreProcesCtrl samplesPreProcesCtrl;
@Resource
HbotControlService hbotControlService;
HbotBaseMoveControlService hbotBaseMoveControlService;
@Resource
IncubationPlateStateMgrService incubationPlateStateMgrService;
IncubationPlateStateMgrService incubationPlateStateMgrService;
@Resource
ProjectProcessContextMgrService projectProcessContextMgrService;
@Resource

2
src/main/java/a8k/service/app/devicedriver/ctrl/CodeScaner.java → src/main/java/a8k/service/app/devicedriver/basectrl/CodeScaner.java

@ -1,4 +1,4 @@
package a8k.service.app.devicedriver.ctrl;
package a8k.service.app.devicedriver.basectrl;
import a8k.hardware.A8kCanBusService;
import a8k.hardware.type.a8kcanprotocol.MId;

208
src/main/java/a8k/service/app/devicedriver/basectrl/HbotBaseMoveControlService.java

@ -0,0 +1,208 @@
package a8k.service.app.devicedriver.basectrl;
import a8k.extapi_controler.pagecontrol.ExtApiTabConfig;
import a8k.extapi_controler.utils.ExtApiTab;
import a8k.service.app.devicedriver.basectrl.type.PipetteRegIndex;
import a8k.type.exception.AppException;
import a8k.type.cfg.*;
import a8k.hardware.A8kCanBusService;
import a8k.hardware.type.a8kcanprotocol.A8kEcode;
import a8k.hardware.type.a8kcanprotocol.IOId;
import a8k.hardware.type.a8kcanprotocol.MId;
import a8k.hardware.type.regindex.RegIndex;
import jakarta.annotation.Resource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
/**
* Hbot控制服务
*/
@Component
@ExtApiTab(cfg = ExtApiTabConfig.HbotControlService)
public class HbotBaseMoveControlService {
static Logger logger = LoggerFactory.getLogger(HbotBaseMoveControlService.class);
@Resource
A8kCanBusService canBus;
@Resource
PipetteCtrlModule pipetteCtrlModule;
@Resource
HbotModule hbotModule;
Integer ao = 20000;
public void hbotMoveTo(Pos3d targetPos) throws AppException {
logger.info("hbotCheckAndMoveTo:{}", targetPos);
// 检查盖板是否关闭
if (!canBus.getIOState(IOId.PlateBoxCoverClosurePPS)) {
throw new AppException(A8kEcode.APPE_PLATE_BOX_NOT_COVER);
}
boolean zEnable = true;
boolean hbotEnable = canBus.moduleGetReg(MId.HbotM, RegIndex.kreg_xyrobot_is_enable) == 1;
//检查Z轴是否使能如果没有使能使能并移动到零点
if (pipetteCtrlModule.getReg(PipetteRegIndex.kreg_pipette_zm_is_enable) == 0) {
pipetteCtrlModule.zMotorEnable(1);
pipetteCtrlModule.zMotorMoveZeroBlock();
zEnable = false;
}
//检查Z轴是否在零点
if (!pipetteCtrlModule.zAixsZeroPointIsTrigger()) {
pipetteCtrlModule.zMotorMoveToZeroPointQuickBlock();
}
if (!pipetteCtrlModule.zAixsZeroPointIsTrigger()) {
throw new AppException(A8kEcode.CODEERROR_ZM_NOT_AT_ZERO_POS_WHEN_HBOT_TRY_MOVE);
}
// HBot移动
hbotModule.enable(1);
hbotModule.moveToBlock(targetPos.x - 20, targetPos.y - 20, ao);
hbotModule.moveToBlock(targetPos.x, targetPos.y, ao);
hbotModule.moveToBlock(targetPos.x, targetPos.y, ao);
// Z轴移动
if (targetPos.z != 0) {
pipetteCtrlModule.zMotorEnable(1);
pipetteCtrlModule.zMotorMoveToZeroPointQuickBlock();
pipetteCtrlModule.zMotorMoveToBlock(targetPos.z);
}
pipetteCtrlModule.zMotorEnable(zEnable ? 1 : 0);
hbotModule.enable(hbotEnable ? 1 : 0);
}
public void hbotMoveTo(Pos2d tpos) throws AppException {
hbotMoveTo(new Pos3d(tpos.x, tpos.y, 0));
}
// public String scan2dCode(Integer waittime) throws AppException {
// try {
// canBus.codeScanerStartScan(MId.PipetteModCodeScanner);
// String result = canBus.codeScanerWaittingForResult(MId.PipetteModCodeScanner, waittime);
// canBus.codeScanerStopScan(MId.PipetteModCodeScanner);
// return result;
// } catch (AppException e) {
// return "";
// }
// }
//
//
// public void zMoveTo(Integer z) throws AppException {
// if (z == 0) {
// pipetteCtrlModule.zMotorMoveToZeroPointQuickBlock();
// } else {
// pipetteCtrlModule.zMotorMoveToBlock(z);
// }
// }
//
// private void hbotCheckAndMoveTo(Pos2d targetPos) throws AppException {
// hbotMoveTo(new Pos3d(targetPos.x, targetPos.y, 0));
// }
// private void modGroupMoveToZero() throws AppException {
// if (!canBus.getIOState(IOId.PlateBoxCoverClosurePPS)) {
// throw new AppException(A8kEcode.APPE_PLATE_BOX_NOT_COVER);
// }
//
// pipetteCtrlModule.zMotorEnable(1);
// hbotModule.enable(1);
//
// hbotModule.moveToZeroBlock(timep.getHbotRuntoZeroActionOvertime());
//
// // 丢弃tip
// Pos3d dropPos = pp.getTipDropPos();
// hbotMoveTo(dropPos);
// // TODO: canBus.pipetteCtrlInitDeviceBlock(MId.PipetteMod, timep.getActionOvertime());
//
// // 快速归零
// modGroupMoveToZeroQuick();
// }
// private void modGroupMoveToZeroQuick() throws AppException {
// hbotCheckAndMoveTo(new Pos2d(0, 0));
// }
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// 单步测试
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// @ExtApiFn(name = "丢Tip", group = "单步测试")
// public void dropTip() throws AppException {
// Pos3d pos = pp.getTipDropPos();
// hbotMoveTo(pos.x, pos.y);
// zMoveTo(pos.z);
// pipetteCtrlModule.putTipBlock();
// zMoveTo(0);
// }
//
// @ExtApiFn(name = "取Tip", group = "单步测试")
// public Boolean takeTip(TipGroup tipGroup, Integer index) throws AppException {
// logger.info("takeTip groupId:{} index:{}", tipGroup.ordinal(), index);
//
// if (index > TipPickUpPosInfo.cgetTipNum() || index < 0) {
// throw new AppException(A8kEcode.CODEERROR_PARAM_OUT_OF_RANGE);
// }
//
// TipPickUpPosInfo tipPos = pp.getTipPickUpPosInfo();
// Pos2d pos = tipPos.getTipPos(tipGroup.ordinal(), index);
// hbotMoveTo(pos.x, pos.y);
//
// //TODO: 补偿group大于1时z轴需要补偿0.2mm
// Integer zCompensate = 0;
// if (tipGroup.ordinal() > 1) {
// zCompensate = 2;
// }
//
// pipetteCtrlModule.zMotorMoveToBlock(tipPos.getPickUpZPos(tipGroup.ordinal()) + zCompensate);
// pipetteCtrlModule.zMotorMoveToZeroPointQuickBlock();
//
// Boolean isGetTip = canBus.moduleGetReg(MId.PipetteMod, RegIndex.kreg_pipette_tip_state) == 1;
// if (!isGetTip) {
// logger.error("takeTip fail");
// }
// return isGetTip;
// }
// @ExtApiFn(name = "HBot移动到", group = "单步测试")
// public void hbotMoveTo(Integer x, Integer y) throws AppException {
// hbotCheckAndMoveTo(new Pos2d(x, y));
// }
// @ExtApiFn(name = "HBot移动到小瓶缓冲液X孔", group = "单步测试")
// public void hbotMoveToSmallBottleGroup(ConsumableGroup group, Integer Xhole)
// throws AppException {
// BottleGroupsPosInfo posInfo = pp.getBottleBufferPosInfo();
// if (Xhole < 0 || Xhole > BottlesPosInfo.cgetMAX()) {
// throw new AppException(A8kEcode.CODEERROR_PARAM_OUT_OF_RANGE);
// }
// Pos2d pos = posInfo.cgetSmallBottleBufferPos(group.off, Xhole);
// hbotCheckAndMoveTo(pos);
// }
//
// @ExtApiFn(name = "HBot移动到探测物质X孔", group = "单步测试")
// public void hbotMoveToDetectMaterialPos(ConsumableGroup group, Integer Xhole)
// throws AppException {
// BottleGroupsPosInfo posInfo = pp.getBottleBufferPosInfo();
// if (Xhole < 0 || Xhole > BottlesPosInfo.cgetMAX()) {
// throw new AppException(A8kEcode.CODEERROR_PARAM_OUT_OF_RANGE);
// }
// Pos2d pos = posInfo.cgetDetectMaterialPos(group.off, Xhole);
// hbotCheckAndMoveTo(pos);
// }
//
// @ExtApiFn(name = "HBot移动到大瓶缓冲液X孔", group = "单步测试")
// public void hbotMoveToLargeBottleGroup(ConsumableGroup ch) throws AppException {
// LargeBottleBufferPos posInfo = pp.getLargeBottleBufferPosInfo();
// Pos2d pos = posInfo.cgetBottlePos(ch.off);
// hbotCheckAndMoveTo(pos);
// }
//
// @ExtApiFn(name = "HBot移动到急诊位", group = "单步测试")
// public void hbotMoveToEmergencyPos() throws AppException {
// hbotMoveTo(pp.getEmergencyPos());
// }
}

4
src/main/java/a8k/service/app/devicedriver/ctrl/basic/HbotModule.java → src/main/java/a8k/service/app/devicedriver/basectrl/HbotModule.java

@ -1,9 +1,9 @@
package a8k.service.app.devicedriver.ctrl.basic;
package a8k.service.app.devicedriver.basectrl;
import a8k.hardware.A8kCanBusService;
import a8k.hardware.type.a8kcanprotocol.CmdId;
import a8k.hardware.type.a8kcanprotocol.MId;
import a8k.service.app.devicedriver.ctrl.type.HbotRegIndex;
import a8k.service.app.devicedriver.basectrl.type.HbotRegIndex;
import a8k.type.cfg.Pos2d;
import a8k.type.exception.AppException;
import jakarta.annotation.Resource;

4
src/main/java/a8k/service/app/devicedriver/ctrl/basic/PipetteCtrlModule.java → src/main/java/a8k/service/app/devicedriver/basectrl/PipetteCtrlModule.java

@ -1,4 +1,4 @@
package a8k.service.app.devicedriver.ctrl.basic;
package a8k.service.app.devicedriver.basectrl;
import a8k.extapi_controler.pagecontrol.ExtApiTabConfig;
import a8k.extapi_controler.utils.ExtApiTab;
@ -7,7 +7,7 @@ import a8k.hardware.A8kCanBusService;
import a8k.hardware.type.LldType;
import a8k.hardware.type.a8kcanprotocol.CmdId;
import a8k.hardware.type.a8kcanprotocol.MId;
import a8k.service.app.devicedriver.ctrl.type.PipetteRegIndex;
import a8k.service.app.devicedriver.basectrl.type.PipetteRegIndex;
import a8k.hardware.type.regindex.RegIndex;
import a8k.type.exception.AppException;
import com.fasterxml.jackson.databind.ObjectMapper;

2
src/main/java/a8k/service/app/devicedriver/ctrl/type/HbotRegIndex.java → src/main/java/a8k/service/app/devicedriver/basectrl/type/HbotRegIndex.java

@ -1,4 +1,4 @@
package a8k.service.app.devicedriver.ctrl.type;
package a8k.service.app.devicedriver.basectrl.type;
import a8k.hardware.type.regindex.RegIndex;

2
src/main/java/a8k/service/app/devicedriver/ctrl/type/PipetteRegIndex.java → src/main/java/a8k/service/app/devicedriver/basectrl/type/PipetteRegIndex.java

@ -1,4 +1,4 @@
package a8k.service.app.devicedriver.ctrl.type;
package a8k.service.app.devicedriver.basectrl.type;
public enum PipetteRegIndex {
kreg_module_version(0), // 模块版本

4
src/main/java/a8k/service/app/devicedriver/calibration/Hbot2DCodeScanPosCalibration.java

@ -5,8 +5,8 @@ import a8k.extapi_controler.pagecontrol.ExtApiTabConfig;
import a8k.extapi_controler.utils.ExtApiFn;
import a8k.extapi_controler.utils.ExtApiTab;
import a8k.hardware.A8kCanBusService;
import a8k.service.app.devicedriver.ctrl.basic.PipetteCtrlModule;
import a8k.service.app.devicedriver.ctrl.CodeScaner;
import a8k.service.app.devicedriver.basectrl.PipetteCtrlModule;
import a8k.service.app.devicedriver.basectrl.CodeScaner;
import a8k.service.app.devicedriver.param.Hbot2DCodeScanPos;
import a8k.type.exception.AppException;
import com.fasterxml.jackson.databind.ObjectMapper;

2
src/main/java/a8k/service/app/devicedriver/commonctrl/HardwareCommonCtrl.java

@ -1,7 +1,7 @@
package a8k.service.app.devicedriver.commonctrl;
import a8k.service.app.devicedriver.ctrl.basic.HbotModule;
import a8k.service.app.devicedriver.basectrl.HbotModule;
import a8k.type.exception.AppException;
import a8k.type.appret.AppRet;
import a8k.extapi_controler.utils.ExtApiTab;

19
src/main/java/a8k/service/app/devicedriver/ctrl/ConsumablesScanCtrl.java

@ -1,5 +1,7 @@
package a8k.service.app.devicedriver.ctrl;
import a8k.service.app.devicedriver.basectrl.CodeScaner;
import a8k.service.app.devicedriver.basectrl.HbotBaseMoveControlService;
import a8k.service.bases.ActionReactorService;
import a8k.extapi_controler.pagecontrol.ExtApiTabConfig;
import a8k.extapi_controler.utils.ExtApiFn;
@ -21,43 +23,42 @@ public class ConsumablesScanCtrl {
@Resource
ActionReactorService ar;
@Resource
GStateService stateMgrService;
@Resource
Hbot2DCodeScanPos hbotScanPos;
@Resource
HbotControlService hbot;
CodeScaner codeScaner;
@Resource
HbotBaseMoveControlService hbot;
private void hbotMoveTo(Pos2d tpos) throws AppException {
hbot.hbotMoveTo(tpos);
}
private String scan2dCode(Integer waittime) throws AppException {
return hbot.scan2dCode(waittime);
private String scan2dCode() throws AppException {
return codeScaner.pipetteModCodeScannerScanCode();
}
private String scanPB(int ch) throws AppException {
Pos2d pos = hbotScanPos.getPBScanPosX(ch);
hbotMoveTo(pos);
return scan2dCode(100);
return scan2dCode();
}
private String scanLittBS(int ch) throws AppException {
Pos2d pos = hbotScanPos.getLittBSX(ch);
hbotMoveTo(pos);
return scan2dCode(100);
return scan2dCode();
}
private String scanLarBS(int ch) throws AppException {
Pos2d pos = hbotScanPos.getLarBSX(ch);
hbotMoveTo(pos);
return scan2dCode(100);
return scan2dCode();
}

314
src/main/java/a8k/service/app/devicedriver/ctrl/HbotControlService.java

@ -1,314 +0,0 @@
package a8k.service.app.devicedriver.ctrl;
import a8k.extapi_controler.pagecontrol.ExtApiTabConfig;
import a8k.extapi_controler.utils.ExtApiFn;
import a8k.extapi_controler.utils.ExtApiTab;
import a8k.service.app.devicedriver.ctrl.basic.PipetteCtrlModule;
import a8k.service.app.devicedriver.ctrl.basic.HbotModule;
import a8k.service.app.devicedriver.ctrl.type.PipetteRegIndex;
import a8k.service.app.devicedriver.param.PosParam;
import a8k.service.app.devicedriver.param.TimeParam;
import a8k.type.ConsumableGroup;
import a8k.type.exception.AppException;
import a8k.type.cfg.*;
import a8k.hardware.A8kCanBusService;
import a8k.hardware.type.a8kcanprotocol.A8kEcode;
import a8k.hardware.type.a8kcanprotocol.IOId;
import a8k.hardware.type.a8kcanprotocol.MId;
import a8k.hardware.type.regindex.RegIndex;
import a8k.type.type.TipGroup;
import jakarta.annotation.Resource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
/**
* Hbot控制服务
*/
@Component
@ExtApiTab(cfg = ExtApiTabConfig.HbotControlService)
public class HbotControlService {
static Logger logger = LoggerFactory.getLogger(HbotControlService.class);
@Resource
A8kCanBusService canBus;
@Resource
PipetteCtrlModule pipetteCtrlModule;
@Resource
HbotModule hbotModule;
@Resource
PosParam pp;
@Resource
TimeParam timep;
Integer ao = 20000;
public void hbotMoveTo(Pos3d targetPos) throws AppException {
logger.info("hbotCheckAndMoveTo:{}", targetPos);
// 检查盖板是否关闭
if (!canBus.getIOState(IOId.PlateBoxCoverClosurePPS)) {
throw new AppException(A8kEcode.APPE_PLATE_BOX_NOT_COVER);
}
boolean zEnable = true;
boolean hbotEnable = canBus.moduleGetReg(MId.HbotM, RegIndex.kreg_xyrobot_is_enable) == 1;
//检查Z轴是否使能如果没有使能使能并移动到零点
if (pipetteCtrlModule.getReg(PipetteRegIndex.kreg_pipette_zm_is_enable) == 0) {
pipetteCtrlModule.zMotorEnable(1);
pipetteCtrlModule.zMotorMoveZeroBlock();
zEnable = false;
}
//检查Z轴是否在零点
if (!pipetteCtrlModule.zAixsZeroPointIsTrigger()) {
pipetteCtrlModule.zMotorMoveToZeroPointQuickBlock();
}
if (!pipetteCtrlModule.zAixsZeroPointIsTrigger()) {
throw new AppException(A8kEcode.CODEERROR_ZM_NOT_AT_ZERO_POS_WHEN_HBOT_TRY_MOVE);
}
// HBot移动
hbotModule.enable( 1);
hbotModule.moveToBlock( targetPos.x - 20, targetPos.y - 20, ao);
hbotModule.moveToBlock( targetPos.x, targetPos.y, ao);
hbotModule.moveToBlock( targetPos.x, targetPos.y, ao);
// Z轴移动
if (targetPos.z != 0) {
pipetteCtrlModule.zMotorEnable(1);
pipetteCtrlModule.zMotorMoveToZeroPointQuickBlock();
pipetteCtrlModule.zMotorMoveToBlock(targetPos.z);
}
pipetteCtrlModule.zMotorEnable(zEnable ? 1 : 0);
hbotModule.enable( hbotEnable ? 1 : 0);
}
public void hbotMoveTo(Pos2d tpos) throws AppException {
hbotMoveTo(new Pos3d(tpos.x, tpos.y, 0));
}
public String scan2dCode(Integer waittime) throws AppException {
try {
canBus.codeScanerStartScan(MId.PipetteModCodeScanner);
String result = canBus.codeScanerWaittingForResult(MId.PipetteModCodeScanner, waittime);
canBus.codeScanerStopScan(MId.PipetteModCodeScanner);
return result;
} catch (AppException e) {
return "";
}
}
//
// public Integer getGripperZeroYPos() {
// 之所以这样写是因为是为了放置两个类之间的循环依赖
// assert appCxt != null;
// TODO
// return
// appCxt.getBean(SamplesPreProcessModuleCtrlService.class).getGripperZeroYPos();
// return 0;
// }
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// 基础控制
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
public void zMoveTo(Integer z) throws AppException {
if (z == 0) {
pipetteCtrlModule.zMotorMoveToZeroPointQuickBlock();
} else {
pipetteCtrlModule.zMotorMoveToBlock(z);
}
}
private void hbotCheckAndMoveTo(Pos2d targetPos) throws AppException {
hbotMoveTo(new Pos3d(targetPos.x, targetPos.y, 0));
}
private void modGroupMoveToZero() throws AppException {
if (!canBus.getIOState(IOId.PlateBoxCoverClosurePPS)) {
throw new AppException(A8kEcode.APPE_PLATE_BOX_NOT_COVER);
}
pipetteCtrlModule.zMotorEnable(1);
hbotModule.enable( 1);
hbotModule.moveToZeroBlock( timep.getHbotRuntoZeroActionOvertime());
// 丢弃tip
Pos3d dropPos = pp.getTipDropPos();
hbotMoveTo(dropPos);
// TODO: canBus.pipetteCtrlInitDeviceBlock(MId.PipetteMod, timep.getActionOvertime());
// 快速归零
modGroupMoveToZeroQuick();
}
private void modGroupMoveToZeroQuick() throws AppException {
hbotCheckAndMoveTo(new Pos2d(0, 0));
}
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// 单步测试
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
@ExtApiFn(name = "丢Tip", group = "单步测试")
public void dropTip() throws AppException {
Pos3d pos = pp.getTipDropPos();
hbotMoveTo(pos.x, pos.y);
zMoveTo(pos.z);
pipetteCtrlModule.putTipBlock();
zMoveTo(0);
}
@ExtApiFn(name = "取Tip", group = "单步测试")
public Boolean takeTip(TipGroup tipGroup, Integer index) throws AppException {
logger.info("takeTip groupId:{} index:{}", tipGroup.ordinal(), index);
if (index > TipPickUpPosInfo.cgetTipNum() || index < 0) {
throw new AppException(A8kEcode.CODEERROR_PARAM_OUT_OF_RANGE);
}
TipPickUpPosInfo tipPos = pp.getTipPickUpPosInfo();
Pos2d pos = tipPos.getTipPos(tipGroup.ordinal(), index);
hbotMoveTo(pos.x, pos.y);
//TODO: 补偿group大于1时z轴需要补偿0.2mm
Integer zCompensate = 0;
if (tipGroup.ordinal() > 1) {
zCompensate = 2;
}
pipetteCtrlModule.zMotorMoveToBlock(tipPos.getPickUpZPos(tipGroup.ordinal()) + zCompensate);
pipetteCtrlModule.zMotorMoveToZeroPointQuickBlock();
Boolean isGetTip = canBus.moduleGetReg(MId.PipetteMod, RegIndex.kreg_pipette_tip_state) == 1;
if (!isGetTip) {
logger.error("takeTip fail");
}
return isGetTip;
}
@ExtApiFn(name = "HBot移动到", group = "单步测试")
public void hbotMoveTo(Integer x, Integer y) throws AppException {
hbotCheckAndMoveTo(new Pos2d(x, y));
}
@ExtApiFn(name = "HBot移动到小瓶缓冲液X孔", group = "单步测试")
public void hbotMoveToSmallBottleGroup(ConsumableGroup group, Integer Xhole)
throws AppException {
BottleGroupsPosInfo posInfo = pp.getBottleBufferPosInfo();
if (Xhole < 0 || Xhole > BottlesPosInfo.cgetMAX()) {
throw new AppException(A8kEcode.CODEERROR_PARAM_OUT_OF_RANGE);
}
Pos2d pos = posInfo.cgetSmallBottleBufferPos(group.off, Xhole);
hbotCheckAndMoveTo(pos);
}
@ExtApiFn(name = "HBot移动到探测物质X孔", group = "单步测试")
public void hbotMoveToDetectMaterialPos(ConsumableGroup group, Integer Xhole)
throws AppException {
BottleGroupsPosInfo posInfo = pp.getBottleBufferPosInfo();
if (Xhole < 0 || Xhole > BottlesPosInfo.cgetMAX()) {
throw new AppException(A8kEcode.CODEERROR_PARAM_OUT_OF_RANGE);
}
Pos2d pos = posInfo.cgetDetectMaterialPos(group.off, Xhole);
hbotCheckAndMoveTo(pos);
}
@ExtApiFn(name = "HBot移动到大瓶缓冲液X孔", group = "单步测试")
public void hbotMoveToLargeBottleGroup(ConsumableGroup ch) throws AppException {
LargeBottleBufferPos posInfo = pp.getLargeBottleBufferPosInfo();
Pos2d pos = posInfo.cgetBottlePos(ch.off);
hbotCheckAndMoveTo(pos);
}
@ExtApiFn(name = "HBot移动到急诊位", group = "单步测试")
public void hbotMoveToEmergencyPos() throws AppException {
hbotMoveTo(pp.getEmergencyPos());
}
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// 坐标获取工具
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
@ExtApiFn(name = "Hbot使能", group = "坐标获取工具")
public void hBotEnable() throws AppException {
hbotModule.enable( 1);
}
@ExtApiFn(name = "Hbot失能", group = "坐标获取工具")
public void hBotDisable() throws AppException {
hbotModule.enable(0);
}
@ExtApiFn(name = "Z轴使能", group = "坐标获取工具")
public void zAxisEnable() throws AppException {
pipetteCtrlModule.zMotorEnable(1);
}
@ExtApiFn(name = "Z轴失能", group = "坐标获取工具")
public void zAxisDisable() throws AppException {
pipetteCtrlModule.zMotorEnable(0);
}
@ExtApiFn(name = "归零读取Z轴坐标", group = "坐标获取工具")
public Integer readZAxisPosByMoveToZero() throws AppException {
pipetteCtrlModule.zMotorMeasureDistance();
return pipetteCtrlModule.zMotorReadMeasureDistanceResult();
}
@ExtApiFn(name = "打开扫码器", group = "坐标获取工具")
public void openCodeScaner(Boolean power) throws AppException {
if (power) {
canBus.codeScanerStartScan(MId.PipetteModCodeScanner);
} else {
canBus.codeScanerStopScan(MId.PipetteModCodeScanner);
}
}
Pos2d hbotRefPos = new Pos2d(0, 0);
@ExtApiFn(name = "设置HBOT参考坐标", group = "坐标获取工具")
public void setHbotRefPos(Integer x, Integer y) throws AppException {
hbotRefPos.x = x;
hbotRefPos.y = y;
}
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// hbot取样品
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
public Boolean getXPPS() throws AppException {
return hbotModule.readInIO(0);
}
public Boolean getYPPS() throws AppException {
return hbotModule.readInIO(1);
}
public Boolean getTipPPS() throws AppException {
return canBus.moduleGetReg(MId.PipetteMod, RegIndex.kreg_pipette_tip_state) == 1;
}
public String getPos() throws AppException {
Pos2d pos = hbotModule.readPos();
return pos.toString();
}
// public String getHbotRelaPos() throws AppException {
// Pos2d pos = hbotModule.hbotReadPos(MId.HbotM);
// pos.x -= hbotRefPos.x;
// pos.y -= hbotRefPos.y;
// return pos.toString();
// }
}

2
src/main/java/a8k/service/app/devicedriver/ctrl/PipetteGunCtrlService.java

@ -10,8 +10,6 @@ import org.springframework.stereotype.Component;
* 移液枪功能
* 1.
*
*
*
*/
@Component

6
src/main/java/a8k/service/app/devicedriver/testscript/TestScript.java

@ -11,7 +11,7 @@ import a8k.service.app.devicedriver.ctrl.SamplesPreProcesCtrl;
import a8k.service.app.devicedriver.ctrl.SampleScanTransportHardwareControler;
import a8k.hardware.A8kCanBusService;
import a8k.hardware.type.a8kcanprotocol.A8kEcode;
import a8k.service.app.devicedriver.ctrl.HbotControlService;
import a8k.service.app.devicedriver.basectrl.HbotBaseMoveControlService;
import a8k.service.app.devicedriver.ctrl.ReactionPlatesTransmitCtrl;
import a8k.service.app.devicedriver.param.DebugParam;
import a8k.service.app.devicedriver.param.PosParam;
@ -45,7 +45,7 @@ public class TestScript {
ApplicationContext appCxt;
@Resource
HbotControlService hbotcs;
HbotBaseMoveControlService hbotcs;
@Resource
TimeParam timep;
@ -63,7 +63,7 @@ public class TestScript {
@Resource
SampleScanTransportHardwareControler sampleScanTransportHardwareControler;
EnginnerParamReader settingReader = new EnginnerParamReader(HbotControlService.class);
EnginnerParamReader settingReader = new EnginnerParamReader(HbotBaseMoveControlService.class);
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// 测试

Loading…
Cancel
Save