private async Task <bool> StsImpl(VsmdAxis axis)
        {
            await VsmdController.GetVsmdController().Sts(axis);

            string newPos = VsmdController.GetVsmdController().GetAxis(axis).curPos.ToString();

            switch (axis)
            {
            case VsmdAxis.X:
                txtPosX.Text = newPos;
                break;

            case VsmdAxis.Y:
                txtPosY.Text = newPos;
                break;

            case VsmdAxis.Z:
                txtPosZ.Text = newPos;
                break;

            default:
                break;
            }
            return(true);
        }
        private void InitAxises()
        {
            if (!VsmdController.GetVsmdController().IsInitialized())
            {
                StatusBar.DisplayMessage(MessageType.Error, "设备未连接!");
                DisableAllControls();
                return;
            }

            VsmdInfoSync ax = VsmdController.GetVsmdController().GetAxis(VsmdAxis.X);

            txtCidX.Text   = ax.Cid.ToString();
            txtPosX.Text   = ax.curPos.ToString();
            txtSpeedX.Text = ax.GetAttributeValue(VsmdAttribute.Spd).ToString();
            txtZsdX.Text   = ax.GetAttributeValue(VsmdAttribute.Zsd).ToString();

            VsmdInfoSync ay = VsmdController.GetVsmdController().GetAxis(VsmdAxis.Y);

            txtCidY.Text   = ay.Cid.ToString();
            txtPosY.Text   = ay.curPos.ToString();
            txtSpeedY.Text = ay.GetAttributeValue(VsmdAttribute.Spd).ToString();
            txtZsdY.Text   = ay.GetAttributeValue(VsmdAttribute.Zsd).ToString();

            VsmdInfoSync az = VsmdController.GetVsmdController().GetAxis(VsmdAxis.Z);

            txtCidZ.Text   = az.Cid.ToString();
            txtPosZ.Text   = az.curPos.ToString();
            txtSpeedZ.Text = az.GetAttributeValue(VsmdAttribute.Spd).ToString();
            txtZsdZ.Text   = az.GetAttributeValue(VsmdAttribute.Zsd).ToString();
        }
        private void btnOK_Click(object sender, EventArgs e)
        {
            GeneralSettingMeta meta = GeneralSettings.GetInstance().GetSettingMeta();

            //meta.DispenseInterval = (int)numDripInter.Value;
            meta.MoveSpeed           = float.Parse(txtMoveSpd.Text.Trim());
            meta.AutoConnect         = ckbAutoConnect.Checked;
            meta.OutputCommandLog    = ckbEnableCmdLog.Checked;
            meta.OutputStsCommandLog = ckbEnableStsCmdLog.Checked;
            meta.PipettingSpeed      = int.Parse(txtPipettingSpeed.Text);
            bool retVal = GeneralSettings.GetInstance().Save();

            if (retVal)
            {
                StatusBar.DisplayMessage(MessageType.Info, "设置成功!");
                if (VsmdController.GetVsmdController().IsInitialized())
                {
                    VsmdController.GetVsmdController().SetOutputCommandLogFlag(meta.OutputCommandLog);
                }

                this.Close();
            }
            else
            {
                StatusBar.DisplayMessage(MessageType.Error, "设置失败!");
            }
        }
