Ejemplo n.º 1
0
        //–  Dispense back into vessel and then pipette nothing
        //–  Ignore clot error and continue
        //–  Discard the DITI and pipette nothing

        private void ProcessClot(Labware labware, int wellID, double volume, LiquidClass liquidClass, out PipettingResult pipettingResult, string barcode = "")
        {
            string           labwareLabel = labware.Label;
            ClotDetectedForm clotForm     = new ClotDetectedForm();

            clotForm.ShowDialog();
            e_RSPErrorCode res           = e_RSPErrorCode.RSP_ERROR_NONE;
            var            userSelection = clotForm.UserSelection;

            pipettingResult = PipettingResult.ok;
            DitiTrackInfo trackInfo = new DitiTrackInfo(Labware.WasteLabel, 1, true, false);

            switch (userSelection)
            {
            case ClotDetectedAction.dispenseBackThenDropDiti:
                pipettingResult = PipettingResult.clotDispenseBack;
                res             = MoveController.Instance.Move2Z(_eARM.左臂, labware.ZValues.ZDispense);
                ThrowCriticalException(res, "遇到凝块,移动到ZDispense");
                res = MoveController.Instance.Dispense(volume + excessVolume, liquidClass.AspirationSinglePipetting.AspirationSpeed, startSpeedV, endSpeedV);
                ThrowCriticalException(res, "遇到凝块,打回容器");
                DropTip(out trackInfo);
                break;

            case ClotDetectedAction.dropDiti:
                pipettingResult = PipettingResult.clotDropDiti;
                DropTip(out trackInfo);
                break;

            case ClotDetectedAction.ignore:
                pipettingResult = PipettingResult.clotIgnore;
                break;
            }
        }
Ejemplo n.º 2
0
        private void OnLayoutEditorEditWare(object sender, WareBase e)
        {
            if (e is Labware)
            {
                Labware labware = e as Labware;
                if (this.ActivateEditingTab(labware.TypeName))
                {
                    return;
                }

                LabwareEditor editor = new LabwareEditor(AddInfo, this);
                editor.DataContext = labware;
                this.AddTabItem(editor);
            }
            else if (e is Carrier)
            {
                Carrier carrier = e as Carrier;
                if (this.ActivateEditingTab(carrier.TypeName))
                {
                    return;
                }

                CarrierEditor editor = new CarrierEditor(AddInfo);
                editor.DataContext = carrier;
                this.AddTabItem(editor);
            }
            else
            {
                // Bad argument
            }
        }
Ejemplo n.º 3
0
        private void DeleteLabware_Executed(object sender, ExecutedRoutedEventArgs e)
        {
            Labware selectedLW = (Labware)this.lb_labwares.SelectedItem;

            PipettorElementManager.Instance.DeletePipettorElement <Labware>(selectedLW.TypeName);
            DeleteTabItem(selectedLW.TypeName);
        }
 public PipettingCommandEidtor(Labware selectedLabware, bool isAspirate)
 {
     _labware = selectedLabware;
     InitializeComponent();
     this.Loaded += PipettingCommandEidtor_Loaded;
     SetCaption(isAspirate);
 }
Ejemplo n.º 5
0
        private bool TryDetectLiquid(Labware labware)
        {
            const int mmPerSecond = 50;
            var       res         = MoveController.Instance.DetectLiquid(labware.ZValues.ZStart, labware.ZValues.ZMax, mmPerSecond);

            return(res == e_RSPErrorCode.RSP_ERROR_NONE);
        }
