30 changed files with 1451 additions and 1084 deletions
-
32src/main/java/a8k/app/hardware/driver/CodeScanerDriver.java
-
43src/main/java/a8k/app/service/lowerctrl/ConsumablesScanCtrlService.java
-
58src/main/java/a8k/app/service/lowerctrl/HbotMoveExCtrlService.java
-
3src/main/java/a8k/app/service/lowerctrl/TubeFeedingCtrlService.java
-
66src/main/java/a8k/app/service/param/hbotpos/Hbot2DCodeScanParamMgr.java
-
14src/main/java/a8k/app/service/param/hbotpos/HbotLargeBottleBSPosMgr.java
-
7src/main/java/a8k/app/type/param/hbotpos/Hbot2DCodeScanPos.java
-
3src/main/java/a8k/app/type/param/hbotpos/HbotLargeBottleBSPos.java
-
4src/main/java/a8k/app/type/param/hbotpos/HbotLittleBSPos.java
-
3src/main/java/a8k/extui/mgr/ExtApiPageGroupCfgMgr.java
-
66src/main/java/a8k/extui/page/driver/CodeScanerDriverCtrlPage.java
-
172src/main/java/a8k/extui/page/driver/HbotCtrlPage.java
-
2src/main/java/a8k/extui/page/driver/InputIOStateScannerPage.java
-
2src/main/java/a8k/extui/page/driver/LowLevelBoardVersionPreviewPage.java
-
2src/main/java/a8k/extui/page/driver/MiniServoCtrlPage.java
-
2src/main/java/a8k/extui/page/driver/MotorCtrlPage.java
-
2src/main/java/a8k/extui/page/driver/OutputIOCtrlDebugPage.java
-
2src/main/java/a8k/extui/page/driver/PipetteCtrlDriverPage.java
-
8src/main/java/a8k/extui/page/driver/PipetteMotorCtrlPage.java
-
28src/main/java/a8k/extui/page/extsetting/pos_calibration/P24Hbot2DCodeScanPosCalibrationPage.java
-
23src/main/java/a8k/extui/page/measurement/HbotPosMeasurePage.java
-
44src/main/java/a8k/extui/page/test/driver/CodeScanerDriverCtrlPage.java
-
71src/main/java/a8k/extui/page/test/verification/HbotCodeScanPosVerificationPage.java
@ -0,0 +1,66 @@ |
|||
package a8k.extui.page.driver; |
|||
|
|||
import a8k.app.type.exception.AppException; |
|||
import a8k.app.hardware.driver.CodeScanerDriver; |
|||
import a8k.extui.mgr.ExtApiPageMgr; |
|||
import jakarta.annotation.PostConstruct; |
|||
import lombok.RequiredArgsConstructor; |
|||
import org.springframework.stereotype.Component; |
|||
|
|||
@Component |
|||
@RequiredArgsConstructor |
|||
public class CodeScanerDriverCtrlPage { |
|||
|
|||
|
|||
final private ExtApiPageMgr extApiPageMgr; |
|||
final private CodeScanerDriver codeScanerDriver; |
|||
|
|||
public String pipetteModCodeScannerScanCode() throws AppException { |
|||
var ret = codeScanerDriver.pipetteModCodeScannerScanCode(10 * 1000); |
|||
if (ret == null || ret.isEmpty()) { |
|||
return "null"; |
|||
} |
|||
return ret; |
|||
} |
|||
|
|||
public void pipetteGunStartScan() throws AppException { |
|||
codeScanerDriver.pipetteModCodeScannerStartScan(); |
|||
} |
|||
|
|||
public void pipetteGunStopScan() throws AppException { |
|||
codeScanerDriver.pipetteModCodeScannerStopScan(); |
|||
} |
|||
|
|||
public String feedingModScannerModCodeScannerScanCode() { |
|||
var ret = codeScanerDriver.feedingModScannerModCodeScannerScanCode(10 * 1000); |
|||
if (ret == null || ret.isEmpty()) { |
|||
return "null"; |
|||
} |
|||
return ret; |
|||
} |
|||
|
|||
public void feedingModScannerModCodeScannerStartScan() throws AppException { |
|||
codeScanerDriver.feedingModScannerModCodeScannerStartScan(); |
|||
} |
|||
|
|||
public void feedingModScannerModCodeScannerStopScan() throws AppException { |
|||
codeScanerDriver.feedingModScannerModCodeScannerStopScan(); |
|||
} |
|||
|
|||
@PostConstruct |
|||
void init() { |
|||
var page = extApiPageMgr.newPage(this); |
|||
|
|||
page.newGroup("Z轴扫码器"); |
|||
page.addFunction("扫码(阻塞)", this::pipetteModCodeScannerScanCode); |
|||
page.addFunction("扫码开始", this::pipetteGunStartScan); |
|||
page.addFunction("扫码停止", this::pipetteGunStopScan); |
|||
|
|||
page.newGroup("进出料扫描"); |
|||
page.addFunction("扫码(阻塞)", this::feedingModScannerModCodeScannerScanCode); |
|||
page.addFunction("扫码开始", this::feedingModScannerModCodeScannerStartScan); |
|||
page.addFunction("扫码停止", this::feedingModScannerModCodeScannerStopScan); |
|||
|
|||
extApiPageMgr.addPage(page); |
|||
} |
|||
} |
@ -0,0 +1,172 @@ |
|||
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.PipetteRegIndex; |
|||
import a8k.app.type.a8k.Pos2d; |
|||
import a8k.app.type.a8k.Pos3d; |
|||
import a8k.app.type.exception.AppException; |
|||
import a8k.extui.mgr.ExtApiPageMgr; |
|||
import a8k.extui.type.ExtApiStatu; |
|||
import jakarta.annotation.PostConstruct; |
|||
import lombok.RequiredArgsConstructor; |
|||
import lombok.extern.slf4j.Slf4j; |
|||
import org.springframework.stereotype.Component; |
|||
|
|||
@Component |
|||
@Slf4j |
|||
@RequiredArgsConstructor |
|||
public class HbotCtrlPage { |
|||
|
|||
|
|||
private final ExtApiPageMgr extApiPageMgr; |
|||
private final HbotDriver hbotDriver; |
|||
private final PipetteCtrlDriver pipetteCtrlDriver; |
|||
|
|||
@ExtApiStatu(group = "Hbot当前坐标") |
|||
public Pos3d readPos() throws AppException { |
|||
Pos3d pos = new Pos3d(); |
|||
pos.x = hbotDriver.readPos().x; |
|||
pos.y = hbotDriver.readPos().y; |
|||
pos.z = pipetteCtrlDriver.getReg(PipetteRegIndex.kreg_pipette_zm_pos); |
|||
return pos; |
|||
} |
|||
|
|||
Integer moveByDistance = 100; |
|||
Integer zMotorMoveByDistance = 10; |
|||
|
|||
@ExtApiStatu(group = "HBOT相对移动距离") |
|||
public Integer getMoveByDistance() { |
|||
return moveByDistance; |
|||
} |
|||
|
|||
@ExtApiStatu(group = "Z轴相对移动距离") |
|||
public Integer getZMotorMoveByDistance() { |
|||
return zMotorMoveByDistance; |
|||
} |
|||
|
|||
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 - GearBacklashConstant.HBOT_GEAR_BACKLASH, pos.y); |
|||
hbotDriver.moveToBlock(pos.x, pos.y); |
|||
} |
|||
|
|||
public void moveTo(Integer x, Integer y) throws AppException { |
|||
hbotDriver.enable(1); |
|||
pipetteCtrlDriver.zMotorEnable(1); |
|||
hbotDriver.moveToBlock(x - GearBacklashConstant.HBOT_GEAR_BACKLASH, y); |
|||
hbotDriver.moveToBlock(x, y); |
|||
} |
|||
|
|||
public void zMotorMoveTo(Integer z) throws AppException { |
|||
pipetteCtrlDriver.zMotorMoveToBlock(z); |
|||
} |
|||
|
|||
void zMotorMoveBy(Integer dz) throws AppException { |
|||
pipetteCtrlDriver.zMotorMoveByBlock(dz); |
|||
} |
|||
|
|||
|
|||
synchronized public void setMoveByDistance(Integer distance) { |
|||
moveByDistance = distance; |
|||
} |
|||
|
|||
synchronized public void setzMotorMoveByDistance(Integer distance) { |
|||
zMotorMoveByDistance = distance; |
|||
} |
|||
|
|||
|
|||
synchronized public void mveoToZero() throws AppException { |
|||
hbotDriver.enable(1); |
|||
pipetteCtrlDriver.zMotorEnable(1); |
|||
pipetteCtrlDriver.zMotorMoveZeroBlock(); |
|||
hbotDriver.moveToZeroBlock(); |
|||
} |
|||
|
|||
public void moveBackward() throws AppException { |
|||
moveBy(0, -moveByDistance); |
|||
} |
|||
|
|||
public void moveForward() throws AppException { |
|||
moveBy(0, moveByDistance); |
|||
} |
|||
|
|||
public void moveLeft() throws AppException { |
|||
moveBy(-moveByDistance, 0); |
|||
} |
|||
|
|||
public void moveRight() throws AppException { |
|||
moveBy(moveByDistance, 0); |
|||
} |
|||
|
|||
public void zmoveUp() throws AppException { |
|||
zMotorMoveBy(-zMotorMoveByDistance); |
|||
} |
|||
|
|||
public void zmoveDown() throws AppException { |
|||
zMotorMoveBy(zMotorMoveByDistance); |
|||
} |
|||
|
|||
|
|||
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 void measurementMoveTo(Integer x, Integer y, Integer z) throws AppException { |
|||
hbotDriver.enable(1); |
|||
pipetteCtrlDriver.zMotorEnable(1); |
|||
pipetteCtrlDriver.zMotorMoveToBlock(0); |
|||
hbotDriver.moveToBlock(x - GearBacklashConstant.HBOT_GEAR_BACKLASH, y); |
|||
hbotDriver.moveToBlock(x, y); |
|||
pipetteCtrlDriver.zMotorMoveToBlock(z); |
|||
} |
|||
|
|||
public Pos3d readPosNoEx() { |
|||
try { |
|||
return readPos(); |
|||
} catch (AppException e) { |
|||
log.error("readPosNoEx error", e); |
|||
return new Pos3d(); |
|||
} |
|||
} |
|||
|
|||
|
|||
@PostConstruct |
|||
public void init() { |
|||
var page = extApiPageMgr.newPage(this); |
|||
|
|||
page.newGroup("基础"); |
|||
page.addFunction("归零", this::mveoToZero); |
|||
|
|||
page.newGroup("Hbot"); |
|||
page.addFunction("设置相对移动距离", this::setMoveByDistance).setParamVal("distance", () -> moveByDistance); |
|||
page.addFunction("前(向人移动)", this::moveForward); |
|||
page.addFunction("后", this::moveBackward); |
|||
page.addFunction("左", this::moveLeft); |
|||
page.addFunction("右", this::moveRight); |
|||
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.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); |
|||
|
|||
extApiPageMgr.addPage(page); |
|||
} |
|||
} |
@ -1,4 +1,4 @@ |
|||
package a8k.extui.page.test.driver; |
|||
package a8k.extui.page.driver; |
|||
|
|||
import a8k.app.type.exception.AppException; |
|||
import a8k.app.hardware.driver.InputDetectDriver; |
@ -1,4 +1,4 @@ |
|||
package a8k.extui.page.test.driver; |
|||
package a8k.extui.page.driver; |
|||
|
|||
import a8k.app.type.exception.AppException; |
|||
import a8k.app.hardware.channel.A8kCanBusService; |
@ -1,4 +1,4 @@ |
|||
package a8k.extui.page.test.driver; |
|||
package a8k.extui.page.driver; |
|||
|
|||
import a8k.app.type.exception.AppException; |
|||
import a8k.app.hardware.driver.MiniServoDriver; |
@ -1,4 +1,4 @@ |
|||
package a8k.extui.page.test.driver; |
|||
package a8k.extui.page.driver; |
|||
|
|||
import a8k.app.type.exception.AppException; |
|||
import a8k.app.hardware.driver.StepMotorCtrlDriver; |
@ -1,4 +1,4 @@ |
|||
package a8k.extui.page.test.driver; |
|||
package a8k.extui.page.driver; |
|||
|
|||
import a8k.app.type.exception.AppException; |
|||
import a8k.app.hardware.driver.OutputIOCtrlDriver; |
@ -1,4 +1,4 @@ |
|||
package a8k.extui.page.test.driver; |
|||
package a8k.extui.page.driver; |
|||
|
|||
import a8k.app.hardware.driver.PipetteCtrlDriver; |
|||
import a8k.extui.mgr.ExtApiPageMgr; |
@ -1,19 +1,13 @@ |
|||
package a8k.extui.page.test.driver; |
|||
package a8k.extui.page.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 |
@ -1,44 +0,0 @@ |
|||
package a8k.extui.page.test.driver; |
|||
|
|||
import a8k.app.type.exception.AppException; |
|||
import a8k.app.hardware.driver.CodeScanerDriver; |
|||
import a8k.extui.mgr.ExtApiPageMgr; |
|||
import jakarta.annotation.PostConstruct; |
|||
import lombok.RequiredArgsConstructor; |
|||
import org.springframework.stereotype.Component; |
|||
|
|||
@Component |
|||
@RequiredArgsConstructor |
|||
public class CodeScanerDriverCtrlPage { |
|||
|
|||
|
|||
final private ExtApiPageMgr extApiPageMgr; |
|||
final private CodeScanerDriver codeScanerDriver; |
|||
|
|||
public String pipetteModCodeScannerScanCode() throws AppException { |
|||
var ret = codeScanerDriver.pipetteModCodeScannerScanCode(10 * 1000); |
|||
if (ret == null || ret.isEmpty()) { |
|||
return "null"; |
|||
} |
|||
return ret; |
|||
} |
|||
|
|||
public String feedingModScannerModCodeScannerScanCode() { |
|||
var ret = codeScanerDriver.feedingModScannerModCodeScannerScanCode(10 * 1000); |
|||
if (ret == null || ret.isEmpty()) { |
|||
return "null"; |
|||
} |
|||
return ret; |
|||
} |
|||
|
|||
@PostConstruct |
|||
void init() { |
|||
var page = extApiPageMgr.newPage(this); |
|||
|
|||
page.newGroup("扫码"); |
|||
page.addFunction("机械臂Z轴板扫码", this::pipetteModCodeScannerScanCode); |
|||
page.addFunction("出入料模块扫码", this::feedingModScannerModCodeScannerScanCode); |
|||
|
|||
extApiPageMgr.addPage(page); |
|||
} |
|||
} |
@ -0,0 +1,71 @@ |
|||
package a8k.extui.page.test.verification; |
|||
|
|||
import a8k.app.dao.type.db.ProjExtInfoCard; |
|||
import a8k.app.hardware.driver.CodeScanerDriver; |
|||
import a8k.app.hardware.type.A8kEcode; |
|||
import a8k.app.i18n.Internationalization; |
|||
import a8k.app.service.background.ProjIDCardCtrlAndMonitorService; |
|||
import a8k.app.service.data.ProjIdCardInfoMgrService; |
|||
import a8k.app.service.lowerctrl.DeviceMoveToZeroCtrlService; |
|||
import a8k.app.service.lowerctrl.HbotMoveCtrlService; |
|||
import a8k.app.service.lowerctrl.HbotMoveExCtrlService; |
|||
import a8k.app.service.param.hbotpos.Hbot2DCodeScanParamMgr; |
|||
import a8k.app.type.a8k.ConsumableGroup; |
|||
import a8k.app.type.exception.AppException; |
|||
import a8k.extui.mgr.ExtApiPageMgr; |
|||
import a8k.extui.type.ExtUIPageCfg; |
|||
import com.fasterxml.jackson.annotation.JsonInclude; |
|||
import jakarta.annotation.PostConstruct; |
|||
import jakarta.annotation.Resource; |
|||
import lombok.RequiredArgsConstructor; |
|||
import lombok.extern.slf4j.Slf4j; |
|||
import org.springframework.stereotype.Component; |
|||
|
|||
import java.util.ArrayList; |
|||
import java.util.List; |
|||
|
|||
@Component |
|||
@Slf4j |
|||
@RequiredArgsConstructor |
|||
public class HbotCodeScanPosVerificationPage { |
|||
private final ExtApiPageMgr extApiPageMgr; |
|||
private final HbotMoveExCtrlService hbotMoveExCtrlService; |
|||
private final CodeScanerDriver codeScanerDriver; |
|||
|
|||
// |
|||
// 基础操作 |
|||
// |
|||
|
|||
public void moveToPBScanPos(ConsumableGroup group) throws AppException { |
|||
hbotMoveExCtrlService.moveToPBCodeScanPos(group); |
|||
} |
|||
|
|||
public void moveToLittleBSCodeScanPos(ConsumableGroup group) throws AppException { |
|||
hbotMoveExCtrlService.moveToLittleBSCodeScanPos(group); |
|||
} |
|||
|
|||
public void moveToLargeBSCodeScanPos(ConsumableGroup group) throws AppException { |
|||
hbotMoveExCtrlService.moveToLargeBSCodeScanPos(group); |
|||
} |
|||
|
|||
public void startCodeScan() throws AppException { |
|||
codeScanerDriver.pipetteModCodeScannerStartScan(); |
|||
} |
|||
|
|||
public void stopCodeScan() throws AppException { |
|||
codeScanerDriver.pipetteModCodeScannerStopScan(); |
|||
} |
|||
|
|||
|
|||
@PostConstruct |
|||
void init() { |
|||
ExtUIPageCfg cfg = extApiPageMgr.newPage(this); |
|||
cfg.newGroup("位置移动"); |
|||
cfg.addFunction("移动到PB扫码位置", this::moveToPBScanPos); |
|||
cfg.addFunction("移动到小瓶扫码位置", this::moveToLittleBSCodeScanPos); |
|||
cfg.addFunction("移动到大瓶扫码位置", this::moveToLargeBSCodeScanPos); |
|||
cfg.addFunction("扫码", this::startCodeScan); |
|||
cfg.addFunction("停止扫码", this::stopCodeScan); |
|||
extApiPageMgr.addPage(cfg); |
|||
} |
|||
} |
Write
Preview
Loading…
Cancel
Save
Reference in new issue