diff --git a/src/main/java/a8k/app/hardware/driver/MiniServoDriver.java b/src/main/java/a8k/app/hardware/driver/MiniServoDriver.java index 82d78f5..d5518e3 100644 --- a/src/main/java/a8k/app/hardware/driver/MiniServoDriver.java +++ b/src/main/java/a8k/app/hardware/driver/MiniServoDriver.java @@ -98,6 +98,7 @@ public class MiniServoDriver { } + public void miniServoWaitIsNotMove(MiniServoMId id, int acitionOvertime) throws AppException { long startedAt = System.currentTimeMillis(); do { diff --git a/src/main/java/a8k/extui/mgr/ExtApiPageGroupCfgMgr.java b/src/main/java/a8k/extui/mgr/ExtApiPageGroupCfgMgr.java index eed65ed..c55ea2a 100644 --- a/src/main/java/a8k/extui/mgr/ExtApiPageGroupCfgMgr.java +++ b/src/main/java/a8k/extui/mgr/ExtApiPageGroupCfgMgr.java @@ -1,32 +1,31 @@ package a8k.extui.mgr; -import a8k.extui.page.debug.*; -import a8k.extui.page.extsetting.DeviceActionParameterSettingPage; -import a8k.extui.page.extsetting.ProjInfoMgrPage; -import a8k.extui.page.init.BackgroudProcessCtrlPage; -import a8k.extui.page.init.DeviceInitPage; -import a8k.extui.page.test.driver.LowLevelBoardVersionPreviewPage; - +import a8k.extui.page.data.DeviceActionParameterSettingPage; +import a8k.extui.page.data.ProjInfoMgrPage; +import a8k.extui.page.driver.LowLevelBoardVersionPreviewPage; +import a8k.extui.page.measurement.DeviceInitializeUtilsPage; import a8k.extui.page.measurement.HbotPosMeasurePage; -import a8k.extui.page.test.codetest.OptFormulaTestPage; -import a8k.extui.page.test.codetest.OptFormulaTestPageV2; -import a8k.extui.page.test.driver.PipetteCtrlDriverPage; -import a8k.extui.page.extapp.A8kOptVerification; -import a8k.extui.page.test.frond_end_test.FakeReactionRecordGeneratorPage; - -import a8k.extui.page.test.frond_end_test.VirtualEventGeneratorPage; -import a8k.extui.page.extapp.OptModuleParamCalibration; -import a8k.extui.page.extsetting.pos_calibration.*; -import a8k.extui.page.test.stress_test.PipetteGunStressTest; -import a8k.extui.page.extapp.P01PipetteGunVerification; -import a8k.extui.page.extapp.P02A8kTemperaturaVerfication; -import a8k.extui.page.test.verification.*; -import a8k.extui.page.test.verification.P34LiquidOperationTestPage; -import a8k.extui.page.test.verification.P10ProjejIDCardTestPage; +import a8k.extui.page.opt_calibration.OptFormulaTestPage; +import a8k.extui.page.opt_calibration.OptFormulaTestPageV2; +import a8k.extui.page.debug.*; +import a8k.extui.page.driver.PipetteCtrlDriverPage; +import a8k.extui.page.opt_calibration.A8kOptVerification; +import a8k.extui.page.frond_end_test.FakeReactionRecordGeneratorPage; + +import a8k.extui.page.frond_end_test.VirtualEventGeneratorPage; +import a8k.extui.page.opt_calibration.OptModuleParamCalibration; +import a8k.extui.page.pos_calibration.*; +import a8k.extui.page.stress_test.PipetteGunStressTest; +import a8k.extui.page.special_verification.P01PipetteGunVerification; +import a8k.extui.page.special_verification.P02A8kTemperaturaVerfication; +import a8k.extui.page.verification.*; +import a8k.extui.page.verification.P34LiquidOperationTestPage; +import a8k.extui.page.verification.P10ProjejIDCardTestPage; import jakarta.annotation.PostConstruct; import org.springframework.stereotype.Component; import java.util.ArrayList; +import java.util.Collections; import java.util.List; @Component @@ -81,113 +80,80 @@ public class ExtApiPageGroupCfgMgr { @PostConstruct void init() { - //初始化 - //测量 - //测试 - //高级配置 - //高级应用 - - pushMenu( - new Menu("初始化", List.of( - new Menu(DeviceInitPage.class, "设备初始化"), - new Menu(BackgroudProcessCtrlPage.class, "后台线程控制") - ))); - - pushMenu( - new Menu("测量", List.of( - new Menu(HbotPosMeasurePage.class, "HBOT测量") - ))); - - pushMenu( - new Menu("测试", List.of( - new Menu("验证", List.of( - new Menu(P00PosVerifyUitilsPage.class, "工具"), - new Menu(P10ProjejIDCardTestPage.class, "ID卡"), - new Menu(P30InfeedAndPreProcessPosVerificationPage.class, "单步-入料和预处理"), - new Menu(P31ReactionPlatesTransmitPosVerificationPage.class, "单步-反应板传输"), - new Menu(P32HbotPosVerificationPage.class, "单步-HBOT位置"), - new Menu(P33HbotSamplePosVerificationPage.class, "单步-取样品位置"), - new Menu(P34LiquidOperationTestPage.class, "单步-液体操作"), - new Menu(P50VerificationScriptPage.class, "脚本-模块验证"), - new Menu(P51FullFlowVerificationPage.class, "脚本-全流程验证") - )), - new Menu("压力测试", List.of( - new Menu(PipetteGunStressTest.class, "移液枪压力测试") - )) + pushMenu(new Menu("测量", List.of( + new Menu(DeviceInitializeUtilsPage.class, "设备初始化"), + new Menu(HbotPosMeasurePage.class, "HBOT测量") + ))); + + pushMenu(new Menu("位置标定", List.of( + new Menu(P02TubeFeedingModulePosCalibrationPage.class, "试管入料校准"), + new Menu(P03TubePreProcesPosCalibrationPage.class, "试管预处理校准"), + new Menu(P04ReactionPlatesTransmitControlerCalibrationPage.class, "反应板相关位置校准"), + new Menu(P20HbotTipPosCalibrationPage.class, "Tip耗材位置校准"), + new Menu(P21HbotLittleBSPosCalibrationPage.class, "小瓶BS耗材位置校准"), + new Menu(P23HbotLargeBottleBSPosCalibrationPage.class, "大瓶BS耗材位置校准"), + new Menu(P24Hbot2DCodeScanPosCalibrationPage.class, "耗材扫描校准"), + new Menu(P25HbotSamplePosCalibrationPage.class, "取样位置校准") + ))); + + pushMenu(new Menu("验证", List.of( + new Menu(P00PosVerifyUitilsPage.class, "工具"), + new Menu(P10ProjejIDCardTestPage.class, "ID卡"), + new Menu(P30InfeedAndPreProcessPosVerificationPage.class, "单步-入料和预处理"), + new Menu(P31ReactionPlatesTransmitPosVerificationPage.class, "单步-反应板传输"), + new Menu(P32HbotPosVerificationPage.class, "单步-HBOT位置"), + new Menu(P33HbotSamplePosVerificationPage.class, "单步-取样品位置"), + new Menu(P34LiquidOperationTestPage.class, "单步-液体操作"), + new Menu(P50VerificationScriptPage.class, "脚本-模块验证"), + new Menu(P51FullFlowVerificationPage.class, "脚本-全流程验证") + ))); + + pushMenu(new Menu("光学标定与验证", List.of( + new Menu(A8kOptVerification.class, "光学模组验证"), + new Menu(OptModuleParamCalibration.class, "光学模块参数校准"), + new Menu(OptFormulaTestPageV2.class, "光学公式测试1"), + new Menu(OptFormulaTestPage.class, "光学公式测试2") + ))); + + pushMenu(new Menu("验证(过检专用)", List.of( + new Menu(P01PipetteGunVerification.class, "移液枪验证"), + new Menu(P02A8kTemperaturaVerfication.class, "温度控制验证") + ))); + + pushMenu(new Menu("调试", List.of( + new Menu(P21AppDebugModeConfigPage.class, "设备模式配置"), + new Menu(P00AppEventAndMessageBoxDebugPage.class, "事件与消息"), + new Menu(P22UserOperaionInRunOnlyModePage.class, "空转模式用户操作"), + new Menu(P22UserOperaionInVertualModePage.class, "虚拟模式用户操作"), + new Menu(P00MainflowCtrlServiceDebugPage.class, "主流程调试"), + new Menu(P02ConsumablesMgrDebugPage.class, "耗材"), + new Menu(P01EmergencyTubeDebugPage.class, "急诊"), + new Menu(P02TubeSettingDebugPage.class, "试管配置"), + new Menu(P01ProjInfoDebugPage.class, "ID卡操作"), + new Menu(P11IncubationPlateStateDebugPageAll.class, "状态.孵育盘"), + new Menu(P12TueStateDebugPage.class, "状态.试管"), + new Menu(P13OptModuleStateDebugPage.class, "状态.光学模块"), + new Menu(P20AppSettingDebugPage.class, "设置.系统设置"), + new Menu("前端测试助手", List.of( + new Menu(FakeReactionRecordGeneratorPage.class, "虚拟反应记录生成"), + new Menu(VirtualEventGeneratorPage.class, "虚拟事件生成") )) - ); - - pushMenu( - new Menu("应用调试", List.of( - new Menu(P00AppEventAndMessageBoxDebugPage.class, "事件与消息"), - new Menu("用户操作", List.of( - new Menu(P00MainflowCtrlServiceDebugPage.class, "主流程控制"), - new Menu(P02ConsumablesMgrDebugPage.class, "耗材"), - new Menu(P01EmergencyTubeDebugPage.class, "急诊"), - new Menu(P02TubeSettingDebugPage.class, "试管配置"), - new Menu(P01ProjInfoDebugPage.class, "ID卡操作"), - new Menu(P22UserOperaionInRunOnlyModePage.class, "空转模式用户操作"), - new Menu(P22UserOperaionInVertualModePage.class, "虚拟模式用户操作") - )), - new Menu("状态", List.of( - new Menu(P11IncubationPlateStateDebugPageAll.class, "孵育盘"), - new Menu(P12TueStateDebugPage.class, "试管"), - new Menu(P13OptModuleStateDebugPage.class, "光学模块") - )), - new Menu(P20AppSettingDebugPage.class, "系统设置"), - - new Menu("前端测试助手", List.of( - new Menu(FakeReactionRecordGeneratorPage.class, "虚拟反应记录生成"), - new Menu(VirtualEventGeneratorPage.class, "虚拟事件生成") - )) + ))); - )) - ); + pushMenu(new Menu("驱动调试", List.of( + new Menu(LowLevelBoardVersionPreviewPage.class, "低级板版本预览"), + new Menu(PipetteCtrlDriverPage.getPageClass(), "移液抢驱动") + ))); - pushMenu( - new Menu("驱动调试", List.of( - new Menu(LowLevelBoardVersionPreviewPage.class, "低级板版本预览"), - new Menu(PipetteCtrlDriverPage.getPageClass(), "移液抢驱动") - )) - ); - - - pushMenu( - new Menu("高级设置", List.of( - new Menu("坐标设置", List.of( - new Menu(P02TubeFeedingModulePosCalibrationPage.class, "试管入料校准"), - new Menu(P03TubePreProcesPosCalibrationPage.class, "试管预处理校准"), - new Menu(P04ReactionPlatesTransmitControlerCalibrationPage.class, "反应板相关位置校准"), - new Menu(P20HbotTipPosCalibrationPage.class, "Tip耗材位置校准"), - new Menu(P21HbotLittleBSPosCalibrationPage.class, "小瓶BS耗材位置校准"), - new Menu(P23HbotLargeBottleBSPosCalibrationPage.class, "大瓶BS耗材位置校准"), - new Menu(P24Hbot2DCodeScanPosCalibrationPage.class, "耗材扫描校准"), - new Menu(P25HbotSamplePosCalibrationPage.class, "取样位置校准") - )), - new Menu("数据库", List.of( - new Menu(DeviceActionParameterSettingPage.class, "设备动作参数设置"), - new Menu(ProjInfoMgrPage.class, "项目信息管理") - )) - )) - ); - - - pushMenu( - new Menu("高级应用", List.of( - new Menu("光学标定与验证", List.of( - new Menu(A8kOptVerification.class, "光学模组验证"), - new Menu(OptModuleParamCalibration.class, "光学模块参数校准"), - new Menu(OptFormulaTestPageV2.class, "光学公式测试1"), - new Menu(OptFormulaTestPage.class, "光学公式测试2") - )), - new Menu("验证(过检专用)", List.of( - new Menu(P01PipetteGunVerification.class, "移液枪验证"), - new Menu(P02A8kTemperaturaVerfication.class, "温度控制验证") - )) - )) - ); + pushMenu(new Menu("数据", List.of( + new Menu(DeviceActionParameterSettingPage.class, "设备动作参数设置"), + new Menu(ProjInfoMgrPage.class, "项目信息管理") + ))); + pushMenu(new Menu("压力测试", List.of( + new Menu(PipetteGunStressTest.class, "移液枪压力测试") + ))); } } diff --git a/src/main/java/a8k/extui/page/measurement/FeedingModMeasurePage.java b/src/main/java/a8k/extui/page/measurement/FeedingModMeasurePage.java new file mode 100644 index 0000000..62b0d2f --- /dev/null +++ b/src/main/java/a8k/extui/page/measurement/FeedingModMeasurePage.java @@ -0,0 +1,50 @@ +package a8k.extui.page.measurement; + +import a8k.app.a8ktype.exception.AppException; +import a8k.app.hardware.driver.MiniServoDriver; +import a8k.app.hardware.driver.StepMotorCtrlDriver; +import a8k.app.hardware.driver.type.MiniServoMId; +import a8k.app.hardware.driver.type.StepMotorMId; +import a8k.extui.mgr.ExtApiPageMgr; +import jakarta.annotation.PostConstruct; +import jakarta.annotation.Resource; +import org.springframework.stereotype.Component; + +@Component +public class FeedingModMeasurePage { + @Resource + ExtApiPageMgr extApiPageMgr; + + static final Integer overtime = 10000; + + + @Resource + StepMotorCtrlDriver stepMotorCtrlDriver; + + + @Resource + MiniServoDriver miniServoDriver; + + + + public Integer measureFeedingModXMPos() throws AppException { + return stepMotorCtrlDriver.stepMotorReadPosByMoveToZeroBlock(StepMotorMId.FeedingModXM, overtime); + } + + + + + + + @PostConstruct + public void init() { + var page = extApiPageMgr.newPage(this); + + page.newGroup("入料模块-测量"); + page.addFunction("平移电机", this::measureFeedingModXMPos); + + + + extApiPageMgr.addPage(page); + } +} diff --git a/src/main/java/a8k/extui/page/measurement/HbotPosMeasurePage.java b/src/main/java/a8k/extui/page/measurement/HbotPosMeasurePage.java index 815f278..b3ead20 100644 --- a/src/main/java/a8k/extui/page/measurement/HbotPosMeasurePage.java +++ b/src/main/java/a8k/extui/page/measurement/HbotPosMeasurePage.java @@ -31,16 +31,6 @@ public class HbotPosMeasurePage { return hbotDriver.readPos(); } - public void disableHbot() throws AppException { - hbotDriver.enable(0); - pipetteCtrlDriver.zMotorEnable(0); - } - - public void enableHbot() throws AppException { - hbotDriver.enable(1); - pipetteCtrlDriver.zMotorEnable(1); - } - public void moveTo(Integer x, Integer y, Integer z) throws AppException { hbotDriver.enable(1); pipetteCtrlDriver.zMotorEnable(1); @@ -86,8 +76,6 @@ public class HbotPosMeasurePage { @PostConstruct public void init() { var page = extApiPageMgr.newPage(this); - page.addFunction("使能HBOT", this::enableHbot); - page.addFunction("失能HBOT", this::disableHbot); page.addFunction("移动到", this::moveTo).setParamVal("x", this::readXPos).setParamVal("y", this::readYPos); page.addFunction("相对移动", this::moveBy).setParamVal("dx", 0).setParamVal("dy", 0); page.addFunction("测量当前位置", this::measurementCurrentPos); diff --git a/src/main/java/a8k/extui/page/measurement/HbotPosMeasurePageBak.java b/src/main/java/a8k/extui/page/measurement/HbotPosMeasurePageBak.java new file mode 100644 index 0000000..c55cc75 --- /dev/null +++ b/src/main/java/a8k/extui/page/measurement/HbotPosMeasurePageBak.java @@ -0,0 +1,96 @@ +package a8k.extui.page.measurement; + +import a8k.app.a8ktype.device.Pos2d; +import a8k.app.a8ktype.device.Pos3d; +import a8k.app.a8ktype.exception.AppException; +import a8k.app.hardware.driver.HbotDriver; +import a8k.app.hardware.driver.PipetteCtrlDriver; +import a8k.app.service.lowerctrl.HbotMoveCtrlService; +import a8k.extui.mgr.ExtApiPageMgr; +import a8k.extui.type.ExtApiStatu; +import jakarta.annotation.PostConstruct; +import jakarta.annotation.Resource; +import org.springframework.stereotype.Component; + +@Component +public class HbotPosMeasurePageBak { + @Resource + ExtApiPageMgr extApiPageMgr; + + @Resource + HbotDriver hbotDriver; + + @Resource + HbotMoveCtrlService hbotMoveCtrlService; + + @Resource + PipetteCtrlDriver pipetteCtrlDriver; + + @ExtApiStatu(name = "Hbot当前坐标") + public Object readPos() throws AppException { + return hbotDriver.readPos(); + } + + public void disableHbot() throws AppException { + hbotDriver.enable(0); + pipetteCtrlDriver.zMotorEnable(0); + } + + public void enableHbot() throws AppException { + hbotDriver.enable(1); + pipetteCtrlDriver.zMotorEnable(1); + } + + public void moveTo(Integer x, Integer y, Integer z) throws AppException { + hbotDriver.enable(1); + pipetteCtrlDriver.zMotorEnable(1); + pipetteCtrlDriver.zMotorMoveZeroBlock(); + hbotMoveCtrlService.hbotMoveTo(x, y, z); + } + + public void moveBy(Integer dx, Integer dy) throws AppException { + hbotDriver.enable(1); + pipetteCtrlDriver.zMotorEnable(1); + Pos2d pos = hbotDriver.readPos(); + pos.x += dx; + pos.y += dy; + hbotDriver.moveToBlock(pos.x, pos.y); + } + + public Pos3d measurementCurrentPos() throws AppException { + pipetteCtrlDriver.zMotorMeasureDistance(); + Pos3d pos = new Pos3d(); + pos.z = pipetteCtrlDriver.zMotorReadMeasureDistanceResult(); + pos.x = hbotDriver.readPos().x; + pos.y = hbotDriver.readPos().y; + return pos; + } + + + public Integer readXPos() { + try { + return hbotDriver.readPos().x; + } catch (AppException e) { + return 0; + } + } + + public Integer readYPos() { + try { + return hbotDriver.readPos().y; + } catch (AppException e) { + return 0; + } + } + + @PostConstruct + public void init() { + var page = extApiPageMgr.newPage(this); + page.addFunction("使能HBOT", this::enableHbot); + page.addFunction("失能HBOT", this::disableHbot); + page.addFunction("移动到", this::moveTo).setParamVal("x", this::readXPos).setParamVal("y", this::readYPos); + page.addFunction("相对移动", this::moveBy).setParamVal("dx", 0).setParamVal("dy", 0); + page.addFunction("测量当前位置", this::measurementCurrentPos); + extApiPageMgr.addPage(page); + } +} diff --git a/src/main/java/a8k/extui/page/measurement/IncubatorMeasurePage.java b/src/main/java/a8k/extui/page/measurement/IncubatorMeasurePage.java new file mode 100644 index 0000000..e6a059e --- /dev/null +++ b/src/main/java/a8k/extui/page/measurement/IncubatorMeasurePage.java @@ -0,0 +1,49 @@ +package a8k.extui.page.measurement; + +import a8k.app.a8ktype.exception.AppException; +import a8k.app.hardware.driver.MiniServoDriver; +import a8k.app.hardware.driver.StepMotorCtrlDriver; +import a8k.app.hardware.driver.type.MiniServoMId; +import a8k.app.hardware.driver.type.StepMotorMId; +import a8k.extui.mgr.ExtApiPageMgr; +import jakarta.annotation.PostConstruct; +import jakarta.annotation.Resource; +import org.springframework.stereotype.Component; + +@Component +public class IncubatorMeasurePage { + @Resource + ExtApiPageMgr extApiPageMgr; + + static final Integer overtime = 10000; + + + @Resource + StepMotorCtrlDriver stepMotorCtrlDriver; + + + @Resource + MiniServoDriver miniServoDriver; + + + + + public Integer measureIncubatorRotateCtrlMPos() throws AppException { +// return stepMotorCtrlDriver.stepMotorReadPosByMoveToZeroBlock(StepMotorMId.IncubatorRotateCtrlM, overtime); + return stepMotorCtrlDriver.stepMotorReadPos(StepMotorMId.IncubatorRotateCtrlM); + } + + + + + @PostConstruct + public void init() { + var page = extApiPageMgr.newPage(this); + + + page.newGroup("孵化模组-测量"); + page.addFunction("旋转电机", this::measureIncubatorRotateCtrlMPos); + + extApiPageMgr.addPage(page); + } +} diff --git a/src/main/java/a8k/extui/page/measurement/OptModMeasurePage.java b/src/main/java/a8k/extui/page/measurement/OptModMeasurePage.java new file mode 100644 index 0000000..9a91d56 --- /dev/null +++ b/src/main/java/a8k/extui/page/measurement/OptModMeasurePage.java @@ -0,0 +1,52 @@ +package a8k.extui.page.measurement; + +import a8k.app.a8ktype.exception.AppException; +import a8k.app.hardware.driver.MiniServoDriver; +import a8k.app.hardware.driver.StepMotorCtrlDriver; +import a8k.app.hardware.driver.type.MiniServoMId; +import a8k.app.hardware.driver.type.StepMotorMId; +import a8k.extui.mgr.ExtApiPageMgr; +import jakarta.annotation.PostConstruct; +import jakarta.annotation.Resource; +import org.springframework.stereotype.Component; + +@Component +public class OptModMeasurePage { + @Resource + ExtApiPageMgr extApiPageMgr; + + static final Integer overtime = 10000; + + + @Resource + StepMotorCtrlDriver stepMotorCtrlDriver; + + + @Resource + MiniServoDriver miniServoDriver; + + + public Integer measureOptModScannerMPos() throws AppException { + return stepMotorCtrlDriver.stepMotorReadPosByMoveToZeroBlock(StepMotorMId.OptModScannerM, overtime); + } + + public Integer measureOptModPullMPos() throws AppException { + return stepMotorCtrlDriver.stepMotorReadPosByMoveToZeroBlock(StepMotorMId.OptModPullM, overtime); + } + + + + + @PostConstruct + public void init() { + var page = extApiPageMgr.newPage(this); + + + + page.newGroup("光学模组-测量"); + page.addFunction("扫描电机", this::measureOptModScannerMPos); + page.addFunction("拉板电机", this::measureOptModPullMPos); + + extApiPageMgr.addPage(page); + } +} diff --git a/src/main/java/a8k/extui/page/measurement/PlateBoxPosMeasurePage.java b/src/main/java/a8k/extui/page/measurement/PlateBoxPosMeasurePage.java deleted file mode 100644 index ccf4da6..0000000 --- a/src/main/java/a8k/extui/page/measurement/PlateBoxPosMeasurePage.java +++ /dev/null @@ -1,86 +0,0 @@ -package a8k.extui.page.measurement; - -import org.springframework.stereotype.Component; - -@Component -public class PlateBoxPosMeasurePage { -// @Resource -// ExtApiPageMgr extApiPageMgr; -// -// @Resource -// HbotDriver hbotDriver; -// -// @Resource -// HbotMoveCtrlService hbotMoveCtrlService; -// -// @Resource -// PipetteCtrlDriver pipetteCtrlDriver; -// -// @ExtApiStatu(name = "Hbot当前坐标") -// public Object readPos() throws AppException { -// return hbotDriver.readPos(); -// } -// -// public void disableHbot() throws AppException { -// hbotDriver.enable(0); -// pipetteCtrlDriver.zMotorEnable(0); -// } -// -// public void enableHbot() throws AppException { -// hbotDriver.enable(1); -// pipetteCtrlDriver.zMotorEnable(1); -// } -// -// public void moveTo(Integer x, Integer y, Integer z) throws AppException { -// hbotDriver.enable(1); -// pipetteCtrlDriver.zMotorEnable(1); -// pipetteCtrlDriver.zMotorMoveZeroBlock(); -// hbotMoveCtrlService.hbotMoveTo(x, y, z); -// } -// -// public void moveBy(Integer dx, Integer dy) throws AppException { -// hbotDriver.enable(1); -// pipetteCtrlDriver.zMotorEnable(1); -// Pos2d pos = hbotDriver.readPos(); -// pos.x += dx; -// pos.y += dy; -// hbotDriver.moveToBlock(pos.x, pos.y); -// } -// -// public Pos3d measurementCurrentPos() throws AppException { -// pipetteCtrlDriver.zMotorMeasureDistance(); -// Pos3d pos = new Pos3d(); -// pos.z = pipetteCtrlDriver.zMotorReadMeasureDistanceResult(); -// pos.x = hbotDriver.readPos().x; -// pos.y = hbotDriver.readPos().y; -// return pos; -// } -// -// -// public Integer readXPos() { -// try { -// return hbotDriver.readPos().x; -// } catch (AppException e) { -// return 0; -// } -// } -// -// public Integer readYPos() { -// try { -// return hbotDriver.readPos().y; -// } catch (AppException e) { -// return 0; -// } -// } -// -// @PostConstruct -// public void init() { -// var page = extApiPageMgr.newPage(this); -// page.addFunction("使能HBOT", this::enableHbot); -// page.addFunction("失能HBOT", this::disableHbot); -// page.addFunction("移动到", this::moveTo).setParamVal("x", this::readXPos).setParamVal("y", this::readYPos); -// page.addFunction("相对移动", this::moveBy).setParamVal("dx", 0).setParamVal("dy", 0); -// page.addFunction("测量当前位置", this::measurementCurrentPos); -// extApiPageMgr.addPage(page); -// } -} diff --git a/src/main/java/a8k/extui/page/measurement/PlatesBoxMeasurePage.java b/src/main/java/a8k/extui/page/measurement/PlatesBoxMeasurePage.java new file mode 100644 index 0000000..0c98413 --- /dev/null +++ b/src/main/java/a8k/extui/page/measurement/PlatesBoxMeasurePage.java @@ -0,0 +1,53 @@ +package a8k.extui.page.measurement; + +import a8k.app.a8ktype.exception.AppException; +import a8k.app.hardware.driver.MiniServoDriver; +import a8k.app.hardware.driver.StepMotorCtrlDriver; +import a8k.app.hardware.driver.type.MiniServoMId; +import a8k.app.hardware.driver.type.StepMotorMId; +import a8k.extui.mgr.ExtApiPageMgr; +import jakarta.annotation.PostConstruct; +import jakarta.annotation.Resource; +import org.springframework.stereotype.Component; + +@Component +public class PlatesBoxMeasurePage { + @Resource + ExtApiPageMgr extApiPageMgr; + + static final Integer overtime = 10000; + + + @Resource + StepMotorCtrlDriver stepMotorCtrlDriver; + + + @Resource + MiniServoDriver miniServoDriver; + + + public Integer measurePlatesBoxYMPos() throws AppException { + return stepMotorCtrlDriver.stepMotorReadPosByMoveToZeroBlock(StepMotorMId.PlatesBoxYM, overtime); + } + + public Integer measurePlatesBoxPusherMPos() throws AppException { + return stepMotorCtrlDriver.stepMotorReadPosByMoveToZeroBlock(StepMotorMId.PlatesBoxPusherM, overtime); + } + + + + + + @PostConstruct + public void init() { + var page = extApiPageMgr.newPage(this); + + + page.newGroup("板夹仓模组-测量"); + page.addFunction("仓位置切换电机", this::measurePlatesBoxYMPos); + page.addFunction("推板电机", this::measurePlatesBoxPusherMPos); + + + extApiPageMgr.addPage(page); + } +} diff --git a/src/main/java/a8k/extui/page/measurement/ShakeModStepMotorMeasurePage.java b/src/main/java/a8k/extui/page/measurement/ShakeModStepMotorMeasurePage.java new file mode 100644 index 0000000..153e179 --- /dev/null +++ b/src/main/java/a8k/extui/page/measurement/ShakeModStepMotorMeasurePage.java @@ -0,0 +1,61 @@ +package a8k.extui.page.measurement; + +import a8k.app.a8ktype.exception.AppException; +import a8k.app.hardware.driver.MiniServoDriver; +import a8k.app.hardware.driver.StepMotorCtrlDriver; +import a8k.app.hardware.driver.type.MiniServoMId; +import a8k.app.hardware.driver.type.StepMotorMId; +import a8k.extui.mgr.ExtApiPageMgr; +import jakarta.annotation.PostConstruct; +import jakarta.annotation.Resource; +import org.springframework.stereotype.Component; + +@Component +public class ShakeModStepMotorMeasurePage { + @Resource + ExtApiPageMgr extApiPageMgr; + + static final Integer overtime = 10000; + + + @Resource + StepMotorCtrlDriver stepMotorCtrlDriver; + + + @Resource + MiniServoDriver miniServoDriver; + + public Integer measureShakeModClampingMPos() throws AppException { + return stepMotorCtrlDriver.stepMotorReadPosByMoveToZeroBlock(StepMotorMId.ShakeModClampingM, overtime); + } + + public Integer measureShakeModGripperZMPos() throws AppException { + return stepMotorCtrlDriver.stepMotorReadPosByMoveToZeroBlock(StepMotorMId.ShakeModGripperZM, overtime); + } + + public Integer measureShakeModGripperYSVPos() throws AppException { + Integer pos = miniServoDriver.miniServoReadPos(MiniServoMId.ShakeModGripperYSV); + miniServoDriver.miniServoEnable(MiniServoMId.ShakeModGripperYSV, 0); + return pos; + } + + public Integer measureShakeModGripperSVPos() throws AppException { + Integer pos = miniServoDriver.miniServoReadPos(MiniServoMId.ShakeModGripperSV); + miniServoDriver.miniServoEnable(MiniServoMId.ShakeModGripperSV, 0); + return pos; + } + + @PostConstruct + public void init() { + var page = extApiPageMgr.newPage(this); + + page.newGroup("摇匀模组-测量"); + page.addFunction("升降电机", this::measureShakeModGripperZMPos); + page.addFunction("前后平移伺服", this::measureShakeModGripperYSVPos); + page.addFunction("试管夹紧电机", this::measureShakeModClampingMPos); + page.addFunction("夹爪伺服", this::measureShakeModGripperSVPos); + + + extApiPageMgr.addPage(page); + } +} diff --git a/src/main/java/a8k/extui/page/test/verification/P00PosVerifyUitilsPage.java b/src/main/java/a8k/extui/page/test/verification/P00PosVerifyUitilsPage.java deleted file mode 100644 index 4b7a8ee..0000000 --- a/src/main/java/a8k/extui/page/test/verification/P00PosVerifyUitilsPage.java +++ /dev/null @@ -1,72 +0,0 @@ -package a8k.extui.page.test.verification; - -import a8k.app.a8ktype.exception.AppException; -import a8k.app.a8ktype.others.checkpoint.CheckResult; -import a8k.app.hardware.driver.StepMotorCtrlDriver; -import a8k.app.hardware.driver.type.StepMotorMId; -import a8k.app.service.lowerctrl.DeviceInitCtrlService; -import a8k.extui.mgr.ExtApiPageMgr; -import a8k.extui.type.ExtUIPageCfg; -import jakarta.annotation.PostConstruct; -import jakarta.annotation.Resource; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.util.List; - -@Component -@Slf4j -public class P00PosVerifyUitilsPage { - @Resource - DeviceInitCtrlService deviceInitCtrlService; - @Resource - StepMotorCtrlDriver stepMotorCtrlDriver; - - - @Resource - ExtApiPageMgr extApiPageMgr; - - // - // 基础操作 - // - - public String initDevice() throws AppException { - List result = deviceInitCtrlService.initDevice(); - for (CheckResult checkResult : result) { - if (!checkResult.pass) { - return String.format("初始化失败:[%s]不通过", checkResult.info); - } - } - return "初始化成功"; - } - - public Boolean releaseTube() throws AppException { - stepMotorCtrlDriver.stepMotorEnable(StepMotorMId.ShakeModClampingM, 1); - stepMotorCtrlDriver.stepMotorEasyMoveByBlock(StepMotorMId.ShakeModClampingM, 10, 1000); - return true; - } - - public Boolean enableAllMotor() throws AppException { - deviceInitCtrlService.enableAllMotor(); - return true; - } - - public Boolean disableAllMotor() throws AppException { - deviceInitCtrlService.disableAllMotor(); - return true; - } - - @PostConstruct - void init() { - ExtUIPageCfg cfg = extApiPageMgr.newPage(this); - cfg.newGroup("初始化"); - cfg.addFunction("初始化设备", this::initDevice); - cfg.addFunction("释放试管", this::releaseTube); - cfg.newGroup("电机批量操作"); - cfg.addFunction("使能所有电机", this::enableAllMotor); - cfg.addFunction("失能所有电机", this::disableAllMotor); - extApiPageMgr.addPage(cfg); - } - - -}