Esempio n. 4
0
        private async void  GoHome()
        {
            VsmdInfoSync ax     = VsmdController.GetVsmdController().GetAxis(VsmdAxis.X);
            var          speedX = ax.GetAttributeValue(VsmdAttribute.Spd);
            var          zsdX   = ax.GetAttributeValue(VsmdAttribute.Zsd);

            VsmdInfoSync ay     = VsmdController.GetVsmdController().GetAxis(VsmdAxis.Y);
            var          speedY = ay.GetAttributeValue(VsmdAttribute.Spd);
            var          zsdY   = ay.GetAttributeValue(VsmdAttribute.Zsd);

            VsmdInfoSync az     = VsmdController.GetVsmdController().GetAxis(VsmdAxis.Z);
            var          speedZ = az.GetAttributeValue(VsmdAttribute.Spd);
            var          zsdZ   = az.GetAttributeValue(VsmdAttribute.Zsd);

            await VsmdController.GetVsmdController().SetZsd(VsmdAxis.Z, zsdZ);

            await VsmdController.GetVsmdController().ZeroStart(VsmdAxis.Z);

            await VsmdController.GetVsmdController().SetZsd(VsmdAxis.X, zsdX);

            VsmdController.GetVsmdController().ZeroStart(VsmdAxis.X);

            await VsmdController.GetVsmdController().SetZsd(VsmdAxis.Y, zsdY);

            await VsmdController.GetVsmdController().ZeroStart(VsmdAxis.Y);

            //set positive limit register
            ax.cfgPsr(3);
            ay.cfgPsr(3);
            az.cfgPsr(3);
        }
Esempio n. 5
0
 private void ConnectVsmd_FormClosing(object sender, FormClosingEventArgs e)
 {
     if (VsmdController.GetVsmdController().IsInitialized())
     {
         SavePref();
     }
 }
        public async void DripTube(string args)
        {
            JObject targetTube = (JObject)JsonConvert.DeserializeObject(args);
            int     type = int.Parse(targetTube["type"].ToString());
            int     blockNum, row, col = 1;

            if (type == (int)BoardType.Site)
            {
                blockNum = int.Parse(targetTube["site"].ToString());
                col      = int.Parse(targetTube["col"].ToString());
            }
            else
            {
                blockNum = int.Parse(targetTube["grid"].ToString());
            }
            row = int.Parse(targetTube["row"].ToString());
            SetDrippingTube(blockNum, row, col);
            VsmdController vsmdController  = VsmdController.GetVsmdController();
            PumpController pumpController  = PumpController.GetPumpController();
            BoardSetting   curBoardSetting = BoardSetting.GetInstance();
            await vsmdController.MoveTo(VsmdAxis.Z, curBoardSetting.CurrentBoard.ZDispense);

            await pumpController.Drip();

            Thread.Sleep(GeneralSettings.GetInstance().DripInterval);

            await pumpController.Drip();

            await vsmdController.MoveTo(VsmdAxis.Z, curBoardSetting.CurrentBoard.ZTravel);

            MoveCallBack(blockNum, row, col);
        }
        private async void Move2Position(VsmdAxis axis, int val)
        {
            var spd = VsmdController.GetVsmdController().GetAxis(axis).GetAttributeValue(VsmdLib.VsmdAttribute.Spd);
            await VsmdController.GetVsmdController().SetSpeed(axis, spd);

            await VsmdController.GetVsmdController().MoveTo(axis, val);
        }
Esempio n. 8
0
 public static VsmdController GetVsmdController()
 {
     if (m_vsmdController == null)
     {
         m_vsmdController = new VsmdController();
     }
     return(m_vsmdController);
 }
        private async Task <bool> MoveAxis(float speed)
        {
            await VsmdController.GetVsmdController().SetSpeed(m_axisType, speed);

            VsmdController.GetVsmdController().GetAxis(m_axisType).SendCommand("mov");
            m_inMoving = true;
            return(true);
        }
Esempio n. 10
0
        public async Task <bool> PumpDrip()
        {
            VsmdController vsmdController = VsmdController.GetVsmdController();
            await vsmdController.SetS3Mode(VsmdAxis.Z, 1);

            await SwitchS3OnOff();

            return(true);
        }