Ejemplo n.º 6
0
        public static void MountThis(BasewareUIElement baseUIElement, Point position, Grid container, Layout workingLayout)
        {
            bool bValid = IsValid(baseUIElement, position, container);

            if (!bValid)
            {
                if (baseUIElement is LabwareUIElement) //if labware has parent, let it go back
                {
                    LabwareUIElement labwareUIElement = (LabwareUIElement)baseUIElement;
                    if (labwareUIElement.Labware.ParentCarrier != null)
                    {
                        return;
                    }
                }

                container.Children.Remove(baseUIElement);
                if (baseUIElement is CarrierUIElement)
                {
                    RemoveUIElementsOnCarrier(container, baseUIElement as CarrierUIElement);
                }
                baseUIElement = null;
                return;
            }

            int grid = VisualCommon.FindCorrespondingGrid(position.X);

            if (baseUIElement is CarrierUIElement)
            {
                CarrierUIElement carrierUIElement = (CarrierUIElement)baseUIElement;
                carrierUIElement.Grid = grid;
            }

            if (baseUIElement is LabwareUIElement)
            {
                LabwareUIElement labwareUIElement = (LabwareUIElement)baseUIElement;
                Labware          labware          = labwareUIElement.Labware;
                CarrierUIElement carrierUIElement = null;
                int  siteID = -1;
                bool bFound = FindSuitableCarrier(position, labware.TypeName, container, ref carrierUIElement, ref siteID);
                if (bFound)
                {
                    if (labware.ParentCarrier != null)
                    {
                        labware.ParentCarrier.Labwares.Remove(labware);
                    }
                    labware.SiteID = siteID;
                    if (labware.IsDitiBox)
                    {
                        var ditiInfo = workingLayout.DitiInfo.DitiBoxInfos.Find(x => x.label == labware.Label);
                        if (ditiInfo == null)
                        {
                            DitiType ditiType = DitiBox.Parse(labware.TypeName);
                            workingLayout.DitiInfo.DitiBoxInfos.Add(new DitiBoxInfo(ditiType, labware.Label, 96));
                        }
                    }
                }
                carrierUIElement.Carrier.AddLabware(labware);
            }
        }
Ejemplo n.º 7
0
 public DitiEditor(Labware selectedLabware, Layout layout)
 {
     _layout  = layout;
     _labware = selectedLabware;
     InitializeComponent();
     this.Loaded += DitiEidtor_Loaded;
     SetOk        = false;
 }
Ejemplo n.º 8
0
        private void NewLabware_Executed(object sender, ExecutedRoutedEventArgs e)
        {
            Labware       labware = new Labware();
            LabwareEditor editor  = new LabwareEditor(AddInfo, this);

            editor.DataContext = labware;
            this.AddTabItem(editor);
        }
Ejemplo n.º 9
0
        private void DuplicateLabware_Executed(object sender, ExecutedRoutedEventArgs e)
        {
            Labware       labware = ((Labware)this.lb_labwares.SelectedItem).Clone() as Labware;
            LabwareEditor editor  = new LabwareEditor(AddInfo, this);

            editor.DataContext = labware;
            this.AddTabItem(editor);
        }
 /// <summary>
 /// ctor
 /// </summary>
 /// <param name="labware"></param>
 /// <param name="boundingSize"></param>
 public LabwareUIElementFixedSize(Labware labware, Size boundingSize)
 {
     this._labware = labware;
     UpdateContainerSize(boundingSize);
     AddWellVisuals();
     _singleSelection = new SingleSelection(wellVisuals, _tightBoundingRect, _labware);
     this.MouseMove  += LabwareUIElementFixedSize_MouseMove;
     this.MouseUp    += LabwareUIElementFixedSize_MouseUp;
 }
Ejemplo n.º 11
0
 /// <summary>
 /// ctor
 /// </summary>
 /// <param name="labware"></param>
 public LabwareUIElement(Labware labware) : base((WareBase)labware)
 {
     this._labware = labware;
     _children.Add(CreateViusal());
     AspirateWellIDs = new List <int>();
     DispenseWellIDs = new List <int>();
     timer.Elapsed  += timer_Elapsed;
     timer.Start();
 }
Ejemplo n.º 12
0
        private void DoTracking(Labware labware, double volume, LiquidClass liquidClass)
        {
            double crossSectionArea = labware.WellsInfo.WellRadius * labware.WellsInfo.WellRadius * Math.PI;
            double distance2Go      = volume / crossSectionArea;
            double seconds          = volume / liquidClass.AspirationSinglePipetting.AspirationSpeed;
            double goDownSpeed      = distance2Go / seconds;
            var    res = MoveController.Instance.MoveZAtSpeed(_eARM.左臂, distance2Go, goDownSpeed);

            ThrowCriticalException(res, "液面跟随!");
        }
Ejemplo n.º 13
0
        private void OnLabwareXmlFileCreated(object sender, FileSystemEventArgs e)
        {
            Labware labware = this.CreatedPipettorElement.Pop() as Labware;

            if (labware == null)
            {
                throw new InvalidOperationException("Labware instance was supposed to be existing.");
            }

            this._labwares.Add(e.FullPath, labware);
            this.PropertyChanged(this, new PropertyChangedEventArgs("Labwares"));
        }
