Browse Source

update

tags/v0
zhaohe 4 months ago
parent
commit
9b2369c957
  1. 3
      src/main/java/a8k/app/config/A8kSubModuleInitRegConfig.java
  2. 5
      src/main/java/a8k/app/constant/GearBacklashConstant.java
  3. 29
      src/main/java/a8k/app/hardware/type/PipetteRegIndex.java
  4. 4
      src/main/java/a8k/app/hardware/type/RegIndex.java
  5. 4
      src/main/java/a8k/app/service/lowerctrl/HbotMoveCtrlService.java
  6. 17
      src/main/java/a8k/app/service/lowerctrl/HbotMoveExCtrlService.java
  7. 6
      src/main/java/a8k/extui/mgr/ExtApiPageGroupCfgMgr.java
  8. 41
      src/main/java/a8k/extui/page/measurement/HbotPosMeasurePage.java
  9. 7
      src/main/java/a8k/extui/page/test/driver/PipetteCtrlDriverPage.java
  10. 188
      src/main/java/a8k/extui/page/test/driver/PipetteMotorCtrlPage.java
  11. 9
      src/main/java/a8k/extui/page/test/verification/P32HbotPosVerificationPage.java

3
src/main/java/a8k/app/config/A8kSubModuleInitRegConfig.java