Esempio n. 11
0
        /// <summary>
        ///
        /// </summary>
        private async void DoPipetting()
        {
            //Logger.Instance.Write("DoPipetting");
            log.Info("Do Pipetting");
            VsmdController vsmdController  = VsmdController.GetVsmdController();
            PumpController pumpController  = PumpController.GetPumpController();
            BoardSetting   curBoardSetting = BoardSetting.GetInstance();

            await BeforeMove(m_selectedTubes.Count);

            int touchDelaySeconds = (int)(1000 * curBoardSetting.CurrentBoard.DelaySeconds);
            int delayMicroSecondsBetweenSamples = (int)(Preference.GetInstace().DelaySeconds * 1000);
            int blockNum, row, col = 1;

            //await vsmdController.SetS3Mode(VsmdAxis.Z, 1);
            for (int i = m_pipettingIndex + 1; i < m_sortedTubesArr.Length; i++)
            {
                if (m_dripStatus != PipettingStatus.Moving)
                {
                    break;
                }
                JObject obj = (JObject)m_sortedTubesArr[i];
                GetPositionInfo(obj, out blockNum, out row, out col);
                SetPipettingWell(blockNum, row, col);
                int xPos   = curBoardSetting.Convert2PhysicalPos(VsmdAxis.X, blockNum, col);
                int offset = curBoardSetting.CurrentBoard.TouchEdgeOffset;
                await vsmdController.MoveTo(VsmdAxis.X, xPos);

                await vsmdController.MoveTo(VsmdAxis.Y, curBoardSetting.Convert2PhysicalPos(VsmdAxis.Y, blockNum, row));

                // TODO
                await vsmdController.MoveTo(VsmdAxis.Z, curBoardSetting.CurrentBoard.ZDispense);

                // start pipetting
                await pumpController.SwitchOnOff(i);

                // wait several seconds, this time should be changed according to the volume dispensed
                Thread.Sleep(delayMicroSecondsBetweenSamples);
                await vsmdController.MoveTo(VsmdAxis.X, xPos + offset);

                Thread.Sleep(touchDelaySeconds);
                await vsmdController.MoveTo(VsmdAxis.Z, curBoardSetting.CurrentBoard.ZTravel);

                // change the UI to start
                Thread.Sleep(100);

                MoveCallBack(blockNum, row, col);
                m_pipettingIndex = i;
            }

            bool bok = await AfterMove();

            log.InfoFormat("finished pipetting, result is: {0}", bok);
            //Logger.Instance.Write("error happened in afterMove");
        }
Esempio n. 12
0
        public async Task <bool> SwitchS3OnOff()
        {
            VsmdController vsmdController = VsmdController.GetVsmdController();

            Thread.Sleep(500);
            await vsmdController.S3On(VsmdAxis.Z);

            Thread.Sleep(500);
            await vsmdController.S3Off(VsmdAxis.Z);

            return(true);
        }
Esempio n. 13
0
        public void StopMove()
        {
            DripStatus preMode = m_dripStatus;

            m_dripStatus = DripStatus.Idle;
            m_selectedTubes.Clear();
            VsmdController.GetVsmdController().Stop();
            if (preMode == DripStatus.PauseMove)
            {
                AfterMove();
            }
        }
 private void SetTubePositionFrm_Load(object sender, EventArgs e)
 {
     m_preAxisSpeed = VsmdController.GetVsmdController().GetAxis(m_axisType).GetAttributeValue(VsmdLib.VsmdAttribute.Spd);
     if (m_axisType == VsmdAxis.X)
     {
         lblTip.Text = "请通过键盘上\"←\"和、\"→\"来操作。";
     }
     else if (m_axisType == VsmdAxis.Y)
     {
         lblTip.Text = "请通过键盘上\"↑\"和、\"↓\"来操作。";
     }
     this.KeyPreview = true;
 }
Esempio n. 15
0
 private void MainFrm_FormClosing(object sender, FormClosingEventArgs e)
 {
     if (m_dripForm != null)
     {
         if (m_dripForm.PipettingStatus != PipettingStatus.Idle)
         {
             e.Cancel = true;
             StatusBar.DisplayMessage(MessageType.Warning, "正在运行,请勿关闭!");
             return;
         }
     }
     VsmdController.GetVsmdController().Dispose();
 }
