From 59a9d76e2a98bb5b9225fbc3939af68108860e63 Mon Sep 17 00:00:00 2001 From: sige Date: Fri, 1 Mar 2024 20:22:29 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8A=A0=E6=B6=B2=E6=97=B6=E6=A3=80=E6=9F=A5?= =?UTF-8?q?=E8=AF=95=E7=AE=A1=E7=A9=BA=E4=BD=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../my/graphiteDigesterBg/move/MoveLiquidAdd.java | 64 ++++++++++++++++++---- .../com/my/graphiteDigesterBg/step/StepPump.java | 1 + .../my/graphiteDigesterBg/task/TaskLiquidAdd.java | 1 + 3 files changed, 56 insertions(+), 10 deletions(-) diff --git a/src/src/main/java/com/my/graphiteDigesterBg/move/MoveLiquidAdd.java b/src/src/main/java/com/my/graphiteDigesterBg/move/MoveLiquidAdd.java index 5fe60d1..889bd01 100644 --- a/src/src/main/java/com/my/graphiteDigesterBg/move/MoveLiquidAdd.java +++ b/src/src/main/java/com/my/graphiteDigesterBg/move/MoveLiquidAdd.java @@ -4,6 +4,10 @@ import com.my.graphiteDigesterBg.diframe.DiTaskMoveBase; import com.my.graphiteDigesterBg.diframe.actuator.DiActMotor; import com.my.graphiteDigesterBg.diframe.actuator.DiActPeristalticPump; import com.my.graphiteDigesterBg.resource.ResAcidManager; +import com.my.graphiteDigesterBg.resource.ResHeatingTubeRackSlot; +import com.my.graphiteDigesterBg.resource.ResHeatingTubeRackSlotManager; + +import java.util.ArrayList; import java.util.List; public class MoveLiquidAdd extends DiTaskMoveBase { // shake times @@ -12,6 +16,10 @@ public class MoveLiquidAdd extends DiTaskMoveBase { public Integer liquidVolume; // liquid type public String liquidType; + // slot index + public Integer slotIndex; + // slot + private ResHeatingTubeRackSlot slot = null; @Override public void run() { @@ -20,6 +28,9 @@ public class MoveLiquidAdd extends DiTaskMoveBase { var groupInPump = this.getActuator("LiquidPeristalticPump_" + bucket.index + "_0", DiActPeristalticPump.class); var groupOutPump = this.getActuator("LiquidPeristalticPump_" + bucket.index + "_1", DiActPeristalticPump.class); + ResHeatingTubeRackSlotManager slotMan = this.getResourceManager(ResHeatingTubeRackSlotManager.class); + this.slot = slotMan.getSlotByIndex(this.slotIndex); + // 加液 DiActMotor liquidMotor = this.getActuator(MyDevice.ACT_LIQUID_MOTOR, DiActMotor.class); DiActMotor liquidPlateMotor = this.getActuator(MyDevice.ACT_LIQUID_PLATE_MOTOR, DiActMotor.class); @@ -29,22 +40,36 @@ public class MoveLiquidAdd extends DiTaskMoveBase { () -> liquidMotor.moveTo("LiquidArmPumpGroupOut"), () -> liquidPlateMotor.moveTo("LiquidPlateSlotPumpOutGroup", index) )); - this.execute(List.of( // 加液 - () -> groupOutPump.pump(this.liquidVolume), - () -> groupInPump.pump(this.liquidVolume) - )); - bucket.consume(this.liquidVolume * 2); + + // 外圈:判断试管有无, 并执行加液 + var pumpExecOut = new ArrayList(); + if ( this.isTubeExist("GroupOut", "PumpOut", i) ) { + pumpExecOut.add(() -> groupOutPump.pump(this.liquidVolume)); + bucket.consume(this.liquidVolume); + } + if ( this.isTubeExist("GroupOut", "PumpIn", i) ) { + pumpExecOut.add(() -> groupInPump.pump(this.liquidVolume)); + bucket.consume(this.liquidVolume); + } + this.execute(pumpExecOut); // 内圈试管加液 this.execute(List.of( // 移动到内圈试管位置 () -> liquidMotor.moveTo("LiquidArmPumpGroupIn"), () -> liquidPlateMotor.moveTo("LiquidPlateSlotPumpInGroup", index) )); - this.execute(List.of( // 加液 - () -> groupInPump.pump(this.liquidVolume), - () -> groupOutPump.pump(this.liquidVolume) - )); - bucket.consume(this.liquidVolume * 2); + + // 内圈:判断试管有无, 并执行加液 + var pumpExecIn = new ArrayList(); + if ( this.isTubeExist("GroupIn", "PumpOut", i) ) { + pumpExecIn.add(() -> groupOutPump.pump(this.liquidVolume)); + bucket.consume(this.liquidVolume); + } + if ( this.isTubeExist("GroupIn", "PumpIn", i) ) { + pumpExecIn.add(() -> groupInPump.pump(this.liquidVolume)); + bucket.consume(this.liquidVolume); + } + this.execute(pumpExecIn); } liquidMotor.moveTo("LiquidArmStandby"); @@ -62,4 +87,23 @@ public class MoveLiquidAdd extends DiTaskMoveBase { liquidMotor.moveTo("LiquidArmStandby"); } + + // 判断试管是否存在 + private Boolean isTubeExist(String groupType, String PumpType, Integer pumpIndex) { + var slotGroupOutIndexList = List.of(0,4, 3,2, 12,13, 15,11); + var slotGroupInIndexList = List.of(1,5, 7,6, 8,9, 14,10); + + var slotGroupIndexList = slotGroupOutIndexList; + if ( "GroupIn".equals(groupType) ) { + slotGroupIndexList = slotGroupInIndexList; + } + + var slotIndex = slotGroupIndexList.get(pumpIndex*2); + if ( "PumpIn".equals(PumpType) ) { + slotIndex = slotGroupIndexList.get(pumpIndex*2+1); + } + + var tubeStatus = this.slot.getTubeStatus(slotIndex); + return ResHeatingTubeRackSlot.TUBE_STATUS_USED.equals(tubeStatus); + } } diff --git a/src/src/main/java/com/my/graphiteDigesterBg/step/StepPump.java b/src/src/main/java/com/my/graphiteDigesterBg/step/StepPump.java index d480503..49064b9 100644 --- a/src/src/main/java/com/my/graphiteDigesterBg/step/StepPump.java +++ b/src/src/main/java/com/my/graphiteDigesterBg/step/StepPump.java @@ -32,6 +32,7 @@ public class StepPump extends DiTaskStepBase { liquidAdd.shakeTimes = this.shake; liquidAdd.liquidType = this.type; liquidAdd.liquidVolume = this.amount; + liquidAdd.slotIndex = task.slotIndex; liquidAdd.run(); // move tube rack from liquid plate to heat plate diff --git a/src/src/main/java/com/my/graphiteDigesterBg/task/TaskLiquidAdd.java b/src/src/main/java/com/my/graphiteDigesterBg/task/TaskLiquidAdd.java index a64a162..0f0e306 100644 --- a/src/src/main/java/com/my/graphiteDigesterBg/task/TaskLiquidAdd.java +++ b/src/src/main/java/com/my/graphiteDigesterBg/task/TaskLiquidAdd.java @@ -35,6 +35,7 @@ public class TaskLiquidAdd extends DiTaskBase { liquidAdd.shakeTimes = this.shakeTimes; liquidAdd.liquidType = this.liquidType; liquidAdd.liquidVolume = this.liquidVolume; + liquidAdd.slotIndex = this.slotIndex; liquidAdd.run(); // move tube rack from liquid plate to heat plate