diff --git a/src/src/main/java/com/my/graphiteDigesterBg/step/StepTakeOutFromErrorSlot.java b/src/src/main/java/com/my/graphiteDigesterBg/step/StepTakeOutFromErrorSlot.java new file mode 100644 index 0000000..a673cb9 --- /dev/null +++ b/src/src/main/java/com/my/graphiteDigesterBg/step/StepTakeOutFromErrorSlot.java @@ -0,0 +1,103 @@ +package com.my.graphiteDigesterBg.step; +import com.my.graphiteDigesterBg.MyDevice; +import com.my.graphiteDigesterBg.diframe.DiTaskStepBase; +import com.my.graphiteDigesterBg.diframe.TaskStep; +import com.my.graphiteDigesterBg.diframe.actuator.DiActMotor; +import com.my.graphiteDigesterBg.diframe.actuator.DiActServo; +import com.my.graphiteDigesterBg.diframe.model.DiMdbNotification; +import com.my.graphiteDigesterBg.move.MoveDoorClose; +import com.my.graphiteDigesterBg.move.MoveDoorOpen; +import com.my.graphiteDigesterBg.resource.ResHeatingTubeRackSlotManager; +import com.my.graphiteDigesterBg.task.TaskDigestion; +import java.util.ArrayList; +import java.util.List; +@TaskStep(name="TakeOutFromErrorSlot") +public class StepTakeOutFromErrorSlot extends DiTaskStepBase { + @Override + public void run() { + var task = (TaskDigestion)this.getTask(); + + var slot = task.getSlot(); + List errorTubes = task.errorTubeIndexes; + if ( null == errorTubes ) { + errorTubes = new ArrayList<>(); + } + + // 开门 + MoveDoorOpen.execute(task.getDevice()); + + // 准备一个空试管架 + DiMdbNotification.taskAction(task,"TaskErrorDigestionStepTakeOutFromErrorSlot"); + task.waitAction("TaskErrorDigestionStepTakeOutFromErrorSlot"); + + // 关门 + MoveDoorClose.execute(task.getDevice()); + + for ( Integer errorTubeIndex : errorTubes ) { + this.takeOutFromErrorSlot(errorTubeIndex); + } + } + + // 从异常处理区域取出试管 + private void takeOutFromErrorSlot( Integer tubeIndex ) { + var task = (TaskDigestion)this.getTask(); + var slotMan = task.getResourceManager(ResHeatingTubeRackSlotManager.class); + var heatPlateMotor = this.getActuator(MyDevice.ACT_HEAT_PLATE_MOTOR, DiActMotor.class); + var transLrMotor = this.getActuator(MyDevice.ACT_TRANSFER_LR_MOTOR, DiActMotor.class); + var transUdMotor = this.getActuator(MyDevice.ACT_TRANSFER_UD_MOTOR, DiActMotor.class); + var transferClipServo = this.getActuator(MyDevice.ACT_TRANSFER_CLIP_SERVO, DiActServo.class); + var liquidPlateMotor = this.getActuator(MyDevice.ACT_LIQUID_PLATE_MOTOR, DiActMotor.class); + + // 打开试管架盖 + var errorSlot = slotMan.getErrorSlot(); + String errSlotKey = "HeatingPlateMotorSlotCover_" + errorSlot.index; + DiActServo coverServo = this.getActuator(errSlotKey, DiActServo.class); + coverServo.moveTo("HeatPlateSlotCoverOpen"); + // 加热转盘移动到试管位置 + heatPlateMotor.moveTo("HeatPlateErrorSlotTube", tubeIndex); + // 搬运左右移动到试管位置 + transLrMotor.moveTo("TransLrMotorHeatingPlateTube", tubeIndex); + // 打开试管夹 + transferClipServo.moveTo("TransClipServoOpenFromTube"); + // 升降下降到试管位置 + transUdMotor.moveTo("TransUdMotorTubeClip"); + // 试管夹关闭 + transferClipServo.moveTo("TransClipServoClose"); + // 升降移动到顶部 + transUdMotor.moveTo("TransUdMotorTop"); + // 搬运左右移动到就绪位置 + transLrMotor.moveTo("TransLrMotorStandby"); + // 盖上试管架盖 + coverServo.moveTo("HeatPlateSlotCoverClose"); + // 加液转盘移至就绪位置 + heatPlateMotor.moveTo("HeatPlateStandby"); + // 标记试管位置存在 + var errorRackSlot = slotMan.getErrorSlot(); + errorRackSlot.getTubes().get(tubeIndex).setHasTube(false); + + // 下方试管 + // 加液盘旋转到试管位置 + liquidPlateMotor.moveTo("LiquidPlateTube", tubeIndex); + // 搬运左右移动到试管位置 + transLrMotor.moveTo("TransLrMotorLiquidPlateTube", tubeIndex); + // 搬运上下移动到取试管位置 + transUdMotor.moveTo("TransUdMotorLiquidPlateTubeClip"); + // 搬运夹爪张开 + transferClipServo.moveTo("TransClipServoOpenForTube"); + // 搬运上下移动到顶部 + transUdMotor.moveTo("TransUdMotorTop"); + // 搬运夹爪关闭 + transferClipServo.moveTo("TransClipServoTubeClip"); + // 搬运左右移动到就绪位置 + transLrMotor.moveTo("TransLrMotorStandby"); + // 加液试管架回到就绪位置 + liquidPlateMotor.moveTo("LiquidPlateStandby"); + } + + // action done + public void actionDone( ) { + var task = (TaskDigestion)this.getTask(); + var action = task.getAction("TaskErrorDigestionStepTakeOutFromErrorSlot"); + action.finish(); + } +} diff --git a/src/web/src/pages/main/Page.vue b/src/web/src/pages/main/Page.vue index c51715a..30230f1 100644 --- a/src/web/src/pages/main/Page.vue +++ b/src/web/src/pages/main/Page.vue @@ -66,6 +66,7 @@ + \ No newline at end of file