Ejemplo n.º 14
0
 private static void RemoveLabware(Grid container, Labware labware)
 {
     for (int i = 0; i < container.Children.Count; i++)
     {
         if (container.Children[i] is LabwareUIElement)
         {
             if (((LabwareUIElement)container.Children[i]).Labware.Equals(labware))
             {
                 container.Children.RemoveAt(i);
             }
         }
     }
 }
Ejemplo n.º 15
0
 private void SetDitiPosition_CanExecute(object sender, CanExecuteRoutedEventArgs e)
 {
     if (e.Parameter is Labware)
     {
         Labware labware = e.Parameter as Labware;
         if (labware.IsDitiBox)
         {
             e.CanExecute = true;
             return;
         }
     }
     e.CanExecute = false;
 }
        public void CarrierWithLabwaresSerializationTest()
        {
            Carrier carrier = new Carrier();

            carrier.Dimension.XLength = 40;
            carrier.Dimension.YLength = 500;
            //carrier.AllowedLabwareType = 2;
            carrier.GridID = 1;

            #region Labware1
            Labware labware1 = new Labware();
            //labware1.Name = "Labware1";
            //labware1.XLength = 85;
            //labware1.YLength = 125;
            //labware1.Height = 45;
            //labware1.WellRadius = 4;
            //labware1.NumberOfWellsX = 8;
            //labware1.NumberOfWellsY = 12;
            //labware1.FirstWellPosition = new Point(8, 10);
            //labware1.LastWellPosition = new Point(78, 118);
            //labware1.ZTravel = 4200;
            //labware1.ZStart = 4000;
            //labware1.ZDispense = 3500;
            //labware1.ZMax = 50;
            carrier.AddLabware(labware1);
            #endregion

            #region Labware2
            Labware labware2 = new Labware();
            //labware2.Name = "Labware2";
            //labware2.XLength = 85;
            //labware2.YLength = 125;
            //labware2.Height = 45;
            //labware2.WellRadius = 4;
            //labware2.NumberOfWellsX = 8;
            //labware2.NumberOfWellsY = 12;
            //labware2.FirstWellPosition = new Point(8, 10);
            //labware2.LastWellPosition = new Point(78, 118);
            //labware2.ZTravel = 4200;
            //labware2.ZStart = 4000;
            //labware2.ZDispense = 3500;
            //labware2.ZMax = 50;
            carrier.AddLabware(labware2);
            #endregion

            string xmlFileName = Path.Combine(UnitTestHelper.GetTestModuleDirectory(), "testresult", "CarrierWithLabwaresSerializeTest.xml");

            SerializationHelper.Serialize <Carrier>(xmlFileName, carrier);
            Carrier carrier_deserialized = SerializationHelper.Deserialize <Carrier>(xmlFileName);
        }
Ejemplo n.º 17
0
        private void btnNewLabware_Click(object sender, RoutedEventArgs e)
        {
            Labware labware = new Labware();

            labware.ZValues         = new ZValues(360, 625, 665, 1610);
            labware.Dimension       = new Dimension(25, 305);
            labware.TypeName        = "lab1";
            labware.SiteID          = 1;
            labware.WellsInfo       = new WellsInfo(0, -3.2, 0, 278.8, 1, 16, BottomShape.Flat, 50);
            labware.TypeName        = LabwareBuildInType.Tubes16Pos13_100MM.ToString();
            labware.BackgroundColor = Color.FromArgb(255, 255, 0, 0);
            labware.ParentCarrier   = null;
            //layoutEditor.AddCandidate(new LabwareUIElement(labware));
            UserControlContainer.InvalidateVisual();
        }
Ejemplo n.º 18
0
        private void EditLabware_Executed(object sender, ExecutedRoutedEventArgs e)
        {
            Labware selectedLabware = e.Parameter != null? (Labware)e.Parameter: (Labware)this.lb_labwares.SelectedItem;

            if (selectedLabware == null || this.ActivateEditingTab(selectedLabware.TypeName))
            {
                return;
            }

            LabwareEditor editor = new LabwareEditor(AddInfo, this);

            selectedLabware.CalculatePositionInLayout();
            editor.DataContext = selectedLabware;
            this.AddTabItem(editor);
        }
