diff --git a/src/main/java/a8k/app/config/A8kSubModuleInitRegConfig.java b/src/main/java/a8k/app/config/A8kSubModuleInitRegConfig.java index a78a705..108b605 100644 --- a/src/main/java/a8k/app/config/A8kSubModuleInitRegConfig.java +++ b/src/main/java/a8k/app/config/A8kSubModuleInitRegConfig.java @@ -74,7 +74,7 @@ public class A8kSubModuleInitRegConfig { addRegMarker(ModuleType.HBOT, RegIndex.kreg_xyrobot_default_velocity); //TMCStepMotor - // addRegMarker(ModuleType.TMCStepMotor, RegIndex.kreg_step_motor_shift); + // addRegMarker(ModuleType.TMCStepMotor, RegIndex.kreg_step_motor_shift); addRegMarker(ModuleType.TMCStepMotor, RegIndex.kreg_step_motor_shaft); addRegMarker(ModuleType.TMCStepMotor, RegIndex.kreg_step_motor_one_circle_pulse); addRegMarker(ModuleType.TMCStepMotor, RegIndex.kreg_step_motor_one_circle_pulse_denominator); @@ -128,7 +128,7 @@ public class A8kSubModuleInitRegConfig { // addRegMarker(ModuleType.PipetteGunCtrl, RegIndex.kreg_pipette_zm_pos); // addRegMarker(ModuleType.PipetteGunCtrl, RegIndex.kreg_pipette_zm_is_enable); // addRegMarker(ModuleType.PipetteGunCtrl, RegIndex.kreg_pipette_zm_dpos); - // addRegMarker(ModuleType.PipetteGunCtrl, RegIndex.kreg_pipette_zm_shift); + // addRegMarker(ModuleType.PipetteGunCtrl, RegIndex.kreg_pipette_zm_shift); addRegMarker(ModuleType.PipetteGunCtrl, RegIndex.kreg_pipette_zm_shaft); addRegMarker(ModuleType.PipetteGunCtrl, RegIndex.kreg_pipette_zm_one_circle_pulse); addRegMarker(ModuleType.PipetteGunCtrl, RegIndex.kreg_pipette_zm_one_circle_pulse_denominator); diff --git a/src/main/java/a8k/app/config/VersionConfig.java b/src/main/java/a8k/app/config/VersionConfig.java new file mode 100644 index 0000000..5a5e147 --- /dev/null +++ b/src/main/java/a8k/app/config/VersionConfig.java @@ -0,0 +1,18 @@ +package a8k.app.config; + +import jakarta.annotation.PostConstruct; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +@Component +@Slf4j +public class VersionConfig { + static String version = "1.0"; + + @PostConstruct + public void init() { + log.info("====================================================================="); + log.info("= APP VERSION {}", version); + log.info("= APP BUILD TIME {}", System.getProperty("build.time")); + } +} diff --git a/src/main/java/a8k/app/hardware/type/A8kEcode.java b/src/main/java/a8k/app/hardware/type/A8kEcode.java index 7cefdbe..c8d714d 100644 --- a/src/main/java/a8k/app/hardware/type/A8kEcode.java +++ b/src/main/java/a8k/app/hardware/type/A8kEcode.java @@ -184,10 +184,12 @@ public enum A8kEcode { LOW_ERROR_PIPETTE_ERROR_VOLUME_ERROR(1419), LOW_ERROR_PIPETTE_ERROR_TIP_ALREADY_LOAD(1420), LOW_ERROR_PIPETTE_ERROR_TIP_LOAD_FAIL(1421), + LOW_ERROR_PIPETTE_ERROR_NO_TIP_WHEN_LLD(1422), LOW_ERROR_PIPETTE_ERROR_UNINITED(1501), LOW_ERROR_PIPETTE_ERROR_NOT_LLD_PREPARE(1502), LOW_ERROR_PIPETTE_ERROR_TIPISLOAD_WHEN_LLD_PREPARE(1500), LOW_ERROR_PIPETTE_ERROR_PUMP_LOAD_VAL_IS_NOT_EMPTY(1503), + LOW_ERROR_STEP_MOTOR_NOT_FOUND_ZERO_POINT(1600), LOW_ERROR_STEP_MOTOR_NOT_GO_ZERO(1601), LOW_ERROR_STEP_MOTOR_OVER_TEMPERATURE(1602), @@ -222,7 +224,6 @@ public enum A8kEcode { LOW_EXT_ERROR_MOTOR_AT_WRONG_POS(5002),//电机在错误的位置 ; - public final int index; public int rawindex = 0; diff --git a/src/main/java/a8k/app/hardware/type/RegIndex.java b/src/main/java/a8k/app/hardware/type/RegIndex.java index 15b2d3d..d3b02c6 100644 --- a/src/main/java/a8k/app/hardware/type/RegIndex.java +++ b/src/main/java/a8k/app/hardware/type/RegIndex.java @@ -144,7 +144,7 @@ public enum RegIndex { kreg_step_motor_is_enable(10102), // 是否使能 kreg_step_motor_dpos(10103), // 执行完上一条指令后的相对位移 kreg_step_motor_has_move_zero(10104), // 是否回零 - kreg_step_motor_shift(10150), // x偏移 + // kreg_step_motor_shift(10150), // x偏移 kreg_step_motor_shaft(10151), // x轴是否反转 kreg_step_motor_one_circle_pulse(10152), // x轴一圈脉冲数 kreg_step_motor_one_circle_pulse_denominator(10153), // 设置一圈脉冲数的分母 diff --git a/src/main/java/a8k/app/service/appsetup/A8kSubModuleRegInitService.java b/src/main/java/a8k/app/service/appsetup/A8kSubModuleRegInitService.java index 9b728aa..691059d 100644 --- a/src/main/java/a8k/app/service/appsetup/A8kSubModuleRegInitService.java +++ b/src/main/java/a8k/app/service/appsetup/A8kSubModuleRegInitService.java @@ -70,6 +70,7 @@ public class A8kSubModuleRegInitService { dumpAllSubBoardVersion(); initA8kModParams(); gStateMgrService.setBoardParamInited(true); + log.info("======================================================"); log.info("= init hardware param success...... ="); log.info("======================================================"); diff --git a/src/main/java/a8k/extui/mgr/ExtApiPageGroupCfgMgr.java b/src/main/java/a8k/extui/mgr/ExtApiPageGroupCfgMgr.java index 4f31332..84387e0 100644 --- a/src/main/java/a8k/extui/mgr/ExtApiPageGroupCfgMgr.java +++ b/src/main/java/a8k/extui/mgr/ExtApiPageGroupCfgMgr.java @@ -119,6 +119,7 @@ public class ExtApiPageGroupCfgMgr { pushMenu(new Menu("子模块管理", ZList.of( new Menu(LowLevelBoardVersionPreviewPage.class, "子模块版本查看"), + new Menu(HbotCtrlPage.class, "HBOT控制"), new Menu(PipetteCtrlDriverPage.getPageClass(), "移液抢驱动"), new Menu(PipetteMotorCtrlPage.class, "移液抢电机驱动控制"), diff --git a/src/main/java/a8k/extui/page/driver/HbotCtrlPage.java b/src/main/java/a8k/extui/page/driver/HbotCtrlPage.java index fae6e94..c22687b 100644 --- a/src/main/java/a8k/extui/page/driver/HbotCtrlPage.java +++ b/src/main/java/a8k/extui/page/driver/HbotCtrlPage.java @@ -3,10 +3,12 @@ package a8k.extui.page.driver; import a8k.app.constant.GearBacklashConstant; import a8k.app.hardware.driver.HbotDriver; import a8k.app.hardware.driver.PipetteCtrlDriver; +import a8k.app.hardware.type.HbotRegIndex; import a8k.app.hardware.type.PipetteRegIndex; import a8k.app.type.a8k.Pos2d; import a8k.app.type.a8k.Pos3d; import a8k.app.type.exception.AppException; +import a8k.app.utils.ZJsonNode; import a8k.extui.mgr.ExtApiPageMgr; import a8k.extui.type.ExtApiStatu; import jakarta.annotation.PostConstruct; @@ -141,6 +143,39 @@ public class HbotCtrlPage { } + public void setReg(HbotRegIndex reg, Integer val) throws AppException { + hbotDriver.setReg(reg, val); + } + + public Object readAllRegs() throws AppException { + ZJsonNode node = new ZJsonNode(); + for (HbotRegIndex regIndex : HbotRegIndex.values()) { + Integer regVal = hbotDriver.getReg(regIndex); + log.info("reg {}: {}", regIndex, regVal); + node.get(regIndex.name()).set(regVal); + } + return node.get(); + } + + public Integer readRegNoEx(HbotRegIndex regIndex) { + try { + return hbotDriver.getReg(regIndex); + } catch (AppException e) { + return 0; + } + } + + public void setShift(Integer xshift, Integer yshift) throws AppException { + hbotDriver.setReg(HbotRegIndex.kreg_xyrobot_shift_x, xshift); + hbotDriver.setReg(HbotRegIndex.kreg_xyrobot_shift_y, yshift); + } + + public void setIRunIHold(Integer iRun, Integer iHold) throws AppException { + hbotDriver.setReg(HbotRegIndex.kreg_xyrobot_irun, iRun); + hbotDriver.setReg(HbotRegIndex.kreg_xyrobot_ihold, iHold); + } + + @PostConstruct public void init() { var page = extApiPageMgr.newPage(this); @@ -154,18 +189,24 @@ public class HbotCtrlPage { page.addFunction("后", this::moveBackward); page.addFunction("左", this::moveLeft); page.addFunction("右", this::moveRight); - page.addFunction("移动到", this::moveTo).setParamVal("x", ()->0).setParamVal("y",()-> 0); + page.addFunction("移动到", this::moveTo).setParamVal("x", () -> 0).setParamVal("y", () -> 0); page.newGroup("Z轴"); page.addFunction("设置Z轴相对移动距离", this::setzMotorMoveByDistance).setParamVal("distance", () -> zMotorMoveByDistance); page.addFunction("上", this::zmoveUp); page.addFunction("下", this::zmoveDown); - page.addFunction("移动到", this::zMotorMoveTo).setParamVal("z", ()->0); + page.addFunction("移动到", this::zMotorMoveTo).setParamVal("z", () -> 0); page.newGroup("移动到"); page.addFunction("移动到", this::measurementMoveTo); page.addFunction("移动到", this::measurementMoveTo); - page.addFunction("移动到", this::measurementMoveTo).setParamVal("x", ()->readPosNoEx().x).setParamVal("y",()-> readPosNoEx().y).setParamVal("z", ()->readPosNoEx().z); + page.addFunction("移动到", this::measurementMoveTo).setParamVal("x", () -> readPosNoEx().x).setParamVal("y", () -> readPosNoEx().y).setParamVal("z", () -> readPosNoEx().z); + + page.newGroup("读写寄存器"); + page.addFunction("设置偏移", this::setShift).setParamVal("xshift", () -> readRegNoEx(HbotRegIndex.kreg_xyrobot_shift_x)).setParamVal("yshift", () -> readRegNoEx(HbotRegIndex.kreg_xyrobot_shift_y)); + page.addFunction("读所有寄存器", this::readAllRegs); + page.addFunction("设置寄存器", this::setReg); + extApiPageMgr.addPage(page); } diff --git a/src/main/java/a8k/extui/page/driver/MotorCtrlPage.java b/src/main/java/a8k/extui/page/driver/MotorCtrlPage.java index b373093..597a959 100644 --- a/src/main/java/a8k/extui/page/driver/MotorCtrlPage.java +++ b/src/main/java/a8k/extui/page/driver/MotorCtrlPage.java @@ -161,6 +161,10 @@ public class MotorCtrlPage { stepMotorCtrlDriver.setReg(id, StepMotorRegIndex.kreg_step_motor_one_circle_pulse_denominator, denominator); } + public void setDZero(Integer dzero) throws AppException { + stepMotorCtrlDriver.setReg(id, StepMotorRegIndex.kreg_step_motor_dzero_pos, dzero); + } + public Integer readReg(StepMotorRegIndex reg) { try { return stepMotorCtrlDriver.getReg(id, reg); @@ -212,6 +216,7 @@ public class MotorCtrlPage { page.addFunction("设置一圈脉冲数", this::setOneCirclePulse) .setParamVal("pulse", () -> readReg(StepMotorRegIndex.kreg_step_motor_one_circle_pulse)).setParamVal("denominator", () -> readReg(StepMotorRegIndex.kreg_step_motor_one_circle_pulse_denominator)); + page.addFunction("设置DZero", this::setDZero).setParamVal("dzero", () -> readReg(StepMotorRegIndex.kreg_step_motor_dzero_pos)); page.addFunction("设置寄存器", this::setReg); page.addFunction("读取所有寄存器", this::readAllRegs); diff --git a/src/main/java/a8k/extui/page/driver/PipetteMotorCtrlPage.java b/src/main/java/a8k/extui/page/driver/PipetteMotorCtrlPage.java index 064736b..25c5f5b 100644 --- a/src/main/java/a8k/extui/page/driver/PipetteMotorCtrlPage.java +++ b/src/main/java/a8k/extui/page/driver/PipetteMotorCtrlPage.java @@ -126,6 +126,10 @@ public class PipetteMotorCtrlPage { pipetteCtrlDriver.setReg(PipetteRegIndex.kreg_pipette_zm_one_circle_pulse_denominator, denominator); } + public void setDZeroPos(Integer dZeroPos) throws AppException { + pipetteCtrlDriver.setReg(PipetteRegIndex.kreg_pipette_zm_dzero, dZeroPos); + } + public Integer readReg(PipetteRegIndex reg) { try { return pipetteCtrlDriver.getReg(reg); @@ -165,16 +169,15 @@ public class PipetteMotorCtrlPage { page.addFunction("设置一圈脉冲数", this::setOneCirclePulse) .setParamVal("pulse", () -> readReg(PipetteRegIndex.kreg_pipette_zm_one_circle_pulse)).setParamVal("denominator", () -> readReg(PipetteRegIndex.kreg_pipette_zm_one_circle_pulse_denominator)); + page.addFunction("设置DZERO", this::setDZeroPos).setParamVal("dZeroPos", () -> readReg(PipetteRegIndex.kreg_pipette_zm_dzero)); page.addFunction("设置寄存器", this::setReg); page.addFunction("读取所有寄存器", this::readAllRegs); - page.newGroup("状态"); page.addFunction("读取位置", this::readPos); page.addFunction("读取编码器位置", this::readEncPos); - extApiPageMgr.addPage(page);