Esempio n. 16
0
        private async void btnMoveFront_Click(object sender, EventArgs e)
        {
            bool bok = await VsmdController.GetVsmdController().MoveTo(VsmdAxis.Y, 100);

            if (bok)
            {
                StatusBar.DisplayMessage(VsmdWorkstation.Controls.MessageType.Info, "移动到最前端!");
            }
            else
            {
                StatusBar.DisplayMessage(VsmdWorkstation.Controls.MessageType.Error, "未能移动到最前端!");
            }
        }
Esempio n. 17
0
        /// <summary>
        ///
        /// </summary>
        private async void DripThread()
        {
            VsmdController vsmdController  = VsmdController.GetVsmdController();
            PumpController pumpController  = PumpController.GetPumpController();
            BoardSetting   curBoardSetting = BoardSetting.GetInstance();
            JArray         jsArr           = m_selectedTubes;

            await BeforeMove();

            int dripInterval = GeneralSettings.GetInstance().DripInterval;
            int blockNum, row, col = 1;

            //await vsmdController.SetS3Mode(VsmdAxis.Z, 1);
            for (int i = m_dripIndex + 1; i < jsArr.Count; i++)
            {
                if (m_dripStatus != DripStatus.Moving)
                {
                    break;
                }
                JObject obj = (JObject)jsArr[i];
                GetPositionInfo(obj, out blockNum, out row, out col);
                SetDrippingTube(blockNum, row, col);
                //await vsmdController.MoveTo(VsmdAxis.X, curBoardSetting.Convert2PhysicalPos(VsmdAxis.X, blockNum, col));
                //await vsmdController.MoveTo(VsmdAxis.Y, curBoardSetting.Convert2PhysicalPos(VsmdAxis.Y, blockNum, row));

                var moveXTask = vsmdController.MoveTo(VsmdAxis.X, curBoardSetting.Convert2PhysicalPos(VsmdAxis.X, blockNum, col));
                var moveYTask = vsmdController.MoveTo(VsmdAxis.Y, curBoardSetting.Convert2PhysicalPos(VsmdAxis.Y, blockNum, row));
                await Task.WhenAll(moveXTask, moveYTask);

                // TODO
                await vsmdController.MoveTo(VsmdAxis.Z, curBoardSetting.CurrentBoard.ZDispense);

                // start drip
                //await vsmdController.ClickPump();
                await pumpController.Drip();

                // wait 5 seconds, this time should be changed according to the volume dripped
                Thread.Sleep(dripInterval);
                await vsmdController.MoveTo(VsmdAxis.Z, curBoardSetting.CurrentBoard.ZTravel);

                // change the screen to start
                await pumpController.Drip();

                //await Task.Delay(1000);

                MoveCallBack(blockNum, row, col);
                m_dripIndex = i;
            }

            AfterMove();
        }
Esempio n. 18
0
        private async void btnMoveToBack_Click(object sender, EventArgs e)
        {
            BoardSetting curBoardSetting = BoardSetting.GetInstance();
            bool         bok             = await VsmdController.GetVsmdController().MoveTo(VsmdAxis.Y, 30500);

            if (bok)
            {
                StatusBar.DisplayMessage(VsmdWorkstation.Controls.MessageType.Info, "移动到后端!");
            }
            else
            {
                StatusBar.DisplayMessage(VsmdWorkstation.Controls.MessageType.Error, "未能移动到后端!");
            }
        }
        private void BoardSettingFrm_Load(object sender, EventArgs e)
        {
            panelGrid.Top  = panelSite.Top;
            m_curMeta      = new BoardMeta();
            m_curMeta.Type = (int)BoardType.Site;
            FillData();
            m_mode = FORM_MODE.Add;

            if (!VsmdController.GetVsmdController().IsInitialized())
            {
                StatusBar.DisplayMessage(MessageType.Error, "设备未连接!");
                DisableControls();
                return;
            }
        }