Ejemplo n.º 19
0
        private bool IsEnoughLiquid(Labware labware, double volume, int subMergeMM)
        {
            double x, y, z;

            x = y = z = 0;
            MoveController.Instance.GetCurrentPosition(_eARM.左臂, ref x, ref y, ref z);
            if (x == -1 || y == -1 || z == -1)
            {
                throw new CriticalException("无法获取到位置!");
            }

            double crossSectionArea = labware.WellsInfo.WellRadius * labware.WellsInfo.WellRadius * Math.PI;
            double zMax             = labware.ZValues.ZMax; //mm

            return(crossSectionArea * (zMax - z - subMergeMM) > volume);
        }
Ejemplo n.º 20
0
        void PipettingEditorTestharness_Loaded(object sender, RoutedEventArgs e)
        {
            Labware labware1 = new Labware();

            labware1.ZValues         = new ZValues(360, 625, 665, 1610);
            labware1.Dimension       = new Dimension(127, 85.5);
            labware1.TypeName        = "16Pos Tubes";
            labware1.Label           = "lab1";
            labware1.SiteID          = 1;
            labware1.WellsInfo       = new WellsInfo(14.4, 11.5, 99 + 14.4, 74.5, 12, 8, BottomShape.Flat, 4);
            labware1.TypeName        = LabwareBuildInType.Plate96_05ML.ToString();
            labware1.BackgroundColor = Color.FromArgb(255, 255, 0, 0);
            labware1.ParentCarrier   = null;

            container.Children.Add(new PipettingCommandEidtor(labware1, false));
        }
Ejemplo n.º 21
0
        public void CarrierSerializeToXmlFileWithLabwaresTest()
        {
            Carrier carrier = new Carrier();

            carrier.Dimension.XLength = 40;
            carrier.Dimension.YLength = 500;
            carrier.GridID            = 3;
            carrier.Sites.Add(new Site(0, 0, 0, 10, 10, 1));

            Labware labware1 = new Labware();

            labware1.Label                        = "Labware1";
            labware1.Dimension.XLength            = 85;
            labware1.Dimension.YLength            = 125;
            labware1.WellsInfo.WellRadius         = 4;
            labware1.WellsInfo.NumberOfWellsX     = 8;
            labware1.WellsInfo.NumberOfWellsY     = 12;
            labware1.WellsInfo.FirstWellPositionX = 8;
            labware1.WellsInfo.FirstWellPositionY = 10;
            labware1.WellsInfo.LastWellPositionX  = 78;
            labware1.WellsInfo.LastWellPositionX  = 118;
            labware1.ZValues.ZTravel              = 4200;
            labware1.ZValues.ZStart               = 4000;
            labware1.ZValues.ZDispense            = 3500;
            labware1.ZValues.ZMax                 = 50;
            carrier.AddLabware(labware1);

            Labware labware2 = new Labware();

            labware2.Label                        = "Labware2";
            labware2.Dimension.XLength            = 85;
            labware2.Dimension.YLength            = 125;
            labware2.WellsInfo.WellRadius         = 4;
            labware2.WellsInfo.NumberOfWellsX     = 8;
            labware2.WellsInfo.NumberOfWellsY     = 12;
            labware1.WellsInfo.FirstWellPositionX = 8;
            labware1.WellsInfo.FirstWellPositionY = 10;
            labware1.WellsInfo.LastWellPositionX  = 78;
            labware1.WellsInfo.LastWellPositionX  = 118;
            labware2.ZValues.ZTravel              = 4200;
            labware2.ZValues.ZStart               = 4000;
            labware2.ZValues.ZDispense            = 3500;
            labware2.ZValues.ZMax                 = 50;
            carrier.AddLabware(labware2);

            carrier.Serialize(this._xmlFileWithLabwarePath);
        }
