From 15497c9caaa121e36bb1e9f082c06c283afc0fc4 Mon Sep 17 00:00:00 2001 From: zhaohe Date: Tue, 15 Oct 2024 13:18:01 +0800 Subject: [PATCH] update --- .../pagecontrol/ExtApiTabConfig.java | 2 +- .../app/appctrl/mainflowctrl/action/DO_START.java | 6 +- .../action/SEQ1_ENTER_TUBEHOLDER_AND_SCAN.java | 8 +- .../action/SEQ2_SWITCH_TO_THE_NEXT_TUBE.java | 8 +- .../mainflowctrl/action/SEQ4_PRE_PROCESS.java | 4 +- .../mainflowctrl/action/SEQ7_EJECT_TUBEHOLDER.java | 4 +- .../basectrl/TubeTransportControler.java | 4 +- .../calibration/TubePreProcesPosCalibration.java | 81 +++++- .../calibration/TubeScanPosCalibration.java | 13 +- .../devicedriver/ctrl/TubePreProcesControler.java | 33 ++- .../app/devicedriver/ctrl/TubeScanerControler.java | 303 --------------------- .../devicedriver/ctrl/TubeTubeFeedingModule.java | 300 ++++++++++++++++++++ .../devicedriver/pos/TubeFeedingModulePosMgr.java | 121 ++++++++ .../app/devicedriver/pos/TubePreProcesPosMgr.java | 6 +- .../app/devicedriver/pos/TubeScanPosMgr.java | 120 -------- .../app/devicedriver/testscript/TestScript.java | 4 +- 16 files changed, 549 insertions(+), 468 deletions(-) delete mode 100644 src/main/java/a8k/service/app/devicedriver/ctrl/TubeScanerControler.java create mode 100644 src/main/java/a8k/service/app/devicedriver/ctrl/TubeTubeFeedingModule.java create mode 100644 src/main/java/a8k/service/app/devicedriver/pos/TubeFeedingModulePosMgr.java delete mode 100644 src/main/java/a8k/service/app/devicedriver/pos/TubeScanPosMgr.java diff --git a/src/main/java/a8k/extapi_controler/pagecontrol/ExtApiTabConfig.java b/src/main/java/a8k/extapi_controler/pagecontrol/ExtApiTabConfig.java index 03a7acf..58715e4 100644 --- a/src/main/java/a8k/extapi_controler/pagecontrol/ExtApiTabConfig.java +++ b/src/main/java/a8k/extapi_controler/pagecontrol/ExtApiTabConfig.java @@ -33,7 +33,7 @@ public enum ExtApiTabConfig { ReactionPlatesTransmitCtrl("ReactionPlatesTransmitCtrl", false), HbotControlService("HbotControlService", false), TubePreProcesControler("硬件控制.样本预处理模块", false), - TubeScanerControler("硬件控制.样本搬运与扫描", false), + TubeTubeFeedingModule("硬件控制.入料模块", false), ConsumablesScanCtrlService("硬件控制.耗材扫描", false), diff --git a/src/main/java/a8k/service/app/appctrl/mainflowctrl/action/DO_START.java b/src/main/java/a8k/service/app/appctrl/mainflowctrl/action/DO_START.java index 42889e7..088203e 100644 --- a/src/main/java/a8k/service/app/appctrl/mainflowctrl/action/DO_START.java +++ b/src/main/java/a8k/service/app/appctrl/mainflowctrl/action/DO_START.java @@ -6,7 +6,7 @@ import a8k.service.app.appstate.GStateService; import a8k.service.app.appstate.resource.A8kPublicResourceType; import a8k.service.app.appstate.type.MainFlowCtrlState; import a8k.service.app.appstate.type.state.A8kWorkState; -import a8k.service.app.devicedriver.ctrl.TubeScanerControler; +import a8k.service.app.devicedriver.ctrl.TubeTubeFeedingModule; import a8k.service.debug.AppDebugHelperService; import a8k.type.exception.AppException; import jakarta.annotation.PostConstruct; @@ -29,7 +29,7 @@ public class DO_START extends A8kStepAction { GStateService gstate; @Resource - TubeScanerControler tubeScanerControler; + TubeTubeFeedingModule tubeTubeFeedingModule; @Resource AppDebugHelperService appDebugHelper; @@ -47,7 +47,7 @@ public class DO_START extends A8kStepAction { if (appDebugHelper.isDebug()) { appDebugHelper.doVirtualThings("弹出试管架", 2); } else { - tubeScanerControler.ejectTubeHolder(); + tubeTubeFeedingModule.ejectTubeHolder(); } } diff --git a/src/main/java/a8k/service/app/appctrl/mainflowctrl/action/SEQ1_ENTER_TUBEHOLDER_AND_SCAN.java b/src/main/java/a8k/service/app/appctrl/mainflowctrl/action/SEQ1_ENTER_TUBEHOLDER_AND_SCAN.java index 3347304..f8bcd9a 100644 --- a/src/main/java/a8k/service/app/appctrl/mainflowctrl/action/SEQ1_ENTER_TUBEHOLDER_AND_SCAN.java +++ b/src/main/java/a8k/service/app/appctrl/mainflowctrl/action/SEQ1_ENTER_TUBEHOLDER_AND_SCAN.java @@ -15,7 +15,7 @@ import a8k.service.app.appstate.resource.A8kPublicResourceType; import a8k.service.app.appstate.type.TubeHolder; import a8k.service.app.appstate.type.state.TubeHolderState; import a8k.service.app.appstate.type.state.TubeState; -import a8k.service.app.devicedriver.ctrl.TubeScanerControler; +import a8k.service.app.devicedriver.ctrl.TubeTubeFeedingModule; import a8k.service.debug.AppDebugHelperService; import a8k.type.TubeHolderScanResult; import a8k.type.exception.AppException; @@ -47,11 +47,11 @@ public class SEQ1_ENTER_TUBEHOLDER_AND_SCAN extends A8kStepAction { @Resource - CondtionMgrService cmgr; + CondtionMgrService cmgr; @Resource - TubeScanerControler stc; + TubeTubeFeedingModule stc; @Resource - AppEventBusService ebus; + AppEventBusService ebus; @Resource AppTubeSettingMgrService appTubeSettingMgrService; @Resource diff --git a/src/main/java/a8k/service/app/appctrl/mainflowctrl/action/SEQ2_SWITCH_TO_THE_NEXT_TUBE.java b/src/main/java/a8k/service/app/appctrl/mainflowctrl/action/SEQ2_SWITCH_TO_THE_NEXT_TUBE.java index a09b54d..af9feb5 100644 --- a/src/main/java/a8k/service/app/appctrl/mainflowctrl/action/SEQ2_SWITCH_TO_THE_NEXT_TUBE.java +++ b/src/main/java/a8k/service/app/appctrl/mainflowctrl/action/SEQ2_SWITCH_TO_THE_NEXT_TUBE.java @@ -9,7 +9,7 @@ import a8k.service.app.appstate.type.MainFlowCtrlState; import a8k.service.app.appstate.type.TubeHolder; import a8k.service.app.appstate.type.Tube; import a8k.service.app.appstate.type.state.TubeState; -import a8k.service.app.devicedriver.ctrl.TubeScanerControler; +import a8k.service.app.devicedriver.ctrl.TubeTubeFeedingModule; import a8k.service.debug.AppDebugHelperService; import a8k.type.exception.AppException; import jakarta.annotation.PostConstruct; @@ -39,11 +39,11 @@ public class SEQ2_SWITCH_TO_THE_NEXT_TUBE extends A8kStepAction { } @Resource - GStateService gstate; + GStateService gstate; @Resource - TubeScanerControler sstc; + TubeTubeFeedingModule sstc; @Resource - CondtionMgrService cms; + CondtionMgrService cms; @Resource ProjectProcessContextMgrService projectProcessContextMgrService; diff --git a/src/main/java/a8k/service/app/appctrl/mainflowctrl/action/SEQ4_PRE_PROCESS.java b/src/main/java/a8k/service/app/appctrl/mainflowctrl/action/SEQ4_PRE_PROCESS.java index 57a1fcc..9044f4b 100644 --- a/src/main/java/a8k/service/app/appctrl/mainflowctrl/action/SEQ4_PRE_PROCESS.java +++ b/src/main/java/a8k/service/app/appctrl/mainflowctrl/action/SEQ4_PRE_PROCESS.java @@ -13,7 +13,7 @@ import a8k.service.app.appstate.resource.A8kPublicResourceType; import a8k.service.app.appstate.type.Tube; import a8k.service.app.devicedriver.basectrl.HbotBaseMoveControler; import a8k.service.app.devicedriver.ctrl.ReactionPlatesTransmitCtrl; -import a8k.service.app.devicedriver.ctrl.TubeScanerControler; +import a8k.service.app.devicedriver.ctrl.TubeTubeFeedingModule; import a8k.service.app.devicedriver.ctrl.TubePreProcesControler; import a8k.type.ecode.AppError; import a8k.type.exception.AppException; @@ -46,7 +46,7 @@ public class SEQ4_PRE_PROCESS extends A8kStepAction { GStateService gstate; @Resource - TubeScanerControler sstc; + TubeTubeFeedingModule sstc; @Resource ConsumablesMgrService consumablesMgrService; @Resource diff --git a/src/main/java/a8k/service/app/appctrl/mainflowctrl/action/SEQ7_EJECT_TUBEHOLDER.java b/src/main/java/a8k/service/app/appctrl/mainflowctrl/action/SEQ7_EJECT_TUBEHOLDER.java index c86401e..fdc8153 100644 --- a/src/main/java/a8k/service/app/appctrl/mainflowctrl/action/SEQ7_EJECT_TUBEHOLDER.java +++ b/src/main/java/a8k/service/app/appctrl/mainflowctrl/action/SEQ7_EJECT_TUBEHOLDER.java @@ -7,7 +7,7 @@ import a8k.service.app.appstate.GStateService; import a8k.service.app.appstate.type.MainFlowCtrlState; import a8k.service.app.appstate.resource.A8kPublicResourceType; import a8k.service.app.appstate.type.state.TubeHolderState; -import a8k.service.app.devicedriver.ctrl.TubeScanerControler; +import a8k.service.app.devicedriver.ctrl.TubeTubeFeedingModule; import a8k.service.debug.AppDebugHelperService; import a8k.type.exception.AppException; import jakarta.annotation.PostConstruct; @@ -34,7 +34,7 @@ public class SEQ7_EJECT_TUBEHOLDER extends A8kStepAction { AppDebugHelperService appDebugHelper; @Resource - TubeScanerControler SST_HControler; + TubeTubeFeedingModule SST_HControler; MainFlowCtrlState state; diff --git a/src/main/java/a8k/service/app/devicedriver/basectrl/TubeTransportControler.java b/src/main/java/a8k/service/app/devicedriver/basectrl/TubeTransportControler.java index a1cb3fe..63e62ce 100644 --- a/src/main/java/a8k/service/app/devicedriver/basectrl/TubeTransportControler.java +++ b/src/main/java/a8k/service/app/devicedriver/basectrl/TubeTransportControler.java @@ -6,7 +6,7 @@ import a8k.hardware.type.a8kcanprotocol.A8kEcode; import a8k.hardware.type.a8kcanprotocol.MId; import a8k.service.app.devicedriver.basectrl.type.MiniServoMId; import a8k.service.app.devicedriver.basectrl.type.StepMotorMId; -import a8k.service.app.devicedriver.pos.TubeScanPosMgr; +import a8k.service.app.devicedriver.pos.TubeFeedingModulePosMgr; import a8k.type.TargetPosMeasureDirection; import a8k.type.exception.AppException; import jakarta.annotation.Resource; @@ -25,7 +25,7 @@ public class TubeTransportControler { MiniServoControler miniServoControler; @Resource - TubeScanPosMgr tubeScanPosMgr; + TubeFeedingModulePosMgr tubeScanPosMgr; @Resource StepMotorControler stepMotorControler; diff --git a/src/main/java/a8k/service/app/devicedriver/calibration/TubePreProcesPosCalibration.java b/src/main/java/a8k/service/app/devicedriver/calibration/TubePreProcesPosCalibration.java index 20b30ec..5b28ed1 100644 --- a/src/main/java/a8k/service/app/devicedriver/calibration/TubePreProcesPosCalibration.java +++ b/src/main/java/a8k/service/app/devicedriver/calibration/TubePreProcesPosCalibration.java @@ -9,31 +9,42 @@ import a8k.service.app.devicedriver.basectrl.MiniServoControler; import a8k.service.app.devicedriver.basectrl.StepMotorControler; import a8k.service.app.devicedriver.basectrl.type.MiniServoMId; import a8k.service.app.devicedriver.basectrl.type.StepMotorMId; +import a8k.service.app.devicedriver.ctrl.TubePreProcesControler; import a8k.service.app.devicedriver.pos.TubePreProcesPosMgr; import a8k.type.exception.AppException; import jakarta.annotation.Resource; import org.springframework.stereotype.Component; -@ExtApiTab(cfg = ExtApiTabConfig.TubeScanPosCalibration) +@ExtApiTab(cfg = ExtApiTabConfig.TubePreProcesPosCalibration) @Component public class TubePreProcesPosCalibration { + final static Integer overtime = 6000; + @Resource TubePreProcesPosMgr tubePreProcesPosMgr; @Resource - A8kCanBusService canBus; + A8kCanBusService canBus; + @Resource + MiniServoControler miniServoControler; @Resource - MiniServoControler miniServoControler; + StepMotorControler stepMotorControler; @Resource - StepMotorControler stepMotorControler; + TubePreProcesControler tubePreProcesControler; //基础工具 @ExtApiFn(name = "归零", group = "测试工具", order = 11) public void deviceReset() throws AppException { enableModule(); stepMotorControler.stepMotorEasyMoveToZeroBlock(StepMotorMId.FeedingModXM, 15000); - + miniServoControler.miniServoMoveToBlock(MiniServoMId.ShakeModTubeScanerClampingSV, 20, overtime); + miniServoControler.miniServoMoveToBlock(MiniServoMId.ShakeModGripperSV, 300, overtime); + miniServoControler.miniServoMoveToBlock(MiniServoMId.ShakeModGripperYSV, 300, overtime); + stepMotorControler.stepMotorEasyMoveToZeroBlock(StepMotorMId.ShakeModClampingM, overtime); + stepMotorControler.stepMotorEasyMoveToZeroBlock(StepMotorMId.ShakeModGripperZM, overtime); + stepMotorControler.stepMotorEasyMoveToZeroBlock(StepMotorMId.ShakeModShakeM, overtime); + stepMotorControler.stepMotorEasyMoveToBlock(StepMotorMId.ShakeModShakeM, 90, overtime); } @ExtApiFn(name = "使能相关模块", group = "测试工具", order = 12) @@ -43,18 +54,70 @@ public class TubePreProcesPosCalibration { stepMotorControler.stepMotorEnable(StepMotorMId.ShakeModClampingM, 1); stepMotorControler.stepMotorEnable(StepMotorMId.ShakeModGripperZM, 1); stepMotorControler.stepMotorEnable(StepMotorMId.ShakeModShakeM, 1); + stepMotorControler.stepMotorEnable(StepMotorMId.FeedingModXM, 1); } @ExtApiFn(name = "失能相关模块", group = "测试工具", order = 13) public void disableModule() throws AppException { - stepMotorControler.stepMotorEnable(StepMotorMId.FeedingModInfeedM, 0); - stepMotorControler.stepMotorEnable(StepMotorMId.FeedingModOutfeedM, 0); + miniServoControler.miniServoEnable(MiniServoMId.ShakeModGripperSV, 0); + miniServoControler.miniServoEnable(MiniServoMId.ShakeModGripperYSV, 0); + stepMotorControler.stepMotorEnable(StepMotorMId.ShakeModClampingM, 0); + stepMotorControler.stepMotorEnable(StepMotorMId.ShakeModGripperZM, 0); + stepMotorControler.stepMotorEnable(StepMotorMId.ShakeModShakeM, 0); stepMotorControler.stepMotorEnable(StepMotorMId.FeedingModXM, 0); - miniServoControler.miniServoEnable(MiniServoMId.ShakeModTubeScanerClampingSV, 0); } + @ExtApiFn(name = "读取夹爪当前位置", group = "测试工具", order = 13) + public Integer readGripperPos() throws AppException { + return miniServoControler.miniServoReadPos(MiniServoMId.ShakeModGripperSV); + } + //标定和校准 + //夹爪 : 设置参考点,标定,验证 + //YSV : 设置参考点,标定,验证 + //ZM : 标定,验证 + //XProcessPos: 标定,验证 + //ShakeClamp : 标定,校验 - //标定和校准 + @ExtApiFn(name = "设置当前位置为<参考点>", group = "夹爪", order = 21) + public Integer gripperSVSetCurrentPosAsRef() throws AppException { + miniServoControler.miniServoSetCurPos(MiniServoMId.ShakeModGripperSV, 100); + return 100; + } + + @ExtApiFn(name = "<标定>当前点为<抓手张开位置>", group = "夹爪", order = 22) + public Integer gripperSVSetCurrentPosAsOpenPos() throws AppException { + Integer pos = miniServoControler.miniServoReadPos(MiniServoMId.ShakeModGripperSV); + tubePreProcesPosMgr.setGripperServoOpenPos(pos); + return pos; + } + @ExtApiFn(name = "<标定>当前点为<抓手闭合位置>", group = "夹爪", order = 23) + public Integer gripperSVSetCurrentPosAsClosePos() throws AppException { + Integer pos = miniServoControler.miniServoReadPos(MiniServoMId.ShakeModGripperSV); + tubePreProcesPosMgr.setGripperServoClosePos(pos); + return pos; + } + + @ExtApiFn(name = "<标定>当前点为<抓手取试管位置>", group = "夹爪", order = 24) + public Integer gripperSVSetCurrentPosAsTakeCapPos() throws AppException { + Integer pos = miniServoControler.miniServoReadPos(MiniServoMId.ShakeModGripperSV); + tubePreProcesPosMgr.setGripperServoTakeCapPos(pos); + return pos; + } + + @ExtApiFn(name = "<校验>张开", group = "夹爪", order = 26) + public void gripperSVOpen() throws AppException { + tubePreProcesControler.gripperSVOpen(); + } + + @ExtApiFn(name = "<校验>夹紧", group = "夹爪", order = 25) + public void gripperSVCClose() throws AppException { + tubePreProcesControler.gripperSVCClose(); + } + + @ExtApiFn(name = "<校验>夹住试管", group = "夹爪", order = 25) + public void gripperSVClampTube() throws AppException { + tubePreProcesControler.gripperSVClampTube(); + } } diff --git a/src/main/java/a8k/service/app/devicedriver/calibration/TubeScanPosCalibration.java b/src/main/java/a8k/service/app/devicedriver/calibration/TubeScanPosCalibration.java index e7e35c1..15b2e99 100644 --- a/src/main/java/a8k/service/app/devicedriver/calibration/TubeScanPosCalibration.java +++ b/src/main/java/a8k/service/app/devicedriver/calibration/TubeScanPosCalibration.java @@ -4,14 +4,13 @@ import a8k.extapi_controler.pagecontrol.ExtApiTabConfig; import a8k.extapi_controler.utils.ExtApiFn; import a8k.extapi_controler.utils.ExtApiTab; import a8k.hardware.A8kCanBusService; -import a8k.hardware.type.a8kcanprotocol.MId; import a8k.service.app.devicedriver.basectrl.MiniServoControler; import a8k.service.app.devicedriver.basectrl.StepMotorControler; import a8k.service.app.devicedriver.basectrl.TubeTransportControler; import a8k.service.app.devicedriver.basectrl.type.MiniServoMId; import a8k.service.app.devicedriver.basectrl.type.StepMotorMId; -import a8k.service.app.devicedriver.ctrl.TubeScanerControler; -import a8k.service.app.devicedriver.pos.TubeScanPosMgr; +import a8k.service.app.devicedriver.ctrl.TubeTubeFeedingModule; +import a8k.service.app.devicedriver.pos.TubeFeedingModulePosMgr; import a8k.type.TubeHolderScanResult; import a8k.type.exception.AppException; import jakarta.annotation.Resource; @@ -23,12 +22,12 @@ import org.springframework.stereotype.Component; public class TubeScanPosCalibration { @Resource - TubeScanPosMgr tubeScanPosMgr; + TubeFeedingModulePosMgr tubeScanPosMgr; @Resource A8kCanBusService canBus; @Resource - TubeScanerControler tubeScanerControler; + TubeTubeFeedingModule tubeTubeFeedingModule; @Resource TubeTransportControler tubeTransportControler; @Resource @@ -43,7 +42,7 @@ public class TubeScanPosCalibration { } @ExtApiFn(name = "获取所有坐标", group = "基础", order = 1) - public TubeScanPosMgr getPoss() throws AppException { + public TubeFeedingModulePosMgr getPoss() throws AppException { return tubeScanPosMgr; } @@ -120,7 +119,7 @@ public class TubeScanPosCalibration { @ExtApiFn(name = "扫描试管架", group = "校验", order = 33) public TubeHolderScanResult scanAll() throws AppException { - return tubeScanerControler.scanTubeHodler(); + return tubeTubeFeedingModule.scanTubeHodler(); } @ExtApiFn(name = "设置<试管扫描伺服力矩(100-1000)>", group = "其他", order = 41) diff --git a/src/main/java/a8k/service/app/devicedriver/ctrl/TubePreProcesControler.java b/src/main/java/a8k/service/app/devicedriver/ctrl/TubePreProcesControler.java index 120532e..4e40a6e 100644 --- a/src/main/java/a8k/service/app/devicedriver/ctrl/TubePreProcesControler.java +++ b/src/main/java/a8k/service/app/devicedriver/ctrl/TubePreProcesControler.java @@ -7,6 +7,7 @@ import a8k.service.app.devicedriver.basectrl.MiniServoControler; import a8k.service.app.devicedriver.basectrl.StepMotorControler; import a8k.service.app.devicedriver.basectrl.type.MiniServoMId; import a8k.service.app.devicedriver.basectrl.type.StepMotorMId; +import a8k.service.app.devicedriver.pos.TubePreProcesPosMgr; import a8k.type.exception.AppException; import a8k.hardware.A8kCanBusService; import a8k.hardware.type.a8kcanprotocol.A8kEcode; @@ -24,7 +25,8 @@ import org.springframework.stereotype.Component; @Component @ExtApiTab(cfg = ExtApiTabConfig.TubePreProcesControler) public class TubePreProcesControler { - static Logger logger = LoggerFactory.getLogger(TubePreProcesControler.class); + static Logger logger = LoggerFactory.getLogger(TubePreProcesControler.class); + static Integer actionOvertime = 10000; static class ORDER { @@ -48,6 +50,9 @@ public class TubePreProcesControler { DebugParam dp; @Resource + TubePreProcesPosMgr tubePreProcesPosMgr; + + @Resource MiniServoControler miniServoControler; @Resource StepMotorControler stepMotorControler; @@ -272,12 +277,24 @@ public class TubePreProcesControler { } } -// /** -// * 移动试管到试管预处理的位置 -// * @param tubeIndex 试管索引 -// */ -// public void moveTubeToPreProcessPos(Integer tubeIndex) throws AppException { -// moveTubeRackTo(stp.getTPreProcessXPos() + tubeIndex * tubeHolderParamMgr.getTubeSpacing(), TargetPosMeasureDirection.POSITIVE, false); -// } + // /** + // * 移动试管到试管预处理的位置 + // * @param tubeIndex 试管索引 + // */ + // public void moveTubeToPreProcessPos(Integer tubeIndex) throws AppException { + // moveTubeRackTo(stp.getTPreProcessXPos() + tubeIndex * tubeHolderParamMgr.getTubeSpacing(), TargetPosMeasureDirection.POSITIVE, false); + // } + + // 677 + public void gripperSVOpen() throws AppException { + miniServoControler.miniServoMoveToBlock(MiniServoMId.ShakeModGripperSV, tubePreProcesPosMgr.getGripperServoOpenPos(), actionOvertime); + } + + public void gripperSVCClose() throws AppException { + miniServoControler.miniServoMoveToBlock(MiniServoMId.ShakeModGripperSV, tubePreProcesPosMgr.getGripperServoClosePos(), actionOvertime); + } + public void gripperSVClampTube() throws AppException { + miniServoControler.miniServoMoveToBlock(MiniServoMId.ShakeModGripperSV, tubePreProcesPosMgr.getGripperServoClosePos(), actionOvertime); + } } diff --git a/src/main/java/a8k/service/app/devicedriver/ctrl/TubeScanerControler.java b/src/main/java/a8k/service/app/devicedriver/ctrl/TubeScanerControler.java deleted file mode 100644 index e449152..0000000 --- a/src/main/java/a8k/service/app/devicedriver/ctrl/TubeScanerControler.java +++ /dev/null @@ -1,303 +0,0 @@ -package a8k.service.app.devicedriver.ctrl; - -import a8k.OS; -import a8k.extapi_controler.pagecontrol.ExtApiTabConfig; -import a8k.extapi_controler.utils.ExtApiFn; -import a8k.extapi_controler.utils.ExtApiTab; -import a8k.service.app.devicedriver.basectrl.CodeScaner; -import a8k.service.app.devicedriver.basectrl.MiniServoControler; -import a8k.service.app.devicedriver.basectrl.StepMotorControler; -import a8k.service.app.devicedriver.basectrl.TubeTransportControler; -import a8k.service.app.devicedriver.basectrl.type.MiniServoMId; -import a8k.service.app.devicedriver.basectrl.type.StepMotorMId; -import a8k.service.app.devicedriver.pos.TubeScanPosMgr; -import a8k.service.app.devicedriver.pos.TubeHolderParamMgr; -import a8k.service.bases.AppEventBusService; -import a8k.service.bases.appevent.AppWarningNotifyEvent; -import a8k.type.TubeHolderScanResult; -import a8k.type.TubesScanResult; -import a8k.type.exception.AppException; -import a8k.type.TargetPosMeasureDirection; -import a8k.hardware.A8kCanBusService; -import a8k.hardware.type.a8kcanprotocol.A8kEcode; -import a8k.hardware.type.a8kcanprotocol.IOId; -import a8k.hardware.type.a8kcanprotocol.MId; -import jakarta.annotation.Resource; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.stereotype.Component; - -@Component -@ExtApiTab(cfg = ExtApiTabConfig.TubeScanerControler) -public class TubeScanerControler { - static Logger logger = LoggerFactory.getLogger(TubeScanerControler.class); - static Integer infeedOvertime = 10000; - static Integer outfeedOvertime = 10000; - static Integer scanOvertime = 3000; - - static class ORDER { - static final int moveTubeRackToExitPos = 1; - static final int moveTubeRackToScanPos = 2; - static final int moveTubeToScanPosAndScan = 3; - static final int moveTubeToAltitJudgXPos = 4; - static final int judgeTubeExist = 5; - - } - - @Resource - AppEventBusService ebus; - @Resource - A8kCanBusService canBus; - @Resource - TubeScanPosMgr stp; - @Resource - TubeHolderParamMgr tubeHolderParamMgr; - @Resource - CodeScaner codeScaner; - @Resource - TubeTransportControler tubeTransportControler; - @Resource - MiniServoControler miniServoControler; - @Resource - StepMotorControler stepMotorControler; - - - private Boolean isTubeExist() throws AppException { - return canBus.getIOState(IOId.TubeExistPPS); - } - - private Boolean isTubeRackInEnterPos() throws AppException { - return canBus.getIOState(IOId.InfeedPPS); - } - - private Boolean isTubeRackInExitPos() throws AppException { - return canBus.getIOState(IOId.OutfeedPPS); - } - - private Boolean isHighTube() throws AppException { - return canBus.getIOState(IOId.TubeHeightPPS); - } - - - /** - * 移动试管到扫码位置 - * @param tubeIndex 试管索引 - */ - private void moveTubeToScanPos(Integer tubeIndex) throws AppException { - var scanPos = stp.getTube0ScanXPos() + tubeIndex * tubeHolderParamMgr.getTubeSpacing(); - tubeTransportControler.scanClampModClamp(); - tubeTransportControler.moveTubeRackTo(scanPos, TargetPosMeasureDirection.NEGATIVE, false); - } - - /** - * 移动<试管架>到试管架扫码位置 - */ - private void moveTubeRackToScanPos() throws AppException { - tubeTransportControler.moveTubeRackTo(stp.getTubeHolderScanXPos(), TargetPosMeasureDirection.POSITIVE, false); - } - - - public Boolean getTHchOuterPPS() throws AppException { - return canBus.getIOState(IOId.THChOuterPPS); - } - - public Boolean getTHchInterPPS() throws AppException { - return canBus.getIOState(IOId.THChInterPPS); - } - - - /*========================================================================================= - * 片段 - *========================================================================================*/ - - /** - * 移动试管架到入口位置 - */ - public void moveTubeRackMoveToEnterPos() throws AppException { - tubeTransportControler.moveTubeRackTo(stp.getTubeHolderEnterXPos(), TargetPosMeasureDirection.NOTCARE, true); - } - - /** - * 移动<试管架>到出口位置 - */ - public void moveTubeRackToExitPos() throws AppException { - tubeTransportControler.moveTubeRackTo(stp.getTubeHolderExitXPos(), TargetPosMeasureDirection.NOTCARE, false); - tubeTransportControler.moveTubeRackTo(stp.getTubeHolderExitXPos() - 10, TargetPosMeasureDirection.NOTCARE, false); - } - - /** - * 移动<试管架>到出口位置 - */ - @ExtApiFn(name = "入料", group = "单步", order = ORDER.moveTubeRackToExitPos) - public Boolean enterTubeHolder() throws AppException { - if (getTHchInterPPS() || getTHchOuterPPS()) { - throw new AppException(A8kEcode.APPE_TUBE_X_CHANNEL_IS_NOT_EMPTY); - } - moveTubeRackMoveToEnterPos(); - try { - stepMotorControler.stepMotorEasyRotate(StepMotorMId.FeedingModInfeedM, -1); - for (int i = 0; i < infeedOvertime / 100; i++) { - OS.hsleep(100); - if (getTHchInterPPS()) { - break; - } - logger.info("等待试管架到位 [{}/{}]", i, infeedOvertime / 100); - } - OS.hsleep(1000); - stepMotorControler.stepMotorStop(StepMotorMId.FeedingModInfeedM); - if (!getTHchInterPPS()) { - return false; - } - } finally { - canBus.moduleStop(MId.FeedingModInfeedM); - } - return true; - } - - public void ejectTubeHolderInEnterPos() throws AppException { - stepMotorControler.stepMotorEasyRotate(StepMotorMId.FeedingModInfeedM, 1); - OS.hsleep(3000); - stepMotorControler.stepMotorStop(StepMotorMId.FeedingModInfeedM); - } - - - @ExtApiFn(name = "出料", group = "单步", order = ORDER.moveTubeRackToExitPos) - public void ejectTubeHolder() throws AppException { - moveTubeRackToExitPos(); - try { - stepMotorControler.stepMotorEasyRotate(StepMotorMId.FeedingModOutfeedM, 1); - for (int i = 0; i < outfeedOvertime / 100; i++) { - OS.hsleep(100); - logger.info("getTHchInterPPS:{} getTHchOuterPPS:{}", getTHchInterPPS(), getTHchOuterPPS()); - if (!getTHchInterPPS() && !getTHchOuterPPS()) { - break; - } - } - OS.hsleep(1000); - stepMotorControler.stepMotorStop(StepMotorMId.FeedingModOutfeedM); - if (getTHchInterPPS() || getTHchOuterPPS()) { - throw new AppException(A8kEcode.APPE_EJECT_TUBEHOLDER_TIMEOUT); - } - } finally { - canBus.moduleStop(MId.FeedingModOutfeedM); - } - } - - /** - * 移动试管架到扫码并扫码 - */ - @ExtApiFn(name = "扫描<试管架>编码", group = "单步扫码", order = ORDER.moveTubeRackToScanPos) - public String moveTubeRackToScanPosAndScan() throws AppException { - String result; - moveTubeRackToScanPos(); - - tubeTransportControler.scanClampModClamp(); - canBus.codeScanerStartScan(MId.FeedingModScannerMod); - result = canBus.codeScanerWaittingForResult(MId.FeedingModScannerMod, 1000); - tubeTransportControler.scanClampModRelease(); - if (result == null || result.isEmpty()) { - return ""; - } - return result; - } - // - // 试管移动 - // - - /** - * 移动试管到扫码位置,并扫码 - * @param tubeIndex 试管索引 - */ - @ExtApiFn(name = "扫描<试管X>编码", group = "单步扫码", order = ORDER.moveTubeToScanPosAndScan) - public String moveTubeToScanPosAndScan(Integer tubeIndex) throws AppException { - moveTubeToScanPos(tubeIndex); - try { - tubeTransportControler.scanClampModClamp(); - - canBus.codeScanerStartScan(MId.FeedingModScannerMod); - miniServoControler.miniServoRotateWithTorque(MiniServoMId.ShakeModTubeScanerClampingSV, stp.getTubeScanServoTorque()); - return codeScaner.feedingModScannerModCodeScannerScanCode(scanOvertime); - } finally { - canBus.moduleStop(MId.ShakeModTubeScanerClampingSV); - canBus.moduleStop(MId.FeedingModScannerMod); - tubeTransportControler.scanClampModRelease(); - } - } - - public Boolean tubeXChannelIsEmpty() throws AppException { - return !getTHchInterPPS() && !getTHchOuterPPS(); - } - - - /** - * 移动试管到试管高低判断位置 - * @param tubeIndex 试管索引 - */ - @ExtApiFn(name = "判断<试管N>高低", group = "单步-其他", order = ORDER.moveTubeToAltitJudgXPos) - public Boolean moveAndJudgeTubeAltit(Integer tubeIndex) throws AppException { - tubeTransportControler.moveTubeRackTo(stp.getTube0AltitJudgXPos() + tubeIndex * tubeHolderParamMgr.getTubeSpacing(), TargetPosMeasureDirection.NEGATIVE, false); - return isHighTube(); - } - - /** - * 移动试管到试管有无判断位置 - * @param tubeIndex 试管索引 - */ - @ExtApiFn(name = "判断<试管N>是否存在", group = "单步-其他", order = ORDER.judgeTubeExist) - public Boolean moveAndjudgeTubeExist(Integer tubeIndex) throws AppException { - tubeTransportControler.moveTubeRackTo(stp.getTube0ExistJudgXPos() + tubeIndex * tubeHolderParamMgr.getTubeSpacing(), TargetPosMeasureDirection.NEGATIVE, false); - return isTubeExist(); - } - - - public TubeHolderScanResult scanTubeHodler() throws AppException { - TubeHolderScanResult result = new TubeHolderScanResult(); - - //清空试管架 - if (!tubeXChannelIsEmpty()) { - ejectTubeHolder(); - } - //入料 - logger.info("开始进料"); - Boolean enterSuc = enterTubeHolder(); - if (!enterSuc) { - logger.warn("进料超时,从入料口,弹出试管架"); - ejectTubeHolderInEnterPos(); - throw new AppException(A8kEcode.APPE_INFEED_OVERTIME_FAIL); - } - //扫描试管架类型 - String tubeType = moveTubeRackToScanPosAndScan(); - if (tubeType.isEmpty()) { - logger.warn("扫描试管架类型失败,弹出试管架"); - ebus.pushEvent(new AppWarningNotifyEvent(A8kEcode.APPE_SCAN_TUBEHOLDER_TYPE_TIMEOUT)); - return null; - } - logger.info("扫描试管架类型成功,{}", tubeType); - //逐个扫描试管 - TubesScanResult[] tubesScanResult = new TubesScanResult[10]; - boolean hasTube = false; - for (int i = 0; i < tubesScanResult.length; i++) { - tubesScanResult[i] = new TubesScanResult(); - Boolean isTubeExist = moveAndjudgeTubeExist(i); - if (isTubeExist) { - hasTube = true; - tubesScanResult[i].isTubeExist = true; - tubesScanResult[i].isHighTube = moveAndJudgeTubeAltit(i); - tubesScanResult[i].tubeCode = moveTubeToScanPosAndScan(i); - } else { - tubesScanResult[i].isTubeExist = false; - } - logger.info("扫描试管{}完成,{}", i, tubesScanResult[i]); - } - //处理扫描结果 - if (!hasTube) { - logger.error("试管架中没有试管"); - ebus.pushEvent(new AppWarningNotifyEvent(A8kEcode.APPE_TUBE_HOLDER_TYPE_IS_NOT_SUPPORT)); - return null; - } - result.tubeHolderType = tubeType; - result.tube = tubesScanResult; - return result; - } - -} diff --git a/src/main/java/a8k/service/app/devicedriver/ctrl/TubeTubeFeedingModule.java b/src/main/java/a8k/service/app/devicedriver/ctrl/TubeTubeFeedingModule.java new file mode 100644 index 0000000..23d6b7e --- /dev/null +++ b/src/main/java/a8k/service/app/devicedriver/ctrl/TubeTubeFeedingModule.java @@ -0,0 +1,300 @@ +package a8k.service.app.devicedriver.ctrl; + +import a8k.OS; +import a8k.extapi_controler.pagecontrol.ExtApiTabConfig; +import a8k.extapi_controler.utils.ExtApiFn; +import a8k.extapi_controler.utils.ExtApiTab; +import a8k.service.app.devicedriver.basectrl.CodeScaner; +import a8k.service.app.devicedriver.basectrl.MiniServoControler; +import a8k.service.app.devicedriver.basectrl.StepMotorControler; +import a8k.service.app.devicedriver.basectrl.TubeTransportControler; +import a8k.service.app.devicedriver.basectrl.type.MiniServoMId; +import a8k.service.app.devicedriver.basectrl.type.StepMotorMId; +import a8k.service.app.devicedriver.pos.TubeFeedingModulePosMgr; +import a8k.service.app.devicedriver.pos.TubeHolderParamMgr; +import a8k.service.bases.AppEventBusService; +import a8k.service.bases.appevent.AppWarningNotifyEvent; +import a8k.type.TubeHolderScanResult; +import a8k.type.TubesScanResult; +import a8k.type.exception.AppException; +import a8k.type.TargetPosMeasureDirection; +import a8k.hardware.A8kCanBusService; +import a8k.hardware.type.a8kcanprotocol.A8kEcode; +import a8k.hardware.type.a8kcanprotocol.IOId; +import a8k.hardware.type.a8kcanprotocol.MId; +import jakarta.annotation.Resource; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +@Component +@ExtApiTab(cfg = ExtApiTabConfig.TubeTubeFeedingModule) +public class TubeTubeFeedingModule { + static Logger logger = LoggerFactory.getLogger(TubeTubeFeedingModule.class); + static Integer infeedOvertime = 10000; + static Integer outfeedOvertime = 10000; + static Integer scanOvertime = 3000; + + static class ORDER { + static final int moveTubeRackToExitPos = 1; + static final int moveTubeRackToScanPos = 2; + static final int moveTubeToScanPosAndScan = 3; + static final int moveTubeToAltitJudgXPos = 4; + static final int judgeTubeExist = 5; + + } + + @Resource + AppEventBusService ebus; + @Resource + A8kCanBusService canBus; + @Resource + TubeFeedingModulePosMgr stp; + @Resource + TubeHolderParamMgr tubeHolderParamMgr; + @Resource + CodeScaner codeScaner; + @Resource + TubeTransportControler tubeTransportControler; + @Resource + MiniServoControler miniServoControler; + @Resource + StepMotorControler stepMotorControler; + + + private Boolean isTubeExist() throws AppException { + return canBus.getIOState(IOId.TubeExistPPS); + } + + private Boolean isTubeRackInEnterPos() throws AppException { + return canBus.getIOState(IOId.InfeedPPS); + } + + private Boolean isTubeRackInExitPos() throws AppException { + return canBus.getIOState(IOId.OutfeedPPS); + } + + private Boolean isHighTube() throws AppException { + return canBus.getIOState(IOId.TubeHeightPPS); + } + + + /** + * 移动试管到扫码位置 + * @param tubeIndex 试管索引 + */ + private void moveTubeToScanPos(Integer tubeIndex) throws AppException { + var scanPos = stp.getTube0ScanXPos() + tubeIndex * tubeHolderParamMgr.getTubeSpacing(); + tubeTransportControler.scanClampModClamp(); + tubeTransportControler.moveTubeRackTo(scanPos, TargetPosMeasureDirection.NEGATIVE, false); + } + + /** + * 移动<试管架>到试管架扫码位置 + */ + private void moveTubeRackToScanPos() throws AppException { + tubeTransportControler.moveTubeRackTo(stp.getTubeHolderScanXPos(), TargetPosMeasureDirection.POSITIVE, false); + } + + + public Boolean getTHchOuterPPS() throws AppException { + return canBus.getIOState(IOId.THChOuterPPS); + } + + public Boolean getTHchInterPPS() throws AppException { + return canBus.getIOState(IOId.THChInterPPS); + } + /*========================================================================================= + * 片段 + *========================================================================================*/ + /** + * 移动试管架到入口位置 + */ + public void moveTubeRackMoveToEnterPos() throws AppException { + tubeTransportControler.moveTubeRackTo(stp.getTubeHolderEnterXPos(), TargetPosMeasureDirection.NOTCARE, true); + } + + /** + * 移动<试管架>到出口位置 + */ + public void moveTubeRackToExitPos() throws AppException { + tubeTransportControler.moveTubeRackTo(stp.getTubeHolderExitXPos(), TargetPosMeasureDirection.NOTCARE, false); + tubeTransportControler.moveTubeRackTo(stp.getTubeHolderExitXPos() - 10, TargetPosMeasureDirection.NOTCARE, false); + } + + /** + * 移动<试管架>到出口位置 + */ + @ExtApiFn(name = "入料", group = "单步", order = ORDER.moveTubeRackToExitPos) + public Boolean enterTubeHolder() throws AppException { + if (getTHchInterPPS() || getTHchOuterPPS()) { + throw new AppException(A8kEcode.APPE_TUBE_X_CHANNEL_IS_NOT_EMPTY); + } + moveTubeRackMoveToEnterPos(); + try { + stepMotorControler.stepMotorEasyRotate(StepMotorMId.FeedingModInfeedM, -1); + for (int i = 0; i < infeedOvertime / 100; i++) { + OS.hsleep(100); + if (getTHchInterPPS()) { + break; + } + logger.info("等待试管架到位 [{}/{}]", i, infeedOvertime / 100); + } + OS.hsleep(1000); + stepMotorControler.stepMotorStop(StepMotorMId.FeedingModInfeedM); + if (!getTHchInterPPS()) { + return false; + } + } finally { + canBus.moduleStop(MId.FeedingModInfeedM); + } + return true; + } + + public void ejectTubeHolderInEnterPos() throws AppException { + stepMotorControler.stepMotorEasyRotate(StepMotorMId.FeedingModInfeedM, 1); + OS.hsleep(3000); + stepMotorControler.stepMotorStop(StepMotorMId.FeedingModInfeedM); + } + + + @ExtApiFn(name = "出料", group = "单步", order = ORDER.moveTubeRackToExitPos) + public void ejectTubeHolder() throws AppException { + moveTubeRackToExitPos(); + try { + stepMotorControler.stepMotorEasyRotate(StepMotorMId.FeedingModOutfeedM, 1); + for (int i = 0; i < outfeedOvertime / 100; i++) { + OS.hsleep(100); + logger.info("getTHchInterPPS:{} getTHchOuterPPS:{}", getTHchInterPPS(), getTHchOuterPPS()); + if (!getTHchInterPPS() && !getTHchOuterPPS()) { + break; + } + } + OS.hsleep(1000); + stepMotorControler.stepMotorStop(StepMotorMId.FeedingModOutfeedM); + if (getTHchInterPPS() || getTHchOuterPPS()) { + throw new AppException(A8kEcode.APPE_EJECT_TUBEHOLDER_TIMEOUT); + } + } finally { + canBus.moduleStop(MId.FeedingModOutfeedM); + } + } + + /** + * 移动试管架到扫码并扫码 + */ + @ExtApiFn(name = "扫描<试管架>编码", group = "单步扫码", order = ORDER.moveTubeRackToScanPos) + public String moveTubeRackToScanPosAndScan() throws AppException { + String result; + moveTubeRackToScanPos(); + + tubeTransportControler.scanClampModClamp(); + canBus.codeScanerStartScan(MId.FeedingModScannerMod); + result = canBus.codeScanerWaittingForResult(MId.FeedingModScannerMod, 1000); + tubeTransportControler.scanClampModRelease(); + if (result == null || result.isEmpty()) { + return ""; + } + return result; + } + // + // 试管移动 + // + + /** + * 移动试管到扫码位置,并扫码 + * @param tubeIndex 试管索引 + */ + @ExtApiFn(name = "扫描<试管X>编码", group = "单步扫码", order = ORDER.moveTubeToScanPosAndScan) + public String moveTubeToScanPosAndScan(Integer tubeIndex) throws AppException { + moveTubeToScanPos(tubeIndex); + try { + tubeTransportControler.scanClampModClamp(); + + canBus.codeScanerStartScan(MId.FeedingModScannerMod); + miniServoControler.miniServoRotateWithTorque(MiniServoMId.ShakeModTubeScanerClampingSV, stp.getTubeScanServoTorque()); + return codeScaner.feedingModScannerModCodeScannerScanCode(scanOvertime); + } finally { + canBus.moduleStop(MId.ShakeModTubeScanerClampingSV); + canBus.moduleStop(MId.FeedingModScannerMod); + tubeTransportControler.scanClampModRelease(); + } + } + + public Boolean tubeXChannelIsEmpty() throws AppException { + return !getTHchInterPPS() && !getTHchOuterPPS(); + } + + + /** + * 移动试管到试管高低判断位置 + * @param tubeIndex 试管索引 + */ + @ExtApiFn(name = "判断<试管N>高低", group = "单步-其他", order = ORDER.moveTubeToAltitJudgXPos) + public Boolean moveAndJudgeTubeAltit(Integer tubeIndex) throws AppException { + tubeTransportControler.moveTubeRackTo(stp.getTube0AltitJudgXPos() + tubeIndex * tubeHolderParamMgr.getTubeSpacing(), TargetPosMeasureDirection.NEGATIVE, false); + return isHighTube(); + } + + /** + * 移动试管到试管有无判断位置 + * @param tubeIndex 试管索引 + */ + @ExtApiFn(name = "判断<试管N>是否存在", group = "单步-其他", order = ORDER.judgeTubeExist) + public Boolean moveAndjudgeTubeExist(Integer tubeIndex) throws AppException { + tubeTransportControler.moveTubeRackTo(stp.getTube0ExistJudgXPos() + tubeIndex * tubeHolderParamMgr.getTubeSpacing(), TargetPosMeasureDirection.NEGATIVE, false); + return isTubeExist(); + } + + + public TubeHolderScanResult scanTubeHodler() throws AppException { + TubeHolderScanResult result = new TubeHolderScanResult(); + + //清空试管架 + if (!tubeXChannelIsEmpty()) { + ejectTubeHolder(); + } + //入料 + logger.info("开始进料"); + Boolean enterSuc = enterTubeHolder(); + if (!enterSuc) { + logger.warn("进料超时,从入料口,弹出试管架"); + ejectTubeHolderInEnterPos(); + throw new AppException(A8kEcode.APPE_INFEED_OVERTIME_FAIL); + } + //扫描试管架类型 + String tubeType = moveTubeRackToScanPosAndScan(); + if (tubeType.isEmpty()) { + logger.warn("扫描试管架类型失败,弹出试管架"); + ebus.pushEvent(new AppWarningNotifyEvent(A8kEcode.APPE_SCAN_TUBEHOLDER_TYPE_TIMEOUT)); + return null; + } + logger.info("扫描试管架类型成功,{}", tubeType); + //逐个扫描试管 + TubesScanResult[] tubesScanResult = new TubesScanResult[10]; + boolean hasTube = false; + for (int i = 0; i < tubesScanResult.length; i++) { + tubesScanResult[i] = new TubesScanResult(); + Boolean isTubeExist = moveAndjudgeTubeExist(i); + if (isTubeExist) { + hasTube = true; + tubesScanResult[i].isTubeExist = true; + tubesScanResult[i].isHighTube = moveAndJudgeTubeAltit(i); + tubesScanResult[i].tubeCode = moveTubeToScanPosAndScan(i); + } else { + tubesScanResult[i].isTubeExist = false; + } + logger.info("扫描试管{}完成,{}", i, tubesScanResult[i]); + } + //处理扫描结果 + if (!hasTube) { + logger.error("试管架中没有试管"); + ebus.pushEvent(new AppWarningNotifyEvent(A8kEcode.APPE_TUBE_HOLDER_TYPE_IS_NOT_SUPPORT)); + return null; + } + result.tubeHolderType = tubeType; + result.tube = tubesScanResult; + return result; + } + +} diff --git a/src/main/java/a8k/service/app/devicedriver/pos/TubeFeedingModulePosMgr.java b/src/main/java/a8k/service/app/devicedriver/pos/TubeFeedingModulePosMgr.java new file mode 100644 index 0000000..5b5feea --- /dev/null +++ b/src/main/java/a8k/service/app/devicedriver/pos/TubeFeedingModulePosMgr.java @@ -0,0 +1,121 @@ +package a8k.service.app.devicedriver.pos; + +import a8k.service.db.LowerDeviceParameterDBService; +import a8k.service.db.utils.PosParameterReader; +import jakarta.annotation.PostConstruct; +import jakarta.annotation.Resource; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + + +@Component +//horizontal scroll +public class TubeFeedingModulePosMgr { + static final Logger logger = LoggerFactory.getLogger(TubeFeedingModulePosMgr.class); + + public final Integer ScanerClampingSVReleasePos = 100; + public final Integer ScanerClampingSVClampingPos = 1000; + + public enum POS { + TubeHolderEnterXPos, // 入料位置 + TubeHolderExitXPos, // 出料位置 + TubeHolderScanXPos, // 试管架扫描位置 + Tube0ScanXPos, // 0号试管扫描位置 + Tube0AltitJudgXPos, // 0试管高度判断位置 + Tube0ExistJudgXPos, // 0试管存在判断位置 + TubeScanServoTorque,// 试管扫描伺服力矩 + } + + @Resource + LowerDeviceParameterDBService lowerDeviceParameterDBService; + + PosParameterReader posReader = null; + Integer nowParaVersion = 0; + + // + // MotorTubeRackMoveCtrlService + // + + @PostConstruct + void initialize() { + posReader = lowerDeviceParameterDBService.getReader(this.getClass()); + Integer paraVersion = posReader.getVersion(); + if (!nowParaVersion.equals(paraVersion)) { + paramReset(); + } + } + + void paramReset() { + logger.info("init param"); + posReader.setVersion(nowParaVersion); + posReader.updatePos(POS.TubeHolderEnterXPos, -46); + posReader.updatePos(POS.TubeHolderExitXPos, 3975); + posReader.updatePos(POS.TubeHolderScanXPos, 2202); + posReader.updatePos(POS.Tube0ScanXPos, 505); + posReader.updatePos(POS.Tube0AltitJudgXPos, 505); + posReader.updatePos(POS.Tube0ExistJudgXPos, 300); + posReader.updatePos(POS.TubeScanServoTorque, 500); + } + + public Integer getParam(POS pos) { + return posReader.getPos(pos, Integer.class); + } + + public Integer getTubeHolderEnterXPos() { + return getParam(POS.TubeHolderEnterXPos); + } + + public Integer getTubeHolderExitXPos() { + return getParam(POS.TubeHolderExitXPos); + } + + public Integer getTubeHolderScanXPos() { + return getParam(POS.TubeHolderScanXPos); + } + + public Integer getTube0ScanXPos() { + return getParam(POS.Tube0ScanXPos); + } + + public Integer getTube0AltitJudgXPos() { + return getParam(POS.Tube0AltitJudgXPos); + } + + public Integer getTube0ExistJudgXPos() { + return getParam(POS.Tube0ExistJudgXPos); + } + + public Integer getTubeScanServoTorque() { + return getParam(POS.TubeScanServoTorque); + } + + public void setTubeHolderEnterXPos(Integer value) { + posReader.updatePos(POS.TubeHolderEnterXPos, value); + } + + public void setTubeHolderExitXPos(Integer value) { + posReader.updatePos(POS.TubeHolderExitXPos, value); + } + + public void setTubeHolderScanXPos(Integer value) { + posReader.updatePos(POS.TubeHolderScanXPos, value); + } + + public void setTube0ScanXPos(Integer value) { + posReader.updatePos(POS.Tube0ScanXPos, value); + } + + public void setTube0AltitJudgXPos(Integer value) { + posReader.updatePos(POS.Tube0AltitJudgXPos, value); + } + + public void setTube0ExistJudgXPos(Integer value) { + posReader.updatePos(POS.Tube0ExistJudgXPos, value); + } + + + public void setTubeScanServoTorque(Integer value) { + posReader.updatePos(POS.TubeScanServoTorque, value); + } +} diff --git a/src/main/java/a8k/service/app/devicedriver/pos/TubePreProcesPosMgr.java b/src/main/java/a8k/service/app/devicedriver/pos/TubePreProcesPosMgr.java index 548eca5..1de2810 100644 --- a/src/main/java/a8k/service/app/devicedriver/pos/TubePreProcesPosMgr.java +++ b/src/main/java/a8k/service/app/devicedriver/pos/TubePreProcesPosMgr.java @@ -10,7 +10,7 @@ import org.springframework.stereotype.Component; @Component public class TubePreProcesPosMgr { - static final Logger logger = LoggerFactory.getLogger(TubeScanPosMgr.class); + static final Logger logger = LoggerFactory.getLogger(TubeFeedingModulePosMgr.class); public enum POS { GripperServoOpenPos("抓手张开位置"),// @@ -50,6 +50,10 @@ public class TubePreProcesPosMgr { if (!nowParaVersion.equals(paraVersion)) { logger.info("init param"); posReader.setVersion(nowParaVersion); + + // 677,450,310,355 + // 1800, + posReader.updatePos(POS.GripperServoOpenPos, 450); posReader.updatePos(POS.GripperServoClosePos, 310); posReader.updatePos(POS.GripperServoTakeCapPos, 355); diff --git a/src/main/java/a8k/service/app/devicedriver/pos/TubeScanPosMgr.java b/src/main/java/a8k/service/app/devicedriver/pos/TubeScanPosMgr.java deleted file mode 100644 index 102539f..0000000 --- a/src/main/java/a8k/service/app/devicedriver/pos/TubeScanPosMgr.java +++ /dev/null @@ -1,120 +0,0 @@ -package a8k.service.app.devicedriver.pos; - -import a8k.service.db.LowerDeviceParameterDBService; -import a8k.service.db.utils.PosParameterReader; -import jakarta.annotation.PostConstruct; -import jakarta.annotation.Resource; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.stereotype.Component; - - -@Component -public class TubeScanPosMgr { - static final Logger logger = LoggerFactory.getLogger(TubeScanPosMgr.class); - - public final Integer ScanerClampingSVReleasePos = 100; - public final Integer ScanerClampingSVClampingPos = 1000; - - public enum POS { - TubeHolderEnterXPos, // 入料位置 - TubeHolderExitXPos, // 出料位置 - TubeHolderScanXPos, // 试管架扫描位置 - Tube0ScanXPos, // 0号试管扫描位置 - Tube0AltitJudgXPos, // 0试管高度判断位置 - Tube0ExistJudgXPos, // 0试管存在判断位置 - TubeScanServoTorque,// 试管扫描伺服力矩 - } - - @Resource - LowerDeviceParameterDBService lowerDeviceParameterDBService; - - PosParameterReader posReader = null; - Integer nowParaVersion = 0; - - // - // MotorTubeRackMoveCtrlService - // - - @PostConstruct - void initialize() { - posReader = lowerDeviceParameterDBService.getReader(this.getClass()); - Integer paraVersion = posReader.getVersion(); - if (!nowParaVersion.equals(paraVersion)) { - paramReset(); - } - } - - void paramReset() { - logger.info("init param"); - posReader.setVersion(nowParaVersion); - posReader.updatePos(POS.TubeHolderEnterXPos, -46); - posReader.updatePos(POS.TubeHolderExitXPos, 3975); - posReader.updatePos(POS.TubeHolderScanXPos, 2202); - posReader.updatePos(POS.Tube0ScanXPos, 505); - posReader.updatePos(POS.Tube0AltitJudgXPos, 505); - posReader.updatePos(POS.Tube0ExistJudgXPos, 300); - posReader.updatePos(POS.TubeScanServoTorque, 500); - } - - public Integer getParam(POS pos) { - return posReader.getPos(pos, Integer.class); - } - - public Integer getTubeHolderEnterXPos() { - return getParam(POS.TubeHolderEnterXPos); - } - - public Integer getTubeHolderExitXPos() { - return getParam(POS.TubeHolderExitXPos); - } - - public Integer getTubeHolderScanXPos() { - return getParam(POS.TubeHolderScanXPos); - } - - public Integer getTube0ScanXPos() { - return getParam(POS.Tube0ScanXPos); - } - - public Integer getTube0AltitJudgXPos() { - return getParam(POS.Tube0AltitJudgXPos); - } - - public Integer getTube0ExistJudgXPos() { - return getParam(POS.Tube0ExistJudgXPos); - } - - public Integer getTubeScanServoTorque() { - return getParam(POS.TubeScanServoTorque); - } - - public void setTubeHolderEnterXPos(Integer value) { - posReader.updatePos(POS.TubeHolderEnterXPos, value); - } - - public void setTubeHolderExitXPos(Integer value) { - posReader.updatePos(POS.TubeHolderExitXPos, value); - } - - public void setTubeHolderScanXPos(Integer value) { - posReader.updatePos(POS.TubeHolderScanXPos, value); - } - - public void setTube0ScanXPos(Integer value) { - posReader.updatePos(POS.Tube0ScanXPos, value); - } - - public void setTube0AltitJudgXPos(Integer value) { - posReader.updatePos(POS.Tube0AltitJudgXPos, value); - } - - public void setTube0ExistJudgXPos(Integer value) { - posReader.updatePos(POS.Tube0ExistJudgXPos, value); - } - - - public void setTubeScanServoTorque(Integer value) { - posReader.updatePos(POS.TubeScanServoTorque, value); - } -} diff --git a/src/main/java/a8k/service/app/devicedriver/testscript/TestScript.java b/src/main/java/a8k/service/app/devicedriver/testscript/TestScript.java index 5b69f7d..b7edd7f 100644 --- a/src/main/java/a8k/service/app/devicedriver/testscript/TestScript.java +++ b/src/main/java/a8k/service/app/devicedriver/testscript/TestScript.java @@ -8,7 +8,7 @@ import a8k.type.ConsumableGroup; import a8k.type.exception.AppException; import a8k.type.IncubatorPos; import a8k.service.app.devicedriver.ctrl.TubePreProcesControler; -import a8k.service.app.devicedriver.ctrl.TubeScanerControler; +import a8k.service.app.devicedriver.ctrl.TubeTubeFeedingModule; import a8k.hardware.A8kCanBusService; import a8k.hardware.type.a8kcanprotocol.A8kEcode; import a8k.service.app.devicedriver.basectrl.HbotBaseMoveControler; @@ -61,7 +61,7 @@ public class TestScript { TubePreProcesControler tubePreProcesControler; @Resource - TubeScanerControler tubeScanerControler; + TubeTubeFeedingModule tubeTubeFeedingModule; EnginnerParamReader settingReader = new EnginnerParamReader(HbotBaseMoveControler.class);