11 changed files with 260 additions and 53 deletions
-
3src/main/java/a8k/app/config/A8kSubModuleInitRegConfig.java
-
5src/main/java/a8k/app/constant/GearBacklashConstant.java
-
29src/main/java/a8k/app/hardware/type/PipetteRegIndex.java
-
4src/main/java/a8k/app/hardware/type/RegIndex.java
-
4src/main/java/a8k/app/service/lowerctrl/HbotMoveCtrlService.java
-
17src/main/java/a8k/app/service/lowerctrl/HbotMoveExCtrlService.java
-
6src/main/java/a8k/extui/mgr/ExtApiPageGroupCfgMgr.java
-
41src/main/java/a8k/extui/page/measurement/HbotPosMeasurePage.java
-
7src/main/java/a8k/extui/page/test/driver/PipetteCtrlDriverPage.java
-
188src/main/java/a8k/extui/page/test/driver/PipetteMotorCtrlPage.java
-
9src/main/java/a8k/extui/page/test/verification/P32HbotPosVerificationPage.java
@ -0,0 +1,5 @@ |
|||
package a8k.app.constant; |
|||
|
|||
public class GearBacklashConstant { |
|||
public static Integer HBOT_GEAR_BACKLASH = 100;//1mm |
|||
} |
@ -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); |
|||
|
|||
|
|||
} |
|||
} |
Write
Preview
Loading…
Cancel
Save
Reference in new issue