Ejemplo n.º 22
0
        private void CreateTwoLabwares()
        {
            Labware labware1 = new Labware();

            labware1.ZValues         = new ZValues(360, 625, 665, 1610);
            labware1.Dimension       = new Dimension(25, 305);
            labware1.Label           = "lab1";
            labware1.SiteID          = 1;
            labware1.WellsInfo       = new WellsInfo(0, -3.2, 0, 278.8, 1, 16, BottomShape.Flat, 5);
            labware1.TypeName        = LabwareBuildInType.Tubes16Pos13_100MM.ToString();
            labware1.BackgroundColor = Color.FromArgb(255, 255, 0, 0);
            labware1.ParentCarrier   = null;

            Labware labware2 = new Labware();

            labware2.ZValues         = new ZValues(360, 625, 665, 1610);
            labware2.Dimension       = new Dimension(127, 85.5);
            labware2.Label           = "lab2";
            labware2.SiteID          = 1;
            labware2.WellsInfo       = new WellsInfo(2.4, 2.9, 101.4, 60.9, 12, 8, BottomShape.Flat, 3.3);
            labware2.TypeName        = LabwareBuildInType.Plate96_05ML.ToString();
            labware2.BackgroundColor = Color.FromArgb(255, 255, 0, 0);
            labware2.ParentCarrier   = null;

            Labware labware3 = new Labware();

            labware3.ZValues         = new ZValues(360, 625, 665, 1610);
            labware3.Dimension       = new Dimension(127, 85.5);
            labware3.Label           = "lab3";
            labware3.SiteID          = 1;
            labware3.WellsInfo       = new WellsInfo(2.4, 2.9, 101.4, 60.9, 6, 4, BottomShape.Flat, 6.0);
            labware3.TypeName        = LabwareBuildInType.Plate24_2ML.ToString();
            labware3.BackgroundColor = Color.FromArgb(255, 100, 255, 0);
            labware3.ParentCarrier   = null;

            Carrier carrier1 = new Carrier(BuildInCarrierType.MP_3POS);
            Carrier carrier2 = new Carrier(BuildInCarrierType.Tube13mm_16POS);

            wares.Add(labware1);
            wares.Add(labware2);
            wares.Add(labware3);
            wares.Add(carrier1);
            wares.Add(carrier2);
            lstboxLabwares.ItemsSource = wares;
        }
Ejemplo n.º 23
0
        /// <summary>
        /// update the ware, once it has been changed in editor
        /// </summary>
        /// <param name="ware"></param>
        public void UpdateWare(WareBase ware)
        {
            List <BasewareUIElement> thisTypeUIElements = FindUIElement(ware.TypeName);

            if (thisTypeUIElements.Count == 0)
            {
                return;
            }
            if (ware.GetType() == typeof(Carrier))
            {
                Carrier carrier = (Carrier)ware;
                thisTypeUIElements.ForEach(x => UpdateCarrier(carrier, (CarrierUIElement)x));
            }
            else
            {
                Labware labware = (Labware)ware;
                thisTypeUIElements.ForEach(x => ReplaceLabware(labware, (LabwareUIElement)x));
            }
        }
Ejemplo n.º 24
0
        void MainWindow_Loaded(object sender, RoutedEventArgs e)
        {
            Labware labware1 = new Labware();

            labware1.ZValues         = new ZValues(360, 625, 665, 1610);
            labware1.Dimension       = new Dimension(1270, 855);
            labware1.TypeName        = "16Pos Tubes";
            labware1.Label           = "lab1";
            labware1.SiteID          = 1;
            labware1.WellsInfo       = new WellsInfo(144, 115, 990 + 144, 745, 12, 8, BottomShape.Flat, 40);
            labware1.TypeName        = LabwareBuildInType.Plate96_05ML.ToString();
            labware1.BackgroundColor = Color.FromArgb(255, 255, 0, 0);
            labware1.ParentCarrier   = null;

            LabwareUIElementFixedSize labwareUIElement = new LabwareUIElementFixedSize(labware1, new Size(400, 400));

            grid1.Children.Add(labwareUIElement);

            this.MouseMove += MainWindow_MouseMove;
        }
Ejemplo n.º 25
0
        /// <summary>
        /// create UIElement
        /// </summary>
        /// <param name="wareBase"></param>
        /// <param name="existingUIElements"/>
        /// <returns></returns>
        public static BasewareUIElement CreateUIElement(WareBase wareBase, UIElementCollection existingUIElements)
        {
            BasewareUIElement newUIElement;

            if (wareBase is Labware)
            {
                Labware       labware        = ((Labware)wareBase).Clone() as Labware;
                List <string> existingLabels = GetExistingLabels(existingUIElements);
                string        newLabel       = FindNextLabelName(existingLabels);
                labware.Label = newLabel;
                newUIElement  = new LabwareUIElement(labware);
            }
            else
            {
                Carrier carrier = ((Carrier)wareBase).Clone() as Carrier;
                newUIElement = new CarrierUIElement((Carrier)carrier);
            }
            newUIElement.Selected = true;
            return(newUIElement);
        }