@ -150,6 +150,9 @@ public class A8kSubModuleInitRegConfig {
addRegMarker(ModuleType.PipetteGunCtrl, RegIndex.kreg_pipette_zm_enc_resolution); addRegMarker(ModuleType.PipetteGunCtrl, RegIndex.kreg_pipette_zm_enc_resolution);
addRegMarker(ModuleType.PipetteGunCtrl, RegIndex.kreg_pipette_zm_enable_enc); addRegMarker(ModuleType.PipetteGunCtrl, RegIndex.kreg_pipette_zm_enable_enc);
addRegMarker(ModuleType.PipetteGunCtrl, RegIndex.kreg_pipette_zm_dzero); addRegMarker(ModuleType.PipetteGunCtrl, RegIndex.kreg_pipette_zm_dzero);
addRegMarker(ModuleType.PipetteGunCtrl, RegIndex.kreg_pipette_zm_pos_devi_tolerance);
addRegMarker(ModuleType.PipetteGunCtrl, RegIndex.kreg_pipette_zm_io_trigger_append_distance);
addRegMarker(ModuleType.PipetteGunCtrl, RegIndex.kreg_pipette_zm_mres);
addRegMarker(ModuleType.A8kOptical, RegIndex.kreg_a8k_opt_t_pos_offset); addRegMarker(ModuleType.A8kOptical, RegIndex.kreg_a8k_opt_t_pos_offset);
addRegMarker(ModuleType.A8kOptical, RegIndex.kreg_a8k_opt_f_pos_offset); addRegMarker(ModuleType.A8kOptical, RegIndex.kreg_a8k_opt_f_pos_offset);

5
src/main/java/a8k/app/constant/GearBacklashConstant.java

@ -0,0 +1,5 @@
package a8k.app.constant;
public class GearBacklashConstant {
public static Integer HBOT_GEAR_BACKLASH = 100;//1mm
}

29
src/main/java/a8k/app/hardware/type/PipetteRegIndex.java

@ -12,18 +12,18 @@ public enum PipetteRegIndex {
kreg_pipette_capactitance_val(RegIndex.kreg_pipette_capactitance_val), // 移液枪电容值 kreg_pipette_capactitance_val(RegIndex.kreg_pipette_capactitance_val), // 移液枪电容值
kreg_pipette_tip_state(RegIndex.kreg_pipette_tip_state), // 移动液枪tip状态 kreg_pipette_tip_state(RegIndex.kreg_pipette_tip_state), // 移动液枪tip状态
// kreg_pipette_limit_ul(RegIndex.kreg_pipette_limit_ul), //
// kreg_pipette_pump_acc(RegIndex.kreg_pipette_pump_acc), //
// kreg_pipette_pump_dec(RegIndex.kreg_pipette_pump_dec), //
// kreg_pipette_pump_vstart(RegIndex.kreg_pipette_pump_vstart), //
// kreg_pipette_pump_vstop(RegIndex.kreg_pipette_pump_vstop), //
// kreg_pipette_pump_vmax(RegIndex.kreg_pipette_pump_vmax), //
// kreg_pipette_aspirate_distribut_pump_vel(RegIndex.kreg_pipette_aspirate_distribut_pump_vel), //
// kreg_pipette_lld_pump_vel(RegIndex.kreg_pipette_lld_pump_vel), //
// kreg_pipette_lld_motor_vel_rpm(RegIndex.kreg_pipette_lld_motor_vel_rpm), //
// kreg_pipette_lld_detect_period_ms(RegIndex.kreg_pipette_lld_detect_period_ms), //
// kreg_pipette_lld_prepare_pos(RegIndex.kreg_pipette_lld_prepare_pos), //
// kreg_pipette_lld_prepare_distribut_pos(RegIndex.kreg_pipette_lld_prepare_distribut_pos), //
// kreg_pipette_limit_ul(RegIndex.kreg_pipette_limit_ul), //
// kreg_pipette_pump_acc(RegIndex.kreg_pipette_pump_acc), //
// kreg_pipette_pump_dec(RegIndex.kreg_pipette_pump_dec), //
// kreg_pipette_pump_vstart(RegIndex.kreg_pipette_pump_vstart), //
// kreg_pipette_pump_vstop(RegIndex.kreg_pipette_pump_vstop), //
// kreg_pipette_pump_vmax(RegIndex.kreg_pipette_pump_vmax), //
// kreg_pipette_aspirate_distribut_pump_vel(RegIndex.kreg_pipette_aspirate_distribut_pump_vel), //
// kreg_pipette_lld_pump_vel(RegIndex.kreg_pipette_lld_pump_vel), //
// kreg_pipette_lld_motor_vel_rpm(RegIndex.kreg_pipette_lld_motor_vel_rpm), //
// kreg_pipette_lld_detect_period_ms(RegIndex.kreg_pipette_lld_detect_period_ms), //
// kreg_pipette_lld_prepare_pos(RegIndex.kreg_pipette_lld_prepare_pos), //
// kreg_pipette_lld_prepare_distribut_pos(RegIndex.kreg_pipette_lld_prepare_distribut_pos), //
kreg_pipette_zm_pos(RegIndex.kreg_pipette_zm_pos), kreg_pipette_zm_pos(RegIndex.kreg_pipette_zm_pos),
kreg_pipette_zm_is_enable(RegIndex.kreg_pipette_zm_is_enable), kreg_pipette_zm_is_enable(RegIndex.kreg_pipette_zm_is_enable),
@ -54,7 +54,10 @@ public enum PipetteRegIndex {
kreg_pipette_zm_enable_enc(RegIndex.kreg_pipette_zm_enable_enc), kreg_pipette_zm_enable_enc(RegIndex.kreg_pipette_zm_enable_enc),
kreg_pipette_zm_dzero(RegIndex.kreg_pipette_zm_dzero), kreg_pipette_zm_dzero(RegIndex.kreg_pipette_zm_dzero),
kreg_pipette_zm_pos_devi_tolerance(RegIndex.kreg_pipette_zm_pos_devi_tolerance), kreg_pipette_zm_pos_devi_tolerance(RegIndex.kreg_pipette_zm_pos_devi_tolerance),
kreg_pipette_zm_io_trigger_append_distance(RegIndex.kreg_pipette_zm_io_trigger_append_distance);
kreg_pipette_zm_io_trigger_append_distance(RegIndex.kreg_pipette_zm_io_trigger_append_distance),
kreg_pipette_zm_mres(RegIndex.kreg_pipette_zm_mres),
kreg_pipette_zm_encpos(RegIndex.kreg_pipette_zm_encpos),
;
public final RegIndex regIndex; public final RegIndex regIndex;

4
src/main/java/a8k/app/hardware/type/RegIndex.java

@ -71,7 +71,9 @@ public enum RegIndex {
kreg_pipette_zm_dzero(4129), kreg_pipette_zm_dzero(4129),
kreg_pipette_zm_pos_devi_tolerance(4130), kreg_pipette_zm_pos_devi_tolerance(4130),
kreg_pipette_zm_io_trigger_append_distance(4131), kreg_pipette_zm_io_trigger_append_distance(4131),
kreg_pipette_zm_has_move_zero(4132), // 是否回零
kreg_pipette_zm_mres(4133), // 电机细分
kreg_pipette_zm_encpos(4134), // 编码器位置,readonly
/** /**
* 光学模组 * 光学模组
* *

4
src/main/java/a8k/app/service/lowerctrl/HbotMoveCtrlService.java

@ -1,5 +1,6 @@
package a8k.app.service.lowerctrl; package a8k.app.service.lowerctrl;
import a8k.app.constant.GearBacklashConstant;
import a8k.app.type.a8k.Pos2d; import a8k.app.type.a8k.Pos2d;
import a8k.app.type.a8k.Pos3d; import a8k.app.type.a8k.Pos3d;
import a8k.app.hardware.driver.InputDetectDriver; import a8k.app.hardware.driver.InputDetectDriver;
@ -73,8 +74,7 @@ public class HbotMoveCtrlService {
// HBot移动 // HBot移动
hbotDriver.enable(1); hbotDriver.enable(1);
// hbotDrive
// r.moveToBlock(targetPos.x - 20, targetPos.y - 20);
hbotDriver.moveToBlock(targetPos.x - GearBacklashConstant.HBOT_GEAR_BACKLASH, targetPos.y);
hbotDriver.moveToBlock(targetPos.x, targetPos.y); hbotDriver.moveToBlock(targetPos.x, targetPos.y);
// hbotDriver.moveToBlock(targetPos.x, targetPos.y); // hbotDriver.moveToBlock(targetPos.x, targetPos.y);

17
src/main/java/a8k/app/service/lowerctrl/HbotMoveExCtrlService.java

@ -61,6 +61,23 @@ public class HbotMoveExCtrlService {
pipetteCtrlDriver.zMotorMoveToZeroPointQuickBlock(); pipetteCtrlDriver.zMotorMoveToZeroPointQuickBlock();
} }
public void zAxisMoveToBlock(Integer z) throws AppException {
pipetteCtrlDriver.zMotorMoveToBlock(z);
}
public void zAxisMotorMoveToZeroPointQuickBlock() throws AppException {
pipetteCtrlDriver.zMotorMoveToZeroPointQuickBlock();
}
public void zAxisMoveToZeroPointBlock() throws AppException {
pipetteCtrlDriver.zMotorMoveZeroBlock();
}
public void initializePipette() throws AppException {
log.info("initializePipette");
pipetteCtrlDriver.pipetteInitDeviceBlock();
}
//检查当前位置TIP是否存在 //检查当前位置TIP是否存在
// 通过取tip然后再原地放回来来判断 // 通过取tip然后再原地放回来来判断

6
src/main/java/a8k/extui/mgr/ExtApiPageGroupCfgMgr.java

@ -92,7 +92,7 @@ public class ExtApiPageGroupCfgMgr {
new Menu(ProjInfoMgrPage.class, "项目信息管理"), new Menu(ProjInfoMgrPage.class, "项目信息管理"),
new Menu(ReactionRecordMgrDebugPage.class, "反应记录") new Menu(ReactionRecordMgrDebugPage.class, "反应记录")
)), )),
new Menu(A8kSubModuleParameterInitDebugPage.class,"子模块初始化参数"),
new Menu(A8kSubModuleParameterInitDebugPage.class, "子模块初始化参数"),
new Menu("坐标设置", ZList.of( new Menu("坐标设置", ZList.of(
new Menu(DeviceActionParameterSettingPage.class, "设备动作参数设置"), new Menu(DeviceActionParameterSettingPage.class, "设备动作参数设置"),
new Menu(P02TubeFeedingModulePosCalibrationPage.class, "试管入料设置"), new Menu(P02TubeFeedingModulePosCalibrationPage.class, "试管入料设置"),
@ -120,11 +120,13 @@ public class ExtApiPageGroupCfgMgr {
pushMenu(new Menu("子模块管理", ZList.of( pushMenu(new Menu("子模块管理", ZList.of(
new Menu(LowLevelBoardVersionPreviewPage.class, "子模块版本查看"), new Menu(LowLevelBoardVersionPreviewPage.class, "子模块版本查看"),
new Menu(PipetteCtrlDriverPage.getPageClass(), "移液抢驱动"), new Menu(PipetteCtrlDriverPage.getPageClass(), "移液抢驱动"),
new Menu(PipetteMotorCtrlPage.class, "移液抢电机驱动控制"),
new Menu(MotorCtrlPage.class, "电机驱动"), new Menu(MotorCtrlPage.class, "电机驱动"),
new Menu(MiniServoCtrlPage.class, "伺服电机驱动"), new Menu(MiniServoCtrlPage.class, "伺服电机驱动"),
new Menu(InputIOStateScannerPage.class, "输入IO状态查看"), new Menu(InputIOStateScannerPage.class, "输入IO状态查看"),
new Menu(CodeScanerDriverCtrlPage.class, "条码扫描仪") new Menu(CodeScanerDriverCtrlPage.class, "条码扫描仪")
)));
)));
pushMenu(new Menu("高级应用", ZList.of( pushMenu(new Menu("高级应用", ZList.of(

41
src/main/java/a8k/extui/page/measurement/HbotPosMeasurePage.java

@ -1,5 +1,6 @@
package a8k.extui.page.measurement; package a8k.extui.page.measurement;
import a8k.app.constant.GearBacklashConstant;
import a8k.app.type.a8k.Pos2d; import a8k.app.type.a8k.Pos2d;
import a8k.app.type.a8k.Pos3d; import a8k.app.type.a8k.Pos3d;
import a8k.app.type.exception.AppException; import a8k.app.type.exception.AppException;
@ -11,21 +12,19 @@ import a8k.extui.mgr.ExtApiPageMgr;
import a8k.extui.type.ExtApiStatu; import a8k.extui.type.ExtApiStatu;
import jakarta.annotation.PostConstruct; import jakarta.annotation.PostConstruct;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
@Component @Component
@Slf4j
@RequiredArgsConstructor
public class HbotPosMeasurePage { public class HbotPosMeasurePage {
@Resource
ExtApiPageMgr extApiPageMgr;
@Resource
HbotDriver hbotDriver;
@Resource
HbotMoveCtrlService hbotMoveCtrlService;
@Resource
PipetteCtrlDriver pipetteCtrlDriver;
private final ExtApiPageMgr extApiPageMgr;
private final HbotDriver hbotDriver;
private final PipetteCtrlDriver pipetteCtrlDriver;
@ExtApiStatu(group = "Hbot当前坐标") @ExtApiStatu(group = "Hbot当前坐标")
public Pos3d readPos() throws AppException { public Pos3d readPos() throws AppException {
@ -55,12 +54,14 @@ public class HbotPosMeasurePage {
Pos2d pos = hbotDriver.readPos(); Pos2d pos = hbotDriver.readPos();
pos.x += dx; pos.x += dx;
pos.y += dy; pos.y += dy;
hbotDriver.moveToBlock(pos.x - GearBacklashConstant.HBOT_GEAR_BACKLASH, pos.y);
hbotDriver.moveToBlock(pos.x, pos.y); hbotDriver.moveToBlock(pos.x, pos.y);
} }
public void moveTo(Integer x, Integer y) throws AppException { public void moveTo(Integer x, Integer y) throws AppException {
hbotDriver.enable(1); hbotDriver.enable(1);
pipetteCtrlDriver.zMotorEnable(1); pipetteCtrlDriver.zMotorEnable(1);
hbotDriver.moveToBlock(x - GearBacklashConstant.HBOT_GEAR_BACKLASH, y);
hbotDriver.moveToBlock(x, y); hbotDriver.moveToBlock(x, y);
} }
@ -114,8 +115,6 @@ public class HbotPosMeasurePage {
} }
public Pos3d measurementCurrentPos() throws AppException { public Pos3d measurementCurrentPos() throws AppException {
pipetteCtrlDriver.zMotorMeasureDistance(); pipetteCtrlDriver.zMotorMeasureDistance();
Pos3d pos = new Pos3d(); Pos3d pos = new Pos3d();
@ -129,22 +128,11 @@ public class HbotPosMeasurePage {
hbotDriver.enable(1); hbotDriver.enable(1);
pipetteCtrlDriver.zMotorEnable(1); pipetteCtrlDriver.zMotorEnable(1);
pipetteCtrlDriver.zMotorMoveToBlock(0); pipetteCtrlDriver.zMotorMoveToBlock(0);
hbotDriver.moveToBlock(x - GearBacklashConstant.HBOT_GEAR_BACKLASH, y);
hbotDriver.moveToBlock(x, y); hbotDriver.moveToBlock(x, y);
pipetteCtrlDriver.zMotorMoveToBlock(z); pipetteCtrlDriver.zMotorMoveToBlock(z);
} }
public void measurementMoveTo0(Integer x, Integer y, Integer z) throws AppException {
measurementMoveTo(x, y, z);
}
public void measurementMoveTo1(Integer x, Integer y, Integer z) throws AppException {
measurementMoveTo(x, y, z);
}
public void measurementMoveTo2(Integer x, Integer y, Integer z) throws AppException {
measurementMoveTo(x, y, z);
}
@PostConstruct @PostConstruct
public void init() { public void init() {
@ -168,10 +156,9 @@ public class HbotPosMeasurePage {
page.addFunction("移动到", this::zMotorMoveTo).setParamVal("z", 0); page.addFunction("移动到", this::zMotorMoveTo).setParamVal("z", 0);
page.newGroup("移动到"); page.newGroup("移动到");
page.addFunction("移动到", this::measurementMoveTo0);
page.addFunction("移动到", this::measurementMoveTo1);
page.addFunction("移动到", this::measurementMoveTo2);
page.addFunction("移动到", this::measurementMoveTo);
page.addFunction("移动到", this::measurementMoveTo);
page.addFunction("移动到", this::measurementMoveTo);
extApiPageMgr.addPage(page); extApiPageMgr.addPage(page);
} }

7
src/main/java/a8k/extui/page/test/driver/PipetteCtrlDriverPage.java

@ -23,14 +23,7 @@ public class PipetteCtrlDriverPage {
@PostConstruct @PostConstruct
void init() { void init() {
ExtUIPageCfg page = new ExtUIPageCfg(pipetteCtrlDriver); ExtUIPageCfg page = new ExtUIPageCfg(pipetteCtrlDriver);
page.addFunction("z轴电机使能", pipetteCtrlDriver::zMotorEnable);
page.addFunction("模块停止", pipetteCtrlDriver::moduleStop); page.addFunction("模块停止", pipetteCtrlDriver::moduleStop);
page.addFunction("z轴电机归零", pipetteCtrlDriver::zMotorMoveZeroBlock);
page.addFunction("z轴电机快速归零", pipetteCtrlDriver::zMotorMoveToZeroPointQuickBlock);
page.addFunction("z轴电机相对移动", pipetteCtrlDriver::zMotorMoveByBlock);
page.addFunction("z轴电机绝对移动", pipetteCtrlDriver::zMotorMoveToBlock);
page.addFunction("z轴电机测量距离", pipetteCtrlDriver::zMotorMeasureDistance);
page.addFunction("z轴电机读取测量距离结果", pipetteCtrlDriver::zMotorReadMeasureDistanceResult);
page.addFunction("移动液枪初始化设备", pipetteCtrlDriver::pipetteInitDeviceBlock); page.addFunction("移动液枪初始化设备", pipetteCtrlDriver::pipetteInitDeviceBlock);
page.addFunction("放置吸头", pipetteCtrlDriver::putTipBlock); page.addFunction("放置吸头", pipetteCtrlDriver::putTipBlock);
page.addFunction("LLD.获取传感器采样数据", pipetteCtrlDriver::getSensorSampleData); page.addFunction("LLD.获取传感器采样数据", pipetteCtrlDriver::getSensorSampleData);

188
src/main/java/a8k/extui/page/test/driver/PipetteMotorCtrlPage.java

@ -0,0 +1,188 @@
package a8k.extui.page.test.driver;
import a8k.app.hardware.driver.PipetteCtrlDriver;
import a8k.app.hardware.driver.StepMotorCtrlDriver;
import a8k.app.hardware.type.PipetteRegIndex;
import a8k.app.hardware.type.StepMotorMId;
import a8k.app.hardware.type.PipetteRegIndex;
import a8k.app.type.exception.AppException;
import a8k.app.utils.ZJsonNode;
import a8k.extui.mgr.ExtApiPageMgr;
import jakarta.annotation.PostConstruct;
import jakarta.annotation.Resource;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
@Component
@RequiredArgsConstructor
@Slf4j
public class PipetteMotorCtrlPage {
private final PipetteCtrlDriver pipetteCtrlDriver;
private final ExtApiPageMgr extApiPageMgr;
Integer dpos = 10;
public void setStepMotorDpos(Integer dpos) {
this.dpos = dpos;
}
//
public void enableMotor() throws AppException {
pipetteCtrlDriver.zMotorEnable(1);
}
public void disableMotor() throws AppException {
pipetteCtrlDriver.zMotorEnable(0);
}
public void stepMotorEasyMoveToZero() throws AppException {
pipetteCtrlDriver.zMotorMoveZeroBlock();
}
public void stepMotorStop() throws AppException {
pipetteCtrlDriver.moduleStop();
}
public void stepMotorEasyMoveForward() throws AppException {
pipetteCtrlDriver.zMotorMoveByBlock(dpos);
}
public void stepMotorEasyMoveBackward() throws AppException {
pipetteCtrlDriver.zMotorMoveByBlock(-dpos);
}
public void stepMotorEasyMoveTo(Integer pos) throws AppException {
log.info("stepMotorEasyMoveTo: {}", pos);
pipetteCtrlDriver.zMotorMoveToBlock(pos);
}
public Integer readPos() throws AppException {
return pipetteCtrlDriver.getReg(PipetteRegIndex.kreg_pipette_zm_pos);
}
public Integer readEncPos() throws AppException {
return pipetteCtrlDriver.getReg(PipetteRegIndex.kreg_pipette_zm_encpos);
}
public Object readAllRegs() throws AppException {
ZJsonNode node = new ZJsonNode();
for (PipetteRegIndex reg : PipetteRegIndex.values()) {
try {
Integer val = pipetteCtrlDriver.getReg(reg);
node.get(reg.name()).set(val);
} catch (AppException e) {
node.get(reg.name()).set(e.getError().code);
}
}
return node.get();
}
public void setReg(PipetteRegIndex reg, Integer val) throws AppException {
pipetteCtrlDriver.setReg(reg, val);
}
public void setMres(Integer mres) throws AppException {
pipetteCtrlDriver.setReg(PipetteRegIndex.kreg_pipette_zm_mres, mres);
}
public void setStartAndStopVel(Integer v) throws AppException {
pipetteCtrlDriver.setReg(PipetteRegIndex.kreg_pipette_zm_vstart, v);
pipetteCtrlDriver.setReg(PipetteRegIndex.kreg_pipette_zm_vstop, v);
}
public void setV1(Integer v) throws AppException {
pipetteCtrlDriver.setReg(PipetteRegIndex.kreg_pipette_zm_v1, v);
}
public void setA1AndD1(Integer acc) throws AppException {
pipetteCtrlDriver.setReg(PipetteRegIndex.kreg_pipette_zm_a1, acc);
pipetteCtrlDriver.setReg(PipetteRegIndex.kreg_pipette_zm_d1, acc);
}
public void setAmaxAndDmax(Integer acc) throws AppException {
pipetteCtrlDriver.setReg(PipetteRegIndex.kreg_pipette_zm_amax, acc);
pipetteCtrlDriver.setReg(PipetteRegIndex.kreg_pipette_zm_dmax, acc);
}
public void setDefaultVel(Integer v) throws AppException {
pipetteCtrlDriver.setReg(PipetteRegIndex.kreg_pipette_zm_default_velocity, v);
}
public void setIRUN(Integer irun) throws AppException {
pipetteCtrlDriver.setReg(PipetteRegIndex.kreg_pipette_zm_irun, irun);
}
public void setIHOLD(Integer ihold) throws AppException {
pipetteCtrlDriver.setReg(PipetteRegIndex.kreg_pipette_zm_ihold, ihold);
}
public void setOneCirclePulse(Integer pulse, Integer denominator) throws AppException {
pipetteCtrlDriver.setReg(PipetteRegIndex.kreg_pipette_zm_one_circle_pulse, pulse);
pipetteCtrlDriver.setReg(PipetteRegIndex.kreg_pipette_zm_one_circle_pulse_denominator, denominator);
}
public Integer readReg(PipetteRegIndex reg) {
try {
return pipetteCtrlDriver.getReg(reg);
} catch (AppException e) {
return 0;
}
}
@PostConstruct
void init() {
var page = extApiPageMgr.newPage(this);
page.newGroup("基础操作");
page.addFunction("使能电机", this::enableMotor);
page.addFunction("失能电机", this::disableMotor);
page.addFunction("归零", this::stepMotorEasyMoveToZero);
page.addFunction("停止", this::stepMotorStop);
page.newGroup("相对移动");
page.addFunction("设置相对移动距离", this::setStepMotorDpos).setParamVal("dpos", () -> dpos);
page.addFunction("正向移动", this::stepMotorEasyMoveForward);
page.addFunction("反向移动", this::stepMotorEasyMoveBackward);
page.newGroup("绝对移动");
page.addFunction("绝对移动", this::stepMotorEasyMoveTo);
page.newGroup("寄存器配置");
page.addFunction("设备MRES", this::setMres).setParamVal("mres", () -> readReg(PipetteRegIndex.kreg_pipette_zm_mres));
page.addFunction("设置IRUN", this::setIRUN).setParamVal("irun", () -> readReg(PipetteRegIndex.kreg_pipette_zm_irun));
page.addFunction("设置IHOLD", this::setIHOLD).setParamVal("ihold", () -> readReg(PipetteRegIndex.kreg_pipette_zm_ihold));
page.addFunction("设置起停速度", this::setStartAndStopVel).setParamVal("v", () -> readReg(PipetteRegIndex.kreg_pipette_zm_vstart));
page.addFunction("设置V1", this::setV1).setParamVal("v", () -> readReg(PipetteRegIndex.kreg_pipette_zm_v1));
page.addFunction("设置加速度", this::setA1AndD1).setParamVal("acc", () -> readReg(PipetteRegIndex.kreg_pipette_zm_a1));
page.addFunction("设置最大加速度", this::setAmaxAndDmax).setParamVal("acc", () -> readReg(PipetteRegIndex.kreg_pipette_zm_amax));
page.addFunction("设置默认速度", this::setDefaultVel).setParamVal("v", () -> readReg(PipetteRegIndex.kreg_pipette_zm_default_velocity));
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("设置寄存器", this::setReg);
page.addFunction("读取所有寄存器", this::readAllRegs);
page.newGroup("状态");
page.addFunction("读取位置", this::readPos);
page.addFunction("读取编码器位置", this::readEncPos);
extApiPageMgr.addPage(page);
}
}

9
src/main/java/a8k/extui/page/test/verification/P32HbotPosVerificationPage.java

@ -20,9 +20,16 @@ public class P32HbotPosVerificationPage {
} }
public void takeAndDropTip(TipGroupPos tipGroupPos, Integer index) throws AppException { public void takeAndDropTip(TipGroupPos tipGroupPos, Integer index) throws AppException {
hbotMoveExCtrlService.testTakeTip(tipGroupPos, index);
try {
hbotMoveExCtrlService.testTakeTip(tipGroupPos, index);
} catch (AppException e) {
hbotMoveExCtrlService.initializePipette();
hbotMoveExCtrlService.zAxisMoveToZeroPointBlock();
throw e;
}
} }
public void dropTip() throws AppException { public void dropTip() throws AppException {
hbotMoveExCtrlService.dropTip(); hbotMoveExCtrlService.dropTip();
} }

Loading…
Cancel
Save