Beispiel #1
0
        public void Dispense(string labwareLabel, List <int> wellIDs, List <double> volumes, LiquidClass liquidClass, out PipettingResult pipettingResult, string barcode = "")
        {
            int    wellID       = wellIDs.First();
            double volume       = Math.Round(volumes.First(), 1);
            string sWellID      = wellID.ToString();
            string sCommandDesc = string.Format("Dispense to:{0} at:{1} volume:{2},{3}", labwareLabel, wellID, volume, liquidClass);

            log.InfoFormat(sCommandDesc);

            //air gap
            int airGap = liquidClass.AspirationSinglePipetting.TrailingAirgap + liquidClass.AspirationSinglePipetting.LeadingAirgap;

            volume += airGap;

            Move2Position(labwareLabel, wellID);
            Move2Position(labwareLabel, wellID, "ZDispense");
            var res = MoveController.Instance.Dispense(volume, maxSpeedV, startSpeedV, endSpeedV);

            pipettingResult = res == e_RSPErrorCode.RSP_ERROR_NONE ? PipettingResult.ok : PipettingResult.abort;
            PipettingTrackInfo pipettingTrackInfo = new PipettingTrackInfo(labwareLabel, sWellID, volume, pipettingResult, barcode, false);

            ThrowCriticalException(res, "喷液");
            Move2Position(labwareLabel, wellID);
        }
Beispiel #2
0
        private bool RunLihaCommand(ILiquidHandlerCommand machineCommand)
        {
            if (hardwareController.Liha.IsTipMounted)
            {
                DitiTrackInfo trackInfo = null;
                hardwareController.Liha.DropTip(out trackInfo);
            }


            LihaCommand   lihaCommand    = machineCommand as LihaCommand;
            DitiTrackInfo ditiTrackInfos = null;

            hardwareController.Liha.GetTip(new List <int>()
            {
                1
            }, lihaCommand.ditiType, out ditiTrackInfos);

            OnCommandExecuted(ditiTrackInfos);
            if (NeedPauseOrStop())
            {
                return(true);
            }
            var liquidClass = PipettorElementManager.Instance.LiquidClasses.First(x => x.SaveName == lihaCommand.liquidClass);

            PipettingResult pipettingResult = PipettingResult.ok;

            hardwareController.Liha.Aspirate(lihaCommand.srcLabware, new List <int>()
            {
                lihaCommand.srcWellID
            }, new List <double>()
            {
                lihaCommand.volume
            }, liquidClass, out pipettingResult);
            PipettingTrackInfo aspTrackInfo = new PipettingTrackInfo(lihaCommand.srcLabware, LihaCommand.GetWellDesc(lihaCommand.srcWellID), lihaCommand.volume, pipettingResult, lihaCommand.barcode);

            OnCommandExecuted(aspTrackInfo);

            if (NeedPauseOrStop())
            {
                return(true);
            }
            if (pipettingResult == PipettingResult.ok ||
                pipettingResult == PipettingResult.air ||
                pipettingResult == PipettingResult.clotIgnore ||
                pipettingResult == PipettingResult.zmax)
            {
                pipettingResult = PipettingResult.ok;
                hardwareController.Liha.Dispense(lihaCommand.dstLabware, new List <int>()
                {
                    lihaCommand.dstWellID
                }, new List <double>()
                {
                    lihaCommand.volume
                }, liquidClass, out pipettingResult);
                var dispTrackInfo = new PipettingTrackInfo(lihaCommand.dstLabware, LihaCommand.GetWellDesc(lihaCommand.dstWellID), lihaCommand.volume, pipettingResult, lihaCommand.barcode, false);
                OnCommandExecuted(dispTrackInfo);
            }

            if (NeedPauseOrStop())
            {
                return(true);
            }
            DitiTrackInfo ditiTrackInfo = null;

            hardwareController.Liha.DropTip(out ditiTrackInfo);
            OnCommandExecuted(ditiTrackInfo);
            return(false);
        }