diff --git a/README.md b/README.md index a74a834..40b253e 100644 --- a/README.md +++ b/README.md @@ -38,6 +38,10 @@ TODO: 1.想办法解决 + +4:号仓位退不出 +14 + ``` diff --git a/src/main/java/a8k/canbus/A8kModParamInitializer.java b/src/main/java/a8k/canbus/A8kModParamInitializer.java index 922aedc..4948ea6 100644 --- a/src/main/java/a8k/canbus/A8kModParamInitializer.java +++ b/src/main/java/a8k/canbus/A8kModParamInitializer.java @@ -70,6 +70,18 @@ public class A8kModParamInitializer implements AppEventListener { // canBus.moduleSetReg(MId.OptModPullM, RegIndex.kreg_step_motor_run_to_zero_speed, 500); + canBus.moduleSetReg(MId.OptModPullM, RegIndex.kreg_step_motor_default_velocity, 2200); + // canBus.moduleSetReg(MId.OptModPullM, RegIndex.kreg_step_motor_a1, 50); + // canBus.moduleSetReg(MId.OptModPullM, RegIndex.kreg_step_motor_amax, 100); + canBus.moduleSetReg(MId.OptModPullM, RegIndex.kreg_step_motor_irun, 31); + + canBus.moduleSetReg(MId.PlatesBoxPusherM, RegIndex.kreg_step_motor_default_velocity, 1500); + canBus.moduleSetReg(MId.PlatesBoxPusherM, RegIndex.kreg_step_motor_irun, 31); + + canBus.moduleSetReg(MId.PlatesBoxYM, RegIndex.kreg_step_motor_default_velocity, 1500); + canBus.moduleSetReg(MId.PlatesBoxYM, RegIndex.kreg_step_motor_irun, 25); + + // canBus.moduleSetReg(MId.OptModPullM, RegIndex.kreg_step_motor_run_to_zero_speed, 500); } diff --git a/src/main/java/a8k/canbus/protocol/A8kEcode.java b/src/main/java/a8k/canbus/protocol/A8kEcode.java index 609374b..bbebce5 100644 --- a/src/main/java/a8k/canbus/protocol/A8kEcode.java +++ b/src/main/java/a8k/canbus/protocol/A8kEcode.java @@ -27,6 +27,7 @@ public enum A8kEcode { TubeXChannelIsNotEmpty(21, "试管架平移通道不为空"),// TubeTypeNotSupport(22, "试管类型不支持"),// CmdIdNotSupport(23, "不支持指令"),// + PullPlateFail(24, "钩板卡板"),// // // FOR HARDWARE // diff --git a/src/main/java/a8k/service/hardware/ReactionPlatesTransmitCtrlService.java b/src/main/java/a8k/service/hardware/ReactionPlatesTransmitCtrlService.java index 2a5b2fe..5cf14ac 100644 --- a/src/main/java/a8k/service/hardware/ReactionPlatesTransmitCtrlService.java +++ b/src/main/java/a8k/service/hardware/ReactionPlatesTransmitCtrlService.java @@ -28,7 +28,7 @@ public class ReactionPlatesTransmitCtrlService implements HardwareCtrlModule { @HardwareServiceParam(name = "动作超时时间", group = "基础参数") public Integer getActionOvertime() { - return hpReader.getInteger("actionOvertime", 10000); + return hpReader.getInteger("actionOvertime", 7000); } @HardwareServiceParam(name = "板夹仓通道0位置", group = "板夹仓参数") @@ -62,7 +62,7 @@ public class ReactionPlatesTransmitCtrlService implements HardwareCtrlModule { @HardwareServiceParam(name = "仓位0出板位置", group = "转盘参数") public Integer getTurntablePullPos0() { - return hpReader.getInteger("TurntablePullPos0", 1650 + 18000); + return hpReader.getInteger("TurntablePullPos0", 19700); } @HardwareServiceParam(name = "仓位0点滴位", group = "转盘参数") @@ -89,7 +89,7 @@ public class ReactionPlatesTransmitCtrlService implements HardwareCtrlModule { @HardwareServiceParam(name = "扫描待机位", group = "光学模组参数") public Integer getOptScanScandbyPos() { - return hpReader.getInteger("OptScanScandbyPos", 580); + return hpReader.getInteger("OptScanScandbyPos", 305); } /** @@ -247,12 +247,24 @@ public class ReactionPlatesTransmitCtrlService implements HardwareCtrlModule { return AppRet.success(canBus.plateCodeScannerReadCode(MId.PlatesBoxScanner)); } + public void pushPlateQuick(PlateBoxCh PBCh, IncubatorPos turntablePosIndex) throws HardwareException, InterruptedException { + trunableMoveToPushPos(turntablePosIndex); + canBus.stepMotorEasyMoveToBlock(MId.PlatesBoxYM, getPBCh0Pos() + PBCh.off * getPBChSpacing(), getActionOvertime()); + canBus.stepMotorEasyMoveToBlock(MId.PlatesBoxPusherM, getPusherEndPos(), getActionOvertime()); + canBus.stepMotorEasyMoveToZeroPointQuickBlock(MId.PlatesBoxPusherM, getActionOvertime()); + canBus.stepMotorEasyMoveToZeroPointQuickBlock(MId.PlatesBoxYM, getActionOvertime()); + } + @HardwareServiceAction(name = "拉板", group = "单步操作") public void pullPlate(IncubatorPos turntablePosIndex) throws HardwareException, InterruptedException { trunableMoveToPullPos(turntablePosIndex); canBus.stepMotorEasyMoveToBlock(MId.OptModScannerM, getOptScanScandbyPos(), getActionOvertime()); canBus.stepMotorEasyMoveToBlock(MId.OptModPullM, getPullerTargetPos(), getActionOvertime()); + if (!canBus.getIOState(IOId.PullerMEndPPS)) { + logger.error("pull plate fail"); + throw new HardwareException(A8kEcode.PullPlateFail); + } canBus.stepMotorEasyMoveToZeroPointQuickBlock(MId.OptModPullM, getActionOvertime()); } @@ -263,29 +275,33 @@ public class ReactionPlatesTransmitCtrlService implements HardwareCtrlModule { canBus.stepMotorEasyMoveToBlock(MId.OptModScannerM, getOptScanScandbyPos(), getActionOvertime()); } - private Boolean breakDropAllPlateFlag = false; + Boolean pushAllPlateAndDropBreakFlag = false; - @HardwareServiceAction(name = "丢弃全部板", group = "测试") - public void dropAllPlate() throws HardwareException, InterruptedException { - breakDropAllPlateFlag = false; + @HardwareServiceAction(name = "推全部板同时丢弃", group = "位置测试") + public void pushAllPlateAndDrop(PlateBoxCh PBCh, IncubatorPos startPos) throws HardwareException, InterruptedException { + pushAllPlateAndDropBreakFlag = false; checkBeforeMoveTrunable(); checkBeforeMovePlateBox(); modGroupMoveToZeroQuick(); + dropPlate(); for (IncubatorPos index : IncubatorPos.values()) { + if (index.compareTo(startPos) < 0) { + continue; + } + pushPlateQuick(PBCh, index); + if (pushAllPlateAndDropBreakFlag) {break;} pullPlate(index); + if (pushAllPlateAndDropBreakFlag) {break;} dropPlate(); - if (breakDropAllPlateFlag) { - break; - } + if (pushAllPlateAndDropBreakFlag) {break;} } } - @HardwareServiceAction(name = "打断-丢弃全部板", group = "测试") - public void breakDropAllPlate() throws HardwareException, InterruptedException { - breakDropAllPlateFlag = true; + @HardwareServiceAction(name = "推全部板同时丢弃中断", group = "位置测试") + public void pushAllPlateAndDropBreak() { + pushAllPlateAndDropBreakFlag = true; } - @HardwareServiceAction(name = "显示板夹扫码原始曲线", group = "辅助调试") public AppRet readPlateScanCurve() throws HardwareException, InterruptedException { List scanDataCurve = canBus.plateCodeScanerReadRawResult(MId.PlatesBoxScanner);