Esempio n. 20
0
        public async void MoveToHere(string args)
        {
            JObject targetTube = (JObject)JsonConvert.DeserializeObject(args);
            int     blockNum, row, col;

            GetPositionInfo(targetTube, out blockNum, out row, out col);
            VsmdController vsmdController  = VsmdController.GetVsmdController();
            BoardSetting   curBoardSetting = BoardSetting.GetInstance();
            //await vsmdController.MoveTo(VsmdAxis.X, curBoardSetting.Convert2PhysicalPos(VsmdAxis.X, blockNum, col));
            //await vsmdController.MoveTo(VsmdAxis.Y, curBoardSetting.Convert2PhysicalPos(VsmdAxis.Y, blockNum, row));

            var moveXTask = vsmdController.MoveTo(VsmdAxis.X, curBoardSetting.Convert2PhysicalPos(VsmdAxis.X, blockNum, col));
            var moveYTask = vsmdController.MoveTo(VsmdAxis.Y, curBoardSetting.Convert2PhysicalPos(VsmdAxis.Y, blockNum, row));
            await Task.WhenAll(moveXTask, moveYTask);
        }
        private async void SetTubePositionFrm_KeyUp(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Left ||
                e.KeyCode == Keys.Right ||
                e.KeyCode == Keys.Up ||
                e.KeyCode == Keys.Down)
            {
                if (m_inMoving)
                {
                    await VsmdController.GetVsmdController().Stop(m_axisType);

                    m_inMoving  = false;
                    txtPos.Text = VsmdController.GetVsmdController().GetAxis(m_axisType).curPos.ToString();
                }
            }
        }
Esempio n. 22
0
        private async Task <bool> BeforeMove()
        {
            m_dripStatus = DripStatus.Moving;
            CallJS("JsExecutor.beforeMove();");
            if (!m_isFromPause)
            {
                VsmdController vsmdController = VsmdController.GetVsmdController();
                await vsmdController.ZeroStart(VsmdAxis.X);

                await vsmdController.ZeroStart(VsmdAxis.Y);

                await vsmdController.ZeroStart(VsmdAxis.Z);
            }

            return(true);
        }
        private async Task <bool> SaveImpl(VsmdAxis axis)
        {
            switch (axis)
            {
            case VsmdAxis.X:
                if (!string.IsNullOrWhiteSpace(txtSpeedX.Text))
                {
                    await VsmdController.GetVsmdController().SetSpeed(axis, float.Parse(txtSpeedX.Text));
                }
                if (!string.IsNullOrWhiteSpace(txtZsdX.Text))
                {
                    await VsmdController.GetVsmdController().SetZsd(axis, float.Parse(txtZsdX.Text));
                }
                break;

            case VsmdAxis.Y:
                if (!string.IsNullOrWhiteSpace(txtSpeedY.Text))
                {
                    await VsmdController.GetVsmdController().SetSpeed(axis, float.Parse(txtSpeedY.Text));
                }
                if (!string.IsNullOrWhiteSpace(txtZsdY.Text))
                {
                    await VsmdController.GetVsmdController().SetZsd(axis, float.Parse(txtZsdY.Text));
                }
                break;

            case VsmdAxis.Z:
                if (!string.IsNullOrWhiteSpace(txtSpeedZ.Text))
                {
                    await VsmdController.GetVsmdController().SetSpeed(axis, float.Parse(txtSpeedZ.Text));
                }
                if (!string.IsNullOrWhiteSpace(txtZsdX.Text))
                {
                    await VsmdController.GetVsmdController().SetZsd(axis, float.Parse(txtZsdZ.Text));
                }
                break;

            default:
                break;
            }

            return(true);
        }
Esempio n. 24
0
 public void UpdateControlState()
 {
     if (VsmdController.GetVsmdController().IsInitialized())
     {
         cmbPort.Enabled     = false;
         cmbBaudrate.Enabled = false;
         cmbPumpPort.Enabled = false;
         lblCurInfo.Text     = "已连接";
         btnConnect.Text     = "断开连接";
     }
     else
     {
         cmbPort.Enabled     = true;
         cmbBaudrate.Enabled = true;
         cmbPumpPort.Enabled = true;
         lblCurInfo.Text     = "未连接";
         btnConnect.Text     = "连接";
     }
 }
