diff --git a/src/main/java/a8k/service/hardware/HbotControlService.java b/src/main/java/a8k/service/hardware/HbotControlService.java index 62acb91..e6b817b 100644 --- a/src/main/java/a8k/service/hardware/HbotControlService.java +++ b/src/main/java/a8k/service/hardware/HbotControlService.java @@ -108,7 +108,7 @@ public class HbotControlService implements HardwareCtrlModule { 1230, 1250, new Pos2d(579, 1097), - 283, + 320, new BottlesPosInfo/*大孔*/( new Pos2d(160, 160), 210, @@ -178,7 +178,7 @@ public class HbotControlService implements HardwareCtrlModule { * @throws HardwareException e * @throws InterruptedException e */ - private void hbotCheckAndMoveTo(Pos3d targetPos) throws HardwareException, InterruptedException { + public void hbotCheckAndMoveTo(Pos3d targetPos) throws HardwareException, InterruptedException { logger.info("hbotCheckAndMoveTo:{}", targetPos); if (!canBus.getIOState(IOId.PlateBoxCoverClosurePPS)) { throw new HardwareException(A8kEcode.PlateBoxNotCover); @@ -227,7 +227,7 @@ public class HbotControlService implements HardwareCtrlModule { } - private void zMoveTo(Integer z) throws HardwareException, InterruptedException { + public void zMoveTo(Integer z) throws HardwareException, InterruptedException { if (z == 0) { canBus.stepMotorEasyMoveToZeroPointQuickBlock(MId.PipetteModZM, getActionOvertime()); } else { @@ -469,78 +469,6 @@ public class HbotControlService implements HardwareCtrlModule { } - // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - // 测试 - // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - Boolean testScriptWorkFlag = false; - - @HardwareServiceAction(name = "取放Tip", group = "测试脚本") - public AppRet takeTipTestStep(Integer tipgroup, Integer index) throws HardwareException, InterruptedException { - var ret = takeTip(tipgroup, index); - TipPickUpPosInfo tipPos = getTipPickUpPosInfo(); - - canBus.stepMotorEasyMoveToBlock(MId.PipetteModZM, tipPos.getPickUpZPos(tipgroup) - 100, getActionOvertime()); - canBus.pipetteCtrlPutTipBlock(MId.PipetteMod); - - if (canBus.moduleGetReg(MId.PipetteMod, RegIndex.kreg_pipette_tip_state) == 1) { - throw new HardwareException(A8kEcode.PutTipFail); - } - - canBus.stepMotorEasyMoveToZeroPointQuickBlock(MId.PipetteModZM, getActionOvertime()); - return ret; - } - - @HardwareServiceAction(name = "取全部Tip", group = "测试脚本") - public AppRet> testTakeAllTip(Integer groupId, Integer startFrom) throws HardwareException, InterruptedException { - // ObjectMapper mapper = new ObjectMapper(); - testScriptWorkFlag = true; - Map result = new HashMap<>(); - for (int i = startFrom; i < TipPickUpPosInfo.cgetTipNum(); i++) { - var ret = takeTipTestStep(groupId, i); - if (!ret.getData()) { - throw new HardwareException(A8kEcode.TakeTipFail); - } - - result.put("Tip" + i, ret.getData() ? "suc" : "fail"); - logger.info("Take Tip {}-{} => {}", groupId, i, ret.getData()); - if (!testScriptWorkFlag) { - break; - } - } - return AppRet.success(result); - } - - @HardwareServiceAction(name = "测试所有小瓶缓冲液位置", group = "测试脚本") - public void testAllLittleBottleBufferPos(ConsumableGroup group) throws HardwareException, InterruptedException { - testScriptWorkFlag = true; - BottleGroupsPosInfo posInfo = getBottleBufferPosInfo(); - for (int i = 0; i < BottlesPosInfo.cgetMAX(); i++) { - Pos2d pos = posInfo.cgetSmallBottleBufferPos(group.off, i); - hbotCheckAndMoveTo(new Pos3d(pos.x, pos.y, posInfo.posTestZ)); - if (!testScriptWorkFlag) { - break; - } - } - } - - @HardwareServiceAction(name = "测试所有探测物质位置", group = "测试脚本") - public void testAllDetectMaterialPos(ConsumableGroup group) throws HardwareException, InterruptedException { - testScriptWorkFlag = true; - BottleGroupsPosInfo posInfo = getBottleBufferPosInfo(); - for (int i = 0; i < BottlesPosInfo.cgetMAX(); i++) { - Pos2d pos = posInfo.cgetDetectMaterialPos(group.off, i); - hbotCheckAndMoveTo(new Pos3d(pos.x, pos.y, posInfo.posTestZ)); - if (!testScriptWorkFlag) { - break; - } - } - } - - @HardwareServiceAction(name = "停止测试脚本", group = "测试脚本") - public void testTakeAllTipStop() throws HardwareException, InterruptedException { - testScriptWorkFlag = false; - } - @HardwareServiceStatus(name = "Z轴光电⬆") public Boolean getZPPS() throws HardwareException { diff --git a/src/main/java/a8k/service/hardware/TestScript.java b/src/main/java/a8k/service/hardware/TestScript.java new file mode 100644 index 0000000..c4279b7 --- /dev/null +++ b/src/main/java/a8k/service/hardware/TestScript.java @@ -0,0 +1,134 @@ +package a8k.service.hardware; + +import a8k.ConsumableGroup; +import a8k.appbean.HardwareException; +import a8k.appbean.cfg.*; +import a8k.appbean.ecode.AppRet; +import a8k.canbus.A8kCanBusService; +import a8k.canbus.protocol.A8kEcode; +import a8k.canbus.protocol.MId; +import a8k.canbus.protocol.RegIndex; +import a8k.utils.HardwareParamReader; +import a8k.utils.HardwareService; +import a8k.utils.HardwareServiceAction; +import a8k.utils.HardwareServiceParams; +import jakarta.annotation.Resource; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.context.ApplicationContext; +import org.springframework.stereotype.Component; + +import java.util.HashMap; +import java.util.Map; + +@Component +@HardwareService(name = "测试脚本") +@HardwareServiceParams(service = TestScript.class) +public class TestScript { + static Logger logger = LoggerFactory.getLogger(TestScript.class); + + @Resource + A8kCanBusService canBus; + + @Resource + CommonHardwareOpeartion comHardwareOpera; + + @Resource + ApplicationContext appCxt; + + @Resource + HbotControlService hbotcs; + + HardwareParamReader settingReader = new HardwareParamReader(HbotControlService.class); + + // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + // 测试 + // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + Boolean testScriptWorkFlag = false; + + @HardwareServiceAction(name = "停止测试脚本", group = "控制") + public void testTakeAllTipStop() throws HardwareException, InterruptedException { + testScriptWorkFlag = false; + } + + @HardwareServiceAction(name = "取放Tip-单步", group = "Hbot测试脚本") + public AppRet takeTipTestStep(Integer tipgroup, Integer index) throws HardwareException, InterruptedException { + var ret = hbotcs.takeTip(tipgroup, index); + TipPickUpPosInfo tipPos = hbotcs.getTipPickUpPosInfo(); + + canBus.stepMotorEasyMoveToBlock(MId.PipetteModZM, tipPos.getPickUpZPos(tipgroup) - 100, hbotcs.getActionOvertime()); + canBus.pipetteCtrlPutTipBlock(MId.PipetteMod); + + if (canBus.moduleGetReg(MId.PipetteMod, RegIndex.kreg_pipette_tip_state) == 1) { + throw new HardwareException(A8kEcode.PutTipFail); + } + + canBus.stepMotorEasyMoveToZeroPointQuickBlock(MId.PipetteModZM, hbotcs.getActionOvertime()); + return ret; + } + + @HardwareServiceAction(name = "取放Tip-全部", group = "Hbot测试脚本") + public AppRet> testTakeAllTip(Integer groupId, Integer startFrom) throws HardwareException, InterruptedException { + // ObjectMapper mapper = new ObjectMapper(); + testScriptWorkFlag = true; + Map result = new HashMap<>(); + for (int i = startFrom; i < TipPickUpPosInfo.cgetTipNum(); i++) { + var ret = takeTipTestStep(groupId, i); + if (!ret.getData()) { + throw new HardwareException(A8kEcode.TakeTipFail); + } + + result.put("Tip" + i, ret.getData() ? "suc" : "fail"); + logger.info("Take Tip {}-{} => {}", groupId, i, ret.getData()); + if (!testScriptWorkFlag) { + break; + } + } + return AppRet.success(result); + } + + @HardwareServiceAction(name = "测试所有小瓶缓冲液位置", group = "Hbot测试脚本") + public void testAllLittleBottleBufferPos(ConsumableGroup group) throws HardwareException, InterruptedException { + testScriptWorkFlag = true; + BottleGroupsPosInfo posInfo = hbotcs.getBottleBufferPosInfo(); + for (int i = 0; i < BottlesPosInfo.cgetMAX(); i++) { + BottleGroupsPosInfo pos = hbotcs.getBottleBufferPosInfo(); + hbotcs.hbotMoveToSmallBottleGroup(group, i); + canBus.stepMotorEasyMoveToBlock(MId.PipetteModZM, pos.posTestZ, hbotcs.getActionOvertime()); + canBus.stepMotorEasyMoveToZeroPointQuickBlock(MId.PipetteModZM, hbotcs.getActionOvertime()); + if (!testScriptWorkFlag) { + break; + } + } + } + + @HardwareServiceAction(name = "测试所有探测物质位置", group = "Hbot测试脚本") + public void testAllDetectMaterialPos(ConsumableGroup group) throws HardwareException, InterruptedException { + testScriptWorkFlag = true; + for (int i = 0; i < BottlesPosInfo.cgetMAX(); i++) { + BottleGroupsPosInfo pos = hbotcs.getBottleBufferPosInfo(); + hbotcs.hbotMoveToDetectMaterialPos(group, i); + canBus.stepMotorEasyMoveToBlock(MId.PipetteModZM, pos.posTestZ, hbotcs.getActionOvertime()); + canBus.stepMotorEasyMoveToZeroPointQuickBlock(MId.PipetteModZM, hbotcs.getActionOvertime()); + if (!testScriptWorkFlag) { + break; + } + } + } + + @HardwareServiceAction(name = "测试所有大瓶缓冲液位置", group = "Hbot测试脚本") + public void testAllBigBottleBufferPos() throws HardwareException, InterruptedException { + testScriptWorkFlag = true; + // 遍历枚举 ConsumableGroup + for (ConsumableGroup group : ConsumableGroup.values()) { + hbotcs.hbotMoveToLargeBottleGroup(group); + canBus.stepMotorEasyMoveByBlock(MId.PipetteModZM, 100, hbotcs.getActionOvertime()); + canBus.stepMotorEasyMoveToZeroPointQuickBlock(MId.PipetteModZM, hbotcs.getActionOvertime()); + if (!testScriptWorkFlag) { + break; + } + } + } + + +} diff --git a/zhaohe_app.db b/zhaohe_app.db index 3af2d82..a37eb85 100644 Binary files a/zhaohe_app.db and b/zhaohe_app.db differ