|
|
@ -285,40 +285,46 @@ public class DigestionTaskThread extends Thread { |
|
|
|
// 拍照检查异常试管 |
|
|
|
this.executeLastRoundTakeShotAndCheckErrorTubes(); |
|
|
|
|
|
|
|
// 申请异常处理位 |
|
|
|
var errorSlot = device.heatingTurntable.getErrorSlot(); |
|
|
|
var emptyTubeIndexes = errorSlot.getEmptyTubeIndexes(this.errorTubeIndexes.size()); |
|
|
|
var errorTubeIndexes = this.errorTubeIndexes; |
|
|
|
if ( emptyTubeIndexes.size() < this.errorTubeIndexes.size() ) { |
|
|
|
errorTubeIndexes = this.errorTubeIndexes.subList(0, emptyTubeIndexes.size()); |
|
|
|
} |
|
|
|
|
|
|
|
// 将异常试管放入异常处理区域 |
|
|
|
String srcErrorTubeIndexes = String.join(",", errorTubeIndexes.stream().map(Object::toString).toArray(String[]::new)); |
|
|
|
String dstErrorTubeIndexes = String.join(",", emptyTubeIndexes.stream().map(Object::toString).toArray(String[]::new)); |
|
|
|
this.updateTaskStatus("MoveTube", String.format("移动异常试管 [%s] -> [%s]", srcErrorTubeIndexes, dstErrorTubeIndexes)); |
|
|
|
device.transferArm.moveTubesToErrorSlot(errorTubeIndexes, emptyTubeIndexes); |
|
|
|
this.errorTubeIndexes.clear(); |
|
|
|
this.errorTubeIndexes.addAll(emptyTubeIndexes); |
|
|
|
// 如果启用异常处理则执行异常处理操作 |
|
|
|
Boolean errorProcessEnable = UfMdbOption.getBoolean("DigestionTaskErrorProcessEnable", true); |
|
|
|
if ( errorProcessEnable ) { |
|
|
|
// 申请异常处理位 |
|
|
|
var errorSlot = device.heatingTurntable.getErrorSlot(); |
|
|
|
var emptyTubeIndexes = errorSlot.getEmptyTubeIndexes(this.errorTubeIndexes.size()); |
|
|
|
var errorTubeIndexes = this.errorTubeIndexes; |
|
|
|
if ( emptyTubeIndexes.size() < this.errorTubeIndexes.size() ) { |
|
|
|
errorTubeIndexes = this.errorTubeIndexes.subList(0, emptyTubeIndexes.size()); |
|
|
|
} |
|
|
|
|
|
|
|
// 更新试管状态 |
|
|
|
for ( int i=0; i<errorTubeIndexes.size(); i++ ) { |
|
|
|
var srcErrorTubeIndex = errorTubeIndexes.get(i); |
|
|
|
var destErrorTubeIndex = emptyTubeIndexes.get(i); |
|
|
|
// 将异常试管放入异常处理区域 |
|
|
|
String srcErrorTubeIndexes = String.join(",", errorTubeIndexes.stream().map(Object::toString).toArray(String[]::new)); |
|
|
|
String dstErrorTubeIndexes = String.join(",", emptyTubeIndexes.stream().map(Object::toString).toArray(String[]::new)); |
|
|
|
this.updateTaskStatus("MoveTube", String.format("移动异常试管 [%s] -> [%s]", srcErrorTubeIndexes, dstErrorTubeIndexes)); |
|
|
|
device.transferArm.moveTubesToErrorSlot(errorTubeIndexes, emptyTubeIndexes); |
|
|
|
this.errorTubeIndexes.clear(); |
|
|
|
this.errorTubeIndexes.addAll(emptyTubeIndexes); |
|
|
|
|
|
|
|
// 更新试管状态 |
|
|
|
for ( int i=0; i<errorTubeIndexes.size(); i++ ) { |
|
|
|
var srcErrorTubeIndex = errorTubeIndexes.get(i); |
|
|
|
var destErrorTubeIndex = emptyTubeIndexes.get(i); |
|
|
|
|
|
|
|
var tube = this.heatingSlot.tubes.get(srcErrorTubeIndex); |
|
|
|
tube.index = destErrorTubeIndex; |
|
|
|
errorSlot.tubes.set(destErrorTubeIndex, tube); |
|
|
|
this.heatingSlot.tubes.set(srcErrorTubeIndex, null); |
|
|
|
} |
|
|
|
|
|
|
|
var tube = this.heatingSlot.tubes.get(srcErrorTubeIndex); |
|
|
|
tube.index = destErrorTubeIndex; |
|
|
|
errorSlot.tubes.set(destErrorTubeIndex, tube); |
|
|
|
this.heatingSlot.tubes.set(srcErrorTubeIndex, null); |
|
|
|
} |
|
|
|
// 将正常试管放入加热转盘 |
|
|
|
device.transferArm.moveTubeRackToHeatingTurntable(this.heatingSlot.index); |
|
|
|
this.unlockLiquidPlate(); |
|
|
|
|
|
|
|
// 将正常试管放入加热转盘 |
|
|
|
device.transferArm.moveTubeRackToHeatingTurntable(this.heatingSlot.index); |
|
|
|
this.unlockLiquidPlate(); |
|
|
|
// 启动异常处理线程 |
|
|
|
DigestionTaskThread.this.errorProcessThread = new Thread(DigestionTaskThread.this::executeErrorProcess); |
|
|
|
DigestionTaskThread.this.errorProcessThread.start(); |
|
|
|
} |
|
|
|
|
|
|
|
// 启动异常处理线程 |
|
|
|
DigestionTaskThread.this.errorProcessThread = new Thread(DigestionTaskThread.this::executeErrorProcess); |
|
|
|
DigestionTaskThread.this.errorProcessThread.start(); |
|
|
|
// 预检查完成 |
|
|
|
DigestionTaskThread.this.isPrecheckFinished = true; |
|
|
|
synchronized ( DigestionTaskThread.this.precheckLock ) { |
|
|
|