Esempio n. 25
0
        public void Move()
        {
            VsmdController vsmdController = VsmdController.GetVsmdController();

            if (!vsmdController.IsInitialized())
            {
                StatusBar.DisplayMessage(MessageType.Error, "设备未连接!");
                return;
            }
            float  spdX    = vsmdController.GetAxis(VsmdAxis.X).GetAttributeValue(VsmdLib.VsmdAttribute.Spd);
            float  spdY    = vsmdController.GetAxis(VsmdAxis.Y).GetAttributeValue(VsmdLib.VsmdAttribute.Spd);
            float  spdZ    = vsmdController.GetAxis(VsmdAxis.Z).GetAttributeValue(VsmdLib.VsmdAttribute.Spd);
            string errAxis = "";

            if (spdX <= 0.0)
            {
                errAxis += "X";
            }
            if (spdY <= 0.0)
            {
                if (errAxis.Length > 0)
                {
                    errAxis += ",";
                }
                errAxis += "Y";
            }
            if (spdZ <= 0.0)
            {
                if (errAxis.Length > 0)
                {
                    errAxis += ",";
                }
                errAxis += "Z";
            }
            if (errAxis.Length > 0)
            {
                StatusBar.DisplayMessage(MessageType.Error, "控制轴" + errAxis + "速度不能为0!");
            }
            else
            {
                CallJS("JsExecutor.startDrip()");
            }
        }
Esempio n. 26
0
        private async Task <bool> AfterMove()
        {
            //await VsmdController.GetVsmdController().Off(VsmdAxis.X);
            //await VsmdController.GetVsmdController().Off(VsmdAxis.Y);
            bool bok = await VsmdController.GetVsmdController().MoveTo(VsmdAxis.Y, 100);

            if (m_dripStatus != PipettingStatus.PauseMove)
            {
                CallJS("JsExecutor.afterMove();");

                m_isFromPause = false;

                m_dripStatus = PipettingStatus.Idle;
                m_selectedTubes.Clear();
                if (onPipettingFinished != null)
                {
                    onPipettingFinished();
                }
            }
            return(bok);
        }
Esempio n. 27
0
 private void tsmDrip_Click(object sender, EventArgs e)
 {
     SetAllSubFormState();
     if (VsmdController.GetVsmdController().IsInitialized())
     {
         if (m_dripForm == null || !m_dripForm.IsOpened)
         {
             m_dripForm           = new DripFrm();
             m_dripForm.MdiParent = this;
             //m_dripForm.WindowState = FormWindowState.Maximized;
             m_dripForm.Show();
         }
         else
         {
             m_dripForm.BringToFront();
         }
     }
     else
     {
         StatusBar.DisplayMessage(MessageType.Error, "设备未连接!");
     }
 }
Esempio n. 28
0
 private async void btnResetControler_Click(object sender, EventArgs e)
 {
     await VsmdController.GetVsmdController().ResetVsmdController();
 }
