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