diff --git a/src/main/java/a8k/app/a8kproj/A8kReactionResultComputer.java b/src/main/java/a8k/app/a8kproj/A8kReactionResultComputer.java index d580498..3b9c139 100644 --- a/src/main/java/a8k/app/a8kproj/A8kReactionResultComputer.java +++ b/src/main/java/a8k/app/a8kproj/A8kReactionResultComputer.java @@ -15,7 +15,7 @@ import a8k.app.a8ktype.type.ReactionResult; import a8k.app.a8ktype.opttype.ReactionResultStatus; import a8k.app.utils.ProjInfo; import a8k.app.utils.ProjInfoUtils; -import a8k.utils.ZloggerRecorder; +import a8k.app.utils.ZloggerRecorder; import lombok.extern.slf4j.Slf4j; import org.slf4j.LoggerFactory; import org.springframework.util.Assert; diff --git a/src/main/java/a8k/app/a8kproj/fakeprojcontext/FakeProjInfoContextFactory.java b/src/main/java/a8k/app/a8kproj/fakeprojcontext/FakeProjInfoContextFactory.java deleted file mode 100644 index 783f2ab..0000000 --- a/src/main/java/a8k/app/a8kproj/fakeprojcontext/FakeProjInfoContextFactory.java +++ /dev/null @@ -1,212 +0,0 @@ -package a8k.app.a8kproj.fakeprojcontext; - -import a8k.app.a8ktype.opttype.A8kOptX; -import a8k.app.service.data.UtilsProjectColorAllocer; -import a8k.app.dao.db.type.ProjExtInfoCard; -import a8k.app.dao.db.type.OptCfg; -import a8k.app.dao.db.type.ProjectBaseInfo; -import a8k.app.dao.db.type.a8kidcard.A8kNormalFn; -import a8k.app.dao.db.type.a8kidcard.A8kOptFnFormula; -import a8k.app.dao.db.type.a8kidcard.A8kPiecewiseFn; -import a8k.app.dao.db.type.a8kidcard.A8kResultBuilderFn; -import a8k.app.dao.db.type.a8kidcard.zenum.A8kFnType; -import a8k.app.dao.db.type.a8kidcard.zenum.A8kOptType; -import a8k.app.dao.db.type.a8kidcard.zenum.A8kReactionFlowType; -import a8k.app.dao.db.type.a8kidcard.zenum.A8kResultUnit; -import a8k.app.utils.ProjBuildinInfo; -import a8k.app.utils.ProjInfo; -import a8k.app.utils.ZDateUtils; - -import java.util.ArrayList; -import java.util.List; - -public class FakeProjInfoContextFactory { - - public static class FakeProjInfoContextCfg { - public String projName; - public String lotId; - public Integer projId; - public Integer updateChipVersion; - public Integer subProjNum; - public String projShortName; - public Integer reactionTemperature; - public String color; - public A8kReactionFlowType reactionFlowType; - public Integer wBloodSampleVolUl; - public Integer serumSampleVolUl; - public Integer shakeTimes; - public Integer bigBufferSampleUl; - public Integer mixLiquidAspirMixingCnt; - public Integer reactionPlateIncubationTimeMin; - public Integer reactionPlateDropletVolUl; - public Boolean expired; - - public A8kFnType fnType; - public A8kOptType optType; - - public Integer optScanPeakNum; - public Integer optPeakNameAssginRefPeakNum; - - } - - ; - - - public static FakeProjInfoContextCfg createCfg(String projShortName, Integer projId, A8kReactionFlowType reactionType, Integer subProjNum) { - var val = new FakeProjInfoContextCfg(); - val.projName = String.format("%s%04d", projShortName, projId); - val.lotId = String.format("%s001234", projShortName, projId); - val.projId = projId; - val.updateChipVersion = 1; - val.subProjNum = subProjNum; - val.projShortName = projShortName; - val.reactionTemperature = 25; - val.color = UtilsProjectColorAllocer.getProjColor(projId); - val.reactionFlowType = reactionType; - val.wBloodSampleVolUl = 100; - val.serumSampleVolUl = 100; - val.shakeTimes = 2; - val.bigBufferSampleUl = 200; - val.mixLiquidAspirMixingCnt = 1; - val.reactionPlateIncubationTimeMin = 1; - val.reactionPlateDropletVolUl = 50; - val.expired = false; - val.fnType = A8kFnType.NormalFn; - val.optType = A8kOptType.FOPT; - if (projId == 1) { - val.optScanPeakNum = 2; - val.optPeakNameAssginRefPeakNum = 2; - } else { - val.optScanPeakNum = 5; - val.optPeakNameAssginRefPeakNum = 5; - } - - return val; - } - - - /** - * !!! WARNING 这个方法中的数值轻易不要修改,后续很多测试代码都是基于这个数值的 - */ - private static A8kOptFnFormula buildTestFnFormula(A8kFnType fntyp) { - A8kOptFnFormula formula = new A8kOptFnFormula(); - - A8kNormalFn a8kNormalFn = new A8kNormalFn(); - a8kNormalFn.x = A8kOptX.R; - a8kNormalFn.xMin = 1.0; - a8kNormalFn.xMax = 100.0; - a8kNormalFn.A = 1.0; - a8kNormalFn.B = 1.0; - a8kNormalFn.C = 1.0; - a8kNormalFn.D = 1.0; - a8kNormalFn.lowLimit = 1.0; - a8kNormalFn.upLimit = 100.0; - - A8kPiecewiseFn a8kPiecewiseFn = new A8kPiecewiseFn(); - a8kPiecewiseFn.judeX = A8kOptX.R; - a8kPiecewiseFn.judeThres = 1.0; - a8kPiecewiseFn.lX = A8kOptX.R; - a8kPiecewiseFn.hX = A8kOptX.R; - a8kPiecewiseFn.xMin = 1.0; - a8kPiecewiseFn.xMax = 100.0; - a8kPiecewiseFn.A0 = 1.0; - a8kPiecewiseFn.B0 = 1.0; - a8kPiecewiseFn.C0 = 1.0; - a8kPiecewiseFn.D0 = 1.0; - a8kPiecewiseFn.A1 = 1.0; - a8kPiecewiseFn.B1 = 1.0; - a8kPiecewiseFn.C1 = 1.0; - a8kPiecewiseFn.D1 = 1.0; - a8kPiecewiseFn.lowLimit = 1.0; - a8kPiecewiseFn.upLimit = 100.0; - - A8kResultBuilderFn a8kResultBuilderFn = new A8kResultBuilderFn(); //结果生成函数 - - a8kResultBuilderFn.ret1Unit = A8kResultUnit.pgPml; - a8kResultBuilderFn.ret2Unit = A8kResultUnit.ngPml; - a8kResultBuilderFn.ret3Unit = A8kResultUnit.ugPml; - a8kResultBuilderFn.toUint2FnA = 2.0; - a8kResultBuilderFn.toUint2FnB = 0.1; - a8kResultBuilderFn.toUint3FnA = 3.0; - a8kResultBuilderFn.toUint3FnB = 0.1; - - - formula.fnType = fntyp; - //普通函数 - if (A8kFnType.NormalFn.equals(fntyp)) { - formula.serumNorFn = a8kNormalFn.clone(); // 血清 - formula.bloodNorFn = a8kNormalFn.clone(); // 血浆 - } - // 分段函数系数 - if (A8kFnType.PiecewiseFn.equals(fntyp)) { - formula.serumPiecewiseFn = a8kPiecewiseFn.clone(); // 血清 - formula.bloodPiecewiseFn = a8kPiecewiseFn.clone(); // 血浆 - } - //结果 - formula.resultBuilderFn = a8kResultBuilderFn.clone(); //结果生成函数 - return formula; - } - - - static public ProjInfo build(FakeProjInfoContextCfg cfg) { - - // - // ProjectInfo - // - ProjectBaseInfo projInfo = new ProjectBaseInfo(); - projInfo.projId = cfg.projId; - projInfo.projName = cfg.projName; - projInfo.projShortName = cfg.projShortName; - projInfo.subProjNum = cfg.subProjNum; - projInfo.reactionTemperature = cfg.reactionTemperature; - projInfo.color = cfg.color; - projInfo.reactionFlowType = cfg.reactionFlowType; - projInfo.wBloodSampleVolUl = cfg.wBloodSampleVolUl; - projInfo.serumSampleVolUl = cfg.serumSampleVolUl; - projInfo.shakeTimes = cfg.shakeTimes; - projInfo.bigBufferSampleUl = cfg.bigBufferSampleUl; - projInfo.reactionPlateIncubationTimeMin = cfg.reactionPlateIncubationTimeMin; - projInfo.reactionPlateDropletVolUl = cfg.reactionPlateDropletVolUl; - - // - // ProjInfoCard - // - ProjExtInfoCard projExtInfoCard = new ProjExtInfoCard(); - projExtInfoCard.projName = cfg.projName; - projExtInfoCard.lotId = cfg.lotId; - if (!cfg.expired) { - projExtInfoCard.expiryDate = ZDateUtils.nextDay(); - } else { - projExtInfoCard.expiryDate = ZDateUtils.theDayBeforeYesterday(); - } - projExtInfoCard.projId = cfg.projId; - projExtInfoCard.updateChipVersion = cfg.updateChipVersion; - projExtInfoCard.subProjNum = cfg.subProjNum; - - for (int i = 0; i < cfg.subProjNum; i++) { - var fnFormula = buildTestFnFormula(cfg.fnType); - projExtInfoCard.projFnFormuals.add(fnFormula); - } - - // - // ProjOptInfo - // - List optCfgList = new ArrayList<>(); - for (int i = 0; i < cfg.subProjNum; i++) { - OptCfg optCfg = new OptCfg(); - optCfg.projId = cfg.projId; - optCfg.projName = cfg.projName; - optCfg.subProjIndex = i; - optCfg.subProjName = String.format("SUBPROJ_%d", i); - optCfg.subProjShortName = String.format("SP%d", i); - optCfg.optType = cfg.optType; - optCfg.optScanRange = 250; - optCfg.optScanPeakNum = cfg.optScanPeakNum; - optCfg.peakNameRefNum = cfg.optPeakNameAssginRefPeakNum; - optCfgList.add(optCfg); - } - - return new ProjInfo(new ProjBuildinInfo(projInfo, optCfgList), projExtInfoCard); - } - -} diff --git a/src/main/java/a8k/app/a8kproj/optanalyzer/A8kOptXGetter.java b/src/main/java/a8k/app/a8kproj/optanalyzer/A8kOptXGetter.java index 7ae41a1..23fc81d 100644 --- a/src/main/java/a8k/app/a8kproj/optanalyzer/A8kOptXGetter.java +++ b/src/main/java/a8k/app/a8kproj/optanalyzer/A8kOptXGetter.java @@ -10,7 +10,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class A8kOptXGetter { - private static final Logger log = LoggerFactory.getLogger(A8kOptXGetter.class); static class Context { OptCfg optcfg; diff --git a/src/main/java/a8k/config/A8kCanBusConnectionConfig.java b/src/main/java/a8k/app/config/A8kCanBusConnectionConfig.java similarity index 86% rename from src/main/java/a8k/config/A8kCanBusConnectionConfig.java rename to src/main/java/a8k/app/config/A8kCanBusConnectionConfig.java index 202ff28..a91296d 100644 --- a/src/main/java/a8k/config/A8kCanBusConnectionConfig.java +++ b/src/main/java/a8k/app/config/A8kCanBusConnectionConfig.java @@ -1,7 +1,6 @@ -package a8k.config; +package a8k.app.config; import a8k.app.hardware.basedriver.A8kCanBusConnection; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; diff --git a/src/main/java/a8k/config/CorsConfig.java b/src/main/java/a8k/app/config/CorsConfig.java similarity index 95% rename from src/main/java/a8k/config/CorsConfig.java rename to src/main/java/a8k/app/config/CorsConfig.java index ee618e2..514106e 100644 --- a/src/main/java/a8k/config/CorsConfig.java +++ b/src/main/java/a8k/app/config/CorsConfig.java @@ -1,4 +1,4 @@ -package a8k.config; +package a8k.app.config; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.CorsRegistry; diff --git a/src/main/java/a8k/config/SpringDocConfig.java b/src/main/java/a8k/app/config/SpringDocConfig.java similarity index 98% rename from src/main/java/a8k/config/SpringDocConfig.java rename to src/main/java/a8k/app/config/SpringDocConfig.java index 03f856d..779c583 100644 --- a/src/main/java/a8k/config/SpringDocConfig.java +++ b/src/main/java/a8k/app/config/SpringDocConfig.java @@ -1,4 +1,4 @@ -package a8k.config; +package a8k.app.config; import io.swagger.v3.oas.models.OpenAPI; import io.swagger.v3.oas.models.info.Info; diff --git a/src/main/java/a8k/config/WebSocketConfiguration.java b/src/main/java/a8k/app/config/WebSocketConfiguration.java similarity index 93% rename from src/main/java/a8k/config/WebSocketConfiguration.java rename to src/main/java/a8k/app/config/WebSocketConfiguration.java index 33f569d..6bb99e8 100644 --- a/src/main/java/a8k/config/WebSocketConfiguration.java +++ b/src/main/java/a8k/app/config/WebSocketConfiguration.java @@ -1,4 +1,4 @@ -package a8k.config; +package a8k.app.config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; diff --git a/src/main/java/a8k/app/hardware/basedriver/A8kCanBusService.java b/src/main/java/a8k/app/hardware/basedriver/A8kCanBusService.java index 17f0fc3..06bd069 100644 --- a/src/main/java/a8k/app/hardware/basedriver/A8kCanBusService.java +++ b/src/main/java/a8k/app/hardware/basedriver/A8kCanBusService.java @@ -121,6 +121,9 @@ public class A8kCanBusService { Boolean firstReadIO = priGetIOState(ioid); Boolean secondReadIO = priGetIOState(ioid); if (firstReadIO == secondReadIO) { + if(ioid.mirror){ + return !firstReadIO; + } return firstReadIO; } else { log.warn("getIOState {} not match, retry", ioid); diff --git a/src/main/java/a8k/app/hardware/driver/MiniServoDriver.java b/src/main/java/a8k/app/hardware/driver/MiniServoDriver.java index d5518e3..016a9c6 100644 --- a/src/main/java/a8k/app/hardware/driver/MiniServoDriver.java +++ b/src/main/java/a8k/app/hardware/driver/MiniServoDriver.java @@ -29,6 +29,23 @@ public class MiniServoDriver { canBus.callcmd(id.mid, CmdId.mini_servo_enable, enable); } + public void miniServoForceEnable(MiniServoMId id, int enable) { + try { + miniServoEnable(id, enable); + } catch (AppException e) { + logger.error("miniServoForceEnable error", e); + } + } + + public Boolean miniServoPing(MiniServoMId id) { + try { + miniServoReadPos(id); + } catch (AppException e) { + return false; + } + return true; + } + public int miniServoReadPos(MiniServoMId id) throws AppException { var packet = canBus.callcmd(id.mid, CmdId.mini_servo_read_pos); return packet.getContentI32(0); @@ -98,7 +115,6 @@ public class MiniServoDriver { } - public void miniServoWaitIsNotMove(MiniServoMId id, int acitionOvertime) throws AppException { long startedAt = System.currentTimeMillis(); do { diff --git a/src/main/java/a8k/app/hardware/driver/StepMotorCtrlDriver.java b/src/main/java/a8k/app/hardware/driver/StepMotorCtrlDriver.java index 2d5d03f..83ca02e 100644 --- a/src/main/java/a8k/app/hardware/driver/StepMotorCtrlDriver.java +++ b/src/main/java/a8k/app/hardware/driver/StepMotorCtrlDriver.java @@ -105,7 +105,7 @@ public class StepMotorCtrlDriver { public Integer stepMotorReadPosByMoveToZeroBlock(StepMotorMId id, Integer actionOvertime) throws AppException { stepMotorEnable(id, 1); stepMotorEasyMoveToZeroBlock(id, actionOvertime); - Integer nowpos = stepMotorReadPos(id); + Integer nowpos = stepMotorReadPos(id); Integer measurepos = -canBus.moduleGetReg(id.mid, RegIndex.kreg_step_motor_dpos) + nowpos; stepMotorEnable(id, 0); return measurepos; @@ -143,6 +143,10 @@ public class StepMotorCtrlDriver { canBus.waitForMod(id.mid, actionOvertime); } + public Boolean isHasMoveToZero(StepMotorMId id) throws AppException { + return getReg(id, StepMotorRegIndex.kreg_step_motor_has_move_zero) != 0; + } + public void setReg(StepMotorMId id, StepMotorRegIndex regIndex, Integer val) throws AppException { canBus.moduleSetReg(id.mid, regIndex.regIndex, val); } diff --git a/src/main/java/a8k/app/hardware/driver/type/StepMotorRegIndex.java b/src/main/java/a8k/app/hardware/driver/type/StepMotorRegIndex.java index fd0c7bf..9a503ed 100644 --- a/src/main/java/a8k/app/hardware/driver/type/StepMotorRegIndex.java +++ b/src/main/java/a8k/app/hardware/driver/type/StepMotorRegIndex.java @@ -13,6 +13,7 @@ public enum StepMotorRegIndex { kreg_step_motor_pos(RegIndex.kreg_step_motor_pos), // 机器人x坐标 kreg_step_motor_is_enable(RegIndex.kreg_step_motor_is_enable), // 是否使能 kreg_step_motor_dpos(RegIndex.kreg_step_motor_dpos), // 执行完上一条指令后的相对位移 + kreg_step_motor_has_move_zero(RegIndex.kreg_step_motor_has_move_zero), // 是否已经移动到零点 // kreg_step_motor_shift(RegIndex.kreg_step_motor_shift), // x偏移 kreg_step_motor_shaft(RegIndex.kreg_step_motor_shaft), // x轴是否反转 kreg_step_motor_one_circle_pulse(RegIndex.kreg_step_motor_one_circle_pulse), // x轴一圈脉冲数 diff --git a/src/main/java/a8k/app/hardware/initializer/A8kModParamInitializer.java b/src/main/java/a8k/app/hardware/initializer/A8kModParamInitializer.java index 6ad9cac..c27222c 100644 --- a/src/main/java/a8k/app/hardware/initializer/A8kModParamInitializer.java +++ b/src/main/java/a8k/app/hardware/initializer/A8kModParamInitializer.java @@ -8,6 +8,7 @@ import a8k.app.hardware.driver.StepMotorCtrlDriver; import a8k.app.hardware.driver.type.MiniServoMId; import a8k.app.hardware.driver.type.PipetteRegIndex; import a8k.app.hardware.driver.type.StepMotorMId; +import a8k.app.hardware.driver.type.StepMotorRegIndex; import a8k.app.service.bases.AppEventBusService; import a8k.app.a8ktype.appevent.A8kCanBusOnConnectEvent; import a8k.app.a8ktype.appevent.AppEvent; @@ -58,6 +59,18 @@ public class A8kModParamInitializer { * 2.如果电机没有配备编码,则每次调用moveQuickToZeroPoint,都会进行一次位置检查 */ + stepMotorCtrlDriver.setReg(StepMotorMId.ShakeModClampingM, StepMotorRegIndex.kreg_step_motor_look_zero_edge_speed, 50);// + stepMotorCtrlDriver.setReg(StepMotorMId.ShakeModClampingM, StepMotorRegIndex.kreg_step_motor_run_to_zero_speed, 50);// + + + stepMotorCtrlDriver.setReg(StepMotorMId.PlatesBoxYM, StepMotorRegIndex.kreg_step_motor_one_circle_pulse, 20);//板夹仓前后移动 + stepMotorCtrlDriver.setReg(StepMotorMId.PlatesBoxPusherM, StepMotorRegIndex.kreg_step_motor_one_circle_pulse, 20);//板夹仓推板 + stepMotorCtrlDriver.setReg(StepMotorMId.ShakeModGripperZM, StepMotorRegIndex.kreg_step_motor_one_circle_pulse, 200);//摇匀模组Z轴 + stepMotorCtrlDriver.setReg(StepMotorMId.FeedingModXM, StepMotorRegIndex.kreg_step_motor_one_circle_pulse, 40);//进料模组X轴 + stepMotorCtrlDriver.setReg(StepMotorMId.IncubatorRotateCtrlM, StepMotorRegIndex.kreg_step_motor_one_circle_pulse, 400);//转盘 + pipetteCtrlDriver.setReg(PipetteRegIndex.kreg_pipette_zm_one_circle_pulse, 20); + + //光学电机步进单位设置,默认是 1574803 ,调大拉伸波形,调小拉伸波形 // canBus.moduleSetReg(MId.OptModScannerM, RegIndex.kreg_step_motor_one_circle_pulse, 1550000); canBus.moduleSetReg(MId.OptModScannerM, RegIndex.kreg_step_motor_one_circle_pulse, 1590000); diff --git a/src/main/java/a8k/app/hardware/type/a8kcanprotocol/IOId.java b/src/main/java/a8k/app/hardware/type/a8kcanprotocol/IOId.java index f20bd02..4588174 100644 --- a/src/main/java/a8k/app/hardware/type/a8kcanprotocol/IOId.java +++ b/src/main/java/a8k/app/hardware/type/a8kcanprotocol/IOId.java @@ -1,26 +1,26 @@ package a8k.app.hardware.type.a8kcanprotocol; public enum IOId { - TubeHeightPPS(ModuleType.kboard, MId.FeedingModBoard, 0), //高低试管检测IO - THChOuterPPS(ModuleType.kboard, MId.FeedingModBoard, 1),//试管架转移通道有无检测 外 - THChInterPPS(ModuleType.kboard, MId.FeedingModBoard, 2),//试管架转移通道有无检测 内 - OutfeedPPS(ModuleType.kboard, MId.FeedingModBoard, 3),//试管出料位置 试管架有无检测 - TubeExistPPS(ModuleType.kboard, MId.FeedingModBoard, 4),//试管有无光电 - InfeedPPS(ModuleType.kboard, MId.FeedingModBoard, 5),//试管架入料位置 试管架有无检测 + TubeHeightPPS(ModuleType.kboard, MId.FeedingModBoard, 0, false), //高低试管检测IO + THChOuterPPS(ModuleType.kboard, MId.FeedingModBoard, 1, false),//试管架转移通道有无检测 外 + THChInterPPS(ModuleType.kboard, MId.FeedingModBoard, 2, false),//试管架转移通道有无检测 内 + OutfeedPPS(ModuleType.kboard, MId.FeedingModBoard, 3, false),//试管出料位置 试管架有无检测 + TubeExistPPS(ModuleType.kboard, MId.FeedingModBoard, 4, false),//试管有无光电 + InfeedPPS(ModuleType.kboard, MId.FeedingModBoard, 5, false),//试管架入料位置 试管架有无检测 - RecycleBinOverflowPPS(ModuleType.kboard, MId.PlatesBoxTCMBoard, 2),//废料桶满溢检测 - RecycleBinOverflowPPSPowerCtrl(ModuleType.kboard, MId.PlatesBoxTCMBoard, 0),//废料桶光栅电源 + RecycleBinOverflowPPS(ModuleType.kboard, MId.PlatesBoxTCMBoard, 2, false),//废料桶满溢检测 + RecycleBinOverflowPPSPowerCtrl(ModuleType.kboard, MId.PlatesBoxTCMBoard, 0, false),//废料桶光栅电源 - PlateBoxCoverClosurePPS(ModuleType.kboard, MId.PlatesBoxBoard, 0),//板夹仓舱盖闭合检测 - PlateBoxPlateStuckPPS(ModuleType.kboard, MId.PlatesBoxBoard, 1),//板夹仓卡板检测 + PlateBoxCoverClosurePPS(ModuleType.kboard, MId.PlatesBoxBoard, 0, true),//板夹仓舱盖闭合检测 + PlateBoxPlateStuckPPS(ModuleType.kboard, MId.PlatesBoxBoard, 1, false),//板夹仓卡板检测 //转盘逻辑相关光电 //钩板电机,零点光电,终点光电 - PullerMZeroPPS(ModuleType.ktmc_step_motor, MId.OptModPullM, 0),// - PullerMEndPPS(ModuleType.ktmc_step_motor, MId.OptModPullM, 1),// + PullerMZeroPPS(ModuleType.ktmc_step_motor, MId.OptModPullM, 0, false),// + PullerMEndPPS(ModuleType.ktmc_step_motor, MId.OptModPullM, 1, false),// //推板电机,零点光电,终点光电 - PusherMZeroPPS(ModuleType.ktmc_step_motor, MId.PlatesBoxPusherM, 0),// - PusherMEndPPS(ModuleType.ktmc_step_motor, MId.PlatesBoxPusherM, 1),// + PusherMZeroPPS(ModuleType.ktmc_step_motor, MId.PlatesBoxPusherM, 0, false),// + PusherMEndPPS(ModuleType.ktmc_step_motor, MId.PlatesBoxPusherM, 1, false),// ; @@ -28,11 +28,15 @@ public enum IOId { final public ModuleType mtype; final public MId mid; final public int ioIndex; + final public boolean mirror; - IOId(ModuleType mtype, MId mid, int ioIndex) { + IOId(ModuleType mtype, MId mid, int ioIndex, boolean mirror) { this.mtype = mtype; this.mid = mid; this.ioIndex = ioIndex; + this.mirror = mirror; + } + } diff --git a/src/main/java/a8k/app/hardware/type/regindex/RegIndex.java b/src/main/java/a8k/app/hardware/type/regindex/RegIndex.java index 4479a75..c02d485 100644 --- a/src/main/java/a8k/app/hardware/type/regindex/RegIndex.java +++ b/src/main/java/a8k/app/hardware/type/regindex/RegIndex.java @@ -39,18 +39,18 @@ public enum RegIndex { kreg_pipette_capactitance_val(4001), // 移液枪电容值 kreg_pipette_tip_state(4002, false), // 移动液枪tip状态 -// kreg_pipette_limit_ul(4051), // -// kreg_pipette_pump_acc(4052), // -// kreg_pipette_pump_dec(4053), // -// kreg_pipette_pump_vstart(4054), // -// kreg_pipette_pump_vstop(4055), // -// kreg_pipette_pump_vmax(4056), // -// kreg_pipette_aspirate_distribut_pump_vel(4057), // -// kreg_pipette_lld_pump_vel(4058), // -// kreg_pipette_lld_motor_vel_rpm(4059), // -// kreg_pipette_lld_detect_period_ms(4060), // -// kreg_pipette_lld_prepare_pos(4061), // -// kreg_pipette_lld_prepare_distribut_pos(4062), // + // kreg_pipette_limit_ul(4051), // + // kreg_pipette_pump_acc(4052), // + // kreg_pipette_pump_dec(4053), // + // kreg_pipette_pump_vstart(4054), // + // kreg_pipette_pump_vstop(4055), // + // kreg_pipette_pump_vmax(4056), // + // kreg_pipette_aspirate_distribut_pump_vel(4057), // + // kreg_pipette_lld_pump_vel(4058), // + // kreg_pipette_lld_motor_vel_rpm(4059), // + // kreg_pipette_lld_detect_period_ms(4060), // + // kreg_pipette_lld_prepare_pos(4061), // + // kreg_pipette_lld_prepare_distribut_pos(4062), // kreg_pipette_zm_pos(4101), kreg_pipette_zm_is_enable(4102), @@ -151,6 +151,7 @@ public enum RegIndex { kreg_step_motor_pos(10101), // 机器人x坐标 kreg_step_motor_is_enable(10102), // 是否使能 kreg_step_motor_dpos(10103), // 执行完上一条指令后的相对位移 + kreg_step_motor_has_move_zero(10104), // 是否回零 kreg_step_motor_shift(10150), // x偏移 kreg_step_motor_shaft(10151), // x轴是否反转 kreg_step_motor_one_circle_pulse(10152), // x轴一圈脉冲数 diff --git a/src/main/java/a8k/app/service/background/TemperatureCtrlService.java b/src/main/java/a8k/app/service/background/TemperatureCtrlService.java index fc828e7..58b6b29 100644 --- a/src/main/java/a8k/app/service/background/TemperatureCtrlService.java +++ b/src/main/java/a8k/app/service/background/TemperatureCtrlService.java @@ -7,7 +7,7 @@ import a8k.app.a8ktype.exception.AppException; import a8k.app.service.bases.AppEventBusService; import a8k.app.service.setting.AppSettingsMgrService; import a8k.app.hardware.driver.TemperatureControlDriver; -import a8k.teststate.VirtualDevice; +import a8k.app.teststate.VirtualDevice; import jakarta.annotation.PostConstruct; import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; diff --git a/src/main/java/a8k/app/service/data/ProjIdCardInfoMgrService.java b/src/main/java/a8k/app/service/data/ProjIdCardInfoMgrService.java index 67bb624..c2def37 100644 --- a/src/main/java/a8k/app/service/data/ProjIdCardInfoMgrService.java +++ b/src/main/java/a8k/app/service/data/ProjIdCardInfoMgrService.java @@ -18,7 +18,7 @@ import a8k.app.dao.db.type.ProjExtInfoCard; import a8k.app.a8ktype.db.CommonPage; import a8k.app.utils.ProjBuildinInfo; import a8k.app.utils.ZAppChecker; -import a8k.utils.DoubleUtils; +import a8k.app.utils.DoubleUtils; import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; diff --git a/src/main/java/a8k/app/service/lowerctrl/ConsumablesScanCtrlService.java b/src/main/java/a8k/app/service/lowerctrl/ConsumablesScanCtrlService.java index 4c38067..5570d57 100644 --- a/src/main/java/a8k/app/service/lowerctrl/ConsumablesScanCtrlService.java +++ b/src/main/java/a8k/app/service/lowerctrl/ConsumablesScanCtrlService.java @@ -2,17 +2,16 @@ package a8k.app.service.lowerctrl; import a8k.app.hardware.driver.CodeScanerDriver; import a8k.app.service.param.hbotpos.Hbot2DCodeScanParamMgr; -import a8k.teststate.VirtualDevice; +import a8k.app.teststate.VirtualDevice; import a8k.app.a8ktype.type.ConsumableOneChRawResult; import a8k.app.a8ktype.device.Pos2d; import a8k.app.a8ktype.exception.AppException; -import a8k.utils.DoAction; +import a8k.app.utils.DoAction; import jakarta.annotation.Resource; import org.springframework.stereotype.Component; import java.util.ArrayList; import java.util.List; -import java.util.Objects; @Component public class ConsumablesScanCtrlService { diff --git a/src/main/java/a8k/app/service/lowerctrl/DeviceInitCtrlService.java b/src/main/java/a8k/app/service/lowerctrl/DeviceInitCtrlService.java index 9acb7bb..ad3d6d1 100644 --- a/src/main/java/a8k/app/service/lowerctrl/DeviceInitCtrlService.java +++ b/src/main/java/a8k/app/service/lowerctrl/DeviceInitCtrlService.java @@ -16,7 +16,7 @@ import a8k.app.hardware.driver.type.StepMotorMId; import a8k.app.service.background.BackgroudProcessCtrlService; import a8k.app.service.bases.AppEventBusService; -import a8k.teststate.VirtualDevice; +import a8k.app.teststate.VirtualDevice; import a8k.app.a8ktype.others.CheckPointType; import a8k.app.a8ktype.others.checkpoint.CheckResult; import a8k.app.a8ktype.others.checkpoint.Checkpoint; @@ -74,7 +74,7 @@ public class DeviceInitCtrlService { @Resource HbotMoveCtrlService hbotMoveCtrlService; - Integer actionOvertime = 10000; + Integer actionOvertime = 20000; List checkPoints = new ArrayList<>(); diff --git a/src/main/java/a8k/app/service/lowerctrl/TubeFeedingCtrlService.java b/src/main/java/a8k/app/service/lowerctrl/TubeFeedingCtrlService.java index 92be613..996ca87 100644 --- a/src/main/java/a8k/app/service/lowerctrl/TubeFeedingCtrlService.java +++ b/src/main/java/a8k/app/service/lowerctrl/TubeFeedingCtrlService.java @@ -104,6 +104,7 @@ public class TubeFeedingCtrlService { logger.info("弹出试管架"); moveTubeRackToExitPos(); try { + stepMotorCtrlDriver.stepMotorEasyMoveByBlock(StepMotorMId.FeedingModOutfeedM, 1000, 1000); stepMotorCtrlDriver.stepMotorEasyRotate(StepMotorMId.FeedingModOutfeedM, 1); OS.hsleep(2500); for (int i = 0; i < outfeedOvertime / 100; i++) { diff --git a/src/main/java/a8k/app/service/lowerctrl/TubeFeedingExCtrlService.java b/src/main/java/a8k/app/service/lowerctrl/TubeFeedingExCtrlService.java index aea638c..6e56477 100644 --- a/src/main/java/a8k/app/service/lowerctrl/TubeFeedingExCtrlService.java +++ b/src/main/java/a8k/app/service/lowerctrl/TubeFeedingExCtrlService.java @@ -40,9 +40,9 @@ public class TubeFeedingExCtrlService { * @throws AppException 硬件异常 */ public void moveTubeRackTo(Integer pos, TargetPosMeasureDirection moveDiretion, Boolean moveToZero) throws AppException { - if (!stepMotorCtrlDriver.stepMotorReadIoState(StepMotorMId.ShakeModGripperZM, 0)) { - throw new AppException(A8kEcode.LOW_EXT_ERROR_MOTOR_AT_WRONG_POS); - } +// if (!stepMotorCtrlDriver.stepMotorReadIoState(StepMotorMId.ShakeModGripperZM, 0)) { +// throw new AppException(A8kEcode.LOW_EXT_ERROR_MOTOR_AT_WRONG_POS); +// } //打开扫码夹具 scanClampModRelease(); diff --git a/src/main/java/a8k/app/service/mainctrl/mainflowctrl/action/AC10ErrorReactionPlateProcesser.java b/src/main/java/a8k/app/service/mainctrl/mainflowctrl/action/AC10ErrorReactionPlateProcesser.java index dd8da50..e9fec9e 100644 --- a/src/main/java/a8k/app/service/mainctrl/mainflowctrl/action/AC10ErrorReactionPlateProcesser.java +++ b/src/main/java/a8k/app/service/mainctrl/mainflowctrl/action/AC10ErrorReactionPlateProcesser.java @@ -6,7 +6,7 @@ import a8k.app.service.statemgr.IncubationPlateStateMgrService; import a8k.app.service.statemgr.OptScanModuleStateMgrService; import a8k.app.a8ktype.state.IncubationSubTank; import a8k.app.service.lowerctrl.OptScanModuleCtrlService; -import a8k.teststate.VirtualDevice; +import a8k.app.teststate.VirtualDevice; import a8k.app.a8ktype.error.AppError; import a8k.app.a8ktype.exception.AppException; import a8k.app.utils.ZList; diff --git a/src/main/java/a8k/app/service/mainctrl/mainflowctrl/action/AC20ProcessCompletedPlate.java b/src/main/java/a8k/app/service/mainctrl/mainflowctrl/action/AC20ProcessCompletedPlate.java index ab12e3a..aac00e5 100644 --- a/src/main/java/a8k/app/service/mainctrl/mainflowctrl/action/AC20ProcessCompletedPlate.java +++ b/src/main/java/a8k/app/service/mainctrl/mainflowctrl/action/AC20ProcessCompletedPlate.java @@ -10,7 +10,7 @@ import a8k.app.a8ktype.state.IncubationSubTank; import a8k.app.a8ktype.state.ProjectTaskContext; import a8k.app.service.lowerctrl.OptScanModuleCtrlService; import a8k.app.utils.ZList; -import a8k.teststate.VirtualDevice; +import a8k.app.teststate.VirtualDevice; import a8k.app.a8ktype.error.AppError; import a8k.app.a8ktype.exception.AppException; import a8k.app.utils.ProjInfoUtils; diff --git a/src/main/java/a8k/app/service/mainctrl/mainflowctrl/action/AC20ScanReactionPlate.java b/src/main/java/a8k/app/service/mainctrl/mainflowctrl/action/AC20ScanReactionPlate.java index 9038d2e..3152f5b 100644 --- a/src/main/java/a8k/app/service/mainctrl/mainflowctrl/action/AC20ScanReactionPlate.java +++ b/src/main/java/a8k/app/service/mainctrl/mainflowctrl/action/AC20ScanReactionPlate.java @@ -13,7 +13,7 @@ import a8k.app.service.statemgr.ProjectContextMgrService; import a8k.app.a8ktype.state.ProjectTaskContext; import a8k.app.service.lowerctrl.OptScanModuleCtrlService; import a8k.app.dao.db.type.a8kidcard.zenum.A8kOptType; -import a8k.teststate.VirtualDevice; +import a8k.app.teststate.VirtualDevice; import a8k.app.factory.FakeReactionResultFactory; import a8k.app.a8ktype.type.ReactionResult; import a8k.app.a8ktype.error.AppError; diff --git a/src/main/java/a8k/app/service/mainctrl/mainflowctrl/action/AC30EjectTubeHolder.java b/src/main/java/a8k/app/service/mainctrl/mainflowctrl/action/AC30EjectTubeHolder.java index 9f5e197..2d723b4 100644 --- a/src/main/java/a8k/app/service/mainctrl/mainflowctrl/action/AC30EjectTubeHolder.java +++ b/src/main/java/a8k/app/service/mainctrl/mainflowctrl/action/AC30EjectTubeHolder.java @@ -5,7 +5,7 @@ import a8k.app.service.mainctrl.mainflowctrl.base.MainFlowProcesser; import a8k.app.service.statemgr.GStateMgrService; import a8k.app.service.statemgr.TubeStateMgrService; import a8k.app.service.lowerctrl.TubeFeedingCtrlService; -import a8k.teststate.VirtualDevice; +import a8k.app.teststate.VirtualDevice; import a8k.app.a8ktype.error.AppError; import a8k.app.a8ktype.exception.AppException; import a8k.app.utils.ZList; diff --git a/src/main/java/a8k/app/service/mainctrl/mainflowctrl/action/AC30ScanTubeHolderTask.java b/src/main/java/a8k/app/service/mainctrl/mainflowctrl/action/AC30ScanTubeHolderTask.java index b203853..7717fbd 100644 --- a/src/main/java/a8k/app/service/mainctrl/mainflowctrl/action/AC30ScanTubeHolderTask.java +++ b/src/main/java/a8k/app/service/mainctrl/mainflowctrl/action/AC30ScanTubeHolderTask.java @@ -17,7 +17,7 @@ import a8k.app.a8ktype.state.enumtype.TubeState; import a8k.app.service.lowerctrl.TubeFeedingCtrlService; import a8k.app.service.bases.AppEventBusService; import a8k.app.a8ktype.appevent.AppWarningNotifyEvent; -import a8k.teststate.VirtualDevice; +import a8k.app.teststate.VirtualDevice; import a8k.app.a8ktype.type.TubeHolderScanResult; import a8k.app.a8ktype.error.AETubeError; import a8k.app.a8ktype.error.AppError; diff --git a/src/main/java/a8k/app/service/mainctrl/mainflowctrl/action/AC30SwitchToNextTubeTake.java b/src/main/java/a8k/app/service/mainctrl/mainflowctrl/action/AC30SwitchToNextTubeTake.java index 7917f9e..f6d04dc 100644 --- a/src/main/java/a8k/app/service/mainctrl/mainflowctrl/action/AC30SwitchToNextTubeTake.java +++ b/src/main/java/a8k/app/service/mainctrl/mainflowctrl/action/AC30SwitchToNextTubeTake.java @@ -4,7 +4,7 @@ import a8k.app.service.mainctrl.mainflowctrl.base.A8kActionTask; import a8k.app.service.mainctrl.mainflowctrl.base.MainFlowProcesser; import a8k.app.service.statemgr.TubeStateMgrService; import a8k.app.service.lowerctrl.TubeFeedingCtrlService; -import a8k.teststate.VirtualDevice; +import a8k.app.teststate.VirtualDevice; import a8k.app.a8ktype.error.AppError; import a8k.app.a8ktype.exception.AppException; import a8k.app.utils.ZList; diff --git a/src/main/java/a8k/app/service/mainctrl/mainflowctrl/action/AC41ProcessSample.java b/src/main/java/a8k/app/service/mainctrl/mainflowctrl/action/AC41ProcessSample.java index e72ff82..9172da3 100644 --- a/src/main/java/a8k/app/service/mainctrl/mainflowctrl/action/AC41ProcessSample.java +++ b/src/main/java/a8k/app/service/mainctrl/mainflowctrl/action/AC41ProcessSample.java @@ -16,11 +16,11 @@ import a8k.app.service.mainctrl.erroranalyzer.ErrorProcessor; import a8k.app.dao.db.type.a8kidcard.zenum.A8kReactionFlowType; import a8k.app.utils.ActionTaskPool; import a8k.app.utils.ZList; -import a8k.teststate.VirtualDevice; +import a8k.app.teststate.VirtualDevice; import a8k.app.a8ktype.error.AppError; import a8k.app.a8ktype.exception.AppException; import a8k.app.a8ktype.exception.ZAppInterruptException; -import a8k.utils.DoAction; +import a8k.app.utils.DoAction; import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; diff --git a/src/main/java/a8k/app/service/mainctrl/mainflowctrl/processer/MainFlowStateChangeProcesser.java b/src/main/java/a8k/app/service/mainctrl/mainflowctrl/processer/MainFlowStateChangeProcesser.java index f45fbaf..96e1b1b 100644 --- a/src/main/java/a8k/app/service/mainctrl/mainflowctrl/processer/MainFlowStateChangeProcesser.java +++ b/src/main/java/a8k/app/service/mainctrl/mainflowctrl/processer/MainFlowStateChangeProcesser.java @@ -1,6 +1,5 @@ package a8k.app.service.mainctrl.mainflowctrl.processer; -import a8k.app.service.mainctrl.TubeHolderSettingMgrService; import a8k.app.service.mainctrl.mainflowctrl.base.IMainFlowStateChangeProcesser; import a8k.app.service.mainctrl.mainflowctrl.base.MainFlowProcesser; import a8k.app.service.statemgr.*; @@ -9,7 +8,7 @@ import a8k.app.a8ktype.state.enumtype.IncubationSubTankState; import a8k.app.service.lowerctrl.HbotMoveExCtrlService; import a8k.app.service.lowerctrl.OptScanModuleCtrlService; import a8k.app.service.lowerctrl.TubeFeedingCtrlService; -import a8k.teststate.VirtualDevice; +import a8k.app.teststate.VirtualDevice; import a8k.app.a8ktype.exception.AppException; import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; diff --git a/src/main/java/a8k/app/service/setting/AppSettingsMgrService.java b/src/main/java/a8k/app/service/setting/AppSettingsMgrService.java index 97e76b5..be90b75 100644 --- a/src/main/java/a8k/app/service/setting/AppSettingsMgrService.java +++ b/src/main/java/a8k/app/service/setting/AppSettingsMgrService.java @@ -9,7 +9,7 @@ import a8k.app.dao.db.type.LISSetting; import a8k.app.dao.db.type.appsetting.AppSettingName; import a8k.app.dao.db.type.appsetting.settingenum.*; import a8k.app.hardware.type.a8kcanprotocol.A8kEcode; -import a8k.utils.IPAddressValidator; +import a8k.app.utils.IPAddressValidator; import jakarta.annotation.PostConstruct; import jakarta.annotation.Resource; import org.slf4j.Logger; diff --git a/src/main/java/a8k/teststate/TestStateMgrService.java b/src/main/java/a8k/app/teststate/TestStateMgrService.java similarity index 94% rename from src/main/java/a8k/teststate/TestStateMgrService.java rename to src/main/java/a8k/app/teststate/TestStateMgrService.java index 680c550..07e3762 100644 --- a/src/main/java/a8k/teststate/TestStateMgrService.java +++ b/src/main/java/a8k/app/teststate/TestStateMgrService.java @@ -1,7 +1,6 @@ -package a8k.teststate; +package a8k.app.teststate; -import a8k.app.a8ktype.type.ConsumableOneChRawResult; import a8k.app.a8ktype.type.TubeHolderScanResult; import a8k.app.service.lowerctrl.ConsumablesScanCtrlService; import a8k.app.service.lowerctrl.TubeFeedingCtrlService; diff --git a/src/main/java/a8k/teststate/VirtualDevice.java b/src/main/java/a8k/app/teststate/VirtualDevice.java similarity index 74% rename from src/main/java/a8k/teststate/VirtualDevice.java rename to src/main/java/a8k/app/teststate/VirtualDevice.java index 519830e..802357c 100644 --- a/src/main/java/a8k/teststate/VirtualDevice.java +++ b/src/main/java/a8k/app/teststate/VirtualDevice.java @@ -1,17 +1,11 @@ -package a8k.teststate; +package a8k.app.teststate; import a8k.OS; import a8k.app.a8ktype.DeviceRunMode; -import a8k.app.dao.db.type.ProjExtInfoCard; -import a8k.app.a8ktype.type.ConsumableOneChRawResult; -import a8k.app.a8ktype.type.TubeHolderScanResult; import a8k.app.service.bases.UIMessage; import a8k.app.service.statemgr.GStateMgrService; import jakarta.annotation.Resource; -import lombok.Getter; -import lombok.Setter; import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; @Slf4j diff --git a/src/main/java/a8k/utils/DoAction.java b/src/main/java/a8k/app/utils/DoAction.java similarity index 82% rename from src/main/java/a8k/utils/DoAction.java rename to src/main/java/a8k/app/utils/DoAction.java index 798fd6a..9404191 100644 --- a/src/main/java/a8k/utils/DoAction.java +++ b/src/main/java/a8k/app/utils/DoAction.java @@ -1,10 +1,8 @@ -package a8k.utils; +package a8k.app.utils; import a8k.SpringBootBeanUtil; import a8k.app.a8ktype.exception.AppException; -import a8k.app.service.bases.UIMessage; -import a8k.teststate.VirtualDevice; -import jakarta.annotation.Resource; +import a8k.app.teststate.VirtualDevice; import lombok.extern.slf4j.Slf4j; @Slf4j diff --git a/src/main/java/a8k/utils/DoubleUtils.java b/src/main/java/a8k/app/utils/DoubleUtils.java similarity index 94% rename from src/main/java/a8k/utils/DoubleUtils.java rename to src/main/java/a8k/app/utils/DoubleUtils.java index 2a3b10c..89f21f4 100644 --- a/src/main/java/a8k/utils/DoubleUtils.java +++ b/src/main/java/a8k/app/utils/DoubleUtils.java @@ -1,4 +1,4 @@ -package a8k.utils; +package a8k.app.utils; public class DoubleUtils { public static boolean equals(double a, double b) { diff --git a/src/main/java/a8k/utils/IPAddressValidator.java b/src/main/java/a8k/app/utils/IPAddressValidator.java similarity index 96% rename from src/main/java/a8k/utils/IPAddressValidator.java rename to src/main/java/a8k/app/utils/IPAddressValidator.java index 89aceea..d0c66db 100644 --- a/src/main/java/a8k/utils/IPAddressValidator.java +++ b/src/main/java/a8k/app/utils/IPAddressValidator.java @@ -1,4 +1,4 @@ -package a8k.utils; +package a8k.app.utils; import java.util.regex.Pattern; diff --git a/src/main/java/a8k/utils/ZloggerRecorder.java b/src/main/java/a8k/app/utils/ZloggerRecorder.java similarity index 96% rename from src/main/java/a8k/utils/ZloggerRecorder.java rename to src/main/java/a8k/app/utils/ZloggerRecorder.java index bae0102..f2266f9 100644 --- a/src/main/java/a8k/utils/ZloggerRecorder.java +++ b/src/main/java/a8k/app/utils/ZloggerRecorder.java @@ -1,4 +1,4 @@ -package a8k.utils; +package a8k.app.utils; import org.slf4j.Logger; diff --git a/src/main/java/a8k/config/JacksonCustomizerConfig.java b/src/main/java/a8k/config/JacksonCustomizerConfig.java deleted file mode 100644 index e69de29..0000000 diff --git a/src/main/java/a8k/extui/page/debug/P02ConsumablesMgrDebugPage.java b/src/main/java/a8k/extui/page/debug/P02ConsumablesMgrDebugPage.java index 9bb2880..e1c9cec 100644 --- a/src/main/java/a8k/extui/page/debug/P02ConsumablesMgrDebugPage.java +++ b/src/main/java/a8k/extui/page/debug/P02ConsumablesMgrDebugPage.java @@ -1,15 +1,12 @@ package a8k.extui.page.debug; -import a8k.app.a8ktype.DeviceRunMode; import a8k.app.a8ktype.device.ConsumableGroup; import a8k.app.a8ktype.device.TipGroup; import a8k.app.a8ktype.device.consumables.LarBottleGroup; import a8k.app.a8ktype.device.consumables.LittBottleGroup; import a8k.app.a8ktype.device.consumables.ReactionPlateGroup; -import a8k.app.a8ktype.device.consumables.Tips; import a8k.app.a8ktype.error.ConsumablesScanReportErrorType; import a8k.app.a8ktype.exception.AppException; -import a8k.app.a8ktype.type.ConsumablesOneChannelScanResultPacket; import a8k.app.a8ktype.type.ConsumablesScanReport; import a8k.app.a8ktype.type.ConsumablesScanResultPacket; import a8k.app.dao.db.type.ProjExtInfoCard; @@ -21,7 +18,6 @@ import a8k.app.service.statemgr.ConsumablesMgrService; import a8k.app.service.statemgr.GStateMgrService; import a8k.extui.mgr.ExtApiPageMgr; import a8k.extui.type.ExtApiStatu; -import a8k.teststate.TestStateMgrService; import jakarta.annotation.PostConstruct; import jakarta.annotation.Resource; import org.springframework.stereotype.Component; diff --git a/src/main/java/a8k/extui/page/debug/P02TubeSettingDebugPage.java b/src/main/java/a8k/extui/page/debug/P02TubeSettingDebugPage.java index 3c6a258..b1ad9b2 100644 --- a/src/main/java/a8k/extui/page/debug/P02TubeSettingDebugPage.java +++ b/src/main/java/a8k/extui/page/debug/P02TubeSettingDebugPage.java @@ -1,17 +1,13 @@ package a8k.extui.page.debug; -import a8k.app.a8ktype.device.A8kTubeHolderType; import a8k.app.a8ktype.device.BloodType; import a8k.app.a8ktype.exception.AppException; -import a8k.app.a8ktype.type.TubeHolderScanResult; -import a8k.app.a8ktype.type.TubesScanResult; import a8k.app.a8ktype.ui.TubeHolderSetting; import a8k.app.a8ktype.ui.TubeSetting; import a8k.app.service.mainctrl.TubeHolderSettingMgrService; import a8k.app.service.statemgr.GStateMgrService; import a8k.extui.mgr.ExtApiPageMgr; import a8k.extui.type.ExtApiStatu; -import a8k.teststate.TestStateMgrService; import jakarta.annotation.PostConstruct; import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; diff --git a/src/main/java/a8k/extui/page/extapp/UsrOperationSimulation.java b/src/main/java/a8k/extui/page/extapp/UsrOperationSimulation.java index f91640f..7c46297 100644 --- a/src/main/java/a8k/extui/page/extapp/UsrOperationSimulation.java +++ b/src/main/java/a8k/extui/page/extapp/UsrOperationSimulation.java @@ -1,22 +1,12 @@ package a8k.extui.page.extapp; -import a8k.app.a8ktype.DeviceRunMode; import a8k.app.a8ktype.device.A8kTubeHolderType; import a8k.app.a8ktype.device.ConsumableGroup; -import a8k.app.a8ktype.device.TipGroup; -import a8k.app.a8ktype.device.consumables.LarBottleGroup; -import a8k.app.a8ktype.device.consumables.LittBottleGroup; -import a8k.app.a8ktype.device.consumables.ReactionPlateGroup; -import a8k.app.a8ktype.device.consumables.Tips; -import a8k.app.a8ktype.error.ConsumablesScanReportErrorType; import a8k.app.a8ktype.exception.AppException; -import a8k.app.a8ktype.type.ConsumablesScanReport; -import a8k.app.a8ktype.type.ConsumablesScanResultPacket; import a8k.app.a8ktype.type.TubeHolderScanResult; import a8k.app.a8ktype.type.TubesScanResult; import a8k.app.dao.db.type.ProjExtInfoCard; import a8k.app.factory.ProjExtInfoCardFactory; -import a8k.app.hardware.type.a8kcanprotocol.A8kEcode; import a8k.app.service.data.ProjIdCardInfoMgrService; import a8k.app.service.data.ProjInfoMgrService; import a8k.app.service.lowerctrl.ProjIDCardCtrlAndMonitorService; @@ -24,8 +14,7 @@ import a8k.app.service.mainctrl.AppConsumablesScanService; import a8k.app.service.statemgr.ConsumablesMgrService; import a8k.app.service.statemgr.GStateMgrService; import a8k.extui.mgr.ExtApiPageMgr; -import a8k.extui.type.ExtApiStatu; -import a8k.teststate.TestStateMgrService; +import a8k.app.teststate.TestStateMgrService; import jakarta.annotation.PostConstruct; import jakarta.annotation.Resource; import org.springframework.stereotype.Component; diff --git a/src/main/java/a8k/extui/page/extapp/tools/MoterMoveUtilsPage.java b/src/main/java/a8k/extui/page/extapp/tools/MoterMoveUtilsPage.java new file mode 100644 index 0000000..6d27986 --- /dev/null +++ b/src/main/java/a8k/extui/page/extapp/tools/MoterMoveUtilsPage.java @@ -0,0 +1,48 @@ +package a8k.extui.page.extapp.tools; + +import a8k.app.a8ktype.exception.AppException; +import a8k.app.hardware.driver.MiniServoDriver; +import a8k.app.hardware.driver.StepMotorCtrlDriver; +import a8k.app.hardware.driver.type.StepMotorMId; +import a8k.extui.mgr.ExtApiPageMgr; +import jakarta.annotation.PostConstruct; +import jakarta.annotation.Resource; +import org.springframework.stereotype.Component; + +@Component +public class MoterMoveUtilsPage { + @Resource + ExtApiPageMgr extApiPageMgr; + + static final Integer overtime = 10000; + + + @Resource + StepMotorCtrlDriver stepMotorCtrlDriver; + + + @Resource + MiniServoDriver miniServoDriver; + + public void clampALittle(Integer dpos) throws AppException { + stepMotorCtrlDriver.stepMotorEnable(StepMotorMId.ShakeModClampingM, 1); + stepMotorCtrlDriver.stepMotorEasyMoveByBlock(StepMotorMId.ShakeModClampingM, dpos, overtime); + } + + public void unclampALittle(Integer dpos) throws AppException { + stepMotorCtrlDriver.stepMotorEnable(StepMotorMId.ShakeModClampingM, 1); + stepMotorCtrlDriver.stepMotorEasyMoveByBlock(StepMotorMId.ShakeModClampingM, -dpos, overtime); + } + + @PostConstruct + public void init() { + var page = extApiPageMgr.newPage(this); + + page.newGroup("摇匀模组-试管夹紧电机"); + page.addFunction("夹紧一点", this::clampALittle).setParamVal("dpos", () -> 5); + page.addFunction("松开一点", this::unclampALittle).setParamVal("dpos", 5); + + + extApiPageMgr.addPage(page); + } +} diff --git a/src/main/java/a8k/extui/page/measurement/FeedingModMeasurePage.java b/src/main/java/a8k/extui/page/measurement/FeedingModMeasurePage.java index 766ae39..dead4e6 100644 --- a/src/main/java/a8k/extui/page/measurement/FeedingModMeasurePage.java +++ b/src/main/java/a8k/extui/page/measurement/FeedingModMeasurePage.java @@ -15,7 +15,7 @@ public class FeedingModMeasurePage { @Resource ExtApiPageMgr extApiPageMgr; - static final Integer overtime = 10000; + static final Integer overtime = 20000; @Resource @@ -29,23 +29,38 @@ public class FeedingModMeasurePage { Integer moveByDistance = 100; public Integer measureFeedingModXMPos() throws AppException { - stepMotorCtrlDriver.stepMotorEnable(StepMotorMId.FeedingModXM,1); + if (stepMotorCtrlDriver.isHasMoveToZero(StepMotorMId.FeedingModXM)) { + return stepMotorCtrlDriver.stepMotorReadPos(StepMotorMId.FeedingModXM); + } + stepMotorCtrlDriver.stepMotorEnable(StepMotorMId.FeedingModXM, 1); return stepMotorCtrlDriver.stepMotorReadPosByMoveToZeroBlock(StepMotorMId.FeedingModXM, overtime); } public void moveRight(Integer moveByDistance) throws AppException { - stepMotorCtrlDriver.stepMotorEnable(StepMotorMId.FeedingModXM,1); + stepMotorCtrlDriver.stepMotorEnable(StepMotorMId.FeedingModXM, 1); stepMotorCtrlDriver.stepMotorEasyMoveByBlock(StepMotorMId.FeedingModXM, -moveByDistance, overtime); this.moveByDistance = moveByDistance; } public void moveLeft(Integer moveByDistance) throws AppException { - stepMotorCtrlDriver.stepMotorEnable(StepMotorMId.FeedingModXM,1); + stepMotorCtrlDriver.stepMotorEnable(StepMotorMId.FeedingModXM, 1); stepMotorCtrlDriver.stepMotorEasyMoveByBlock(StepMotorMId.FeedingModXM, moveByDistance, overtime); this.moveByDistance = moveByDistance; } + public void moveTo(Integer pos) throws AppException { + stepMotorCtrlDriver.stepMotorEnable(StepMotorMId.FeedingModXM, 1); + if (!stepMotorCtrlDriver.isHasMoveToZero(StepMotorMId.FeedingModXM)) { + stepMotorCtrlDriver.stepMotorEasyMoveToZeroBlock(StepMotorMId.FeedingModXM, overtime); + } + stepMotorCtrlDriver.stepMotorEasyMoveToBlock(StepMotorMId.FeedingModXM, pos, overtime); + } + + public void freedomRun() throws AppException { + stepMotorCtrlDriver.stepMotorEnable(StepMotorMId.FeedingModXM, 0); + } + @PostConstruct public void init() { @@ -55,6 +70,8 @@ public class FeedingModMeasurePage { page.addFunction("向右移动", this::moveRight).setParamVal("moveByDistance", () -> moveByDistance); page.addFunction("向左移动", this::moveLeft).setParamVal("moveByDistance", () -> moveByDistance); page.addFunction("测量位置", this::measureFeedingModXMPos); + page.addFunction("移动到指定位置", this::moveTo); + page.addFunction("Freedom", this::freedomRun); extApiPageMgr.addPage(page); } diff --git a/src/main/java/a8k/extui/page/miniservo/MiniServoScanerPage.java b/src/main/java/a8k/extui/page/miniservo/MiniServoScanerPage.java new file mode 100644 index 0000000..830df43 --- /dev/null +++ b/src/main/java/a8k/extui/page/miniservo/MiniServoScanerPage.java @@ -0,0 +1,49 @@ +package a8k.extui.page.miniservo; + + +import a8k.app.a8ktype.exception.AppException; +import a8k.app.hardware.driver.MiniServoDriver; +import a8k.app.hardware.driver.type.MiniServoMId; +import a8k.extui.mgr.ExtApiPageMgr; +import jakarta.annotation.PostConstruct; +import jakarta.annotation.Resource; +import org.springframework.stereotype.Component; + +import java.util.HashMap; +import java.util.Map; + +@Component +public class MiniServoScanerPage { + + @Resource + MiniServoDriver miniServoDriver; + + + public Object scan() throws AppException { + Boolean shakeModGripperSVState = miniServoDriver.miniServoPing(MiniServoMId.ShakeModGripperSV); + Boolean shakeModGripperYSVState = miniServoDriver.miniServoPing(MiniServoMId.ShakeModGripperYSV); + Boolean shakeModTubeScanerClampingSVState = miniServoDriver.miniServoPing(MiniServoMId.ShakeModTubeScanerClampingSV); + Boolean shakeModTubeScanerRotateSVState = miniServoDriver.miniServoPing(MiniServoMId.ShakeModTubeScanerRotateSV); + + Map state = new HashMap<>(); + state.put("摇匀模组-夹爪", shakeModGripperSVState); + state.put("摇匀模组-Y轴", shakeModGripperYSVState); + + state.put("入料模组-扫码夹紧", shakeModTubeScanerClampingSVState); + state.put("入料模组-扫码旋转", shakeModTubeScanerRotateSVState); + return state; + } + + @Resource + ExtApiPageMgr extApiPageMgr; + + @PostConstruct + public void init() { + var page = extApiPageMgr.newPage(this); + + page.newGroup("基础"); + page.addFunction("扫描", this::scan); + + extApiPageMgr.addPage(page); + } +} diff --git a/src/main/java/a8k/extui/page/extsetting/pos_calibration/P01MiniServoReferencePointIniter.java b/src/main/java/a8k/extui/page/miniservo/P01MiniServoReferencePointIniter.java similarity index 82% rename from src/main/java/a8k/extui/page/extsetting/pos_calibration/P01MiniServoReferencePointIniter.java rename to src/main/java/a8k/extui/page/miniservo/P01MiniServoReferencePointIniter.java index 50b0cf4..8c5ffa2 100644 --- a/src/main/java/a8k/extui/page/extsetting/pos_calibration/P01MiniServoReferencePointIniter.java +++ b/src/main/java/a8k/extui/page/miniservo/P01MiniServoReferencePointIniter.java @@ -1,4 +1,4 @@ -package a8k.extui.page.extsetting.pos_calibration; +package a8k.extui.page.miniservo; import a8k.extui.mgr.ExtApiPageMgr; @@ -17,16 +17,16 @@ public class P01MiniServoReferencePointIniter { public void disableMotor() throws AppException { - miniServoDriver.miniServoEnable(MiniServoMId.ShakeModGripperSV, 0); - miniServoDriver.miniServoEnable(MiniServoMId.ShakeModGripperYSV, 0); - miniServoDriver.miniServoEnable(MiniServoMId.ShakeModTubeScanerClampingSV, 0); + miniServoDriver.miniServoForceEnable(MiniServoMId.ShakeModGripperSV, 0); + miniServoDriver.miniServoForceEnable(MiniServoMId.ShakeModGripperYSV, 0); + miniServoDriver.miniServoForceEnable(MiniServoMId.ShakeModTubeScanerClampingSV, 0); } public void enableMotor() throws AppException { - miniServoDriver.miniServoEnable(MiniServoMId.ShakeModGripperSV, 1); - miniServoDriver.miniServoEnable(MiniServoMId.ShakeModGripperYSV, 1); - miniServoDriver.miniServoEnable(MiniServoMId.ShakeModTubeScanerClampingSV, 1); + miniServoDriver.miniServoForceEnable(MiniServoMId.ShakeModGripperSV, 1); + miniServoDriver.miniServoForceEnable(MiniServoMId.ShakeModGripperYSV, 1); + miniServoDriver.miniServoForceEnable(MiniServoMId.ShakeModTubeScanerClampingSV, 1); } diff --git a/src/main/java/a8k/extui/page/test/driver/MotorCtrlPage.java b/src/main/java/a8k/extui/page/test/driver/MotorCtrlPage.java index 7614960..73a01a5 100644 --- a/src/main/java/a8k/extui/page/test/driver/MotorCtrlPage.java +++ b/src/main/java/a8k/extui/page/test/driver/MotorCtrlPage.java @@ -40,7 +40,7 @@ public class MotorCtrlPage { public void stepMotorEasyMoveToZero() throws AppException { - stepMotorCtrlDriver.stepMotorEasyMoveToZeroPointQuickBlock(id, 10000); + stepMotorCtrlDriver.stepMotorEasyMoveToZero(id); } public void stepMotorEasyMoveForward() throws AppException { @@ -67,7 +67,7 @@ public class MotorCtrlPage { page.newGroup("基础操作"); page.addFunction("使能电机", this::enableMotor); page.addFunction("失能电机", this::disableMotor); - page.addFunction("快速归零", this::stepMotorEasyMoveToZero); + page.addFunction("归零", this::stepMotorEasyMoveToZero); page.newGroup("相对移动"); page.addFunction("设置相对移动距离", this::setStepMotorDpos).setParamVal("dpos", () -> dpos); diff --git a/src/main/java/a8k/unittest/TestBeforeRun.java b/src/main/java/a8k/unittest/TestBeforeRun.java deleted file mode 100644 index 2a61843..0000000 --- a/src/main/java/a8k/unittest/TestBeforeRun.java +++ /dev/null @@ -1,21 +0,0 @@ -package a8k.unittest; - - -import a8k.app.service.param.pipetteparam.PipetteGunLLDParamMgr; -import jakarta.annotation.PostConstruct; -import jakarta.annotation.Resource; -import org.springframework.stereotype.Component; - -@Component -public class TestBeforeRun { - - @Resource - PipetteGunLLDParamMgr pipetteGunLLDParamMgr; - - @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/unittest/TestOptAnalyzer.java b/src/main/java/a8k/unittest/TestOptAnalyzer.java deleted file mode 100644 index 85adb6d..0000000 --- a/src/main/java/a8k/unittest/TestOptAnalyzer.java +++ /dev/null @@ -1,55 +0,0 @@ -package a8k.unittest; - -import a8k.app.a8kproj.A8kReactionResultComputer; -import a8k.app.a8kproj.fakeprojcontext.FakeProjInfoContextFactory; -import a8k.app.a8kproj.optalgo.type.OptAlgoAnalysResult; -import a8k.app.a8ktype.state.SampleInfo; -import a8k.app.dao.db.type.a8kidcard.zenum.A8kReactionFlowType; -import a8k.app.a8ktype.type.ReactionResult; -import a8k.app.utils.ProjInfo; -import jakarta.annotation.PostConstruct; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -@Component -@Slf4j -public class TestOptAnalyzer { - - @FunctionalInterface - public interface TEST { - Boolean test(); - } - - public Boolean TEST_OPT_RESULT_PARSE_01() { - var cfg = FakeProjInfoContextFactory.createCfg("TEST_PROJ", 2, A8kReactionFlowType.SampleAndBS, 3); - - ProjInfo projInfoContext = FakeProjInfoContextFactory.build(cfg); - SampleInfo sampleInfo = new SampleInfo(); - - OptAlgoAnalysResult optAlgoAnalysResult = new OptAlgoAnalysResult(); - optAlgoAnalysResult.pdR = 1.0; - optAlgoAnalysResult.pdAR = 1.0; - optAlgoAnalysResult.pdATR = 1.0; - optAlgoAnalysResult.pdRFR = 1.0; - optAlgoAnalysResult.pdT4R = 1.0; - optAlgoAnalysResult.pdT4T3R = 1.0; - - ReactionResult result = A8kReactionResultComputer.optComputeResult(sampleInfo, projInfoContext, 0, optAlgoAnalysResult); - log.info("result: {}", result); - return true; - } - - void test(String mark, TEST test) { - Boolean suc = test.test(); - if (suc) { - log.info("TEST: {} -> SUCCESS", mark); - } else { - log.error("TEST: {} -> FAILED", mark); - } - } - - @PostConstruct - void init() { - test("TEST_OPT_RESULT_PARSE_01", this::TEST_OPT_RESULT_PARSE_01); - } -} diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 90eb685..1ad2a68 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -2,7 +2,7 @@ server: port: 80 #device.runmode: "RealMode" -a8k.enableTemperatureCtrl: true +a8k.enableTemperatureCtrl: false device.runmode: "RealMode"