Ejemplo n.º 26
0
        /// <summary>
        /// Draw the worktable with pins, and the current DitiBox
        /// </summary>
        /// <param name="drawingContext"></param>
        public void Draw(DrawingContext drawingContext)
        {
            for (int i = 0; i < worktable.GridCount; i++)
            {
                DrawPinsSameGrid(i, drawingContext);
            }
            DrawBorder(worktable.Size, drawingContext);

            //if(layout.DitiInfo.DitiInfoItems.Count !=)
            foreach (var ditiBoxInfo in layout.DitiInfo.DitiBoxInfos)
            {
                Labware labware = layout.FindLabware(ditiBoxInfo.label);
                if (labware != null)
                {
                    labware.CalculatePositionInLayout();
                    var position = labware.GetAbsPosition(96);
                    position.X += 18;
                    VisualCommon.DrawCircle(position, 6, drawingContext, Colors.Red, true);
                }
            }
        }
Ejemplo n.º 27
0
        private void SetDitiPosition_Executed(object sender, ExecutedRoutedEventArgs e)
        {
            LayoutEditor layoutEditor = GetLayoutEditor();

            if (layoutEditor == null)
            {
                AddErrorInfo("找不到布局!");
                return;
            }
            Labware    labware    = e.Parameter as Labware;
            DitiEditor ditiEditor = new DitiEditor(labware, layoutEditor.Layout);

            ditiEditor.ShowDialog();
            if (!ditiEditor.SetOk)
            {
                return;
            }
            var ditibox = layoutEditor.Layout.DitiInfo.DitiBoxInfos.Find(x => x.label == labware.Label);

            ditibox.count = ditiEditor.RemainTipCount;
        }
Ejemplo n.º 28
0
        public Labware CreateDiti1000(string label, int site)
        {
            Labware labware = new Labware();

            labware.TypeName                     = LabwareBuildInType.Diti1000.ToString();
            labware.Dimension.XLength            = 125.5;
            labware.Dimension.YLength            = 85;
            labware.WellsInfo.WellRadius         = 4;
            labware.WellsInfo.NumberOfWellsX     = 8;
            labware.WellsInfo.NumberOfWellsY     = 12;
            labware.WellsInfo.FirstWellPositionX = 8;
            labware.WellsInfo.FirstWellPositionY = 10;
            labware.WellsInfo.LastWellPositionX  = 78;
            labware.WellsInfo.LastWellPositionX  = 118;
            labware.SiteID            = site;
            labware.ZValues.ZTravel   = 300;
            labware.ZValues.ZStart    = 600;
            labware.ZValues.ZDispense = 1000;
            labware.ZValues.ZMax      = 1600;
            labware.Label             = label;
            return(labware);
        }
Ejemplo n.º 29
0
        public void LabwareSerializeToXmlFileTest()
        {
            Labware labware = new Labware();

            labware.TypeName                     = "LabwareSerializeTest";
            labware.Dimension.XLength            = 800;
            labware.Dimension.YLength            = 125;
            labware.WellsInfo.WellRadius         = 4;
            labware.WellsInfo.NumberOfWellsX     = 8;
            labware.WellsInfo.NumberOfWellsY     = 12;
            labware.WellsInfo.FirstWellPositionX = 8;
            labware.WellsInfo.FirstWellPositionY = 10;
            labware.WellsInfo.LastWellPositionX  = 78;
            labware.WellsInfo.LastWellPositionX  = 118;

            labware.ZValues.ZTravel   = 300;
            labware.ZValues.ZStart    = 600;
            labware.ZValues.ZDispense = 1000;
            labware.ZValues.ZMax      = 1600;

            labware.Serialize(this._xmlFilePath);
        }
Ejemplo n.º 30
0
        void LabwareEditor_Loaded(object sender, RoutedEventArgs e)
        {
            try
            {
                TeachingControllerDelegate.Instance.Controller.Init();
            }
            catch (CriticalException ex)
            {
                if (ex.Message == "Send_fail")
                {
                    MessageBox.Show("初始化失败,可能是机器未通电");
                }
            }

            labware = this.DataContext as Labware;
            int index = -1;

            if (labware.ParentCarrier != null)
            {
                int tempIndex = 0;
                foreach (var carrier in labware.AllCarriers)
                {
                    if (carrier.TypeName == labware.ParentCarrier.TypeName)
                    {
                        index = tempIndex;
                        break;
                    }
                }
                if (index != -1)
                {
                    cmbCalibCarrier.SelectedIndex = index;
                }
            }
            labware.CalculatePositionInLayout();
            GetCurrentPositon();
            curPositionPanel.DataContext = xyz;
            StartCheckingInput();
        }