diff --git a/app.db b/app.db index 1fe34ab..5e43c73 100644 Binary files a/app.db and b/app.db differ diff --git a/src/main/java/a8k/service/app/devicedriver/calibration/HbotTipPosCalibration.java b/src/main/java/a8k/service/app/devicedriver/calibration/HbotTipPosCalibration.java index 0070a6d..7b0531a 100644 --- a/src/main/java/a8k/service/app/devicedriver/calibration/HbotTipPosCalibration.java +++ b/src/main/java/a8k/service/app/devicedriver/calibration/HbotTipPosCalibration.java @@ -10,6 +10,7 @@ import a8k.service.app.devicedriver.basectrl.HbotModule; import a8k.service.app.devicedriver.basectrl.PipetteCtrlModule; import a8k.service.app.devicedriver.ctrl.HbotControler; import a8k.service.app.devicedriver.pos.HbotConsumablePosMgr; +import a8k.service.app.devicedriver.pos.HbotFixPosMgr; import a8k.type.*; import a8k.type.cfg.Pos2d; import a8k.type.cfg.Pos3d; @@ -44,6 +45,8 @@ public class HbotTipPosCalibration { HbotControler hbotControler; @Resource HbotConsumablePosMgr hbotConsumablePosMgr; + @Resource + HbotFixPosMgr hbotFixPosMgr; Boolean stopFlag = false; @@ -198,11 +201,26 @@ public class HbotTipPosCalibration { } + @ExtApiFn(name = "标定.丢Tip坐标", group = "标定.丢Tip坐标", order = 30) + public void calibrateDropTipPos() throws AppException { + enableModule(); + pipetteCtrlModule.zMotorMeasureDistance(); + hbotFixPosMgr.setDropTipPos(new Pos3d(hbotModule.readPos().x, hbotModule.readPos().y, pipetteCtrlModule.zMotorReadMeasureDistanceResult())); + disableModule(); + } + +// @ExtApiFn(name = "标定.滴液坐标", group = "标定.滴液坐标", order = 40) +// public void calibrateDropLiquidPos() throws AppException { +// enableModule(); +// pipetteCtrlModule.zMotorMeasureDistance(); +// hbotFixPosMgr.setDropLiquidPos(new Pos3d(hbotModule.readPos().x, hbotModule.readPos().y, pipetteCtrlModule.zMotorReadMeasureDistanceResult())); +// disableModule(); +// } // // 校验 // - @ExtApiFn(name = "校验Tip坐标", group = "校验", order = 300) + @ExtApiFn(name = "校验取Tip坐标", group = "校验", order = 300) public void testTakeTip(TipGroup tipGroup) throws AppException { resetStopFlag(); enableModule(); @@ -213,6 +231,17 @@ public class HbotTipPosCalibration { } } + @ExtApiFn(name = "校验丢Tip", group = "校验", order = 301) + public void testDropTipPos() throws AppException { + hbotControler.dropTip(); + } + +// @ExtApiFn(name = "校验滴液位置", group = "校验", order = 302) +// public void testDropLiquidPos() throws AppException { +// hbotControler.moveToDropLiquidPos(); +// } + + @ExtApiFn(name = "停止校验", group = "校验", order = 304) public void stopTest() throws AppException { setStopFlag(); diff --git a/src/main/java/a8k/service/app/devicedriver/calibration/ReactionPlatesTransmitControlerCalibration.java b/src/main/java/a8k/service/app/devicedriver/calibration/ReactionPlatesTransmitControlerCalibration.java index 8e39e2a..16662ba 100644 --- a/src/main/java/a8k/service/app/devicedriver/calibration/ReactionPlatesTransmitControlerCalibration.java +++ b/src/main/java/a8k/service/app/devicedriver/calibration/ReactionPlatesTransmitControlerCalibration.java @@ -3,15 +3,17 @@ package a8k.service.app.devicedriver.calibration; import a8k.extapi_controler.pagecontrol.ExtApiTabConfig; import a8k.extapi_controler.utils.ExtApiFn; import a8k.extapi_controler.utils.ExtApiTab; +import a8k.service.app.devicedriver.basectrl.HbotModule; import a8k.service.app.devicedriver.basectrl.MiniServoControler; +import a8k.service.app.devicedriver.basectrl.PipetteCtrlModule; import a8k.service.app.devicedriver.basectrl.StepMotorControler; import a8k.service.app.devicedriver.basectrl.type.StepMotorMId; +import a8k.service.app.devicedriver.ctrl.HbotControler; import a8k.service.app.devicedriver.ctrl.ReactionPlatesTransmitCtrl; -import a8k.service.app.devicedriver.pos.OptModulePosMgr; -import a8k.service.app.devicedriver.pos.PlatesBoxPosMgr; -import a8k.service.app.devicedriver.pos.TurntablePosMgr; +import a8k.service.app.devicedriver.pos.*; import a8k.type.ConsumableGroup; import a8k.type.IncubatorPos; +import a8k.type.cfg.Pos3d; import a8k.type.exception.AppException; import jakarta.annotation.Resource; import org.springframework.stereotype.Component; @@ -37,15 +39,31 @@ public class ReactionPlatesTransmitControlerCalibration { @Resource ReactionPlatesTransmitCtrl reactionPlatesTransmitCtrl; + @Resource + PipetteCtrlModule pipetteCtrlModule; + @Resource + HbotModule hbotModule; + + + @Resource + HbotControler hbotControler; + @Resource + HbotFixPosMgr hbotFixPosMgr; + + //基础工具 @ExtApiFn(name = "归零", group = "测试工具", order = 1) public void deviceReset() throws AppException { enableModule(); + pipetteCtrlModule.zMotorMoveZeroBlock(); + hbotModule.moveToZeroBlock(); stepMotorControler.stepMotorEasyMoveToZeroBlock(StepMotorMId.PlatesBoxPusherM, overtime); stepMotorControler.stepMotorEasyMoveToZeroBlock(StepMotorMId.PlatesBoxYM, overtime); stepMotorControler.stepMotorEasyMoveToZeroBlock(StepMotorMId.OptModPullM, overtime); stepMotorControler.stepMotorEasyMoveToZeroBlock(StepMotorMId.OptModScannerM, overtime); stepMotorControler.stepMotorEasyMoveToZeroBlock(StepMotorMId.IncubatorRotateCtrlM, overtime); + + } @ExtApiFn(name = "使能相关模块", group = "测试工具", order = 2) @@ -55,6 +73,9 @@ public class ReactionPlatesTransmitControlerCalibration { stepMotorControler.stepMotorEnable(StepMotorMId.OptModPullM, 1); stepMotorControler.stepMotorEnable(StepMotorMId.OptModScannerM, 1); stepMotorControler.stepMotorEnable(StepMotorMId.IncubatorRotateCtrlM, 1); + + pipetteCtrlModule.zMotorEnable(1); + hbotModule.enable(1); } @ExtApiFn(name = "失能相关模块", group = "测试工具", order = 3) @@ -64,6 +85,9 @@ public class ReactionPlatesTransmitControlerCalibration { stepMotorControler.stepMotorEnable(StepMotorMId.OptModPullM, 0); stepMotorControler.stepMotorEnable(StepMotorMId.OptModScannerM, 0); stepMotorControler.stepMotorEnable(StepMotorMId.IncubatorRotateCtrlM, 0); + + pipetteCtrlModule.zMotorEnable(0); + hbotModule.enable(0); } @ExtApiFn(name = "读取所有设定值", group = "测试工具", order = 5) @@ -106,6 +130,16 @@ public class ReactionPlatesTransmitControlerCalibration { return dropLiquidPos0; } + @ExtApiFn(name = "标定", group = "HbotTip滴定位.校准", order = 104) + public Pos3d Hbot_dropLiquidPosCalibration() throws AppException { + enableModule(); + pipetteCtrlModule.zMotorMeasureDistance(); + var pos = new Pos3d(hbotModule.readPos().x, hbotModule.readPos().y, pipetteCtrlModule.zMotorReadMeasureDistanceResult()); + hbotFixPosMgr.setDropLiquidPos(pos); + disableModule(); + return pos; + } + // // 板夹仓位置 @@ -170,9 +204,10 @@ public class ReactionPlatesTransmitControlerCalibration { // 校验 // - @ExtApiFn(name = "孵育盘移动到点滴位", group = "校验", order = 1000) + @ExtApiFn(name = "滴定", group = "校验", order = 1000) public void turntableMoveDropPos(IncubatorPos pos) throws AppException { reactionPlatesTransmitCtrl.trunableMoveToDropLiquidPos(pos); + hbotControler.moveToDropLiquidPos(); } @ExtApiFn(name = "孵育盘移动到拉板位", group = "校验", order = 1001) diff --git a/src/main/java/a8k/service/app/devicedriver/ctrl/HbotControler.java b/src/main/java/a8k/service/app/devicedriver/ctrl/HbotControler.java index 8b80915..d682e93 100644 --- a/src/main/java/a8k/service/app/devicedriver/ctrl/HbotControler.java +++ b/src/main/java/a8k/service/app/devicedriver/ctrl/HbotControler.java @@ -103,4 +103,5 @@ public class HbotControler { } + } diff --git a/src/main/java/a8k/service/app/devicedriver/pos/HbotConsumablePosMgr.java b/src/main/java/a8k/service/app/devicedriver/pos/HbotConsumablePosMgr.java index ff77270..c0ce4b5 100644 --- a/src/main/java/a8k/service/app/devicedriver/pos/HbotConsumablePosMgr.java +++ b/src/main/java/a8k/service/app/devicedriver/pos/HbotConsumablePosMgr.java @@ -128,6 +128,7 @@ public class HbotConsumablePosMgr { } + public LittleBottleConsumablePosInfo getLittleBufferGroupPosInfo() { LittleBottleConsumablePosInfo info = new LittleBottleConsumablePosInfo(); info.g0_000 = posReader.getPos(HbotConsumablePosParam.LittleBufferGroup0_000Pos, Pos3d.class); diff --git a/src/main/java/a8k/service/app/devicedriver/pos/HbotFixPosMgr.java b/src/main/java/a8k/service/app/devicedriver/pos/HbotFixPosMgr.java index c15fcf3..04a283f 100644 --- a/src/main/java/a8k/service/app/devicedriver/pos/HbotFixPosMgr.java +++ b/src/main/java/a8k/service/app/devicedriver/pos/HbotFixPosMgr.java @@ -4,6 +4,7 @@ import a8k.extapi_controler.pagecontrol.ExtApiTabConfig; import a8k.extapi_controler.utils.ExtApiParamsTab; import a8k.extapi_controler.utils.ExtApiTab; import a8k.service.db.LowerDeviceParameterDBService; +import a8k.service.db.type.Parameter; import a8k.service.db.utils.PosParameterReader; import a8k.type.cfg.Pos3d; import jakarta.annotation.PostConstruct; @@ -12,6 +13,8 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; +import java.util.List; + /** * HBOT二维码扫描坐标参数 */ @@ -22,8 +25,14 @@ public class HbotFixPosMgr { static final Logger logger = LoggerFactory.getLogger(HbotFixPosMgr.class); enum Pos { - DropTipPos, - DropLiquidPos, + DropTipPos("丢TIP位置"), + DropLiquidPos("滴液位置"), + ; + public final String chName; + + Pos(String chName) { + this.chName = chName; + } } ; @@ -36,6 +45,11 @@ public class HbotFixPosMgr { @PostConstruct void initialize() { posReader = lowerDeviceParameterDBService.getReader(this.getClass()); + + for (Pos pos : Pos.values()) { + posReader.setParamChName(pos, pos.chName); + } + Integer paraVersion = posReader.getVersion(); if (!nowParaVersion.equals(paraVersion)) { paramReset(); @@ -49,6 +63,10 @@ public class HbotFixPosMgr { posReader.updatePos(Pos.DropLiquidPos.name(), new Pos3d(0, 0, 0)); } + public List getParams() { + return posReader.getParams(); + } + public Pos3d getDropTipPos() { return posReader.getPos(Pos.DropTipPos, Pos3d.class); } @@ -57,5 +75,12 @@ public class HbotFixPosMgr { return posReader.getPos(Pos.DropLiquidPos, Pos3d.class); } + public void setDropTipPos(Pos3d pos) { + posReader.updatePos(Pos.DropTipPos.name(), pos); + } + + public void setDropLiquidPos(Pos3d pos) { + posReader.updatePos(Pos.DropLiquidPos.name(), pos); + } } diff --git a/src/main/java/a8k/service/db/LowerDeviceParameterDBService.java b/src/main/java/a8k/service/db/LowerDeviceParameterDBService.java index 24a9a93..4dc06ff 100644 --- a/src/main/java/a8k/service/db/LowerDeviceParameterDBService.java +++ b/src/main/java/a8k/service/db/LowerDeviceParameterDBService.java @@ -47,7 +47,7 @@ public class LowerDeviceParameterDBService { parameter.chName = chName; ZSqliteJdbcHelper.addObj(jdbcTemplate, tableName, tClass, parameter); } else { - if (parameter.chName.equals(chName)) { + if (parameter.chName != null && parameter.chName.equals(chName)) { return; } parameter.chName = chName;