From 9b61495c309a9b9111dc992508b94cbf04bebe54 Mon Sep 17 00:00:00 2001 From: zhaohe Date: Fri, 18 Oct 2024 12:19:22 +0800 Subject: [PATCH] update --- app.db | Bin 225280 -> 225280 bytes .../MiniServoReferencePointSetting.java | 65 ------------ ...ReactionPlatesTransmitControlerCalibration.java | 33 +++--- .../TubeFeedingModulePosCalibration.java | 26 +++-- .../calibration/TubePreProcesPosCalibration.java | 65 ++++++------ .../ctrlservice/DeviceInitCtrlService.java | 10 +- .../ctrlservice/TubePreProcesCtrlService.java | 28 ++--- .../ctrlservice/TubeTubeFeedingCtrlService.java | 8 +- .../app/devicectrl/driver/MiniServoDriver.java | 113 +++++++++++++++++++++ .../app/devicectrl/exdriver/MiniServoExDriver.java | 113 --------------------- .../devicectrl/exdriver/MotorEnableExDriver.java | 40 +++++++- .../devicectrl/exdriver/TubeTransportExDriver.java | 13 +-- .../init/MiniServoReferencePointIniter.java | 65 ++++++++++++ 13 files changed, 301 insertions(+), 278 deletions(-) delete mode 100644 src/main/java/a8k/service/app/devicectrl/calibration/MiniServoReferencePointSetting.java create mode 100644 src/main/java/a8k/service/app/devicectrl/driver/MiniServoDriver.java delete mode 100644 src/main/java/a8k/service/app/devicectrl/exdriver/MiniServoExDriver.java create mode 100644 src/main/java/a8k/service/app/devicectrl/init/MiniServoReferencePointIniter.java diff --git a/app.db b/app.db index 1628400f63ffe5ba05c4c83e6d2684d0abd1f235..7015d9a21e6623217f10ab399cfca43224ad1d9b 100644 GIT binary patch delta 5835 zcmb7|4N#N!9mk)4LP&tT;2RPNf;zzZf=?16MM%*k2r6h0oFKLsAZjcm7?RdGFtoG$ zWwsSB&Zo1ra~`WsE44y>f7$MKyKT35zO-Anop;)j1WrM>>t1fHy5IBs6AkhNq9-{n zd_TX}|9kswS^I5SSIUGoilTDiXCeHgQtUQ5IoKn;%;^imhb@GJX35oxarB>o~Vk!?}C@-mVxQq^ai@V8E*Jw3c zoR%i$>USua+3*leVH6LMOtS)4gIG;bMLgoNP0mt_bCcCjQBh%OYHqZyGdo&XSe3dK zR{>|Fs1-aMbN?Zl%Je)$nW-!BTF~h!sxX2sh576un#j##rYFugeH+Cjdh)215M6lnIya_>=dpQW(bA^=LAl{9CQo4k7|*Ux(O~r|FS~A z6yaH7N}o?rb1U6-R&hH1hqKc1s}c`r**|#vJ>s8O z$;0VjJ808RTZ^!ZPpBJ=_eRsxtB$(g&ckwtv?y#L^pAcB*} zBw99e#9P03LKyH=F{PdlGk#UGtIW~h4z4^ckWS)K_^zVfVy|#noGu`}iLJ`{2AmX; zsC)*f^iF6^PR_?ufPiw(9qEJF@E5^UkH7P{f6pG@<+uDFoQEuQcrr1cF;dJ16tr%2 zvPFY<`p+JQM0^Lk{D<%&JPEkD(9_YJ8A@e^$pMQan}&aPCt!j1djRXN;U?INcp?;T z7SQHKi_6+#aBKr1H;>uAx?46E*&C`@_T8iYgB`wICm~egSc@kBnnFS zb8rQggBS{|X9Y{G)&>}YVa*JYY%AHBQR#4Qbz8k#cO<7T$1;NE^P}D?wxnEI9rSj1 zr>}cwpsRz#Sc;{z=|{u3cSVQgOgH&_irJS=9u z^B;xtCL9kutj7^z52j7CLzwLyt@iCXLoy+Qj)YN+<473Xy7X-IbWaLj;%IEJIzz^S zc0N2EZt5j0A*Q&lWruZ*z(w0^E;bT&&hGyyabJkVz(DgjCWd9ah1-%eKA5E;O#zOD zEmRrYmo+A%qru7s5*nbe?;9#~O!+NAa+a7LG605V58J z3&t0#S+O#+0Hg7>G-r4=t;ZCIVZw2T6rN(hc>=28-Rn-Ct`K{v zuKxn;tH%R}-XMby>hpu>_#9r|12x+godGSc0Vw0^(eWBSeqIlh_O<8?sJ+>*CoR@@ zxTBNPeExdqGxqP0_ofXFfojS_DK08rR?LKkVe=P_R5704GgC4&II8?))=dNpUS?u*zQ?>uy!~V~92ReT_(04R&U}rVi0gZUo^H`~RVr337 zQ$@_w;FVwo?nxDV_n$jPVG@&Q5K5Sn2BDH!We~=v*5I;n2uV&YO|vPp)GPo>#{;xs zfHEtm|Lid`S!?i$aZsks7>e$qk&ABm*u-=$l`Kt|k7Z*MNfJ6dJmwRVFkZV1mjDHO zSfqhQ1}Hbuik%L3GmN&!CZQ6*;^zdbm{*E~%DnY>DS(9(Rn5~WcDz07Q5TB(*Gq+} ztc6b!UXP0+8)9T2W;j9@MwrGRb_Iz{2+#}}ezM2Oljhla?8n6~0jh)=t?9xoY# z_%BPSON5yXCcGGQ&^H}_6)SDcT)Q;2?5WcVr^@QU#~*707j{-IGe4buCR`ZVjQ7Ll zB-02gIN6HvOF+Srv1B~w!TD1*h^Bc=SRdIJR5cW`dPK;Y(IFQ+ryA z8QVtkhy$w~c?0>!U6jQ1-9?$IQoImkaQo-FJzAzT6a-Ek>%V-39IRi0tH1xynb5+g z0~TIdULNfNT5f>roeM5LG?PArrZa8#P%^z5=Kumv1>CdRNO$3gSx5fHY`KThW`^8p zBf4WI4V8CfG&l<$2jHfd!4`O_E&Osn;sIvF`wPwlh<)qf zhhU|FaSm?~uojYmvmR%_yHYtt8QCg7eGwFgrbEFEK?Y;?p_H^G_hnuQ)wEc_aCrpqjBPWwN)_NT)D delta 488 zcmZp8z}xVEcY?Ga0}z-4u^A96F);8oS{;Dn;Uwg-$X0uo$2c?|r^_IOZ7P~jw7q+=<(QFc|=UKa1O<3-*)U)U^ zKV|Ii(Z=+ z`{am1T^6S{P4>y1g^nx?4D39U&lSe7#I&iiPwuS?6lr-rq3y}u-sgMQ#kQ%jGguo+ ztJ_aLkR?5tFH1?;;Kll>&(|${x^~9XIV+xaEO|C;^^B*xmLY2jZBqeiQkPb@1Y6KmB`5l{e>=pAXPv8`_4h*z-&|1c&%`J*Ij>T7 kvq|v@rfm stepMotorCtrlDriver.stepMotorEasyMoveToZeroBlock(StepMotorMId.FeedingModXM, actionOvertime)); - actionReactor.dosome("摇匀模组-扫码夹紧舵机回零", () -> miniServoExDriver.miniServoMoveToZeroBlock(MiniServoMId.ShakeModTubeScanerClampingSV)); - actionReactor.dosome("摇匀模组-夹爪舵机回零", () -> miniServoExDriver.miniServoMoveToZeroBlock(MiniServoMId.ShakeModGripperSV)); - actionReactor.dosome("摇匀模组-夹爪Y轴舵机回零", () -> miniServoExDriver.miniServoMoveToZeroBlock(MiniServoMId.ShakeModGripperYSV)); + actionReactor.dosome("摇匀模组-扫码夹紧舵机回零", () -> miniServoDriver.miniServoMoveToZeroBlock(MiniServoMId.ShakeModTubeScanerClampingSV)); + actionReactor.dosome("摇匀模组-夹爪舵机回零", () -> miniServoDriver.miniServoMoveToZeroBlock(MiniServoMId.ShakeModGripperSV)); + actionReactor.dosome("摇匀模组-夹爪Y轴舵机回零", () -> miniServoDriver.miniServoMoveToZeroBlock(MiniServoMId.ShakeModGripperYSV)); actionReactor.dosome("摇匀模组-夹紧电机回零", () -> stepMotorCtrlDriver.stepMotorEasyMoveToZeroBlock(StepMotorMId.ShakeModClampingM, actionOvertime)); actionReactor.dosome("摇匀模组-夹爪Z轴电机回零", () -> stepMotorCtrlDriver.stepMotorEasyMoveToZeroBlock(StepMotorMId.ShakeModGripperZM, actionOvertime)); actionReactor.dosome("摇匀模组-摇匀电机回零", () -> stepMotorCtrlDriver.stepMotorEasyMoveToZeroBlock(StepMotorMId.ShakeModShakeM, actionOvertime)); diff --git a/src/main/java/a8k/service/app/devicectrl/ctrlservice/TubePreProcesCtrlService.java b/src/main/java/a8k/service/app/devicectrl/ctrlservice/TubePreProcesCtrlService.java index bef1a3b..ac58740 100644 --- a/src/main/java/a8k/service/app/devicectrl/ctrlservice/TubePreProcesCtrlService.java +++ b/src/main/java/a8k/service/app/devicectrl/ctrlservice/TubePreProcesCtrlService.java @@ -4,7 +4,7 @@ import a8k.constant.MiniServoConstant; import a8k.extapi_controler.pagecontrol.ExtApiTabConfig; import a8k.extapi_controler.utils.ExtApiFn; import a8k.extapi_controler.utils.ExtApiTab; -import a8k.service.app.devicectrl.exdriver.MiniServoExDriver; +import a8k.service.app.devicectrl.driver.MiniServoDriver; import a8k.service.app.devicectrl.driver.StepMotorCtrlDriver; import a8k.service.app.devicectrl.driver.type.MiniServoMId; import a8k.service.app.devicectrl.driver.type.StepMotorMId; @@ -43,7 +43,7 @@ public class TubePreProcesCtrlService { @Resource TubePreProcesPosParamMgr tubePreProcesPosParamMgr; @Resource - MiniServoExDriver miniServoExDriver; + MiniServoDriver miniServoDriver; @Resource StepMotorCtrlDriver stepMotorCtrlDriver; // ++++++++++++++++++++++++++++++++++++++++++++++++++++++ @@ -51,8 +51,8 @@ public class TubePreProcesCtrlService { // ++++++++++++++++++++++++++++++++++++++++++++++++++++++ private void modGroupMoveToZero() throws AppException { - miniServoExDriver.miniServoMoveToZeroBlock(MiniServoMId.ShakeModGripperSV); - miniServoExDriver.miniServoMoveToZeroBlock(MiniServoMId.ShakeModGripperYSV); + miniServoDriver.miniServoMoveToZeroBlock(MiniServoMId.ShakeModGripperSV); + miniServoDriver.miniServoMoveToZeroBlock(MiniServoMId.ShakeModGripperYSV); stepMotorCtrlDriver.stepMotorEasyMoveToZeroBlock(StepMotorMId.ShakeModClampingM, actionOvertime); stepMotorCtrlDriver.stepMotorEasyMoveToZeroBlock(StepMotorMId.ShakeModGripperZM, actionOvertime); stepMotorCtrlDriver.stepMotorEasyMoveToZeroBlock(StepMotorMId.ShakeModShakeM, actionOvertime); @@ -81,30 +81,30 @@ public class TubePreProcesCtrlService { // Api public void gripperSVOpen() throws AppException { - miniServoExDriver.miniServoMoveToBlock(MiniServoMId.ShakeModGripperSV, tubePreProcesPosParamMgr.getGripperServoOpenPos()); + miniServoDriver.miniServoMoveToBlock(MiniServoMId.ShakeModGripperSV, tubePreProcesPosParamMgr.getGripperServoOpenPos()); } public void gripperSVCClose() throws AppException { - miniServoExDriver.miniServoMoveToBlock(MiniServoMId.ShakeModGripperSV, tubePreProcesPosParamMgr.getGripperServoClosePos()); + miniServoDriver.miniServoMoveToBlock(MiniServoMId.ShakeModGripperSV, tubePreProcesPosParamMgr.getGripperServoClosePos()); } public void gripperSVClampTube() throws AppException { - miniServoExDriver.miniServoMoveToBlock(MiniServoMId.ShakeModGripperSV, tubePreProcesPosParamMgr.getGripperServoTakeCapPos()); + miniServoDriver.miniServoMoveToBlock(MiniServoMId.ShakeModGripperSV, tubePreProcesPosParamMgr.getGripperServoTakeCapPos()); } public void YSVMoveToTakeTubePos() throws AppException { - miniServoExDriver.miniServoMoveToBlock(MiniServoMId.ShakeModGripperYSV, tubePreProcesPosParamMgr.getYServoTakeTubePos() - 100); //该动作是为了消除齿轮间隙 - miniServoExDriver.miniServoMoveToBlock(MiniServoMId.ShakeModGripperYSV, tubePreProcesPosParamMgr.getYServoTakeTubePos()); + miniServoDriver.miniServoMoveToBlock(MiniServoMId.ShakeModGripperYSV, tubePreProcesPosParamMgr.getYServoTakeTubePos() - 100); //该动作是为了消除齿轮间隙 + miniServoDriver.miniServoMoveToBlock(MiniServoMId.ShakeModGripperYSV, tubePreProcesPosParamMgr.getYServoTakeTubePos()); } public void YSVMoveToShakePos() throws AppException { - miniServoExDriver.miniServoMoveToBlock(MiniServoMId.ShakeModGripperYSV, tubePreProcesPosParamMgr.getYServoShakePos() - 100); //该动作是为了消除齿轮间隙 - miniServoExDriver.miniServoMoveToBlock(MiniServoMId.ShakeModGripperYSV, tubePreProcesPosParamMgr.getYServoShakePos()); + miniServoDriver.miniServoMoveToBlock(MiniServoMId.ShakeModGripperYSV, tubePreProcesPosParamMgr.getYServoShakePos() - 100); //该动作是为了消除齿轮间隙 + miniServoDriver.miniServoMoveToBlock(MiniServoMId.ShakeModGripperYSV, tubePreProcesPosParamMgr.getYServoShakePos()); } public void YSVMoveToStandyPos() throws AppException { - miniServoExDriver.miniServoMoveToZeroBlock(MiniServoMId.ShakeModGripperYSV); + miniServoDriver.miniServoMoveToZeroBlock(MiniServoMId.ShakeModGripperYSV); } @@ -181,12 +181,12 @@ public class TubePreProcesCtrlService { } //Y轴在零点附近 - if (!ZEQ.IntEq(miniServoExDriver.miniServoReadPos(MiniServoMId.ShakeModGripperYSV), MiniServoConstant.getZeroPos(MiniServoMId.ShakeModGripperYSV), 30)) { + if (!ZEQ.IntEq(miniServoDriver.miniServoReadPos(MiniServoMId.ShakeModGripperYSV), MiniServoConstant.getZeroPos(MiniServoMId.ShakeModGripperYSV), 30)) { throw new AppException(A8kEcode.CODEERROR_MOTOR_NOT_IN_ZERO_POS, MId.ShakeModGripperYSV); } //夹爪没有零位置 - if (!ZEQ.IntEq(miniServoExDriver.miniServoReadPos(MiniServoMId.ShakeModGripperSV), MiniServoConstant.getZeroPos(MiniServoMId.ShakeModGripperSV), 30)) { + if (!ZEQ.IntEq(miniServoDriver.miniServoReadPos(MiniServoMId.ShakeModGripperSV), MiniServoConstant.getZeroPos(MiniServoMId.ShakeModGripperSV), 30)) { throw new AppException(A8kEcode.CODEERROR_MOTOR_NOT_IN_ZERO_POS, MId.ShakeModGripperSV); } diff --git a/src/main/java/a8k/service/app/devicectrl/ctrlservice/TubeTubeFeedingCtrlService.java b/src/main/java/a8k/service/app/devicectrl/ctrlservice/TubeTubeFeedingCtrlService.java index dc96a56..f31466a 100644 --- a/src/main/java/a8k/service/app/devicectrl/ctrlservice/TubeTubeFeedingCtrlService.java +++ b/src/main/java/a8k/service/app/devicectrl/ctrlservice/TubeTubeFeedingCtrlService.java @@ -5,7 +5,7 @@ import a8k.extapi_controler.pagecontrol.ExtApiTabConfig; import a8k.extapi_controler.utils.ExtApiFn; import a8k.extapi_controler.utils.ExtApiTab; import a8k.service.app.devicectrl.exdriver.CodeScanerExDriver; -import a8k.service.app.devicectrl.exdriver.MiniServoExDriver; +import a8k.service.app.devicectrl.driver.MiniServoDriver; import a8k.service.app.devicectrl.driver.StepMotorCtrlDriver; import a8k.service.app.devicectrl.exdriver.TubeTransportExDriver; import a8k.service.app.devicectrl.driver.type.MiniServoMId; @@ -54,9 +54,9 @@ public class TubeTubeFeedingCtrlService { @Resource TubeTransportExDriver tubeTransportExDriver; @Resource - MiniServoExDriver miniServoExDriver; + MiniServoDriver miniServoDriver; @Resource - StepMotorCtrlDriver stepMotorCtrlDriver; + StepMotorCtrlDriver stepMotorCtrlDriver; private Boolean isTubeExist() throws AppException { @@ -214,7 +214,7 @@ public class TubeTubeFeedingCtrlService { tubeTransportExDriver.scanClampModClamp(); canBus.codeScanerStartScan(MId.FeedingModScannerMod); - miniServoExDriver.miniServoRotateWithTorque(MiniServoMId.ShakeModTubeScanerClampingSV, stp.getTubeScanServoTorque()); + miniServoDriver.miniServoRotateWithTorque(MiniServoMId.ShakeModTubeScanerClampingSV, stp.getTubeScanServoTorque()); return codeScaner.feedingModScannerModCodeScannerScanCode(scanOvertime); } finally { canBus.moduleStop(MId.ShakeModTubeScanerClampingSV); diff --git a/src/main/java/a8k/service/app/devicectrl/driver/MiniServoDriver.java b/src/main/java/a8k/service/app/devicectrl/driver/MiniServoDriver.java new file mode 100644 index 0000000..5e9f13a --- /dev/null +++ b/src/main/java/a8k/service/app/devicectrl/driver/MiniServoDriver.java @@ -0,0 +1,113 @@ +package a8k.service.app.devicectrl.driver; + +import a8k.constant.MiniServoConstant; +import a8k.hardware.A8kCanBusService; +import a8k.hardware.type.a8kcanprotocol.A8kEcode; +import a8k.hardware.type.a8kcanprotocol.CmdId; +import a8k.hardware.type.regindex.RegIndex; +import a8k.service.app.devicectrl.driver.type.MiniServoMId; +import a8k.type.ecode.HardwareError; +import a8k.type.exception.AppException; +import jakarta.annotation.Resource; +import org.slf4j.Logger; +import org.springframework.stereotype.Component; + + +@Component +public class MiniServoDriver { + Logger logger = org.slf4j.LoggerFactory.getLogger(MiniServoDriver.class); + + @Resource + A8kCanBusService canBus; + + + public void miniServoEnable(MiniServoMId id, int enable) throws AppException { + logger.info("{} miniServoEnable {}", id.mid, enable); + 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 miniServoMoveToZeroBlock(MiniServoMId id) throws AppException { + logger.info("{} miniServoMoveToZero", id.mid); + miniServoMoveToBlock(id, MiniServoConstant.getZeroPos(id)); + } + + 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) throws AppException { + logger.info("{} miniServoMoveTo {}", id.mid, pos); + miniServoMoveTo(id, pos); + canBus.waitForMod(id.mid, MiniServoConstant.actionOvertime); + } + + public void miniServoRotate(MiniServoMId id, int direction) throws AppException { + logger.info("{} miniServoRotate {}", id.mid, direction); + canBus.callcmd(id.mid, CmdId.mini_servo_rotate, direction); + } + + public void miniServoRotateBlock(MiniServoMId id, int direction) throws AppException { + miniServoRotate(id, direction); + canBus.waitForMod(id.mid, MiniServoConstant.actionOvertime); + } + + public void miniServoRotateWithTorque(MiniServoMId id, int torque) throws AppException { + logger.info("{} miniServoRotateWithTorque {}", id.mid, torque); + canBus.callcmd(id.mid, CmdId.mini_servo_rotate_with_torque, torque); + } + + // public void miniServoRotateWithTorqueBlock(MiniServoMId id, int torque) throws AppException { + // miniServoRotateWithTorque(id, torque); + // miniServoWaitIsNotMove(id, actionOvertime); + // } + + // kmini_servo_set_cur_pos + private void miniServoSetCurPos(MiniServoMId id, Integer pos) throws AppException { + logger.info("{} miniServoSetCurPos {}", id.mid, pos); + canBus.callcmdOvertime(id.mid, CmdId.mini_servo_set_cur_pos, 5000, pos); + } + + public Integer miniServoSetRefPos(MiniServoMId id) throws AppException { + miniServoSetCurPos(id, MiniServoConstant.getRefPos(id)); + return MiniServoConstant.getRefPos(id); + } + + + 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/devicectrl/exdriver/MiniServoExDriver.java b/src/main/java/a8k/service/app/devicectrl/exdriver/MiniServoExDriver.java deleted file mode 100644 index 9ed7a9e..0000000 --- a/src/main/java/a8k/service/app/devicectrl/exdriver/MiniServoExDriver.java +++ /dev/null @@ -1,113 +0,0 @@ -package a8k.service.app.devicectrl.exdriver; - -import a8k.constant.MiniServoConstant; -import a8k.hardware.A8kCanBusService; -import a8k.hardware.type.a8kcanprotocol.A8kEcode; -import a8k.hardware.type.a8kcanprotocol.CmdId; -import a8k.hardware.type.regindex.RegIndex; -import a8k.service.app.devicectrl.driver.type.MiniServoMId; -import a8k.type.ecode.HardwareError; -import a8k.type.exception.AppException; -import jakarta.annotation.Resource; -import org.slf4j.Logger; -import org.springframework.stereotype.Component; - - -@Component -public class MiniServoExDriver { - Logger logger = org.slf4j.LoggerFactory.getLogger(MiniServoExDriver.class); - - @Resource - A8kCanBusService canBus; - - - public void miniServoEnable(MiniServoMId id, int enable) throws AppException { - logger.info("{} miniServoEnable {}", id.mid, enable); - 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 miniServoMoveToZeroBlock(MiniServoMId id) throws AppException { - logger.info("{} miniServoMoveToZero", id.mid); - miniServoMoveToBlock(id, MiniServoConstant.getZeroPos(id)); - } - - 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) throws AppException { - logger.info("{} miniServoMoveTo {}", id.mid, pos); - miniServoMoveTo(id, pos); - canBus.waitForMod(id.mid, MiniServoConstant.actionOvertime); - } - - public void miniServoRotate(MiniServoMId id, int direction) throws AppException { - logger.info("{} miniServoRotate {}", id.mid, direction); - canBus.callcmd(id.mid, CmdId.mini_servo_rotate, direction); - } - - public void miniServoRotateBlock(MiniServoMId id, int direction) throws AppException { - miniServoRotate(id, direction); - canBus.waitForMod(id.mid, MiniServoConstant.actionOvertime); - } - - public void miniServoRotateWithTorque(MiniServoMId id, int torque) throws AppException { - logger.info("{} miniServoRotateWithTorque {}", id.mid, torque); - canBus.callcmd(id.mid, CmdId.mini_servo_rotate_with_torque, torque); - } - - // public void miniServoRotateWithTorqueBlock(MiniServoMId id, int torque) throws AppException { - // miniServoRotateWithTorque(id, torque); - // miniServoWaitIsNotMove(id, actionOvertime); - // } - - // kmini_servo_set_cur_pos - private void miniServoSetCurPos(MiniServoMId id, Integer pos) throws AppException { - logger.info("{} miniServoSetCurPos {}", id.mid, pos); - canBus.callcmdOvertime(id.mid, CmdId.mini_servo_set_cur_pos, 5000, pos); - } - - public Integer miniServoSetRefPos(MiniServoMId id) throws AppException { - miniServoSetCurPos(id, MiniServoConstant.getRefPos(id)); - return MiniServoConstant.getRefPos(id); - } - - - 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/devicectrl/exdriver/MotorEnableExDriver.java b/src/main/java/a8k/service/app/devicectrl/exdriver/MotorEnableExDriver.java index a8b3262..71770fd 100644 --- a/src/main/java/a8k/service/app/devicectrl/exdriver/MotorEnableExDriver.java +++ b/src/main/java/a8k/service/app/devicectrl/exdriver/MotorEnableExDriver.java @@ -2,8 +2,12 @@ package a8k.service.app.devicectrl.exdriver; import a8k.hardware.A8kCanBusService; import a8k.service.app.devicectrl.driver.HbotDriver; +import a8k.service.app.devicectrl.driver.MiniServoDriver; import a8k.service.app.devicectrl.driver.PipetteCtrlDriver; import a8k.service.app.devicectrl.driver.StepMotorCtrlDriver; +import a8k.service.app.devicectrl.driver.type.MiniServoMId; +import a8k.service.app.devicectrl.driver.type.StepMotorMId; +import a8k.type.exception.AppException; import jakarta.annotation.Resource; import org.springframework.stereotype.Component; @@ -12,15 +16,49 @@ public class MotorEnableExDriver { @Resource - A8kCanBusService canBus; + A8kCanBusService canBus; @Resource HbotDriver hbotDriver; @Resource PipetteCtrlDriver pipetteCtrlDriver; @Resource StepMotorCtrlDriver stepMotorCtrlDriver; + @Resource + MiniServoDriver miniServoDriver; + + + public void preProcessRelatedModuleEnable(Boolean enable) throws AppException { + Integer val = enable ? 1 : 0; + miniServoDriver.miniServoEnable(MiniServoMId.ShakeModGripperSV, val); + miniServoDriver.miniServoEnable(MiniServoMId.ShakeModGripperYSV, val); + stepMotorCtrlDriver.stepMotorEnable(StepMotorMId.ShakeModClampingM, val); + stepMotorCtrlDriver.stepMotorEnable(StepMotorMId.ShakeModGripperZM, val); + stepMotorCtrlDriver.stepMotorEnable(StepMotorMId.ShakeModShakeM, val); + } + + public void tubeFeedRelatedModuleEnable(Boolean enable) throws AppException { + Integer val = enable ? 1 : 0; + stepMotorCtrlDriver.stepMotorEnable(StepMotorMId.FeedingModInfeedM, val); + stepMotorCtrlDriver.stepMotorEnable(StepMotorMId.FeedingModOutfeedM, val); + stepMotorCtrlDriver.stepMotorEnable(StepMotorMId.FeedingModXM, val); + miniServoDriver.miniServoEnable(MiniServoMId.ShakeModTubeScanerClampingSV, val); + } + + public void reactionPlatesRelateModuleEnable(Boolean enable) throws AppException { + Integer val = enable ? 1 : 0; + stepMotorCtrlDriver.stepMotorEnable(StepMotorMId.PlatesBoxPusherM, val); + stepMotorCtrlDriver.stepMotorEnable(StepMotorMId.PlatesBoxYM, val); + stepMotorCtrlDriver.stepMotorEnable(StepMotorMId.OptModPullM, val); + stepMotorCtrlDriver.stepMotorEnable(StepMotorMId.OptModScannerM, val); + stepMotorCtrlDriver.stepMotorEnable(StepMotorMId.IncubatorRotateCtrlM, val); + } + public void hbotRelateModuleEnable(Boolean enable) throws AppException { + Integer val = enable ? 1 : 0; + pipetteCtrlDriver.zMotorEnable(val); + hbotDriver.enable(val); + } } diff --git a/src/main/java/a8k/service/app/devicectrl/exdriver/TubeTransportExDriver.java b/src/main/java/a8k/service/app/devicectrl/exdriver/TubeTransportExDriver.java index a7f5fef..76e138a 100644 --- a/src/main/java/a8k/service/app/devicectrl/exdriver/TubeTransportExDriver.java +++ b/src/main/java/a8k/service/app/devicectrl/exdriver/TubeTransportExDriver.java @@ -5,6 +5,7 @@ import a8k.extapi_controler.utils.ExtApiFn; import a8k.hardware.A8kCanBusService; import a8k.hardware.type.a8kcanprotocol.A8kEcode; import a8k.hardware.type.a8kcanprotocol.MId; +import a8k.service.app.devicectrl.driver.MiniServoDriver; import a8k.service.app.devicectrl.driver.StepMotorCtrlDriver; import a8k.service.app.devicectrl.driver.type.MiniServoMId; import a8k.service.app.devicectrl.driver.type.StepMotorMId; @@ -22,9 +23,9 @@ public class TubeTransportExDriver { static Integer overtime = 10000; @Resource - A8kCanBusService canBus; + A8kCanBusService canBus; @Resource - MiniServoExDriver miniServoExDriver; + MiniServoDriver miniServoDriver; @Resource TubeFeedingModuleParamMgr tubeScanPosMgr; @@ -72,16 +73,16 @@ public class TubeTransportExDriver { @ExtApiFn(name = "扫描夹紧机构夹紧", group = "基础方法", order = 1) public void scanClampModClamp() throws AppException { logger.info("扫描夹紧机构夹紧"); - miniServoExDriver.miniServoEnable(MiniServoMId.ShakeModTubeScanerClampingSV, 1); - miniServoExDriver.miniServoMoveTo(MiniServoMId.ShakeModTubeScanerClampingSV, MiniServoConstant.getZeroPos(MiniServoMId.ShakeModTubeScanerClampingSV) + 900); + miniServoDriver.miniServoEnable(MiniServoMId.ShakeModTubeScanerClampingSV, 1); + miniServoDriver.miniServoMoveTo(MiniServoMId.ShakeModTubeScanerClampingSV, MiniServoConstant.getZeroPos(MiniServoMId.ShakeModTubeScanerClampingSV) + 900); canBus.waitForMod(MId.ShakeModTubeScanerClampingSV, overtime); } @ExtApiFn(name = "扫描夹紧机构复位", group = "基础方法", order = 2) public void scanClampModRelease() throws AppException { logger.info("扫描夹紧机构复位"); - miniServoExDriver.miniServoEnable(MiniServoMId.ShakeModTubeScanerClampingSV, 1); - miniServoExDriver.miniServoMoveTo(MiniServoMId.ShakeModTubeScanerClampingSV, MiniServoConstant.getZeroPos(MiniServoMId.ShakeModTubeScanerClampingSV)); + miniServoDriver.miniServoEnable(MiniServoMId.ShakeModTubeScanerClampingSV, 1); + miniServoDriver.miniServoMoveTo(MiniServoMId.ShakeModTubeScanerClampingSV, MiniServoConstant.getZeroPos(MiniServoMId.ShakeModTubeScanerClampingSV)); canBus.waitForMod(MId.ShakeModTubeScanerClampingSV, overtime); } diff --git a/src/main/java/a8k/service/app/devicectrl/init/MiniServoReferencePointIniter.java b/src/main/java/a8k/service/app/devicectrl/init/MiniServoReferencePointIniter.java new file mode 100644 index 0000000..890a7a7 --- /dev/null +++ b/src/main/java/a8k/service/app/devicectrl/init/MiniServoReferencePointIniter.java @@ -0,0 +1,65 @@ +package a8k.service.app.devicectrl.init; + + +import a8k.extapi_controler.pagecontrol.ExtApiTabConfig; +import a8k.extapi_controler.utils.ExtApiFn; +import a8k.extapi_controler.utils.ExtApiTab; +import a8k.service.app.devicectrl.driver.MiniServoDriver; +import a8k.service.app.devicectrl.driver.type.MiniServoMId; +import a8k.type.exception.AppException; +import jakarta.annotation.Resource; +import org.springframework.stereotype.Component; + +@Component +@ExtApiTab(cfg = ExtApiTabConfig.MiniServoReferencePointSetting) +public class MiniServoReferencePointIniter { + + @Resource + MiniServoDriver miniServoDriver; + + @ExtApiFn(name = "失能相关模块", group = "测试工具", order = 1) + public void disableMotor() throws AppException { + miniServoDriver.miniServoEnable(MiniServoMId.ShakeModGripperSV, 0); + miniServoDriver.miniServoEnable(MiniServoMId.ShakeModGripperYSV, 0); + miniServoDriver.miniServoEnable(MiniServoMId.ShakeModTubeScanerClampingSV, 0); + } + + @ExtApiFn(name = "使能相关模块", group = "测试工具", order = 2) + public void enableMotor() throws AppException { + miniServoDriver.miniServoEnable(MiniServoMId.ShakeModGripperSV, 1); + miniServoDriver.miniServoEnable(MiniServoMId.ShakeModGripperYSV, 1); + miniServoDriver.miniServoEnable(MiniServoMId.ShakeModTubeScanerClampingSV, 1); + } + + + @ExtApiFn(name = "设置<夹爪><参考点>(完全张开的位置)", group = "参考点设置", order = 11, newline = true) + public Integer gripperSVSetCurrentPosAsRef() throws AppException { + miniServoDriver.miniServoSetRefPos(MiniServoMId.ShakeModGripperSV); + return 1800; + } + + @ExtApiFn(name = "设置<摇匀模组Y轴舵机><参考点>(Y轴最外侧的位置)", group = "参考点设置", order = 12, newline = true) + public Integer YAxixServoSetCurrentPosAsRef() throws AppException { + return miniServoDriver.miniServoSetRefPos(MiniServoMId.ShakeModGripperYSV); + } + + @ExtApiFn(name = "设置<夹紧舵机>参考点(水平位置)", group = "参考点设置", order = 13) + public void setTubeScanClampPos() throws AppException { + miniServoDriver.miniServoSetRefPos(MiniServoMId.ShakeModTubeScanerClampingSV); + } + + @ExtApiFn(name = "夹紧舵机移动到待机位(在参考点附近)", group = "校验", order = 21) + public void gripperSVMoveToZeroBlock() throws AppException { + miniServoDriver.miniServoMoveToZeroBlock(MiniServoMId.ShakeModGripperSV); + } + + @ExtApiFn(name = "摇匀模组Y轴舵机移动到待机位(在参考点附近)", group = "校验", order = 22) + public void YAxixServoMoveToZeroBlock() throws AppException { + miniServoDriver.miniServoMoveToZeroBlock(MiniServoMId.ShakeModGripperYSV); + } + + @ExtApiFn(name = "夹紧舵机移动到待机位(在参考点附近)", group = "校验", order = 23) + public void tubeScanClampMoveToZeroBlock() throws AppException { + miniServoDriver.miniServoMoveToZeroBlock(MiniServoMId.ShakeModTubeScanerClampingSV); + } +}