From 19e56a7f5e41cfc02dc429859ecb6fdcb0b0bcc3 Mon Sep 17 00:00:00 2001 From: zhaohe Date: Wed, 30 Oct 2024 16:46:08 +0800 Subject: [PATCH] update --- .../mainflowctrl/MainFlowCtrlScheduler.java | 12 ++++------- .../ctrlservice/TubePreProcesCtrlService.java | 8 +++++--- src/main/java/a8k/test/TestBeforeRun.java | 22 +++++++++++---------- src/main/java/a8k/type/exception/AppException.java | 11 ++++++----- src/main/java/a8k/utils/ZJsonHelper.java | 8 +++++++- src/main/resources/app.db | Bin 225280 -> 225280 bytes 6 files changed, 34 insertions(+), 27 deletions(-) diff --git a/src/main/java/a8k/service/app/appctrl/mainflowctrl/MainFlowCtrlScheduler.java b/src/main/java/a8k/service/app/appctrl/mainflowctrl/MainFlowCtrlScheduler.java index 5e8eee2..209b7e4 100644 --- a/src/main/java/a8k/service/app/appctrl/mainflowctrl/MainFlowCtrlScheduler.java +++ b/src/main/java/a8k/service/app/appctrl/mainflowctrl/MainFlowCtrlScheduler.java @@ -44,8 +44,8 @@ public class MainFlowCtrlScheduler { @Resource ResourceMgrService resourceMgrService; - DeviceWorkState state = null; - Thread workThread; + DeviceWorkState state = null; + Thread workThread; ThreadPoolExecutor executor = new ThreadPoolExecutor(1, 5, 0, TimeUnit.MILLISECONDS, new ArrayBlockingQueue<>(10)); Runnable checkBeforeGuess; A8kEcodePostProcesser ecodePostProcesser; @@ -131,7 +131,7 @@ public class MainFlowCtrlScheduler { for (AppException appe : appExceptions) { appe.print(); } - if(appExceptions.size() > 1){ + if (appExceptions.size() > 1) { logger.warn("发生多个错误,只报告第一个错误"); } return new A8kErrorContext(key.step, appExceptions.get(0).error); @@ -140,11 +140,7 @@ public class MainFlowCtrlScheduler { appe.print(); return new A8kErrorContext(key.step, appe.error); } catch (Exception exception) { - logger.error("Catch unkown exception "); - logger.error("{}", exception.toString()); - for (StackTraceElement stackTraceElement : exception.getStackTrace()) { - logger.error("{}", stackTraceElement); - } + logger.error("error {}", exception.getMessage(), exception); return new A8kErrorContext(key.step, new AEUnkownExceptionError(exception)); } finally { logger.info("{}------<", ZStringUtils.leftAlignStr(key.step.name(), '-', 35)); 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 30c3e52..4689b39 100644 --- a/src/main/java/a8k/service/app/devicectrl/ctrlservice/TubePreProcesCtrlService.java +++ b/src/main/java/a8k/service/app/devicectrl/ctrlservice/TubePreProcesCtrlService.java @@ -63,10 +63,12 @@ public class TubePreProcesCtrlService { throw AppException.of(A8kEcode.CODEERROR_MOTOR_NOT_IN_ZERO_POS, MId.ShakeModGripperYSV); } + tubePreProcesModuleExDriver.clampingMReleaseTube(); + //夹爪没有零位置 - if (!ZEQ.IntEq(miniServoDriver.miniServoReadPos(MiniServoMId.ShakeModGripperSV), MiniServoConstant.getZeroPos(MiniServoMId.ShakeModGripperSV), 30)) { - throw AppException.of(A8kEcode.CODEERROR_MOTOR_NOT_IN_ZERO_POS, MId.ShakeModGripperSV); - } +// if (!ZEQ.IntEq(miniServoDriver.miniServoReadPos(MiniServoMId.ShakeModGripperSV), MiniServoConstant.getZeroPos(MiniServoMId.ShakeModGripperSV), 30)) { +// throw AppException.of(A8kEcode.CODEERROR_MOTOR_NOT_IN_ZERO_POS, MId.ShakeModGripperSV); +// } // // 检查摇匀夹紧是否在零位 // if (!stepMotorCtrlDriver.stepMotorReadIoState(StepMotorMId.ShakeModClampingM, 0)) { diff --git a/src/main/java/a8k/test/TestBeforeRun.java b/src/main/java/a8k/test/TestBeforeRun.java index 03d7e24..7a29b0c 100644 --- a/src/main/java/a8k/test/TestBeforeRun.java +++ b/src/main/java/a8k/test/TestBeforeRun.java @@ -1,22 +1,24 @@ package a8k.test; +import a8k.hardware.type.LldType; +import a8k.service.app.devicectrl.param.param_mgr.PipetteGunLLDParamMgr; +import a8k.service.app.devicectrl.param.type.PipetteGunLLDTypeParam; +import jakarta.annotation.PostConstruct; +import jakarta.annotation.Resource; import org.springframework.stereotype.Component; +import org.springframework.util.Assert; @Component public class TestBeforeRun { + @Resource + PipetteGunLLDParamMgr pipetteGunLLDParamMgr; - - void testA8kOPTType(){ - - - - - - - - + @PostConstruct + void init() { + LldType lddType = pipetteGunLLDParamMgr.getLLDType(PipetteGunLLDTypeParam.DEFAULT_LLD_TYPE); + Assert.isTrue(lddType != null, "LldType is null"); } } diff --git a/src/main/java/a8k/type/exception/AppException.java b/src/main/java/a8k/type/exception/AppException.java index c6c0a66..ca10783 100644 --- a/src/main/java/a8k/type/exception/AppException.java +++ b/src/main/java/a8k/type/exception/AppException.java @@ -46,11 +46,12 @@ public class AppException extends Exception { public void print() { - log.error("Apperror: {}", error); - log.error("exception {}", this.toString()); - for (StackTraceElement ste : this.getStackTrace()) { - log.error(ste.toString()); - } +// printStackTrace(); + log.error("error {}",this.getMessage(), this); +// log.error("exception {}", this.toString()); +// for (StackTraceElement ste : this.getStackTrace()) { +// log.error(ste.toString()); +// } } } diff --git a/src/main/java/a8k/utils/ZJsonHelper.java b/src/main/java/a8k/utils/ZJsonHelper.java index 1c908a9..1bbcf77 100644 --- a/src/main/java/a8k/utils/ZJsonHelper.java +++ b/src/main/java/a8k/utils/ZJsonHelper.java @@ -22,7 +22,7 @@ public class ZJsonHelper { public static T objectFromJson(ObjectNode node, Class tClass) { ObjectMapper mapper = new ObjectMapper(); - if(node == null) { + if (node == null) { return null; } @@ -53,6 +53,12 @@ public class ZJsonHelper { return (T) Float.valueOf(node.get("value").floatValue()); } + if (tClass.isEnum()) { + if (node.get("value") == null) + return null; + return (T) Enum.valueOf((Class) tClass, node.get("value").asText()); + } + try { return (T) mapper.treeToValue(node, tClass); diff --git a/src/main/resources/app.db b/src/main/resources/app.db index 5a9d84567e2031c09924817c54e081d9b8d98bd6..254f762ac5298ff48ab358cc399a80abccd37872 100644 GIT binary patch delta 2134 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

1g8>g(zeFYPCIE> zkw-}OdGf3l5;y84ZpkqrP~u|p{s=qHJ`zc?vK1sO{nIX1L+%ITZL_bo z^}s3MkaDiJdEifbyMv(|t8KmTcN?TTT(HoK>H{UZDWQa&5%lg6|0ab$J@6;p4lAF) zk^#N&H$%14lvMRnd3v?2IP+t|ZV)<}i&ZS^DQPLD2r7zyND6^l$l6G{NO>gvmXe%c zd1@3^0fuUdPx_~$P*IRX%SowR5|c}kG6`Ey1-a2kjHmlzS;vE_RVQctP@T-^=Z0h{ z_e_7)O2T@}@)i?OW7Jm&d&XrSyNgfZh4oTMSgwm9=}uS;fuu=yRat*!X+ZMxc=7Q( z35yeHf#}Mz{)$q8#0T}_b9+*BfSg9K{8U9*e|c#@@)LaVfj%j^p$e#zDKG0UD-lR~ zv@bsC2U0Yq!6E@=Wk6)VKz5BW*+MO3pZbe)07xni$mtNC|HGz#_(2Ac0b~FfKn9Qj zWB?gJ29N<{02x3Akb&!%0U`c3HT{x+|M)=$kO5=>89)Y*0b~FfKn9QjWB?gJ29SX- zD+9|-mBjM48kpo_r%2kZ*#*lJsAZ<|26$>)32n%FRQ^m2Sz)led6pQVTKS5=`_rlqVv)jNN1RKhH3T;3-~h1z2T^Bjfj&? zqQxW;BAdjBNn+`2Qg&)nB$b`oBnp?OGHFw@6P(7mh;2qih<9XUcqHT-4g^DfZ}+B< z2h>ti<4M2&?xl}jOP~Bnjt`j%u}X5OYL>F66q;hN-EUTHU`Krjq^J)m(N1-WM20#= z;zFGwQ=v|hXL+fUWDy>Y@upKy#i-kcsUSshZE4~V1)M6nhW~}hzrd!~LtqFd#32z77SRus!Wlg_@pTyUN z_+R(~Kga+wfD9l5$N(~c3?Ku@05X6KAOpw%GH{(R;1~r%>f43+|Lw#sqUo)sVBzZEFMG9U?eVxQFd>)cRFAV4gt~O>J%Xz3_Sx6g@Xfr36foHCb~9QS9S~g5i6Tl zt8@)ag?F-^Xm~n4$njiagpIP{q_9VP{^r(ha%NrT`v=qC+q>}2v-4+OO`rUD{o=tV zGS7SplEznon6;&g5e4c9p>%|Rp!u_JfROEXfe^~t(q&}JHqivpA~8#$5uJ=F?coM?m^Jf=dd}fmka9XXaba6Dj3R!?9tVE;fO}uvi*m46f zKTNa$#R_5EE`UiN{3LVyGfA`FW)a4~wp4OT7slxTl*eCJP&VIgCa5-R>xSVtKgdm_ zfFYr?Ob$*a`XEWzG(NzG6Fh+BTShw^?wP*y9yf0Q}=cIL>Dg%8f9-*_^8{OQbz zgPVWP5IDF5Fyo?`nV=Ey@NxiVtSzewHI{L~+d=J#vE4dKGo)iiQa1hR7P@tyQ?h#43RtVGtyCeFP_t|z7*0&GdTdgZ-8GYW@-RTnzjOu& zlxlhK8&JzD0MH)|^K7z*+XZSU9t^eYjZJLP(Tt*?y=CT3WsV<6A9@$CB>grn130U- zwL=fiGv(N-2gQ(`GmCp)T-ZVc#rMja5M$8&R_u}m@=mNFf&r;2+elk-0{$@01d7p zcJ0Q{f{zPbe2`0gC&lKwIjsLAgGzpL>B1+Om!C>M@zVS&Z{B|k2%xO3uA;hcGjA+Wh5Bwkl$N(~c3?Ku@05X6KAOpw%GJp&q1IWM^ zo`J8IRS_$0f*;FnxvBcmsW3Oi!c$LrG@1CisfxJ$7E290cAkIwK>GW~DEM>>Z8TiUFu-?=_SgNa6F1OZLZZ9)E zIu-H^1qO!tVFkM2NVjKG4>u9v+3~3%Z*cSQ$fh1Q%yOk@m#~gpJN2#qxvar-nz)PD zS=#*nQ#Ik5o2&n%`jKjz`47xH&9zl;Rt;1xR6b=|sQ6XIu8P|7qvb2h&X{_MpA$RF z)|*ZPc<#f({BRd#@vIf5n*?COyk?d!><=0dH!;nfQKsqBF!e~9f&?pmh|~1#3^TKC z@!0#B7tX*v4Php9=EON^;#?f&iMt#Y&!C|gUYMsS%7;mrFn!utHT1z_8A!_&WuznE+S5}OGlg}sB$y0Hpk~>{S_2u zA-5EHHA44&3%fLzitcoatiwz&m`9>|;UWfa6u4X#Prsq%swyp!?EG3)Go6B2^e(r> z6VR0>$;xqUD9{cYj*14shNCm<(vP27coin1&ly&56lT`D7$Ycn?Uyi8e1BpI7ghwiDLN}qd8I|YE7|*Y5rGriuD69-CvkuExzDlIER~5UZE0t-TW!s6iqv3 zNJ^d>{@QH%kjO;;X1h)t|MV5pQ?U z+Z^of@p+qVsx!9cI~!`7rH?H#VQc2uUHoMQv6vYdKnA`j4D9pGtub5NZqt57><=Cl z+IqNiXDH4kLvi8lbQWGq)lV(g^b-1cn(u6GiA=OKM_~Lv$tG4ewL&^YxWc_`A_=4^Nz>!0{G?>=th`Cdh`5d~r4-U6)B4FwHrc3R_un_?GFuqN zG`n3}v7lv=<#~9KU8${HQlq|$<}wu4WHcO`Oob0^kI^Cm#t%d%~#+sF$2RaAt_* z2jXfBNbu(Y@a(i$p{a!0CynUcH!7mH*X>T zSGRxIXP=|Ymey9&{uMbpQ^`a~=cu934kf45=j7T`czm2o2`(Zxrg%7+d<6O#B>_rm zTqBa~NkyXkKul=xxr#TeANyQ~*+NmK{Ws+_75eEUY#ju5%Oc}SohT_ah5Bns=y0C} z({v09pvHi4O@lDfdwau}WV_#USrTlabg6yQ46hG1sR5WVX0mrUL`|Tt{GU zEv3z5$rBPQi}NdF`Mk^uVhX9s@~SmIJ1`0A_Tw#ZNl{&@vzhy%+#?#=ACVqxiEZLu zE;?JI$8SQPX3lyoyziShH6uXio9nRIZ+l^VDgo-BwBw zIT#k>;4G^`bZnEaVN!IwT1Eatl4u9ZhNd|ELKivN>w;i5(7e3to?~A%GB<}x*Z5G??muoLq-2d;3+MD7oySU4) z+?#54UxvFB?-}jbiTnTIzSvox!F{p6DEp-g@Bdd;{-(UK#k{@pH#N?N%}a*Am;o6; z29N<{;7iKDes=C|=~>b}dAGr@<+CKsoPz7~LDFL*a|6p zhq|ov%wKwHnJdM@&QbAcHpUNzW2qf5cMImRsOCvDxA4Ppejpl6!TMLqV@5S>BsM+> z+p0$fVo5%cg2(^iK^C?HQD>RfIZrN?0p>O3wEWzUSB2MC2P3;+)=~jqW8wqW9**au zY#{QeMq~9k*jxxU)ZtwB0Y`efZA6|oCp^VfOVYrU zlqvU|SBsN`TIglRBh%q1JUJfMK5$OLoPijyR4{Kq|Dk#OA*wGn08i+Z2@3It=z


%Zkz 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 KWZ)~w!2b`gDOFwo