|
|
@ -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); |
|
|
|
} |
|
|
|
} |