diff --git a/src/src/main/java/com/my/graphiteDigesterBg/move/MoveTubeToErrorRackSlot.java b/src/src/main/java/com/my/graphiteDigesterBg/move/MoveTubeToErrorRackSlot.java index f15f4dd..87429fe 100644 --- a/src/src/main/java/com/my/graphiteDigesterBg/move/MoveTubeToErrorRackSlot.java +++ b/src/src/main/java/com/my/graphiteDigesterBg/move/MoveTubeToErrorRackSlot.java @@ -4,9 +4,7 @@ import com.my.graphiteDigesterBg.diframe.DiTaskMoveBase; import com.my.graphiteDigesterBg.diframe.actuator.DiActMotor; import com.my.graphiteDigesterBg.diframe.actuator.DiActServo; import com.my.graphiteDigesterBg.resource.ResHeatingTubeRackSlotManager; - import java.util.List; - public class MoveTubeToErrorRackSlot extends DiTaskMoveBase { // slot index public Integer srcSlotIndex; @@ -14,102 +12,69 @@ public class MoveTubeToErrorRackSlot extends DiTaskMoveBase { public Integer srcTubeIndex; // error slot index public Integer errorTubeIndex; - // transfer up down motor - private DiActMotor transUdMotor = null; - // transfer left right motor - private DiActMotor transLrMotor = null; - // heat plate motor - private DiActMotor heatPlateMotor = null; - // transfer clip servo - private DiActServo transferClipServo = null; @Override public void run() { - this.transUdMotor = this.getActuator(MyDevice.ACT_TRANSFER_UD_MOTOR, DiActMotor.class); - this.transLrMotor = this.getActuator(MyDevice.ACT_TRANSFER_LR_MOTOR, DiActMotor.class); - this.heatPlateMotor = this.getActuator(MyDevice.ACT_HEAT_PLATE_MOTOR, DiActMotor.class); - this.transferClipServo = this.getActuator(MyDevice.ACT_TRANSFER_CLIP_SERVO, DiActServo.class); - - this.pickUpTheTube(); - this.putDownTheTube(); - } - - // pick up tube - private void pickUpTheTube() { - String srcSlotKey = "HeatingPlateMotorSlotCover_" + this.srcSlotIndex; - DiActServo srcSlotCoverServo = this.getActuator(srcSlotKey, DiActServo.class); - - // 计算加热盘移动到试管位置 - Integer heatPlateSlotLocation = this.heatPlateMotor.getLocationValue("HeatPlateSlot", this.srcSlotIndex); - Integer heatPlateSlotTubeOffset = this.heatPlateMotor.getLocationValue("HeatPlateSlotTubeOffset", this.srcTubeIndex); - this.execute(List.of( - () -> this.transUdMotor.moveTo("TransUdMotorTop"), // 升降移动到顶部 - () -> this.heatPlateMotor.moveTo(heatPlateSlotLocation + heatPlateSlotTubeOffset), // 加热盘移动到试管位置 - () -> srcSlotCoverServo.moveTo("HeatPlateSlotCoverOpen") // 打开试管架盖 - )); - - // 计算搬运左右移动到试管位置 - Integer transLrMotorHeatPlateSlotLocation = this.transLrMotor.getLocationValue("TransLrMotorHeatPlateSlot"); - Integer transLrMotorTubeOffset = this.transLrMotor.getLocationValue("TransLrMotorTubeOffset", this.srcTubeIndex); - Integer transLrMotorTubeClip = transLrMotorHeatPlateSlotLocation + transLrMotorTubeOffset; - this.execute(List.of( - () -> this.transLrMotor.moveTo(transLrMotorTubeClip), // 搬运左右移动到试管位置 - () -> this.transferClipServo.moveTo("TransClipServoOpenForTube") // 张开试管夹爪 - )); - - // 升降下降到试管位置 - this.transUdMotor.moveTo("TransUdMotorTubeClip"); - - // 试管夹爪关闭 - this.transferClipServo.moveTo("TransClipServoTubeClip"); - - // 升降移动到顶部 - this.transUdMotor.moveTo("TransUdMotorTop"); - - // 搬运左右移动就绪位置 - this.transLrMotor.moveTo("TransLrMotorStandby"); - - // 试管架盖关闭 - srcSlotCoverServo.moveTo("HeatPlateSlotCoverClose"); - } + // transfer up down motor + DiActMotor transUdMotor = this.getActuator(MyDevice.ACT_TRANSFER_UD_MOTOR, DiActMotor.class); + // transfer left right motor + DiActMotor transLrMotor = this.getActuator(MyDevice.ACT_TRANSFER_LR_MOTOR, DiActMotor.class); + // heat plate motor + DiActMotor heatPlateMotor = this.getActuator(MyDevice.ACT_HEAT_PLATE_MOTOR, DiActMotor.class); + // transfer clip servo + DiActServo transferClipServo = this.getActuator(MyDevice.ACT_TRANSFER_CLIP_SERVO, DiActServo.class); + // liquid + DiActMotor liquidPlateMotor = this.getActuator(MyDevice.ACT_LIQUID_PLATE_MOTOR, DiActMotor.class); + + // 拾取试管 + // 加液盘旋转到取试管位置 + liquidPlateMotor.moveTo("LiquidPlateTube", this.srcTubeIndex); + // 搬运夹爪张开 + transferClipServo.moveTo("TransClipServoOpenForTube"); + // 搬运左右移动到试管位置 + transLrMotor.moveTo("TransLrMotorLiquidPlateTube", this.srcTubeIndex); + // 搬运上下移动到取试管位置 + transUdMotor.moveTo("TransUdMotorLiquidPlateTubeClip"); + // 搬运夹爪关闭 + transferClipServo.moveTo("TransClipServoTubeClip"); + // 搬运上下移动到顶部 + transUdMotor.moveTo("TransUdMotorTop"); + // 搬运左右移动到就绪位置 + transLrMotor.moveTo("TransLrMotorStandby"); + // 加液试管架回到就绪位置 + liquidPlateMotor.moveTo("LiquidPlateStandby"); - // put down tube - private void putDownTheTube() { + // 标记该试管为空 var slotMan = this.getResourceManager(ResHeatingTubeRackSlotManager.class); + var slot = slotMan.getSlotByIndex(this.srcSlotIndex); + slot.getTubes().get(this.srcTubeIndex).setHasTube(false); + + // 下放试管 + // 打开试管架盖 var errorSlot = slotMan.getErrorSlot(); String errSlotKey = "HeatingPlateMotorSlotCover_" + errorSlot.index; - DiActServo errSlotCoverServo = this.getActuator(errSlotKey, DiActServo.class); - - // 加热盘移动到试管位置 - Integer errorHeatPlateSlotLocation = heatPlateMotor.getLocationValue("HeatPlateSlot", errorSlot.index); - Integer errorHeatPlateSlotTubeOffset = heatPlateMotor.getLocationValue("HeatPlateSlotTubeOffset", this.errorTubeIndex); - this.execute(List.of( - () -> heatPlateMotor.moveTo(errorHeatPlateSlotLocation + errorHeatPlateSlotTubeOffset), // 加热盘移动到试管位置 - () -> errSlotCoverServo.moveTo("HeatPlateSlotCoverOpen") // 打开试管架盖 - )); - + DiActServo coverServo = this.getActuator(errSlotKey, DiActServo.class); + coverServo.moveTo("HeatPlateSlotCoverOpen"); + // 加热转盘移动到试管位置 + heatPlateMotor.moveTo("HeatPlateErrorSlotTube", this.errorTubeIndex); // 搬运左右移动到试管位置 - Integer transLrMotorHeatPlateSlotLocation = this.transLrMotor.getLocationValue("TransLrMotorHeatPlateSlot"); - Integer transLrMotorTubeOffset = transLrMotor.getLocationValue("TransLrMotorTubeOffset", this.errorTubeIndex); - transLrMotor.moveTo(transLrMotorHeatPlateSlotLocation + transLrMotorTubeOffset); - + transLrMotor.moveTo("TransLrMotorHeatingPlateTube", this.errorTubeIndex); // 升降下降到试管位置 transUdMotor.moveTo("TransUdMotorTubeClip"); - - // 张开试管夹爪 + // 打开试管夹 transferClipServo.moveTo("TransClipServoOpenFromTube"); - // 升降移动到顶部 transUdMotor.moveTo("TransUdMotorTop"); - - this.execute(List.of( - () -> transferClipServo.moveTo("TransClipServoTubeClip"), // 试管夹爪关闭 - () -> transLrMotor.moveTo("TransLrMotorStandby") // 搬运左右移动就绪位置 - )); - - this.execute(List.of( - () -> errSlotCoverServo.moveTo("HeatPlateSlotCoverClose"), // 试管架盖关闭 - () -> heatPlateMotor.moveTo("HeatPlateStandby") // 加热盘移动到就绪位置 - )); + // 搬运左右移动到就绪位置 + transLrMotor.moveTo("TransLrMotorStandby"); + // 试管夹关闭 + transferClipServo.moveTo("TransClipServoClose"); + // 盖上试管架盖 + coverServo.moveTo("HeatPlateSlotCoverClose"); + // 加液转盘移至就绪位置 + heatPlateMotor.moveTo("HeatPlateStandby"); + // 标记试管位置存在 + var errorRackSlot = slotMan.getErrorSlot(); + errorRackSlot.getTubes().get(this.errorTubeIndex).setHasTube(true); } }