Browse Source

添加位置测量功能

tags/v0
zhaohe 7 months ago
parent
commit
ad821127fc
  1. 1
      src/main/java/a8k/app/hardware/driver/MiniServoDriver.java
  2. 214
      src/main/java/a8k/extui/mgr/ExtApiPageGroupCfgMgr.java
  3. 50
      src/main/java/a8k/extui/page/measurement/FeedingModMeasurePage.java
  4. 12
      src/main/java/a8k/extui/page/measurement/HbotPosMeasurePage.java
  5. 96
      src/main/java/a8k/extui/page/measurement/HbotPosMeasurePageBak.java
  6. 49
      src/main/java/a8k/extui/page/measurement/IncubatorMeasurePage.java
  7. 52
      src/main/java/a8k/extui/page/measurement/OptModMeasurePage.java
  8. 86
      src/main/java/a8k/extui/page/measurement/PlateBoxPosMeasurePage.java
  9. 53
      src/main/java/a8k/extui/page/measurement/PlatesBoxMeasurePage.java
  10. 61
      src/main/java/a8k/extui/page/measurement/ShakeModStepMotorMeasurePage.java
  11. 72
      src/main/java/a8k/extui/page/test/verification/P00PosVerifyUitilsPage.java

1
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 {

214
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, "移液枪压力测试")
)));
}
}

50
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);
}
}

12
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);

96
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);
}
}

49
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);
}
}

52
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);
}
}

86
src/main/java/a8k/extui/page/measurement/PlateBoxPosMeasurePage.java

@ -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);
// }
}

53
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);
}
}

61
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);
}
}

72
src/main/java/a8k/extui/page/test/verification/P00PosVerifyUitilsPage.java

@ -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<CheckResult> 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);
}
}
Loading…
Cancel
Save