|
|
@ -367,195 +367,59 @@ public class PipetteCtrlDriverV2 { |
|
|
|
canBus.waitForMod(MId.PipetteMod, actionOvertimeConstant.get(MId.PipetteMod, action)); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// |
|
|
|
// Config |
|
|
|
// |
|
|
|
public void applyLiquidInfo(LiquidConfigCpyIdx cpyIdx, PipetteLiquidInfo val) throws AppException { |
|
|
|
val.serialization((index, itermVal) -> setLiquidInfo(cpyIdx.toInteger(), index, itermVal)); |
|
|
|
} |
|
|
|
|
|
|
|
public PipetteLiquidInfo getLiquidInfo(LiquidConfigCpyIdx cpyIdx) throws AppException { |
|
|
|
return PipetteLiquidInfo.build((LiquidInfoIndex index) -> getLiquidInfo(cpyIdx.toInteger(), index)); |
|
|
|
} |
|
|
|
|
|
|
|
public void applyPlatInfo(Integer cpyIdx, PipettePlatInfo val) throws AppException { |
|
|
|
setPlatInfo(cpyIdx, PlatformInfoIndex.workRefPos, val.workRefPos); |
|
|
|
setPlatInfo(cpyIdx, PlatformInfoIndex.tipPickingPos, val.tipPickingPos); |
|
|
|
setPlatInfo(cpyIdx, PlatformInfoIndex.tipPickingSearchRange, val.tipPickingSearchRange); |
|
|
|
setPlatInfo(cpyIdx, PlatformInfoIndex.tipPickingAppendDistance, val.tipPickingAppendDistance); |
|
|
|
setPlatInfo(cpyIdx, PlatformInfoIndex.tipDepositPos, val.tipDepositPos); |
|
|
|
setPlatInfo(cpyIdx, PlatformInfoIndex.transformPos, val.transformPos); |
|
|
|
setPlatInfo(cpyIdx, PlatformInfoIndex.tipType, val.tipType); |
|
|
|
setPlatInfo(cpyIdx, PlatformInfoIndex.tipLength, val.tipLength); |
|
|
|
val.serialization((index, itermVal) -> setPlatInfo(cpyIdx, index, itermVal)); |
|
|
|
} |
|
|
|
|
|
|
|
public PipettePlatInfo getPlatInfo(Integer cpyIdx) throws AppException { |
|
|
|
PipettePlatInfo val = new PipettePlatInfo(); |
|
|
|
val.workRefPos = getPlatInfo(cpyIdx, PlatformInfoIndex.workRefPos); |
|
|
|
val.tipPickingPos = getPlatInfo(cpyIdx, PlatformInfoIndex.tipPickingPos); |
|
|
|
val.tipPickingSearchRange = getPlatInfo(cpyIdx, PlatformInfoIndex.tipPickingSearchRange); |
|
|
|
val.tipPickingAppendDistance = getPlatInfo(cpyIdx, PlatformInfoIndex.tipPickingAppendDistance); |
|
|
|
val.tipDepositPos = getPlatInfo(cpyIdx, PlatformInfoIndex.tipDepositPos); |
|
|
|
val.transformPos = getPlatInfo(cpyIdx, PlatformInfoIndex.transformPos); |
|
|
|
val.tipType = getPlatInfo(cpyIdx, PlatformInfoIndex.tipType); |
|
|
|
val.tipLength = getPlatInfo(cpyIdx, PlatformInfoIndex.tipLength); |
|
|
|
val.mark = getPlatInfo(cpyIdx, PlatformInfoIndex.mark); |
|
|
|
return val; |
|
|
|
return PipettePlatInfo.build((PlatformInfoIndex index) -> getPlatInfo(cpyIdx, index)); |
|
|
|
} |
|
|
|
|
|
|
|
public void applyContainerInfo(ContainerCpyId cpyIdx, PipetteContainerInfo val) throws AppException { |
|
|
|
setContainerInfo(cpyIdx, ContainerInfoIndex.containerType, val.containerType); |
|
|
|
setContainerInfo(cpyIdx, ContainerInfoIndex.containerNeckPos, val.containerNeckPos); |
|
|
|
setContainerInfo(cpyIdx, ContainerInfoIndex.containerDepth, val.containerDepth); |
|
|
|
setContainerInfo(cpyIdx, ContainerInfoIndex.containerRound, val.containerRound); |
|
|
|
setContainerInfo(cpyIdx, ContainerInfoIndex.containerBottomSectionHeight, val.containerBottomSectionHeight); |
|
|
|
setContainerInfo(cpyIdx, ContainerInfoIndex.immersionDepth, val.immersionDepth); |
|
|
|
setContainerInfo(cpyIdx, ContainerInfoIndex.leavingHeight, val.leavingHeight); |
|
|
|
setContainerInfo(cpyIdx, ContainerInfoIndex.jetHeight, val.jetHeight); |
|
|
|
setContainerInfo(cpyIdx, ContainerInfoIndex.lldStartSearchDepth, val.lldStartSearchDepth); |
|
|
|
setContainerInfo(cpyIdx, ContainerInfoIndex.fixAspirationDepth, val.fixAspirationDepth); |
|
|
|
setContainerInfo(cpyIdx, ContainerInfoIndex.llfVConvertCoefficient, val.llfVConvertCoefficient); |
|
|
|
setContainerInfo(cpyIdx, ContainerInfoIndex.pierceDepth, val.pierceDepth); |
|
|
|
val.serialization((index, itermVal) -> setContainerInfo(cpyIdx.toInteger(), index, itermVal)); |
|
|
|
} |
|
|
|
|
|
|
|
public PipetteContainerInfo getContainerInfo(ContainerCpyId cpyIdx) throws AppException { |
|
|
|
PipetteContainerInfo val = new PipetteContainerInfo(); |
|
|
|
val.containerType = getContainerInfo(cpyIdx, ContainerInfoIndex.containerType); |
|
|
|
val.containerNeckPos = getContainerInfo(cpyIdx, ContainerInfoIndex.containerNeckPos); |
|
|
|
val.containerDepth = getContainerInfo(cpyIdx, ContainerInfoIndex.containerDepth); |
|
|
|
val.containerRound = getContainerInfo(cpyIdx, ContainerInfoIndex.containerRound); |
|
|
|
val.containerBottomSectionHeight = getContainerInfo(cpyIdx, ContainerInfoIndex.containerBottomSectionHeight); |
|
|
|
val.immersionDepth = getContainerInfo(cpyIdx, ContainerInfoIndex.immersionDepth); |
|
|
|
val.leavingHeight = getContainerInfo(cpyIdx, ContainerInfoIndex.leavingHeight); |
|
|
|
val.jetHeight = getContainerInfo(cpyIdx, ContainerInfoIndex.jetHeight); |
|
|
|
val.lldStartSearchDepth = getContainerInfo(cpyIdx, ContainerInfoIndex.lldStartSearchDepth); |
|
|
|
val.fixAspirationDepth = getContainerInfo(cpyIdx, ContainerInfoIndex.fixAspirationDepth); |
|
|
|
val.llfVConvertCoefficient = getContainerInfo(cpyIdx, ContainerInfoIndex.llfVConvertCoefficient); |
|
|
|
val.pierceDepth = getContainerInfo(cpyIdx, ContainerInfoIndex.pierceDepth); |
|
|
|
val.mark = getContainerInfo(cpyIdx, ContainerInfoIndex.mark); |
|
|
|
return val; |
|
|
|
return PipetteContainerInfo.build((ContainerInfoIndex index) -> getContainerInfo(cpyIdx.toInteger(), index)); |
|
|
|
} |
|
|
|
|
|
|
|
public void applyLiquidInfo(LiquidConfigCpyIdx cpyIdx, PipetteLiquidInfo val) throws AppException { |
|
|
|
setLiquidInfo(cpyIdx, LiquidInfoIndex.plldPmVCpyId, val.plldPmVCpyId); |
|
|
|
setLiquidInfo(cpyIdx, LiquidInfoIndex.plldThreshold, val.plldThreshold); |
|
|
|
setLiquidInfo(cpyIdx, LiquidInfoIndex.plldZmVel, val.plldZmVel); |
|
|
|
setLiquidInfo(cpyIdx, LiquidInfoIndex.emptyTipPmVCpyId, val.emptyTipPmVCpyId); |
|
|
|
setLiquidInfo(cpyIdx, LiquidInfoIndex.blowoutAirVolume, val.blowoutAirVolume); |
|
|
|
setLiquidInfo(cpyIdx, LiquidInfoIndex.blowoutAirPmVCpyId, val.blowoutAirPmVCpyId); |
|
|
|
setLiquidInfo(cpyIdx, LiquidInfoIndex.overAspiratedVolume, val.overAspiratedVolume); |
|
|
|
setLiquidInfo(cpyIdx, LiquidInfoIndex.overAspiratedPmVCpyId, val.overAspiratedPmVCpyId); |
|
|
|
setLiquidInfo(cpyIdx, LiquidInfoIndex.aspirationPmVCpyIdLow, val.aspirationPmVCpyIdLow); |
|
|
|
setLiquidInfo(cpyIdx, LiquidInfoIndex.aspirationPmVCpyIdHigh, val.aspirationPmVCpyIdHigh); |
|
|
|
setLiquidInfo(cpyIdx, LiquidInfoIndex.aspirationVolumeBreakVal, val.aspirationVolumeBreakVal); |
|
|
|
setLiquidInfo(cpyIdx, LiquidInfoIndex.volumeCalibrationCoefficientB, val.volumeCalibrationCoefficientB); |
|
|
|
setLiquidInfo(cpyIdx, LiquidInfoIndex.volumeCalibrationCoefficientK, val.volumeCalibrationCoefficientK); |
|
|
|
setLiquidInfo(cpyIdx, LiquidInfoIndex.settlingTime, val.settlingTime); |
|
|
|
setLiquidInfo(cpyIdx, LiquidInfoIndex.transportVolume, val.transportVolume); |
|
|
|
setLiquidInfo(cpyIdx, LiquidInfoIndex.transportVolumePmVCpyId, val.transportVolumePmVCpyId); |
|
|
|
setLiquidInfo(cpyIdx, LiquidInfoIndex.mixPmVCpyId, val.mixPmVCpyId); |
|
|
|
} |
|
|
|
|
|
|
|
public PipetteLiquidInfo getLiquidInfo(LiquidConfigCpyIdx cpyIdx) throws AppException { |
|
|
|
PipetteLiquidInfo val = new PipetteLiquidInfo(); |
|
|
|
val.plldPmVCpyId = getLiquidInfo(cpyIdx, LiquidInfoIndex.plldPmVCpyId); |
|
|
|
val.plldThreshold = getLiquidInfo(cpyIdx, LiquidInfoIndex.plldThreshold); |
|
|
|
val.plldZmVel = getLiquidInfo(cpyIdx, LiquidInfoIndex.plldZmVel); |
|
|
|
val.emptyTipPmVCpyId = getLiquidInfo(cpyIdx, LiquidInfoIndex.emptyTipPmVCpyId); |
|
|
|
val.blowoutAirVolume = getLiquidInfo(cpyIdx, LiquidInfoIndex.blowoutAirVolume); |
|
|
|
val.blowoutAirPmVCpyId = getLiquidInfo(cpyIdx, LiquidInfoIndex.blowoutAirPmVCpyId); |
|
|
|
val.overAspiratedVolume = getLiquidInfo(cpyIdx, LiquidInfoIndex.overAspiratedVolume); |
|
|
|
val.overAspiratedPmVCpyId = getLiquidInfo(cpyIdx, LiquidInfoIndex.overAspiratedPmVCpyId); |
|
|
|
val.aspirationPmVCpyIdLow = getLiquidInfo(cpyIdx, LiquidInfoIndex.aspirationPmVCpyIdLow); |
|
|
|
val.aspirationPmVCpyIdHigh = getLiquidInfo(cpyIdx, LiquidInfoIndex.aspirationPmVCpyIdHigh); |
|
|
|
val.aspirationVolumeBreakVal = getLiquidInfo(cpyIdx, LiquidInfoIndex.aspirationVolumeBreakVal); |
|
|
|
val.volumeCalibrationCoefficientB = getLiquidInfo(cpyIdx, LiquidInfoIndex.volumeCalibrationCoefficientB); |
|
|
|
val.volumeCalibrationCoefficientK = getLiquidInfo(cpyIdx, LiquidInfoIndex.volumeCalibrationCoefficientK); |
|
|
|
val.settlingTime = getLiquidInfo(cpyIdx, LiquidInfoIndex.settlingTime); |
|
|
|
val.transportVolume = getLiquidInfo(cpyIdx, LiquidInfoIndex.transportVolume); |
|
|
|
val.transportVolumePmVCpyId = getLiquidInfo(cpyIdx, LiquidInfoIndex.transportVolumePmVCpyId); |
|
|
|
val.mixPmVCpyId = getLiquidInfo(cpyIdx, LiquidInfoIndex.mixPmVCpyId); |
|
|
|
val.mark = getLiquidInfo(cpyIdx, LiquidInfoIndex.mark); |
|
|
|
return val; |
|
|
|
} |
|
|
|
|
|
|
|
public void setPMVCfg(PMVCpyIdx idx, PipettePMVCfg val) throws AppException { |
|
|
|
setPMVCfg(idx, PMVConfigIndex.acc, val.acc); |
|
|
|
setPMVCfg(idx, PMVConfigIndex.dec, val.dec); |
|
|
|
setPMVCfg(idx, PMVConfigIndex.vStart, val.vStart); |
|
|
|
setPMVCfg(idx, PMVConfigIndex.vStop, val.vStop); |
|
|
|
setPMVCfg(idx, PMVConfigIndex.vMax, val.vMax); |
|
|
|
|
|
|
|
val.serialization((index, itermVal) -> setPMVCfg(idx, index, itermVal)); |
|
|
|
} |
|
|
|
|
|
|
|
public PipettePMVCfg getPMVCfg(PMVCpyIdx idx) throws AppException { |
|
|
|
PipettePMVCfg val = new PipettePMVCfg(); |
|
|
|
val.acc = getPMVCfg(idx, PMVConfigIndex.acc); |
|
|
|
val.dec = getPMVCfg(idx, PMVConfigIndex.dec); |
|
|
|
val.vStart = getPMVCfg(idx, PMVConfigIndex.vStart); |
|
|
|
val.vStop = getPMVCfg(idx, PMVConfigIndex.vStop); |
|
|
|
val.vMax = getPMVCfg(idx, PMVConfigIndex.vMax); |
|
|
|
val.mark = getPMVCfg(idx, PMVConfigIndex.mark); |
|
|
|
return val; |
|
|
|
return PipettePMVCfg.build((PMVConfigIndex index) -> getPMVCfg(idx, index)); |
|
|
|
} |
|
|
|
|
|
|
|
public void setZMBCfg(PipetteZMBCfg val) throws AppException { |
|
|
|
setZMBCfg(ZMBasicConfigIndex.shaft, val.shaft); |
|
|
|
setZMBCfg(ZMBasicConfigIndex.oneCirclePulse, val.oneCirclePulse); |
|
|
|
setZMBCfg(ZMBasicConfigIndex.oneCirclePulseDenominator, val.oneCirclePulseDenominator); |
|
|
|
setZMBCfg(ZMBasicConfigIndex.ihold, val.ihold); |
|
|
|
setZMBCfg(ZMBasicConfigIndex.irun, val.irun); |
|
|
|
setZMBCfg(ZMBasicConfigIndex.iholddelay, val.iholddelay); |
|
|
|
setZMBCfg(ZMBasicConfigIndex.iglobalscaler, val.iglobalscaler); |
|
|
|
setZMBCfg(ZMBasicConfigIndex.mind, val.minD); |
|
|
|
setZMBCfg(ZMBasicConfigIndex.maxd, val.maxD); |
|
|
|
setZMBCfg(ZMBasicConfigIndex.tzerowait, val.tzerowait); |
|
|
|
setZMBCfg(ZMBasicConfigIndex.encResolution, val.encResolution); |
|
|
|
setZMBCfg(ZMBasicConfigIndex.enableEnc, val.enableEnc); |
|
|
|
setZMBCfg(ZMBasicConfigIndex.dzero, val.dzero); |
|
|
|
setZMBCfg(ZMBasicConfigIndex.ioTriggerAppendDistance, val.ioTriggerAppendDistance); |
|
|
|
setZMBCfg(ZMBasicConfigIndex.posDeviTolerance, val.posDeviTolerance); |
|
|
|
setZMBCfg(ZMBasicConfigIndex.mres, val.mres); |
|
|
|
val.serialization(this::setZMBCfg); |
|
|
|
} |
|
|
|
|
|
|
|
public PipetteZMBCfg getZMBCfg() throws AppException { |
|
|
|
PipetteZMBCfg val = new PipetteZMBCfg(); |
|
|
|
val.shaft = getZMBCfg(ZMBasicConfigIndex.shaft); |
|
|
|
val.oneCirclePulse = getZMBCfg(ZMBasicConfigIndex.oneCirclePulse); |
|
|
|
val.oneCirclePulseDenominator = getZMBCfg(ZMBasicConfigIndex.oneCirclePulseDenominator); |
|
|
|
val.ihold = getZMBCfg(ZMBasicConfigIndex.ihold); |
|
|
|
val.irun = getZMBCfg(ZMBasicConfigIndex.irun); |
|
|
|
val.iholddelay = getZMBCfg(ZMBasicConfigIndex.iholddelay); |
|
|
|
val.iglobalscaler = getZMBCfg(ZMBasicConfigIndex.iglobalscaler); |
|
|
|
val.minD = getZMBCfg(ZMBasicConfigIndex.mind); |
|
|
|
val.maxD = getZMBCfg(ZMBasicConfigIndex.maxd); |
|
|
|
val.tzerowait = getZMBCfg(ZMBasicConfigIndex.tzerowait); |
|
|
|
val.encResolution = getZMBCfg(ZMBasicConfigIndex.encResolution); |
|
|
|
val.enableEnc = getZMBCfg(ZMBasicConfigIndex.enableEnc); |
|
|
|
val.dzero = getZMBCfg(ZMBasicConfigIndex.dzero); |
|
|
|
val.ioTriggerAppendDistance = getZMBCfg(ZMBasicConfigIndex.ioTriggerAppendDistance); |
|
|
|
val.posDeviTolerance = getZMBCfg(ZMBasicConfigIndex.posDeviTolerance); |
|
|
|
val.mres = getZMBCfg(ZMBasicConfigIndex.mres); |
|
|
|
val.mark = getZMBCfg(ZMBasicConfigIndex.mark); |
|
|
|
return val; |
|
|
|
return PipetteZMBCfg.build(this::getZMBCfg); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
public void setZMVCfg(ZMVCpyIdx idx, PipetteZMVCfg val) throws AppException { |
|
|
|
setZMVCfg(idx, ZMVConfigIndex.vstart, val.vstart); |
|
|
|
setZMVCfg(idx, ZMVConfigIndex.a1, val.a1); |
|
|
|
setZMVCfg(idx, ZMVConfigIndex.amax, val.amax); |
|
|
|
setZMVCfg(idx, ZMVConfigIndex.v1, val.v1); |
|
|
|
setZMVCfg(idx, ZMVConfigIndex.dmax, val.dmax); |
|
|
|
setZMVCfg(idx, ZMVConfigIndex.d1, val.d1); |
|
|
|
setZMVCfg(idx, ZMVConfigIndex.vstop, val.vstop); |
|
|
|
setZMVCfg(idx, ZMVConfigIndex.vmax, val.vmax); |
|
|
|
val.serialization((index, itermVal) -> setZMVCfg(idx, index, itermVal)); |
|
|
|
} |
|
|
|
|
|
|
|
public PipetteZMVCfg getZMVCfg(ZMVCpyIdx idx) throws AppException { |
|
|
|
PipetteZMVCfg val = new PipetteZMVCfg(); |
|
|
|
val.vstart = getZMVCfg(idx, ZMVConfigIndex.vstart); |
|
|
|
val.a1 = getZMVCfg(idx, ZMVConfigIndex.a1); |
|
|
|
val.amax = getZMVCfg(idx, ZMVConfigIndex.amax); |
|
|
|
val.v1 = getZMVCfg(idx, ZMVConfigIndex.v1); |
|
|
|
val.dmax = getZMVCfg(idx, ZMVConfigIndex.dmax); |
|
|
|
val.d1 = getZMVCfg(idx, ZMVConfigIndex.d1); |
|
|
|
val.vstop = getZMVCfg(idx, ZMVConfigIndex.vstop); |
|
|
|
val.vmax = getZMVCfg(idx, ZMVConfigIndex.vmax); |
|
|
|
val.mark = getZMVCfg(idx, ZMVConfigIndex.mark); |
|
|
|
return val; |
|
|
|
return PipetteZMVCfg.build((ZMVConfigIndex index) -> getZMVCfg(idx, index)); |
|
|
|
} |
|
|
|
|
|
|
|
public PipetteConfig getConfig() throws AppException { |
|
|
|