Esempio n. 29
0
        private async void btnConnect_Click(object sender, EventArgs e)
        {
            if (VsmdController.GetVsmdController().IsInitialized())
            {
                VsmdController.GetVsmdController().Dispose();
                PumpController.GetPumpController().Dispose();
                UpdateControlState();
                return;
            }

            if (m_isConnecting)
            {
                return;
            }

            if (cmbPort.SelectedItem == null)
            {
                StatusBar.DisplayMessage(VsmdWorkstation.Controls.MessageType.Error, "电机端口不能为空!");
                return;
            }
            if (cmbPumpPort.SelectedItem == null)
            {
                StatusBar.DisplayMessage(VsmdWorkstation.Controls.MessageType.Error, "蠕动泵端口不能为空!");
                return;
            }
            string vsmdPort = cmbPort.SelectedItem.ToString();
            string pumpPort = cmbPumpPort.SelectedItem.ToString();

            if (vsmdPort == pumpPort)
            {
                StatusBar.DisplayMessage(VsmdWorkstation.Controls.MessageType.Error, "电机端口与蠕动泵端口不能相同!");
                return;
            }
            int baudrate = int.Parse(cmbBaudrate.SelectedItem.ToString());

            if (vsmdPort == VsmdController.GetVsmdController().GetPort() &&
                baudrate == VsmdController.GetVsmdController().GetBaudrate() &&
                pumpPort == PumpController.GetPumpController().GetPort())
            {
                if (m_initCB != null)
                {
                    m_initCB(new InitResult()
                    {
                        Message = "设备连接成功!", IsSuccess = true
                    });
                }
                this.Close();
            }

            m_isConnecting = true;
            InitResult vsmdRet = await VsmdController.GetVsmdController().Init(vsmdPort, baudrate);

            InitResult pumpRet = PumpController.GetPumpController().Init(pumpPort);

            if (m_initCB != null)
            {
                InitResult connectRet = new InitResult();
                connectRet.IsSuccess = vsmdRet.IsSuccess && pumpRet.IsSuccess;
                connectRet.Message   = vsmdRet.IsSuccess ? pumpRet.Message : vsmdRet.Message;
                m_initCB(connectRet);
                m_isConnecting = false;
            }
            if (vsmdRet.IsSuccess && pumpRet.IsSuccess)
            {
                this.Close();
            }
        }
Esempio n. 30
0
        private void ConnectVsmd_Load(object sender, EventArgs e)
        {
            cmbPort.Items.AddRange(SerialPort.GetPortNames());
            cmbPumpPort.Items.AddRange(SerialPort.GetPortNames());
            if (VsmdController.GetVsmdController().IsInitialized())
            {
                //lblCurInfo.Text = VsmdController.GetVsmdController().GetPort() + ", " + VsmdController.GetVsmdController().GetBaudrate() + ", " + PumpController.GetPumpController().GetPort();
                int idx = cmbPort.Items.IndexOf(VsmdController.GetVsmdController().GetPort());
                if (idx > -1)
                {
                    cmbPort.SelectedIndex = idx;
                }
                idx = cmbBaudrate.Items.IndexOf(VsmdController.GetVsmdController().GetBaudrate().ToString());
                if (idx > -1)
                {
                    cmbBaudrate.SelectedIndex = idx;
                }
                idx = cmbPumpPort.Items.IndexOf(PumpController.GetPumpController().GetPort());
                if (idx > -1)
                {
                    cmbPumpPort.SelectedIndex = idx;
                }
                UpdateControlState();
                return;
            }
            else
            {
                UpdateControlState();
            }

            if (Preference.GetInstace().HasPreference)
            {
                int idx = cmbPort.Items.IndexOf(Preference.GetInstace().VsmdPort);
                if (idx > -1)
                {
                    cmbPort.SelectedIndex = idx;
                }
                idx = cmbBaudrate.Items.IndexOf(Preference.GetInstace().Baudrate.ToString());
                if (idx > -1)
                {
                    cmbBaudrate.SelectedIndex = idx;
                }
                idx = cmbPumpPort.Items.IndexOf(Preference.GetInstace().PumpPort);
                if (idx > -1)
                {
                    cmbPumpPort.SelectedIndex = idx;
                }
            }
            else
            {
                if (cmbPort.Items.Count > 0)
                {
                    cmbPort.SelectedIndex     = 0;
                    cmbPumpPort.SelectedIndex = 0;
                }
                cmbBaudrate.SelectedIndex = 2;
            }
            IsClosed = false;

            if (GeneralSettings.GetInstance().AutoConnect)
            {
                btnConnect_Click(null, null);
            }
        }