diff --git a/src/main/java/a8k/extapi_controler/pagecontrol/ExtApiTabConfig.java b/src/main/java/a8k/extapi_controler/pagecontrol/ExtApiTabConfig.java index b7ca87c..03a7acf 100644 --- a/src/main/java/a8k/extapi_controler/pagecontrol/ExtApiTabConfig.java +++ b/src/main/java/a8k/extapi_controler/pagecontrol/ExtApiTabConfig.java @@ -14,8 +14,9 @@ public enum ExtApiTabConfig { AppReactionResultMgrService("应用数据.反应结果管理", true), //OK - Hbot2DCodeScanPosCalibration("校准.耗材扫描二维码坐标校准", true), - TubeTransportPosCalibration("校准.样本平移坐标校准", true), + Hbot2DCodeScanPosCalibration("校准.耗材扫描校准", true), + TubeScanPosCalibration("校准.试管扫描校准", true), + TubePreProcesPosCalibration("校准.试管预处理校准", true), ActionReactorService("底层调试.单步调试", false),//OK @@ -31,8 +32,8 @@ public enum ExtApiTabConfig { HardwareCommonCtrl("HardwareCommonCtrl", false), ReactionPlatesTransmitCtrl("ReactionPlatesTransmitCtrl", false), HbotControlService("HbotControlService", false), - SamplesPreProcesCtrl("硬件控制.样本预处理模块", false), - TubeHolderScanerControler("硬件控制.样本搬运与扫描", false), + TubePreProcesControler("硬件控制.样本预处理模块", false), + TubeScanerControler("硬件控制.样本搬运与扫描", false), ConsumablesScanCtrlService("硬件控制.耗材扫描", false), diff --git a/src/main/java/a8k/hardware/A8kCanBusService.java b/src/main/java/a8k/hardware/A8kCanBusService.java index 50ac05f..29174b4 100644 --- a/src/main/java/a8k/hardware/A8kCanBusService.java +++ b/src/main/java/a8k/hardware/A8kCanBusService.java @@ -430,79 +430,6 @@ public class A8kCanBusService { // MINI_SERVO // - public void miniServoEnable(MId id, int enable) throws AppException { - callcmd(id.toInt(), CmdId.mini_servo_enable.toInt(), enable); - } - - public int miniServoReadPos(MId id) throws AppException { - var packet = callcmd(id.toInt(), CmdId.mini_servo_read_pos.toInt()); - return packet.getContentI32(0); - } - - - public void miniServoActiveCfg(MId id) throws AppException { - callcmd(id.toInt(), CmdId.mini_servo_active_cfg.toInt()); - } - - public void miniServoStop(MId id) throws AppException { - callcmd(id.toInt(), CmdId.mini_servo_stop.toInt()); - } - - public void miniServoSetMidPoint(MId id) throws AppException { - callcmd(id.toInt(), CmdId.mini_servo_set_mid_point.toInt()); - } - - public int miniServoReadIoState(MId id) throws AppException { - var packet = callcmd(id.toInt(), CmdId.mini_servo_read_io_state.toInt()); - return packet.getContentI32(0); - } - - public void miniServoMoveTo(MId id, int pos) throws AppException { - callcmd(id.toInt(), CmdId.mini_servo_move_to.toInt(), pos); - } - - public void miniServoMoveToBlock(MId id, int pos, Integer actionOvertime) throws AppException { - miniServoMoveTo(id, pos); - waitForMod(id, actionOvertime); - } - - public void miniServoRotate(MId id, int direction) throws AppException { - callcmd(id.toInt(), CmdId.mini_servo_rotate.toInt(), direction); - } - - public void miniServoRotateBlock(MId id, int direction, Integer actionOvertime) throws AppException { - miniServoRotate(id, direction); - waitForMod(id, actionOvertime); - } - - public void miniServoRotateWithTorque(MId id, int torque) throws AppException { - callcmd(id.toInt(), CmdId.mini_servo_rotate_with_torque.toInt(), torque); - } - - public void miniServoRotateWithTorqueBlock(MId id, int torque, Integer actionOvertime) throws AppException { - miniServoRotateWithTorque(id, torque); - miniServoWaitIsNotMove(id, actionOvertime); - } - - // kmini_servo_set_cur_pos - public void miniServoSetCurPos(MId id, Integer pos) throws AppException { - callcmdOvertime(id.toInt(), CmdId.mini_servo_set_cur_pos.toInt(), 5000, pos); - } - - public void miniServoWaitIsNotMove(MId id, int acitionOvertime) throws AppException { - long startedAt = System.currentTimeMillis(); - do { - var isMove = moduleGetReg(id, RegIndex.kreg_mini_servo_is_move); - if (isMove != 0) { - break; - } - long now = System.currentTimeMillis(); - if (now - startedAt > acitionOvertime) { - throw AppException.of(new HardwareError(A8kEcode.LOW_ERROR_OVERTIME, id, null)); - } - - } while (true); - } public Boolean priGetIOState(IOId ioid) throws AppException { if (ioid.mtype == ModuleType.kboard) { @@ -578,6 +505,15 @@ public class A8kCanBusService { } while (true); } + public A8kPacket callcmd(MId moduleId, CmdId cmdId, Integer... param) throws AppException { + return callcmd(moduleId.toInt(), cmdId.toInt(), param); + } + + public A8kPacket callcmdOvertime(MId moduleId, CmdId cmdId, Integer overtime, Integer... params) throws AppException { + return callcmdOvertime(moduleId.toInt(), cmdId.toInt(), overtime, params); + } + + public A8kPacket callcmd(Integer moduleId, Integer cmdId, Integer... param) throws AppException { var packet = packParamsToPacket(moduleId, cmdId, List.of(param)); return sendCmdAutoResend(packet, A8kPacket.CMD_OVERTIME); diff --git a/src/main/java/a8k/hardware/type/regindex/RegIndex.java b/src/main/java/a8k/hardware/type/regindex/RegIndex.java index 8000379..d01c4c1 100644 --- a/src/main/java/a8k/hardware/type/regindex/RegIndex.java +++ b/src/main/java/a8k/hardware/type/regindex/RegIndex.java @@ -188,8 +188,6 @@ public enum RegIndex { kreg_mini_servo_limit_torque(10252), // 限制扭矩 kreg_mini_servo_protective_torque(10253), // 保护扭矩 kreg_mini_servo_is_move(10254), // 是否在运动 - kreg_mini_servo_set_mid_point(26119), // 设置中间点 - kmini_servo_set_cur_pos(26124), // 设置当前位置 /*********************************************************************************************************************** * ID_CARD_READER * ***********************************************************************************************************************/ 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 a7bd7a7..42889e7 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.TubeHolderScanerControler; +import a8k.service.app.devicedriver.ctrl.TubeScanerControler; 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 - TubeHolderScanerControler tubeHolderScanerControler; + TubeScanerControler tubeScanerControler; @Resource AppDebugHelperService appDebugHelper; @@ -47,7 +47,7 @@ public class DO_START extends A8kStepAction { if (appDebugHelper.isDebug()) { appDebugHelper.doVirtualThings("弹出试管架", 2); } else { - tubeHolderScanerControler.ejectTubeHolder(); + tubeScanerControler.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 00e2819..3347304 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.TubeHolderScanerControler; +import a8k.service.app.devicedriver.ctrl.TubeScanerControler; 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 - TubeHolderScanerControler stc; + TubeScanerControler 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 b4aafc9..a09b54d 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.TubeHolderScanerControler; +import a8k.service.app.devicedriver.ctrl.TubeScanerControler; 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 - TubeHolderScanerControler sstc; + TubeScanerControler 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 fac72ff..57a1fcc 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,8 +13,8 @@ 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.TubeHolderScanerControler; -import a8k.service.app.devicedriver.ctrl.SamplesPreProcesControler; +import a8k.service.app.devicedriver.ctrl.TubeScanerControler; +import a8k.service.app.devicedriver.ctrl.TubePreProcesControler; import a8k.type.ecode.AppError; import a8k.type.exception.AppException; import a8k.utils.ZFnCall; @@ -46,9 +46,9 @@ public class SEQ4_PRE_PROCESS extends A8kStepAction { GStateService gstate; @Resource - TubeHolderScanerControler sstc; + TubeScanerControler sstc; @Resource - ConsumablesMgrService consumablesMgrService; + ConsumablesMgrService consumablesMgrService; @Resource AppProjInfoMgrService appProjInfoMgrService; @Resource @@ -58,7 +58,7 @@ public class SEQ4_PRE_PROCESS extends A8kStepAction { @Resource ReactionPlatesTransmitCtrl reactionPlatesTransmitCtrl; @Resource - SamplesPreProcesControler samplesPreProcesControler; + TubePreProcesControler tubePreProcesControler; @Resource HbotBaseMoveControler hbotBaseMoveControler; @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 65baec2..c86401e 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.TubeHolderScanerControler; +import a8k.service.app.devicedriver.ctrl.TubeScanerControler; 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 - TubeHolderScanerControler SST_HControler; + TubeScanerControler SST_HControler; MainFlowCtrlState state; diff --git a/src/main/java/a8k/service/app/devicedriver/basectrl/MiniServoControler.java b/src/main/java/a8k/service/app/devicedriver/basectrl/MiniServoControler.java new file mode 100644 index 0000000..2871b25 --- /dev/null +++ b/src/main/java/a8k/service/app/devicedriver/basectrl/MiniServoControler.java @@ -0,0 +1,91 @@ +package a8k.service.app.devicedriver.basectrl; + +import a8k.hardware.A8kCanBusService; +import a8k.hardware.type.a8kcanprotocol.A8kEcode; +import a8k.hardware.type.a8kcanprotocol.CmdId; +import a8k.hardware.type.a8kcanprotocol.MId; +import a8k.hardware.type.regindex.RegIndex; +import a8k.service.app.devicedriver.basectrl.type.MiniServoMid; +import a8k.type.ecode.HardwareError; +import a8k.type.exception.AppException; +import jakarta.annotation.Resource; + +public class MiniServoControler { + @Resource + A8kCanBusService canBus; + + + public void miniServoEnable(MiniServoMid id, int enable) throws AppException { + canBus.callcmd(id.mid, CmdId.mini_servo_enable, enable); + } + + public int miniServoReadPos(MiniServoMid id) throws AppException { + var packet = canBus.callcmd(id.mid, CmdId.mini_servo_read_pos); + return packet.getContentI32(0); + } + + public void miniServoActiveCfg(MiniServoMid id) throws AppException { + canBus.callcmd(id.mid, CmdId.mini_servo_active_cfg); + } + + public void miniServoStop(MiniServoMid id) throws AppException { + canBus.callcmd(id.mid, CmdId.mini_servo_stop); + } + + public void miniServoSetMidPoint(MiniServoMid id) throws AppException { + canBus.callcmd(id.mid, CmdId.mini_servo_set_mid_point); + } + + public int miniServoReadIoState(MiniServoMid id) throws AppException { + var packet = canBus.callcmd(id.mid, CmdId.mini_servo_read_io_state); + return packet.getContentI32(0); + } + + public void miniServoMoveTo(MiniServoMid id, int pos) throws AppException { + canBus.callcmd(id.mid, CmdId.mini_servo_move_to, pos); + } + + public void miniServoMoveToBlock(MiniServoMid id, int pos, Integer actionOvertime) throws AppException { + miniServoMoveTo(id, pos); + canBus.waitForMod(id.mid, actionOvertime); + } + + public void miniServoRotate(MiniServoMid id, int direction) throws AppException { + canBus.callcmd(id.mid, CmdId.mini_servo_rotate, direction); + } + + public void miniServoRotateBlock(MiniServoMid id, int direction, Integer actionOvertime) throws AppException { + miniServoRotate(id, direction); + canBus.waitForMod(id.mid, actionOvertime); + } + + public void miniServoRotateWithTorque(MiniServoMid id, int torque) throws AppException { + canBus.callcmd(id.mid, CmdId.mini_servo_rotate_with_torque, torque); + } + + public void miniServoRotateWithTorqueBlock(MiniServoMid id, int torque, Integer actionOvertime) throws AppException { + miniServoRotateWithTorque(id, torque); + miniServoWaitIsNotMove(id, actionOvertime); + } + + // kmini_servo_set_cur_pos + public void miniServoSetCurPos(MiniServoMid id, Integer pos) throws AppException { + canBus.callcmdOvertime(id.mid, CmdId.mini_servo_set_cur_pos, 5000, pos); + } + + public void miniServoWaitIsNotMove(MiniServoMid id, int acitionOvertime) throws AppException { + long startedAt = System.currentTimeMillis(); + do { + var isMove = canBus.moduleGetReg(id.mid, RegIndex.kreg_mini_servo_is_move); + if (isMove != 0) { + break; + } + long now = System.currentTimeMillis(); + if (now - startedAt > acitionOvertime) { + throw AppException.of(new HardwareError(A8kEcode.LOW_ERROR_OVERTIME, id.mid, null)); + } + + } while (true); + } + +} 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 afaf4c3..e8349c4 100644 --- a/src/main/java/a8k/service/app/devicedriver/basectrl/TubeTransportControler.java +++ b/src/main/java/a8k/service/app/devicedriver/basectrl/TubeTransportControler.java @@ -1,20 +1,12 @@ package a8k.service.app.devicedriver.basectrl; -import a8k.OS; -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.A8kEcode; -import a8k.hardware.type.a8kcanprotocol.IOId; import a8k.hardware.type.a8kcanprotocol.MId; -import a8k.service.app.devicedriver.pos.TubeHolderParamMgr; -import a8k.service.app.devicedriver.pos.TubeTransportPosMgr; -import a8k.service.bases.AppEventBusService; -import a8k.service.bases.appevent.AppWarningNotifyEvent; +import a8k.service.app.devicedriver.basectrl.type.MiniServoMid; +import a8k.service.app.devicedriver.pos.TubeScanPosMgr; import a8k.type.TargetPosMeasureDirection; -import a8k.type.TubeHolderScanResult; -import a8k.type.TubesScanResult; import a8k.type.exception.AppException; import jakarta.annotation.Resource; import org.slf4j.Logger; @@ -27,10 +19,13 @@ public class TubeTransportControler { static Integer overtime = 10000; @Resource - A8kCanBusService canBus; + A8kCanBusService canBus; + @Resource + MiniServoControler miniServoControler; @Resource - TubeTransportPosMgr tubeTransportPosMgr; + TubeScanPosMgr tubeScanPosMgr; + /*========================================================================================= * 基础方法 @@ -54,7 +49,7 @@ public class TubeTransportControler { canBus.stepMotorEasyMoveToZeroPointQuickBlock(MId.FeedingModXM, overtime); } - // 处理试管架和试管架之间的间隙导致的运行位置误差 + //处理试管架和试管架之间的间隙导致的运行位置误差 Integer nowPos = canBus.stepMotorReadPos(MId.FeedingModXM); if (TargetPosMeasureDirection.POSITIVE.equals(moveDiretion)) { if (nowPos > (pos + 1)) { @@ -72,15 +67,17 @@ public class TubeTransportControler { @ExtApiFn(name = "扫描夹紧机构夹紧", group = "基础方法", order = 1) public void scanClampModClamp() throws AppException { - canBus.miniServoEnable(MId.ShakeModTubeScanerClampingSV, 1); - canBus.miniServoMoveTo(MId.ShakeModTubeScanerClampingSV, tubeTransportPosMgr.ScanerClampingSVClampingPos); + logger.info("扫描夹紧机构夹紧"); + miniServoControler.miniServoEnable(MiniServoMid.ShakeModTubeScanerClampingSV, 1); + miniServoControler.miniServoMoveTo(MiniServoMid.ShakeModTubeScanerClampingSV, tubeScanPosMgr.ScanerClampingSVClampingPos); canBus.waitForMod(MId.ShakeModTubeScanerClampingSV, overtime); } @ExtApiFn(name = "扫描夹紧机构复位", group = "基础方法", order = 2) public void scanClampModRelease() throws AppException { - canBus.miniServoEnable(MId.ShakeModTubeScanerClampingSV, 1); - canBus.miniServoMoveTo(MId.ShakeModTubeScanerClampingSV, tubeTransportPosMgr.ScanerClampingSVReleasePos); + logger.info("扫描夹紧机构复位"); + miniServoControler.miniServoEnable(MiniServoMid.ShakeModTubeScanerClampingSV, 1); + miniServoControler.miniServoMoveTo(MiniServoMid.ShakeModTubeScanerClampingSV, tubeScanPosMgr.ScanerClampingSVReleasePos); canBus.waitForMod(MId.ShakeModTubeScanerClampingSV, overtime); } diff --git a/src/main/java/a8k/service/app/devicedriver/basectrl/type/MiniServoMid.java b/src/main/java/a8k/service/app/devicedriver/basectrl/type/MiniServoMid.java new file mode 100644 index 0000000..5a3519b --- /dev/null +++ b/src/main/java/a8k/service/app/devicedriver/basectrl/type/MiniServoMid.java @@ -0,0 +1,18 @@ +package a8k.service.app.devicedriver.basectrl.type; + +import a8k.hardware.type.a8kcanprotocol.MId; + +public enum MiniServoMid { + ShakeModGripperYSV( MId.ShakeModGripperYSV),// + ShakeModGripperSV( MId.ShakeModGripperSV),// + ShakeModTubeScanerClampingSV( MId.ShakeModTubeScanerClampingSV),// + ShakeModTubeScanerRotateSV( MId.ShakeModTubeScanerRotateSV),// + ; + + final public MId mid; + + MiniServoMid(MId mid) { + this.mid = mid; + } + +} diff --git a/src/main/java/a8k/service/app/devicedriver/basectrl/type/MiniServoRegIndex.java b/src/main/java/a8k/service/app/devicedriver/basectrl/type/MiniServoRegIndex.java new file mode 100644 index 0000000..363aa4a --- /dev/null +++ b/src/main/java/a8k/service/app/devicedriver/basectrl/type/MiniServoRegIndex.java @@ -0,0 +1,23 @@ +package a8k.service.app.devicedriver.basectrl.type; + +import a8k.hardware.type.regindex.RegIndex; + +public enum MiniServoRegIndex { + kreg_module_version(RegIndex.kreg_module_version), // 模块版本 + kreg_module_type(RegIndex.kreg_module_type), // 模块类型 + kreg_module_status(RegIndex.kreg_module_status), // 0idle,1busy,2error + kreg_module_errorcode(RegIndex.kreg_module_errorcode), // inited_flag + kreg_extboard_resetflag(RegIndex.kreg_extboard_resetflag), + + kreg_mini_servo_pos(RegIndex.kreg_mini_servo_pos), // 位置 + kreg_mini_servo_limit_velocity(RegIndex.kreg_mini_servo_limit_velocity), // 限制速度 + kreg_mini_servo_limit_torque(RegIndex.kreg_mini_servo_limit_torque), // 限制扭矩 + kreg_mini_servo_protective_torque(RegIndex.kreg_mini_servo_protective_torque), // 保护扭矩 + kreg_mini_servo_is_move(RegIndex.kreg_mini_servo_is_move), // 是否在运动 + ; + public final RegIndex regIndex; + + MiniServoRegIndex(RegIndex regIndex) { + this.regIndex = regIndex; + } +} diff --git a/src/main/java/a8k/service/app/devicedriver/calibration/PositionCalibration.java b/src/main/java/a8k/service/app/devicedriver/calibration/PositionCalibration.java index 4ff5a91..3f59742 100644 --- a/src/main/java/a8k/service/app/devicedriver/calibration/PositionCalibration.java +++ b/src/main/java/a8k/service/app/devicedriver/calibration/PositionCalibration.java @@ -106,13 +106,13 @@ import org.springframework.stereotype.Component; // // @ExtApiStatu(name = "抓手Y轴位置", group = "摇匀模组") // public String getShakeModGripperYPos() throws AppException { -// Integer pos = canBus.miniServoReadPos(MId.ShakeModGripperYSV); +// Integer pos = miniServoControler.miniServoReadPos(MiniServoMid.ShakeModGripperYSV); // return pos.toString(); // } // // @ExtApiStatu(name = "抓手位置", group = "摇匀模组") // public String getGripperPos() throws AppException { -// Integer pos = canBus.miniServoReadPos(MId.ShakeModGripperSV); +// Integer pos = miniServoControler.miniServoReadPos(MiniServoMid.ShakeModGripperSV); // return pos.toString(); // } // diff --git a/src/main/java/a8k/service/app/devicedriver/calibration/TubePreProcesPosCalibration.java b/src/main/java/a8k/service/app/devicedriver/calibration/TubePreProcesPosCalibration.java new file mode 100644 index 0000000..989a422 --- /dev/null +++ b/src/main/java/a8k/service/app/devicedriver/calibration/TubePreProcesPosCalibration.java @@ -0,0 +1,56 @@ +package a8k.service.app.devicedriver.calibration; + +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.type.MiniServoMid; +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) +@Component +public class TubePreProcesPosCalibration { + + @Resource + TubePreProcesPosMgr tubePreProcesPosMgr; + + @Resource + A8kCanBusService canBus; + @Resource + MiniServoControler miniServoControler; + + //基础工具 + @ExtApiFn(name = "归零", group = "测试工具", order = 11) + public void deviceReset() throws AppException { + enableModule(); + canBus.stepMotorEasyMoveToZeroBlock(MId.FeedingModXM, 15000); + + } + + @ExtApiFn(name = "使能相关模块", group = "测试工具", order = 12) + public void enableModule() throws AppException { + miniServoControler.miniServoEnable(MiniServoMid.ShakeModGripperSV, 1); + miniServoControler.miniServoEnable(MiniServoMid.ShakeModGripperYSV, 1); + canBus.stepMotorEnable(MId.ShakeModClampingM, 1); + canBus.stepMotorEnable(MId.ShakeModGripperZM, 1); + canBus.stepMotorEnable(MId.ShakeModShakeM, 1); + } + + @ExtApiFn(name = "失能相关模块", group = "测试工具", order = 13) + public void disableModule() throws AppException { + canBus.stepMotorEnable(MId.FeedingModInfeedM, 0); + canBus.stepMotorEnable(MId.FeedingModOutfeedM, 0); + canBus.stepMotorEnable(MId.FeedingModXM, 0); + miniServoControler.miniServoEnable(MiniServoMid.ShakeModTubeScanerClampingSV, 0); + } + + + //标定和校准 + + +} diff --git a/src/main/java/a8k/service/app/devicedriver/calibration/TubeTransportPosCalibration.java b/src/main/java/a8k/service/app/devicedriver/calibration/TubeScanPosCalibration.java similarity index 70% rename from src/main/java/a8k/service/app/devicedriver/calibration/TubeTransportPosCalibration.java rename to src/main/java/a8k/service/app/devicedriver/calibration/TubeScanPosCalibration.java index b2b18a8..6a4738e 100644 --- a/src/main/java/a8k/service/app/devicedriver/calibration/TubeTransportPosCalibration.java +++ b/src/main/java/a8k/service/app/devicedriver/calibration/TubeScanPosCalibration.java @@ -5,28 +5,32 @@ 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.TubeTransportControler; -import a8k.service.app.devicedriver.ctrl.TubeHolderScanerControler; -import a8k.service.app.devicedriver.pos.TubeTransportPosMgr; +import a8k.service.app.devicedriver.basectrl.type.MiniServoMid; +import a8k.service.app.devicedriver.ctrl.TubeScanerControler; +import a8k.service.app.devicedriver.pos.TubeScanPosMgr; import a8k.type.TubeHolderScanResult; import a8k.type.exception.AppException; import jakarta.annotation.Resource; import org.springframework.stereotype.Component; -@ExtApiTab(cfg = ExtApiTabConfig.TubeTransportPosCalibration) +@ExtApiTab(cfg = ExtApiTabConfig.TubeScanPosCalibration) @Component -public class TubeTransportPosCalibration { +public class TubeScanPosCalibration { @Resource - TubeTransportPosMgr tubeTransportPosMgr; + TubeScanPosMgr tubeScanPosMgr; @Resource - A8kCanBusService canBus; + A8kCanBusService canBus; @Resource - TubeHolderScanerControler tubeHolderScanerControler; + TubeScanerControler tubeScanerControler; @Resource - TubeTransportControler tubeTransportControler; + TubeTransportControler tubeTransportControler; + @Resource + MiniServoControler miniServoControler; private Integer readFeedingModXMPos() throws AppException { canBus.stepMotorEnable(MId.FeedingModXM, 1); @@ -35,8 +39,8 @@ public class TubeTransportPosCalibration { } @ExtApiFn(name = "获取所有坐标", group = "基础", order = 1) - public TubeTransportPosMgr getPoss() throws AppException { - return tubeTransportPosMgr; + public TubeScanPosMgr getPoss() throws AppException { + return tubeScanPosMgr; } // 测试工具 @@ -52,7 +56,7 @@ public class TubeTransportPosCalibration { canBus.stepMotorEnable(MId.FeedingModInfeedM, 1); canBus.stepMotorEnable(MId.FeedingModOutfeedM, 1); canBus.stepMotorEnable(MId.FeedingModXM, 1); - canBus.miniServoEnable(MId.ShakeModTubeScanerClampingSV, 1); + miniServoControler.miniServoEnable(MiniServoMid.ShakeModTubeScanerClampingSV, 1); } @ExtApiFn(name = "失能相关模块", group = "测试工具", order = 13) @@ -60,62 +64,63 @@ public class TubeTransportPosCalibration { canBus.stepMotorEnable(MId.FeedingModInfeedM, 0); canBus.stepMotorEnable(MId.FeedingModOutfeedM, 0); canBus.stepMotorEnable(MId.FeedingModXM, 0); - canBus.miniServoEnable(MId.ShakeModTubeScanerClampingSV, 0); + miniServoControler.miniServoEnable(MiniServoMid.ShakeModTubeScanerClampingSV, 0); } @ExtApiFn(name = "<平移电机>设置当前位置为<入料位置>", group = "标定", order = 21) public void setTubeHolderEnterXPos() throws AppException { - tubeTransportPosMgr.setTubeHolderEnterXPos(readFeedingModXMPos()); + tubeScanPosMgr.setTubeHolderEnterXPos(readFeedingModXMPos()); } @ExtApiFn(name = "<平移电机>设置当前位置为<出料位置>", group = "标定", order = 22) public void setTubeHolderExitXPos() throws AppException { - tubeTransportPosMgr.setTubeHolderExitXPos(readFeedingModXMPos()); + tubeScanPosMgr.setTubeHolderExitXPos(readFeedingModXMPos()); } @ExtApiFn(name = "<平移电机>设置当前位置为<试管架扫描位置>", group = "标定", order = 23) public void setTubeHolderScanXPos() throws AppException { - tubeTransportPosMgr.setTubeHolderScanXPos(readFeedingModXMPos()); + tubeScanPosMgr.setTubeHolderScanXPos(readFeedingModXMPos()); } @ExtApiFn(name = "<平移电机>设置当前位置为<0号试管扫描位置>", group = "标定", order = 24) public void setTube0ScanXPos() throws AppException { - tubeTransportPosMgr.setTube0ScanXPos(readFeedingModXMPos()); + tubeScanPosMgr.setTube0ScanXPos(readFeedingModXMPos()); } @ExtApiFn(name = "<平移电机>设置当前位置为<0试管高度判断位置>", group = "标定", order = 25) public void setTube0AltitJudgXPos() throws AppException { - tubeTransportPosMgr.setTube0AltitJudgXPos(readFeedingModXMPos()); + tubeScanPosMgr.setTube0AltitJudgXPos(readFeedingModXMPos()); } @ExtApiFn(name = "<平移电机>设置当前位置为<0试管存在判断位置>", group = "标定", order = 26) public void setTube0ExistJudgXPos() throws AppException { - tubeTransportPosMgr.setTube0ExistJudgXPos(readFeedingModXMPos()); + tubeScanPosMgr.setTube0ExistJudgXPos(readFeedingModXMPos()); } @ExtApiFn(name = "<夹紧舵机>设置当前位置为夹紧位置", group = "标定", order = 26) public void setTubeScanClampPos() throws AppException { - canBus.miniServoSetCurPos(MId.ShakeModTubeScanerClampingSV, tubeTransportPosMgr.ScanerClampingSVClampingPos); + miniServoControler.miniServoSetCurPos(MiniServoMid.ShakeModTubeScanerClampingSV, tubeScanPosMgr.ScanerClampingSVClampingPos); } @ExtApiFn(name = "夹紧试管架", group = "校验", order = 31) public void scanClampModClamp() throws AppException { - tubeTransportControler.scanClampModClamp(); + tubeTransportControler.scanClampModClamp(); } @ExtApiFn(name = "释放试管架", group = "校验", order = 32) public void scanClampModRelease() throws AppException { tubeTransportControler.scanClampModRelease(); } + @ExtApiFn(name = "扫描试管架", group = "校验", order = 33) public TubeHolderScanResult scanAll() throws AppException { - return tubeHolderScanerControler.scanTubeHodler(); + return tubeScanerControler.scanTubeHodler(); } @ExtApiFn(name = "设置<试管扫描伺服力矩(100-1000)>", group = "其他", order = 41) public void setTubeScanServoTorque(Integer torque) throws AppException { - tubeTransportPosMgr.setTubeScanServoTorque(torque); + tubeScanPosMgr.setTubeScanServoTorque(torque); } } diff --git a/src/main/java/a8k/service/app/devicedriver/commonctrl/HardwareCommonCtrl.java b/src/main/java/a8k/service/app/devicedriver/commonctrl/HardwareCommonCtrl.java index 34bf430..b6f8581 100644 --- a/src/main/java/a8k/service/app/devicedriver/commonctrl/HardwareCommonCtrl.java +++ b/src/main/java/a8k/service/app/devicedriver/commonctrl/HardwareCommonCtrl.java @@ -2,6 +2,8 @@ package a8k.service.app.devicedriver.commonctrl; import a8k.service.app.devicedriver.basectrl.HbotModule; +import a8k.service.app.devicedriver.basectrl.MiniServoControler; +import a8k.service.app.devicedriver.basectrl.type.MiniServoMid; import a8k.type.exception.AppException; import a8k.type.appret.AppRet; import a8k.extapi_controler.utils.ExtApiTab; @@ -32,6 +34,8 @@ public class HardwareCommonCtrl { @Resource A8kCanBusService canBus; + @Resource + MiniServoControler miniServoControler; @Resource TimeParam timep; @@ -87,11 +91,11 @@ public class HardwareCommonCtrl { //进出料初始化 canBus.stepMotorEasyMoveToZeroBlock(MId.FeedingModXM, timep.getRuntoZeroActionOvertime()); - canBus.miniServoMoveToBlock(MId.ShakeModTubeScanerClampingSV, 20, timep.getActionOvertime()); + miniServoControler.miniServoMoveToBlock(MiniServoMid.ShakeModTubeScanerClampingSV, 20, timep.getActionOvertime()); - canBus.miniServoMoveToBlock(MId.ShakeModGripperSV, 300, timep.getActionOvertime()); + miniServoControler.miniServoMoveToBlock(MiniServoMid.ShakeModGripperSV, 300, timep.getActionOvertime()); - canBus.miniServoMoveToBlock(MId.ShakeModGripperYSV, 300, timep.getActionOvertime()); + miniServoControler.miniServoMoveToBlock(MiniServoMid.ShakeModGripperYSV, 300, timep.getActionOvertime()); canBus.stepMotorEasyMoveToZeroBlock(MId.ShakeModClampingM, timep.getRuntoZeroActionOvertime()); diff --git a/src/main/java/a8k/service/app/devicedriver/ctrl/DeviceInitCtrlService.java b/src/main/java/a8k/service/app/devicedriver/ctrl/DeviceInitCtrlService.java index 70edc55..51c893b 100644 --- a/src/main/java/a8k/service/app/devicedriver/ctrl/DeviceInitCtrlService.java +++ b/src/main/java/a8k/service/app/devicedriver/ctrl/DeviceInitCtrlService.java @@ -4,6 +4,8 @@ import a8k.hardware.A8kCanBusService; import a8k.hardware.type.a8kcanprotocol.A8kEcode; import a8k.hardware.type.a8kcanprotocol.IOId; import a8k.hardware.type.a8kcanprotocol.MId; +import a8k.service.app.devicedriver.basectrl.MiniServoControler; +import a8k.service.app.devicedriver.basectrl.type.MiniServoMid; import a8k.service.bases.ActionReactorService; import a8k.service.debug.AppDebugHelperService; import a8k.type.CheckPointType; @@ -32,6 +34,8 @@ public class DeviceInitCtrlService { HbotModule hbotModule; @Resource AppDebugHelperService appDebugHelper; + @Resource + MiniServoControler miniServoControler; Integer actionOvertime = 10000; List checkPoints = new ArrayList<>(); @@ -87,9 +91,9 @@ public class DeviceInitCtrlService { //进出料初始化 actionReactor.dosome("入料平移电机回零", () -> canBus.stepMotorEasyMoveToZeroBlock(MId.FeedingModXM, actionOvertime)); - actionReactor.dosome("摇匀模组-扫码夹紧舵机回零", () -> canBus.miniServoMoveToBlock(MId.ShakeModTubeScanerClampingSV, 20, actionOvertime)); - actionReactor.dosome("摇匀模组-夹爪舵机回零", () -> canBus.miniServoMoveToBlock(MId.ShakeModGripperSV, 300, actionOvertime)); - actionReactor.dosome("摇匀模组-夹爪Y轴舵机回零", () -> canBus.miniServoMoveToBlock(MId.ShakeModGripperYSV, 300, actionOvertime)); + actionReactor.dosome("摇匀模组-扫码夹紧舵机回零", () -> miniServoControler.miniServoMoveToBlock(MiniServoMid.ShakeModTubeScanerClampingSV, 20, actionOvertime)); + actionReactor.dosome("摇匀模组-夹爪舵机回零", () -> miniServoControler.miniServoMoveToBlock(MiniServoMid.ShakeModGripperSV, 300, actionOvertime)); + actionReactor.dosome("摇匀模组-夹爪Y轴舵机回零", () -> miniServoControler.miniServoMoveToBlock(MiniServoMid.ShakeModGripperYSV, 300, actionOvertime)); actionReactor.dosome("摇匀模组-夹紧电机回零", () -> canBus.stepMotorEasyMoveToZeroBlock(MId.ShakeModClampingM, actionOvertime)); actionReactor.dosome("摇匀模组-夹爪Z轴电机回零", () -> canBus.stepMotorEasyMoveToZeroBlock(MId.ShakeModGripperZM, actionOvertime)); actionReactor.dosome("摇匀模组-摇匀电机回零", () -> canBus.stepMotorEasyMoveToZeroBlock(MId.ShakeModShakeM, actionOvertime)); diff --git a/src/main/java/a8k/service/app/devicedriver/ctrl/SamplesPreProcesControler.java b/src/main/java/a8k/service/app/devicedriver/ctrl/TubePreProcesControler.java similarity index 72% rename from src/main/java/a8k/service/app/devicedriver/ctrl/SamplesPreProcesControler.java rename to src/main/java/a8k/service/app/devicedriver/ctrl/TubePreProcesControler.java index f1851a8..8ec3050 100644 --- a/src/main/java/a8k/service/app/devicedriver/ctrl/SamplesPreProcesControler.java +++ b/src/main/java/a8k/service/app/devicedriver/ctrl/TubePreProcesControler.java @@ -3,6 +3,8 @@ package a8k.service.app.devicedriver.ctrl; import a8k.extapi_controler.pagecontrol.ExtApiTabConfig; import a8k.extapi_controler.utils.ExtApiFn; import a8k.extapi_controler.utils.ExtApiTab; +import a8k.service.app.devicedriver.basectrl.MiniServoControler; +import a8k.service.app.devicedriver.basectrl.type.MiniServoMid; import a8k.type.exception.AppException; import a8k.hardware.A8kCanBusService; import a8k.hardware.type.a8kcanprotocol.A8kEcode; @@ -18,9 +20,9 @@ import org.springframework.stereotype.Component; @Component -@ExtApiTab(cfg = ExtApiTabConfig.SamplesPreProcesCtrl) -public class SamplesPreProcesControler { - static Logger logger = LoggerFactory.getLogger(SamplesPreProcesControler.class); +@ExtApiTab(cfg = ExtApiTabConfig.TubePreProcesControler) +public class TubePreProcesControler { + static Logger logger = LoggerFactory.getLogger(TubePreProcesControler.class); static class ORDER { @@ -43,13 +45,15 @@ public class SamplesPreProcesControler { @Resource DebugParam dp; + @Resource + MiniServoControler miniServoControler; // ++++++++++++++++++++++++++++++++++++++++++++++++++++++ // PRIVATE // ++++++++++++++++++++++++++++++++++++++++++++++++++++++ private void modGroupMoveToZero() throws AppException { - canBus.miniServoMoveToBlock(MId.ShakeModGripperSV, pp.getGripperClosePos(), timep.getActionOvertime()); - canBus.miniServoMoveToBlock(MId.ShakeModGripperYSV, pp.getGripperZeroYPos(), timep.getActionOvertime()); + miniServoControler.miniServoMoveToBlock(MiniServoMid.ShakeModGripperSV, pp.getGripperClosePos(), timep.getActionOvertime()); + miniServoControler.miniServoMoveToBlock(MiniServoMid.ShakeModGripperYSV, pp.getGripperZeroYPos(), timep.getActionOvertime()); canBus.stepMotorEasyMoveToZeroBlock(MId.ShakeModClampingM, timep.getActionOvertime()); canBus.stepMotorEasyMoveToZeroBlock(MId.ShakeModGripperZM, timep.getActionOvertime()); canBus.stepMotorEasyMoveToZeroBlock(MId.ShakeModShakeM, timep.getActionOvertime()); @@ -100,9 +104,9 @@ public class SamplesPreProcesControler { void tryClampTube() throws AppException { - canBus.miniServoMoveToBlock(MId.ShakeModGripperSV, pp.getGripperTakeCapPos() - 20, timep.getActionOvertime()); - canBus.miniServoMoveToBlock(MId.ShakeModGripperSV, pp.getGripperTakeCapPos(), timep.getActionOvertime()); - canBus.miniServoMoveToBlock(MId.ShakeModGripperSV, pp.getGripperTakeCapPos() - 20, timep.getActionOvertime()); + miniServoControler.miniServoMoveToBlock(MiniServoMid.ShakeModGripperSV, pp.getGripperTakeCapPos() - 20, timep.getActionOvertime()); + miniServoControler.miniServoMoveToBlock(MiniServoMid.ShakeModGripperSV, pp.getGripperTakeCapPos(), timep.getActionOvertime()); + miniServoControler.miniServoMoveToBlock(MiniServoMid.ShakeModGripperSV, pp.getGripperTakeCapPos() - 20, timep.getActionOvertime()); } /** @@ -122,12 +126,12 @@ public class SamplesPreProcesControler { } //Y轴在零点附近 - if (!ZEQ.IntEq(canBus.miniServoReadPos(MId.ShakeModGripperYSV), pp.getGripperZeroYPos(), 30)) { + if (!ZEQ.IntEq(miniServoControler.miniServoReadPos(MiniServoMid.ShakeModGripperYSV), pp.getGripperZeroYPos(), 30)) { throw new AppException(A8kEcode.CODEERROR_MOTOR_NOT_IN_ZERO_POS, MId.ShakeModGripperYSV); } //夹爪没有零位置 - if (!ZEQ.IntEq(canBus.miniServoReadPos(MId.ShakeModGripperSV), pp.getGripperClosePos(), 30)) { + if (!ZEQ.IntEq(miniServoControler.miniServoReadPos(MiniServoMid.ShakeModGripperSV), pp.getGripperClosePos(), 30)) { throw new AppException(A8kEcode.CODEERROR_MOTOR_NOT_IN_ZERO_POS, MId.ShakeModGripperSV); } @@ -143,31 +147,31 @@ public class SamplesPreProcesControler { Integer gripperShakeZPos = pp.getGripperShakeTubeZPos(); //固定试管架 - canBus.miniServoMoveToBlock(MId.ShakeModTubeScanerClampingSV, 900, timep.getActionOvertime()); + miniServoControler.miniServoMoveToBlock(MiniServoMid.ShakeModTubeScanerClampingSV, 900, timep.getActionOvertime()); //试管夹紧移动到终点位置 canBus.stepMotorEasyMoveToBlock(MId.ShakeModClampingM, 70, timep.getActionOvertime()); //试管摇匀移动到90度 canBus.stepMotorEasyMoveToBlock(MId.ShakeModShakeM, pp.getShakeModShakeMStandbyPos(), timep.getActionOvertime()); //Y轴向前移动 - canBus.miniServoMoveToBlock(MId.ShakeModGripperYSV, pp.getGripperTakeTubeYPos(), timep.getActionOvertime()); + miniServoControler.miniServoMoveToBlock(MiniServoMid.ShakeModGripperYSV, pp.getGripperTakeTubeYPos(), timep.getActionOvertime()); //打开夹爪 - canBus.miniServoMoveToBlock(MId.ShakeModGripperSV, pp.getGripperOpenPos(), timep.getActionOvertime()); + miniServoControler.miniServoMoveToBlock(MiniServoMid.ShakeModGripperSV, pp.getGripperOpenPos(), timep.getActionOvertime()); // //Z轴下移动到试管帽有无检测位 // canBus.stepMotorEasyMoveToBlock(MId.ShakeModGripperZM, gripperJudgeCapZPos, timep.getActionOvertime()); // 闭合夹爪检测试管帽是否存在 - // canBus.miniServoRotateWithTorque(MId.ShakeModGripperSV, -400); + // miniServoControler.miniServoRotateWithTorque(MiniServoMid.ShakeModGripperSV, -400); // Thread.sleep(timep.getTubeCapJudgeDelayTime()); - // if (ZEQ.IntEq(canBus.miniServoReadPos(MId.ShakeModGripperSV), pp.getGripperClosePos(), 30)) { + // if (ZEQ.IntEq(miniServoControler.miniServoReadPos(MiniServoMid.ShakeModGripperSV), pp.getGripperClosePos(), 30)) { // logger.info("试管帽不存在"); // tubeCapExist = false; // } if (dp.getDebugMode() || tubeCapExist) { //打开夹爪 - canBus.miniServoMoveToBlock(MId.ShakeModGripperSV, pp.getGripperOpenPos(), timep.getActionOvertime()); + miniServoControler.miniServoMoveToBlock(MiniServoMid.ShakeModGripperSV, pp.getGripperOpenPos(), timep.getActionOvertime()); //Z轴下移动到取试管位置 canBus.stepMotorEasyMoveToBlock(MId.ShakeModGripperZM, gripperTakeTubeZPos, timep.getActionOvertime()); //夹爪夹紧 - canBus.miniServoMoveToBlock(MId.ShakeModGripperSV, pp.getGripperTakeCapPos(), timep.getActionOvertime()); + miniServoControler.miniServoMoveToBlock(MiniServoMid.ShakeModGripperSV, pp.getGripperTakeCapPos(), timep.getActionOvertime()); canBus.stepMotorEasyMoveToBlock(MId.ShakeModGripperZM, gripperTakeTubeZPos - 100, timep.getActionOvertime()); tryClampTube(); @@ -175,20 +179,20 @@ public class SamplesPreProcesControler { canBus.stepMotorEasyMoveToZeroPointQuickBlock(MId.ShakeModGripperZM, timep.getActionOvertime()); //夹爪夹紧 //Y轴移动到摇匀位 - canBus.miniServoMoveToBlock(MId.ShakeModGripperYSV, pp.getGripperShakeYPos() - 50, timep.getActionOvertime()); //该动作是为了消除齿轮间隙 - canBus.miniServoMoveToBlock(MId.ShakeModGripperYSV, pp.getGripperShakeYPos(), timep.getActionOvertime()); + miniServoControler.miniServoMoveToBlock(MiniServoMid.ShakeModGripperYSV, pp.getGripperShakeYPos() - 50, timep.getActionOvertime()); //该动作是为了消除齿轮间隙 + miniServoControler.miniServoMoveToBlock(MiniServoMid.ShakeModGripperYSV, pp.getGripperShakeYPos(), timep.getActionOvertime()); //Z轴下移动到摇匀位放试管的位置 canBus.stepMotorEasyMoveToBlock(MId.ShakeModGripperZM, gripperShakeZPos, timep.getActionOvertime()); //夹紧试管 canBus.stepMotorEasyMoveToBlock(MId.ShakeModClampingM, pp.getShakeClampingPos(), timep.getActionOvertime()); //松开夹爪,放置试管 - canBus.miniServoMoveToBlock(MId.ShakeModGripperSV, pp.getGripperOpenPos(), timep.getActionOvertime()); + miniServoControler.miniServoMoveToBlock(MiniServoMid.ShakeModGripperSV, pp.getGripperOpenPos(), timep.getActionOvertime()); //Z轴上移动到零位 canBus.stepMotorEasyMoveToZeroPointQuickBlock(MId.ShakeModGripperZM, timep.getActionOvertime()); //Z轴归零,校准一次位置 canBus.stepMotorEasyMoveToZeroBlock(MId.ShakeModGripperZM, timep.getActionOvertime()); //Y轴移动到零位 - canBus.miniServoMoveToBlock(MId.ShakeModGripperYSV, pp.getGripperZeroYPos(), timep.getActionOvertime()); + miniServoControler.miniServoMoveToBlock(MiniServoMid.ShakeModGripperYSV, pp.getGripperZeroYPos(), timep.getActionOvertime()); } else { modGroupMoveToZeroQuick(); } @@ -207,20 +211,20 @@ public class SamplesPreProcesControler { @ExtApiFn(name = "取试管帽", group = "单步", order = ORDER.takeTubeCap) public void takeTubeCap() throws AppException { //Y移动到取试管帽位置 - canBus.miniServoMoveToBlock(MId.ShakeModGripperYSV, pp.getGripperShakeYPos(), timep.getActionOvertime()); - canBus.miniServoMoveToBlock(MId.ShakeModGripperSV, pp.getGripperOpenPos(), timep.getActionOvertime()); + miniServoControler.miniServoMoveToBlock(MiniServoMid.ShakeModGripperYSV, pp.getGripperShakeYPos(), timep.getActionOvertime()); + miniServoControler.miniServoMoveToBlock(MiniServoMid.ShakeModGripperSV, pp.getGripperOpenPos(), timep.getActionOvertime()); //Z下移动到取试管帽位置 canBus.stepMotorEasyMoveToBlock(MId.ShakeModGripperZM, pp.getGripperTakeCapZPos() + 3, timep.getActionOvertime()); //闭合夹爪 - canBus.miniServoMoveToBlock(MId.ShakeModGripperSV, pp.getGripperTakeCapPos(), timep.getActionOvertime()); + miniServoControler.miniServoMoveToBlock(MiniServoMid.ShakeModGripperSV, pp.getGripperTakeCapPos(), timep.getActionOvertime()); //Z上移动到零位 canBus.stepMotorEasyMoveToZeroPointQuickBlock(MId.ShakeModGripperZM, timep.getActionOvertime()); // tryClampTube(); - // canBus.miniServoMoveToBlock(MId.ShakeModGripperSV, pp.getGripperTakeCapPos()-30, timep.getActionOvertime()); + // miniServoControler.miniServoMoveToBlock(MiniServoMid.ShakeModGripperSV, pp.getGripperTakeCapPos()-30, timep.getActionOvertime()); //Y移动到待机位 - canBus.miniServoMoveToBlock(MId.ShakeModGripperYSV, pp.getGripperZeroYPos(), timep.getActionOvertime()); + miniServoControler.miniServoMoveToBlock(MiniServoMid.ShakeModGripperYSV, pp.getGripperZeroYPos(), timep.getActionOvertime()); } /** @@ -229,7 +233,7 @@ public class SamplesPreProcesControler { @ExtApiFn(name = "盖试管帽并放回试管架", group = "单步", order = ORDER.pushBackTubeCapAndTakeBakTube) public void pushBackTubeCapAndTakeBakTube() throws AppException { //移动Y轴到取试管帽位置 - canBus.miniServoMoveToBlock(MId.ShakeModGripperYSV, pp.getGripperShakeYPos(), timep.getActionOvertime()); + miniServoControler.miniServoMoveToBlock(MiniServoMid.ShakeModGripperYSV, pp.getGripperShakeYPos(), timep.getActionOvertime()); //移动Z轴盖帽 canBus.stepMotorEasyMoveToBlock(MId.ShakeModGripperZM, pp.getGripperTakeCapZPos() + 20, timep.getActionOvertime()); //打开试管夹 @@ -241,11 +245,11 @@ public class SamplesPreProcesControler { //移动Y轴到方式管的位置 - canBus.miniServoMoveToBlock(MId.ShakeModGripperYSV, pp.getGripperTakeTubeYPos(), timep.getActionOvertime()); + miniServoControler.miniServoMoveToBlock(MiniServoMid.ShakeModGripperYSV, pp.getGripperTakeTubeYPos(), timep.getActionOvertime()); //移动Z轴到取试管位置 canBus.stepMotorEasyMoveToBlock(MId.ShakeModGripperZM, pp.getGripperTakeHTubeZPos() - 20, timep.getActionOvertime()); //打开夹爪 - canBus.miniServoMoveToBlock(MId.ShakeModGripperSV, pp.getGripperOpenPos(), timep.getActionOvertime()); + miniServoControler.miniServoMoveToBlock(MiniServoMid.ShakeModGripperSV, pp.getGripperOpenPos(), timep.getActionOvertime()); //Z轴上移动到零位 canBus.stepMotorEasyMoveToZeroPointQuickBlock(MId.ShakeModGripperZM, timep.getActionOvertime()); //设备快速归零 diff --git a/src/main/java/a8k/service/app/devicedriver/ctrl/TubeHolderScanerControler.java b/src/main/java/a8k/service/app/devicedriver/ctrl/TubeScanerControler.java similarity index 93% rename from src/main/java/a8k/service/app/devicedriver/ctrl/TubeHolderScanerControler.java rename to src/main/java/a8k/service/app/devicedriver/ctrl/TubeScanerControler.java index 6dfe0f3..707ba83 100644 --- a/src/main/java/a8k/service/app/devicedriver/ctrl/TubeHolderScanerControler.java +++ b/src/main/java/a8k/service/app/devicedriver/ctrl/TubeScanerControler.java @@ -5,8 +5,10 @@ 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.TubeTransportControler; -import a8k.service.app.devicedriver.pos.TubeTransportPosMgr; +import a8k.service.app.devicedriver.basectrl.type.MiniServoMid; +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; @@ -24,9 +26,9 @@ import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; @Component -@ExtApiTab(cfg = ExtApiTabConfig.TubeHolderScanerControler) -public class TubeHolderScanerControler { - static Logger logger = LoggerFactory.getLogger(TubeHolderScanerControler.class); +@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; @@ -43,15 +45,17 @@ public class TubeHolderScanerControler { @Resource AppEventBusService ebus; @Resource - A8kCanBusService canBus; + A8kCanBusService canBus; @Resource - TubeTransportPosMgr stp; + TubeScanPosMgr stp; @Resource - TubeHolderParamMgr tubeHolderParamMgr; + TubeHolderParamMgr tubeHolderParamMgr; @Resource CodeScaner codeScaner; @Resource TubeTransportControler tubeTransportControler; + @Resource + MiniServoControler miniServoControler; private Boolean isTubeExist() throws AppException { @@ -207,7 +211,7 @@ public class TubeHolderScanerControler { tubeTransportControler.scanClampModClamp(); canBus.codeScanerStartScan(MId.FeedingModScannerMod); - canBus.miniServoRotateWithTorque(MId.ShakeModTubeScanerClampingSV, stp.getTubeScanServoTorque()); + miniServoControler.miniServoRotateWithTorque(MiniServoMid.ShakeModTubeScanerClampingSV, stp.getTubeScanServoTorque()); return codeScaner.feedingModScannerModCodeScannerScanCode(scanOvertime); } finally { canBus.moduleStop(MId.ShakeModTubeScanerClampingSV); diff --git a/src/main/java/a8k/service/app/devicedriver/pos/TubePreProcesPosMgr.java b/src/main/java/a8k/service/app/devicedriver/pos/TubePreProcesPosMgr.java new file mode 100644 index 0000000..548eca5 --- /dev/null +++ b/src/main/java/a8k/service/app/devicedriver/pos/TubePreProcesPosMgr.java @@ -0,0 +1,186 @@ +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 TubePreProcesPosMgr { + static final Logger logger = LoggerFactory.getLogger(TubeScanPosMgr.class); + + public enum POS { + GripperServoOpenPos("抓手张开位置"),// + GripperServoClosePos("抓手闭合位置"),// + GripperServoTakeCapPos("抓手取试管位置"),// + YServoTakeTubePos("取试管位置"),// + YServoShakePos("摇匀位置"),// + YServoZeroYPos("待机位"),// + ZMotorTakeHTubePos("取高试管位置"),// + ZMotorTakeSTubePos("取低试管位置"),// + ZMotorJudgeHTubeCapPos("高试管帽有无判断位"),// + ZMotorJudgeSTubeCapPos("低试管帽有无判断位"),// + ZMotorShakeTubePos("摇匀放置位置"),// + ZMotorTakeCapPos("取试管帽位"),// + ShakeClampMotorClampPos("试管夹紧位"),// + ShakeClampMotorReleasePos("摇匀臂"),// + ; + public final String chName; + + POS(String chName) { + this.chName = chName; + } + } + + ; + + @Resource + LowerDeviceParameterDBService lowerDeviceParameterDBService; + + PosParameterReader posReader = null; + Integer nowParaVersion = 0; + + @PostConstruct + void initialize() { + posReader = lowerDeviceParameterDBService.getReader(this.getClass()); + Integer paraVersion = posReader.getVersion(); + if (!nowParaVersion.equals(paraVersion)) { + logger.info("init param"); + posReader.setVersion(nowParaVersion); + posReader.updatePos(POS.GripperServoOpenPos, 450); + posReader.updatePos(POS.GripperServoClosePos, 310); + posReader.updatePos(POS.GripperServoTakeCapPos, 355); + posReader.updatePos(POS.YServoTakeTubePos, 3080); + posReader.updatePos(POS.YServoShakePos, 2130); + posReader.updatePos(POS.YServoZeroYPos, 300); + posReader.updatePos(POS.ZMotorTakeHTubePos, 739); + posReader.updatePos(POS.ZMotorTakeSTubePos, 983); + posReader.updatePos(POS.ZMotorJudgeHTubeCapPos, 591); + posReader.updatePos(POS.ZMotorJudgeSTubeCapPos, 867); + posReader.updatePos(POS.ZMotorShakeTubePos, 835); + posReader.updatePos(POS.ZMotorTakeCapPos, 835); + posReader.updatePos(POS.ShakeClampMotorClampPos, 10); + posReader.updatePos(POS.ShakeClampMotorReleasePos, 90); + } + } + + + public Integer getParam(POS pos) { + return posReader.getPos(pos, Integer.class); + } + + public Integer getGripperServoOpenPos() { + return getParam(POS.GripperServoOpenPos); + } + + public void setGripperServoOpenPos(Integer value) { + posReader.updatePos(POS.GripperServoOpenPos, value); + } + + public Integer getGripperServoClosePos() { + return getParam(POS.GripperServoClosePos); + } + + public void setGripperServoClosePos(Integer value) { + posReader.updatePos(POS.GripperServoClosePos, value); + } + + public Integer getGripperServoTakeCapPos() { + return getParam(POS.GripperServoTakeCapPos); + } + + public void setGripperServoTakeCapPos(Integer value) { + posReader.updatePos(POS.GripperServoTakeCapPos, value); + } + + public Integer getYServoTakeTubePos() { + return getParam(POS.YServoTakeTubePos); + } + + public void setYServoTakeTubePos(Integer value) { + posReader.updatePos(POS.YServoTakeTubePos, value); + } + + public Integer getYServoShakePos() { + return getParam(POS.YServoShakePos); + } + + public void setYServoShakePos(Integer value) { + posReader.updatePos(POS.YServoShakePos, value); + } + + public Integer getYServoZeroYPos() { + return getParam(POS.YServoZeroYPos); + } + + public void setYServoZeroYPos(Integer value) { + posReader.updatePos(POS.YServoZeroYPos, value); + } + + public Integer getZMotorTakeHTubePos() { + return getParam(POS.ZMotorTakeHTubePos); + } + + public void setZMotorTakeHTubePos(Integer value) { + posReader.updatePos(POS.ZMotorTakeHTubePos, value); + } + + public Integer getZMotorTakeSTubePos() { + return getParam(POS.ZMotorTakeSTubePos); + } + + public void setZMotorTakeSTubePos(Integer value) { + posReader.updatePos(POS.ZMotorTakeSTubePos, value); + } + + public Integer getZMotorJudgeHTubeCapPos() { + return getParam(POS.ZMotorJudgeHTubeCapPos); + } + + public void setZMotorJudgeHTubeCapPos(Integer value) { + posReader.updatePos(POS.ZMotorJudgeHTubeCapPos, value); + } + + public Integer getZMotorJudgeSTubeCapPos() { + return getParam(POS.ZMotorJudgeSTubeCapPos); + } + + public void setZMotorJudgeSTubeCapPos(Integer value) { + posReader.updatePos(POS.ZMotorJudgeSTubeCapPos, value); + } + + public Integer getZMotorShakeTubePos() { + return getParam(POS.ZMotorShakeTubePos); + } + + public void setZMotorShakeTubePos(Integer value) { + posReader.updatePos(POS.ZMotorShakeTubePos, value); + } + + public Integer getZMotorTakeCapPos() { + return getParam(POS.ZMotorTakeCapPos); + } + + public void setZMotorTakeCapPos(Integer value) { + posReader.updatePos(POS.ZMotorTakeCapPos, value); + } + + public Integer getShakeClampMotorClampPos() { + return getParam(POS.ShakeClampMotorClampPos); + } + + public void setShakeClampMotorClampPos(Integer value) { + posReader.updatePos(POS.ShakeClampMotorClampPos, value); + } + + public Integer getShakeClampMotorReleasePos() { + return getParam(POS.ShakeClampMotorReleasePos); + } + + public void setShakeClampMotorReleasePos(Integer value) { + posReader.updatePos(POS.ShakeClampMotorReleasePos, value); + } +} diff --git a/src/main/java/a8k/service/app/devicedriver/pos/TubeTransportPosMgr.java b/src/main/java/a8k/service/app/devicedriver/pos/TubeScanPosMgr.java similarity index 96% rename from src/main/java/a8k/service/app/devicedriver/pos/TubeTransportPosMgr.java rename to src/main/java/a8k/service/app/devicedriver/pos/TubeScanPosMgr.java index a1325b9..102539f 100644 --- a/src/main/java/a8k/service/app/devicedriver/pos/TubeTransportPosMgr.java +++ b/src/main/java/a8k/service/app/devicedriver/pos/TubeScanPosMgr.java @@ -10,8 +10,8 @@ import org.springframework.stereotype.Component; @Component -public class TubeTransportPosMgr { - static final Logger logger = LoggerFactory.getLogger(TubeTransportPosMgr.class); +public class TubeScanPosMgr { + static final Logger logger = LoggerFactory.getLogger(TubeScanPosMgr.class); public final Integer ScanerClampingSVReleasePos = 100; public final Integer ScanerClampingSVClampingPos = 1000; 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 afb05e3..f6919b3 100644 --- a/src/main/java/a8k/service/app/devicedriver/testscript/TestScript.java +++ b/src/main/java/a8k/service/app/devicedriver/testscript/TestScript.java @@ -7,8 +7,8 @@ import a8k.extapi_controler.utils.ExtApiTab; import a8k.type.ConsumableGroup; import a8k.type.exception.AppException; import a8k.type.IncubatorPos; -import a8k.service.app.devicedriver.ctrl.SamplesPreProcesControler; -import a8k.service.app.devicedriver.ctrl.TubeHolderScanerControler; +import a8k.service.app.devicedriver.ctrl.TubePreProcesControler; +import a8k.service.app.devicedriver.ctrl.TubeScanerControler; import a8k.hardware.A8kCanBusService; import a8k.hardware.type.a8kcanprotocol.A8kEcode; import a8k.service.app.devicedriver.basectrl.HbotBaseMoveControler; @@ -58,10 +58,10 @@ public class TestScript { ReactionPlatesTransmitCtrl reactionPlatesTransmitCtrl; @Resource - SamplesPreProcesControler samplesPreProcesControler; + TubePreProcesControler tubePreProcesControler; @Resource - TubeHolderScanerControler tubeHolderScanerControler; + TubeScanerControler tubeScanerControler; EnginnerParamReader settingReader = new EnginnerParamReader(HbotBaseMoveControler.class);