|
@ -1,16 +1,12 @@ |
|
|
package a8k.app.service.lowerctrl; |
|
|
package a8k.app.service.lowerctrl; |
|
|
|
|
|
|
|
|
|
|
|
import a8k.app.hardware.driver.*; |
|
|
import a8k.app.hardware.type.*; |
|
|
import a8k.app.hardware.type.*; |
|
|
import a8k.app.type.ui.ZAppPromopt; |
|
|
import a8k.app.type.ui.ZAppPromopt; |
|
|
import a8k.app.type.ui.ZAppPromoptFormsItem; |
|
|
import a8k.app.type.ui.ZAppPromoptFormsItem; |
|
|
import a8k.app.type.ui.MessageLevel; |
|
|
import a8k.app.type.ui.MessageLevel; |
|
|
import a8k.app.factory.ZAppPromoptFactory; |
|
|
import a8k.app.factory.ZAppPromoptFactory; |
|
|
import a8k.app.hardware.channel.A8kCanBusService; |
|
|
import a8k.app.hardware.channel.A8kCanBusService; |
|
|
import a8k.app.hardware.driver.InputDetectDriver; |
|
|
|
|
|
import a8k.app.hardware.driver.ModuleEnableCtrlDriver; |
|
|
|
|
|
import a8k.app.hardware.driver.MiniServoDriver; |
|
|
|
|
|
import a8k.app.hardware.driver.PipetteCtrlDriver; |
|
|
|
|
|
import a8k.app.hardware.driver.StepMotorCtrlDriver; |
|
|
|
|
|
|
|
|
|
|
|
import a8k.app.service.background.AppEventBusService; |
|
|
import a8k.app.service.background.AppEventBusService; |
|
|
import a8k.app.teststate.VirtualDevice; |
|
|
import a8k.app.teststate.VirtualDevice; |
|
@ -35,7 +31,9 @@ public class DeviceMoveToZeroCtrlService { |
|
|
public enum Type { |
|
|
public enum Type { |
|
|
CHECK_TUBE_XCHANNEL_IS_EMPTY,//入料通道是否为空 |
|
|
CHECK_TUBE_XCHANNEL_IS_EMPTY,//入料通道是否为空 |
|
|
CHECK_PLATE_BOX_IS_COVER,//板夹仓盖子是否盖着 |
|
|
CHECK_PLATE_BOX_IS_COVER,//板夹仓盖子是否盖着 |
|
|
CHECK_PLATE_STUCK_DETECTOR_SENSOR_IS_TRIGGER,//板夹仓卡板检测 |
|
|
|
|
|
|
|
|
CHECK_PLATE_STUCK_DETECTOR_SENSOR1_IS_TRIGGER,//板夹仓卡板检测 |
|
|
|
|
|
CHECK_PLATE_STUCK_DETECTOR_SENSOR2_IS_TRIGGER,//板夹仓卡板检测 |
|
|
|
|
|
|
|
|
CHECK_PULLERM_IS_IN_ZEROPOS,//检查拉杆电机是否在零点位置 |
|
|
CHECK_PULLERM_IS_IN_ZEROPOS,//检查拉杆电机是否在零点位置 |
|
|
CHECK_PUSHERM_IN_IN_ZEROPOS,//检查推杆电机是否在零点位置 |
|
|
CHECK_PUSHERM_IN_IN_ZEROPOS,//检查推杆电机是否在零点位置 |
|
|
CHECK_RECYCLE_BIN_IS_OVERFLOW,//检查垃圾箱是否满 |
|
|
CHECK_RECYCLE_BIN_IS_OVERFLOW,//检查垃圾箱是否满 |
|
@ -118,8 +116,10 @@ public class DeviceMoveToZeroCtrlService { |
|
|
// CheckPointType.CHECK_TUBE_XCHANNEL_IS_EMPTY, () -> !inputDetectDriver.getIOState(InputIOId.THChInterPPS) && !inputDetectDriver.getIOState(InputIOId.THChOuterPPS))); |
|
|
// CheckPointType.CHECK_TUBE_XCHANNEL_IS_EMPTY, () -> !inputDetectDriver.getIOState(InputIOId.THChInterPPS) && !inputDetectDriver.getIOState(InputIOId.THChOuterPPS))); |
|
|
checkPoints.add(new Checkpoint("检查板夹仓盖子是否盖上",// |
|
|
checkPoints.add(new Checkpoint("检查板夹仓盖子是否盖上",// |
|
|
Checkpoint.Type.CHECK_PLATE_BOX_IS_COVER, () -> inputDetectDriver.getIOState(InputIOId.PlateBoxCoverClosurePPS))); |
|
|
Checkpoint.Type.CHECK_PLATE_BOX_IS_COVER, () -> inputDetectDriver.getIOState(InputIOId.PlateBoxCoverClosurePPS))); |
|
|
checkPoints.add(new Checkpoint("检测是否卡板",// |
|
|
|
|
|
Checkpoint.Type.CHECK_PLATE_STUCK_DETECTOR_SENSOR_IS_TRIGGER, () -> !inputDetectDriver.getIOState(InputIOId.PlateBoxPlateStuckPPS))); |
|
|
|
|
|
|
|
|
checkPoints.add(new Checkpoint("检测孵育盘入口是否卡板",// |
|
|
|
|
|
Checkpoint.Type.CHECK_PLATE_STUCK_DETECTOR_SENSOR1_IS_TRIGGER, () -> !inputDetectDriver.getIOState(InputIOId.IncubationPlateInletStuckPPS))); |
|
|
|
|
|
// checkPoints.add(new Checkpoint("检测孵育盘出口是否卡板",// |
|
|
|
|
|
// Checkpoint.Type.CHECK_PLATE_STUCK_DETECTOR_SENSOR2_IS_TRIGGER, () -> !inputDetectDriver.getIOState(InputIOId.IncubationPlateOutletStuckPPS))); |
|
|
// checkPoints.add(new Checkpoint("检查拉杆电机是否在零点位置",// |
|
|
// checkPoints.add(new Checkpoint("检查拉杆电机是否在零点位置",// |
|
|
// CheckPointType.CHECK_PULLERM_IS_IN_ZEROPOS, () -> inputDetectDriver.getIOState(InputIOId.PullerMZeroPPS))); |
|
|
// CheckPointType.CHECK_PULLERM_IS_IN_ZEROPOS, () -> inputDetectDriver.getIOState(InputIOId.PullerMZeroPPS))); |
|
|
// checkPoints.add(new Checkpoint("检查推杆电机是否在零点位置",// |
|
|
// checkPoints.add(new Checkpoint("检查推杆电机是否在零点位置",// |
|
@ -184,10 +184,17 @@ public class DeviceMoveToZeroCtrlService { |
|
|
log.info("板夹仓推板电机回零"); |
|
|
log.info("板夹仓推板电机回零"); |
|
|
stepMotorCtrlDriver.stepMotorEasyMoveToZeroBlock(StepMotorMId.PlatesBoxPusherM); |
|
|
stepMotorCtrlDriver.stepMotorEasyMoveToZeroBlock(StepMotorMId.PlatesBoxPusherM); |
|
|
//光学模组初始化 |
|
|
//光学模组初始化 |
|
|
log.info("光学模组拉杆电机回零"); |
|
|
|
|
|
stepMotorCtrlDriver.stepMotorEasyMoveToZeroBlock(StepMotorMId.OptModPullM); |
|
|
|
|
|
log.info("光学模组扫码电机回零"); |
|
|
log.info("光学模组扫码电机回零"); |
|
|
stepMotorCtrlDriver.stepMotorEasyMoveToZeroBlock(StepMotorMId.OptModScannerM); |
|
|
stepMotorCtrlDriver.stepMotorEasyMoveToZeroBlock(StepMotorMId.OptModScannerM); |
|
|
|
|
|
log.info("光学模组拉杆电机回零"); |
|
|
|
|
|
stepMotorCtrlDriver.stepMotorEasyMoveToEndPointBlock(StepMotorMId.OptModPullM);// |
|
|
|
|
|
stepMotorCtrlDriver.stepMotorEasyMoveToZeroBlock(StepMotorMId.OptModPullM); |
|
|
|
|
|
if (inputDetectDriver.getIOState(InputIOId.IncubationPlateOutletStuckPPS)) { |
|
|
|
|
|
throw AppException.of(A8kEcode.APPE_INCUBATION_PLATE_OUTLET_STUCK_DETECTOR_SENSOR_IS_TRIGGER); |
|
|
|
|
|
} |
|
|
|
|
|
if (inputDetectDriver.getIOState(InputIOId.IncubationPlateInletStuckPPS)) { |
|
|
|
|
|
throw AppException.of(A8kEcode.APPE_INCUBATION_PLATE_INLET_STUCK_DETECTOR_SENSOR_IS_TRIGGER); |
|
|
|
|
|
} |
|
|
//转盘归零 |
|
|
//转盘归零 |
|
|
log.info("转盘回零"); |
|
|
log.info("转盘回零"); |
|
|
stepMotorCtrlDriver.stepMotorEasyMoveToZeroBlock(StepMotorMId.IncubatorRotateCtrlM); |
|
|
stepMotorCtrlDriver.stepMotorEasyMoveToZeroBlock(StepMotorMId.IncubatorRotateCtrlM); |
|
@ -218,7 +225,7 @@ public class DeviceMoveToZeroCtrlService { |
|
|
for (CheckResult result : results) { |
|
|
for (CheckResult result : results) { |
|
|
if (!result.pass) { |
|
|
if (!result.pass) { |
|
|
log.info("设备初始化失败: check {} fail", result.info); |
|
|
log.info("设备初始化失败: check {} fail", result.info); |
|
|
// doSomeThingWhenError(); |
|
|
|
|
|
|
|
|
// doSomeThingWhenError(); |
|
|
return results; |
|
|
return results; |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
@ -229,11 +236,11 @@ public class DeviceMoveToZeroCtrlService { |
|
|
|
|
|
|
|
|
//弹出无效物料 |
|
|
//弹出无效物料 |
|
|
if (firstInit) { |
|
|
if (firstInit) { |
|
|
log.error("TODO:..............................清空孵育盘"); |
|
|
|
|
|
firstInit = false; |
|
|
firstInit = false; |
|
|
} |
|
|
} |
|
|
//弹出试管架 |
|
|
//弹出试管架 |
|
|
tubeFeedingCtrlService.ejectTubeHolder(); |
|
|
tubeFeedingCtrlService.ejectTubeHolder(); |
|
|
|
|
|
tubeFeedingCtrlService.moveTubeRackMoveToEnterPos(); |
|
|
//丢弃tip头 |
|
|
//丢弃tip头 |
|
|
hbotMoveExCtrlService.initPipetterGun(); |
|
|
hbotMoveExCtrlService.initPipetterGun(); |
|
|
//hbot快速归零 |
|
|
//hbot快速归零 |
|
@ -249,7 +256,7 @@ public class DeviceMoveToZeroCtrlService { |
|
|
return doDeviceMoveToZero(); |
|
|
return doDeviceMoveToZero(); |
|
|
} catch (AppException e) { |
|
|
} catch (AppException e) { |
|
|
//释放试管夹爪 |
|
|
//释放试管夹爪 |
|
|
// doSomeThingWhenError(); |
|
|
|
|
|
|
|
|
// doSomeThingWhenError(); |
|
|
throw e; |
|
|
throw e; |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
@ -273,7 +280,7 @@ public class DeviceMoveToZeroCtrlService { |
|
|
if (workThread != null && workThread.isAlive()) { |
|
|
if (workThread != null && workThread.isAlive()) { |
|
|
throw AppException.ofAECodeError("设备正在初始化中"); |
|
|
throw AppException.ofAECodeError("设备正在初始化中"); |
|
|
} |
|
|
} |
|
|
if(!gstate.getBoardParamInited()){ |
|
|
|
|
|
|
|
|
if (!gstate.getBoardParamInited()) { |
|
|
throw AppException.of(A8kEcode.DEVICE_STARTUP_IN_PROGRESS); |
|
|
throw AppException.of(A8kEcode.DEVICE_STARTUP_IN_PROGRESS); |
|
|
} |
|
|
} |
|
|
if (workThread != null) { |
|
|
if (workThread != null) { |
|
|