diff --git a/src/main/java/a8k/service/app/appctrl/DeviceInitCtrlService.java b/src/main/java/a8k/service/app/appctrl/DeviceInitCtrlService.java index a303f9c..897c234 100644 --- a/src/main/java/a8k/service/app/appctrl/DeviceInitCtrlService.java +++ b/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; diff --git a/src/main/java/a8k/service/app/appctrl/mainflowctrl/action/SEQ4_PRE_PROCESS.java b/src/main/java/a8k/service/app/appctrl/mainflowctrl/action/SEQ4_PRE_PROCESS.java index 1110b8d..ec9c465 100644 --- a/src/main/java/a8k/service/app/appctrl/mainflowctrl/action/SEQ4_PRE_PROCESS.java +++ b/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 diff --git a/src/main/java/a8k/service/app/devicedriver/ctrl/CodeScaner.java b/src/main/java/a8k/service/app/devicedriver/basectrl/CodeScaner.java similarity index 95% rename from src/main/java/a8k/service/app/devicedriver/ctrl/CodeScaner.java rename to src/main/java/a8k/service/app/devicedriver/basectrl/CodeScaner.java index f16a597..e9a2e35 100644 --- a/src/main/java/a8k/service/app/devicedriver/ctrl/CodeScaner.java +++ b/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; diff --git a/src/main/java/a8k/service/app/devicedriver/basectrl/HbotBaseMoveControlService.java b/src/main/java/a8k/service/app/devicedriver/basectrl/HbotBaseMoveControlService.java new file mode 100644 index 0000000..7eccdd0 --- /dev/null +++ b/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()); + // } + +} diff --git a/src/main/java/a8k/service/app/devicedriver/ctrl/basic/HbotModule.java b/src/main/java/a8k/service/app/devicedriver/basectrl/HbotModule.java similarity index 96% rename from src/main/java/a8k/service/app/devicedriver/ctrl/basic/HbotModule.java rename to src/main/java/a8k/service/app/devicedriver/basectrl/HbotModule.java index a2f6871..aa359ae 100644 --- a/src/main/java/a8k/service/app/devicedriver/ctrl/basic/HbotModule.java +++ b/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; diff --git a/src/main/java/a8k/service/app/devicedriver/ctrl/basic/PipetteCtrlModule.java b/src/main/java/a8k/service/app/devicedriver/basectrl/PipetteCtrlModule.java similarity index 99% rename from src/main/java/a8k/service/app/devicedriver/ctrl/basic/PipetteCtrlModule.java rename to src/main/java/a8k/service/app/devicedriver/basectrl/PipetteCtrlModule.java index 68c2d6e..0e1755d 100644 --- a/src/main/java/a8k/service/app/devicedriver/ctrl/basic/PipetteCtrlModule.java +++ b/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; diff --git a/src/main/java/a8k/service/app/devicedriver/ctrl/type/HbotRegIndex.java b/src/main/java/a8k/service/app/devicedriver/basectrl/type/HbotRegIndex.java similarity index 97% rename from src/main/java/a8k/service/app/devicedriver/ctrl/type/HbotRegIndex.java rename to src/main/java/a8k/service/app/devicedriver/basectrl/type/HbotRegIndex.java index 4ce2c1f..18bea00 100644 --- a/src/main/java/a8k/service/app/devicedriver/ctrl/type/HbotRegIndex.java +++ b/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; diff --git a/src/main/java/a8k/service/app/devicedriver/ctrl/type/PipetteRegIndex.java b/src/main/java/a8k/service/app/devicedriver/basectrl/type/PipetteRegIndex.java similarity index 97% rename from src/main/java/a8k/service/app/devicedriver/ctrl/type/PipetteRegIndex.java rename to src/main/java/a8k/service/app/devicedriver/basectrl/type/PipetteRegIndex.java index ac3547d..4e88fba 100644 --- a/src/main/java/a8k/service/app/devicedriver/ctrl/type/PipetteRegIndex.java +++ b/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), // 模块版本 diff --git a/src/main/java/a8k/service/app/devicedriver/calibration/Hbot2DCodeScanPosCalibration.java b/src/main/java/a8k/service/app/devicedriver/calibration/Hbot2DCodeScanPosCalibration.java index de8c496..2ce4219 100644 --- a/src/main/java/a8k/service/app/devicedriver/calibration/Hbot2DCodeScanPosCalibration.java +++ b/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; diff --git a/src/main/java/a8k/service/app/devicedriver/commonctrl/HardwareCommonCtrl.java b/src/main/java/a8k/service/app/devicedriver/commonctrl/HardwareCommonCtrl.java index f285fd1..779a38b 100644 --- a/src/main/java/a8k/service/app/devicedriver/commonctrl/HardwareCommonCtrl.java +++ b/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; diff --git a/src/main/java/a8k/service/app/devicedriver/ctrl/ConsumablesScanCtrl.java b/src/main/java/a8k/service/app/devicedriver/ctrl/ConsumablesScanCtrl.java index 2ff0e50..0d5047a 100644 --- a/src/main/java/a8k/service/app/devicedriver/ctrl/ConsumablesScanCtrl.java +++ b/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(); } diff --git a/src/main/java/a8k/service/app/devicedriver/ctrl/HbotControlService.java b/src/main/java/a8k/service/app/devicedriver/ctrl/HbotControlService.java deleted file mode 100644 index 8967690..0000000 --- a/src/main/java/a8k/service/app/devicedriver/ctrl/HbotControlService.java +++ /dev/null @@ -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(); - // } -} diff --git a/src/main/java/a8k/service/app/devicedriver/ctrl/PipetteGunCtrlService.java b/src/main/java/a8k/service/app/devicedriver/ctrl/PipetteGunCtrlService.java index ed0f68b..d04bc70 100644 --- a/src/main/java/a8k/service/app/devicedriver/ctrl/PipetteGunCtrlService.java +++ b/src/main/java/a8k/service/app/devicedriver/ctrl/PipetteGunCtrlService.java @@ -10,8 +10,6 @@ import org.springframework.stereotype.Component; * 移液枪功能 * 1. * - * - * */ @Component diff --git a/src/main/java/a8k/service/app/devicedriver/testscript/TestScript.java b/src/main/java/a8k/service/app/devicedriver/testscript/TestScript.java index 0d02384..530dd7e 100644 --- a/src/main/java/a8k/service/app/devicedriver/testscript/TestScript.java +++ b/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); // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // 测试