From a75905d037089f308730685dca5cdbe986476536 Mon Sep 17 00:00:00 2001 From: zhaohe Date: Tue, 14 Jan 2025 21:26:28 +0800 Subject: [PATCH] update --- src/main/java/a8k/app/a8ktype/ui/ZAppPromopt.java | 2 +- .../java/a8k/extui/mgr/ExtApiPageGroupCfgMgr.java | 4 +- .../measurement/HbotFreedomPosMeasurePage.java | 68 +++++++++++++ .../extui/page/measurement/HbotPosMeasurePage.java | 108 +++++++++++++++------ .../page/measurement/HbotPosMeasurePageBak.java | 96 ------------------ src/main/java/a8k/extui/type/ExtApiStatu.java | 2 +- src/main/resources/db/zapp_a8k_pos_parameter.csv | 11 +-- 7 files changed, 159 insertions(+), 132 deletions(-) create mode 100644 src/main/java/a8k/extui/page/measurement/HbotFreedomPosMeasurePage.java delete mode 100644 src/main/java/a8k/extui/page/measurement/HbotPosMeasurePageBak.java diff --git a/src/main/java/a8k/app/a8ktype/ui/ZAppPromopt.java b/src/main/java/a8k/app/a8ktype/ui/ZAppPromopt.java index 78b44a4..5985db5 100644 --- a/src/main/java/a8k/app/a8ktype/ui/ZAppPromopt.java +++ b/src/main/java/a8k/app/a8ktype/ui/ZAppPromopt.java @@ -78,7 +78,7 @@ public class ZAppPromopt implements Serializable { this.messageLevel = type; this.info = info; setDefaultTitle(); - + } diff --git a/src/main/java/a8k/extui/mgr/ExtApiPageGroupCfgMgr.java b/src/main/java/a8k/extui/mgr/ExtApiPageGroupCfgMgr.java index 6167799..d2dc145 100644 --- a/src/main/java/a8k/extui/mgr/ExtApiPageGroupCfgMgr.java +++ b/src/main/java/a8k/extui/mgr/ExtApiPageGroupCfgMgr.java @@ -162,11 +162,13 @@ public class ExtApiPageGroupCfgMgr { pushMenu( new Menu("测量", List.of( - new Menu(HbotPosMeasurePage.class, "HBOT测量"), + new Menu(HbotPosMeasurePage.class, "HBOT测量(电控)"), + new Menu(HbotFreedomPosMeasurePage.class, "HBO测量(自由模式)"), new Menu(FeedingModMeasurePage.class, "入料模组"), new Menu(ShakeModStepMotorMeasurePage.class, "摇匀模组"), new Menu(PlatesBoxMeasurePage.class, "板夹仓"), new Menu(IncubatorMeasurePage.class, "孵育盘"), + new Menu(OptModMeasurePage.class, "光学模组") ))); diff --git a/src/main/java/a8k/extui/page/measurement/HbotFreedomPosMeasurePage.java b/src/main/java/a8k/extui/page/measurement/HbotFreedomPosMeasurePage.java new file mode 100644 index 0000000..f85bb78 --- /dev/null +++ b/src/main/java/a8k/extui/page/measurement/HbotFreedomPosMeasurePage.java @@ -0,0 +1,68 @@ +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; + +import java.util.ArrayList; +import java.util.List; + +@Component +public class HbotFreedomPosMeasurePage { + @Resource + ExtApiPageMgr extApiPageMgr; + + @Resource + HbotDriver hbotDriver; + + @Resource + HbotMoveCtrlService hbotMoveCtrlService; + + @Resource + PipetteCtrlDriver pipetteCtrlDriver; + + + + + public List measurePosHistory = new ArrayList<>(); + + @ExtApiStatu(group = "测量位置历史记录") + public List getMeasurePosHistory() { + return measurePosHistory; + } + + public void measurementCurrentPos() throws AppException { + pipetteCtrlDriver.zMotorEnable(1); + pipetteCtrlDriver.zMotorMeasureDistance(); + Pos3d pos = new Pos3d(); + pos.z = pipetteCtrlDriver.zMotorReadMeasureDistanceResult(); + pos.x = hbotDriver.readPos().x; + pos.y = hbotDriver.readPos().y; + pipetteCtrlDriver.zMotorEnable(0); + measurePosHistory.add(String.format("x: %3d, y: %3d, z: %3d", pos.x, pos.y, pos.z)); +// return pos; + } + + public void zmoveBy(Integer dpos) throws AppException { + pipetteCtrlDriver.zMotorEnable(1); + pipetteCtrlDriver.zMotorMoveByBlock(dpos); + pipetteCtrlDriver.zMotorEnable(0); + } + + @PostConstruct + public void init() { + var page = extApiPageMgr.newPage(this); + page.addFunction("测量当前位置", this::measurementCurrentPos); + page.newGroup("Z轴控制"); + page.addFunction("Z轴相对移动", this::zmoveBy); + extApiPageMgr.addPage(page); + } +} diff --git a/src/main/java/a8k/extui/page/measurement/HbotPosMeasurePage.java b/src/main/java/a8k/extui/page/measurement/HbotPosMeasurePage.java index b3ead20..39631aa 100644 --- a/src/main/java/a8k/extui/page/measurement/HbotPosMeasurePage.java +++ b/src/main/java/a8k/extui/page/measurement/HbotPosMeasurePage.java @@ -5,6 +5,7 @@ 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.hardware.driver.type.PipetteRegIndex; import a8k.app.service.lowerctrl.HbotMoveCtrlService; import a8k.extui.mgr.ExtApiPageMgr; import a8k.extui.type.ExtApiStatu; @@ -26,16 +27,26 @@ public class HbotPosMeasurePage { @Resource PipetteCtrlDriver pipetteCtrlDriver; - @ExtApiStatu(name = "Hbot当前坐标") - public Object readPos() throws AppException { - return hbotDriver.readPos(); + @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; } - public void moveTo(Integer x, Integer y, Integer z) throws AppException { - hbotDriver.enable(1); - pipetteCtrlDriver.zMotorEnable(1); - pipetteCtrlDriver.zMotorMoveZeroBlock(); - hbotMoveCtrlService.hbotMoveTo(x, y, z); + 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 { @@ -47,6 +58,52 @@ public class HbotPosMeasurePage { hbotDriver.moveToBlock(pos.x, pos.y); } + 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 enableMeasurment() throws AppException { + hbotDriver.enable(1); + pipetteCtrlDriver.zMotorEnable(1); + pipetteCtrlDriver.zMotorMoveZeroBlock(); + hbotDriver.moveToZeroBlock(); + } + + public void moveUp() throws AppException { + moveBy(0, -moveByDistance); + } + + public void moveDown() 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(); @@ -57,28 +114,25 @@ public class HbotPosMeasurePage { } - 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("移动到", this::moveTo).setParamVal("x", this::readXPos).setParamVal("y", this::readYPos); - page.addFunction("相对移动", this::moveBy).setParamVal("dx", 0).setParamVal("dy", 0); - page.addFunction("测量当前位置", this::measurementCurrentPos); + + page.newGroup("基础"); + page.addFunction("开始测量", this::enableMeasurment); + + page.newGroup("Hbot"); + page.addFunction("设置相对移动距离", this::setMoveByDistance).setParamVal("distance", () -> moveByDistance); + page.addFunction("上", this::moveUp); + page.addFunction("下", this::moveDown); + page.addFunction("左", this::moveLeft); + page.addFunction("右", this::moveRight); + + page.newGroup("Z轴"); + page.addFunction("设置Z轴相对移动距离", this::setzMotorMoveByDistance).setParamVal("distance", () -> zMotorMoveByDistance); + page.addFunction("上", this::zmoveUp); + page.addFunction("下", this::zmoveDown); + extApiPageMgr.addPage(page); } } diff --git a/src/main/java/a8k/extui/page/measurement/HbotPosMeasurePageBak.java b/src/main/java/a8k/extui/page/measurement/HbotPosMeasurePageBak.java deleted file mode 100644 index c55cc75..0000000 --- a/src/main/java/a8k/extui/page/measurement/HbotPosMeasurePageBak.java +++ /dev/null @@ -1,96 +0,0 @@ -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); - } -} diff --git a/src/main/java/a8k/extui/type/ExtApiStatu.java b/src/main/java/a8k/extui/type/ExtApiStatu.java index dbd636b..d9fffb0 100644 --- a/src/main/java/a8k/extui/type/ExtApiStatu.java +++ b/src/main/java/a8k/extui/type/ExtApiStatu.java @@ -7,7 +7,7 @@ import java.lang.annotation.Target; @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.METHOD}) public @interface ExtApiStatu { - String name(); + String name() default ""; String group() default ""; String minWidth() default "20%"; int order() default 0; diff --git a/src/main/resources/db/zapp_a8k_pos_parameter.csv b/src/main/resources/db/zapp_a8k_pos_parameter.csv index 50d8491..a46f69d 100644 --- a/src/main/resources/db/zapp_a8k_pos_parameter.csv +++ b/src/main/resources/db/zapp_a8k_pos_parameter.csv @@ -28,10 +28,10 @@ id,service,key,valType,val,chName 42,HbotSamplePosParamMgr,Bulltube0P5SampleEndPos,Pos3d,"{""x"":2331,""y"":3773,""z"":649}",<子弹头试管0.5mL>取样结束位置 43,HbotSamplePosParamMgr,StoolTestTubeSamplePos,Pos3d,"{""x"":2331,""y"":3773,""z"":433}",<粪便试管>取样位置 44,HbotSamplePosParamMgr,StoolTestTubeSampleEndPos,Pos3d,"{""x"":2331,""y"":3773,""z"":649}",<粪便试管>取样结束位置 -45,HbotLittleBSPosMgr,LittleBufferGroup0_000Pos,Pos2d,"{""x"":899,""y"":1101}",第1组小瓶缓冲液的第1个位置 +45,HbotLittleBSPosMgr,LittleBufferGroup0_000Pos,Pos2d,"{""x"":901,""y"":1105}",第1组小瓶缓冲液的第1个位置 53,HbotLittleBSPosMgr,LittleBSPierceXYAppendDistance,Double,"{""value"":7.0}",小瓶缓冲液刺破XY附加距离 54,HbotLittleBSPosMgr,LittleBSPierceZPos,Integer,"{""value"":528}",小瓶缓冲液刺破Z坐标 -55,HbotLittleBSPosMgr,LittleBSSampleZPos,Integer,"{""value"":593}",小瓶缓冲液取样Z坐标 +55,HbotLittleBSPosMgr,LittleBSSampleZPos,Integer,"{""value"":621}",小瓶缓冲液取样Z坐标 56,HbotLargeBottleBSPosMgr,LargeBuffer_0Pos,Pos2d,"{""x"":4576,""y"":1364}",大瓶缓冲液的第1个位置 57,HbotLargeBottleBSPosMgr,LargeBuffer_DX,Double,"{""value"":281.0}",大瓶缓冲液的X间距 58,HbotLargeBottleBSPosMgr,LargeBuffer_DY,Double,"{""value"":274.0}",大瓶缓冲液的Y间距 @@ -49,9 +49,6 @@ id,service,key,valType,val,chName 83,TurntablePosParamMgr,PullPos0,Integer,"{""value"":19700}",出板位置 84,TurntablePosParamMgr,DropLiquidPos0,Integer,"{""value"":10600}",滴液位置 85,TurntablePosParamMgr,PosSpacing,Integer,"{""value"":1800}",位置间隔 -86,PipetteGunLLDParamMgr,DEFAULT_C_THRESHOLD,Integer,"{""value"":15}",默认电容C阈值 -87,PipetteGunLLDParamMgr,DEFAULT_P_THRESHOLD,Integer,"{""value"":50}",默认压力阈值 -88,PipetteGunLLDParamMgr,DEFAULT_LLD_TYPE,LldType,"{""value"":""kplld""}",默认LLD类型 89,PipetteGunLLFParamMgr,EMERGENCY_TUBE_LLF_VEL,Integer,"{""value"":25}",<急诊试管>液面跟随速度 90,PipetteGunLLFParamMgr,BLOOD_TUBE_LLF_VEL,Integer,"{""value"":25}",<全血试管>液面跟随速度 91,PipetteGunLLFParamMgr,MINI_TUBE_LLF_VEL,Integer,"{""value"":25}",<迷你试管>液面跟随速度 @@ -101,4 +98,6 @@ id,service,key,valType,val,chName 138,HbotLittleBSPosMgr,ProbeSubstancePierceZPos,Integer,"{""value"":475}",探测物质液刺破Z坐标 139,HbotLittleBSPosMgr,ProbeSubstanceSampleZPos,Integer,"{""value"":475}",探测物质取样Z坐标 140,HbotLargeBottleBSPosMgr,LargeBufferScanPos_DX,Double,"{""value"":280}",大瓶缓冲液的扫码位置dx -141,HbotLargeBottleBSPosMgr,LargeBufferScanPos_DY,Double,"{""value"":580}",大瓶缓冲液的扫码位置dy \ No newline at end of file +141,HbotLargeBottleBSPosMgr,LargeBufferScanPos_DY,Double,"{""value"":580}",大瓶缓冲液的扫码位置dy +142,RefPosMgr,HbotXYRefPoint,Pos2d,null,HBOT-XY参考点 +143,RefPosMgr,HbotZRefPlane,Integer,null,HBOT-Z参考平面 \ No newline at end of file