コード例 #1
0
        public MainWindow()
        {
            Move.Init();
            PortIO.Init();

            capturing     = false;
            specCapturing = true;
            moving        = false;
            acquiring     = false;
            acquire       = false;
            getTemp       = true;

            InitializeComponent();
            /////////////////////////////////
            monitor.XLabel = "wavenumber/cm-1";
            /////////////////////////////////

            if (!Ccd.Init())
            {
                MessageBox.Show("CCD初始化失败", this.Title, MessageBoxButton.OK, MessageBoxImage.Error);
                startStopCapture.IsEnabled = false;
                autoSpex.IsEnabled         = false;
                getTemp = false;
            }

            double t;

            if (!double.TryParse(ConfigurationManager.AppSettings["spexPos"], out t))
            {
                SpexPos = 0;
            }
            else
            {
                SpexPos = t;
            }

            getTempThread = new Thread(new ThreadStart(
                                           () =>
            {
                while (getTemp)
                {
                    Thread.Sleep(500);
                    this.Dispatcher.BeginInvoke((ThreadStart) delegate()
                    {
                        if (!temperature.IsFocused)
                        {
                            temperature.Content = (Ccd.GetTemp() / 100.0).ToString();
                        }
                    });
                }
            }));
            getTempThread.Start();
        }
コード例 #2
0
        private void singlePointMode_Click(object sender, RoutedEventArgs e)
        {
            Move.Stop();
            capturing = false;

            double wavenumFrom = -100, wavenumTo = 100, wavenumStep = 1;
            int    column     = (int)DataProcessing.XDataBase;
            uint   expoTime   = (uint)Ccd.ExpoTime;
            double end        = SpexPos + wavenumTo;
            double wavenumNow = SpexPos;

            Thread thread = new Thread(new ThreadStart(
                                           () =>
            {
                this.Dispatcher.Invoke((ThreadStart) delegate()
                {
                    moveAndProgress(SpexPos, SpexPos + wavenumFrom);
                });
                moveThread.Join();
                wavenumNow       += wavenumFrom;
                DataProcessing dp = new DataProcessing(true);
                Ccd.Setup(true, expoTime);
                Ccd.GetFrame(dp.DataArray);
                Ccd.Stop();
                this.Dispatcher.BeginInvoke((ThreadStart) delegate()
                {
                    dp.GetList(SpexPos);
                    monitor.Data = new List <Point>(dp.PointArray);
                });
                while (wavenumNow < end)
                {
                    this.Dispatcher.Invoke((ThreadStart) delegate()
                    {
                        moveAndProgress(SpexPos, SpexPos + wavenumStep);
                    });
                    moveThread.Join();
                    wavenumNow += wavenumStep;
                    Ccd.Setup(true, expoTime);
                    Ccd.GetFrame(dp.DataArray);
                    Ccd.Stop();
                    this.Dispatcher.BeginInvoke((ThreadStart) delegate()
                    {
                        dp.GetList(SpexPos);
                        dp.Append((System.Collections.Generic.List <Point>)monitor.Data);
                        monitor.RepaintLine(monitor.Data, false);
                    });
                }
            }));

            thread.Start();
        }
コード例 #3
0
        private void hardwareSettings_Click(object sender, RoutedEventArgs e)
        {
            HardwareSettingsWindow hardwareSettingsWindow = new HardwareSettingsWindow();

            hardwareSettingsWindow.Owner = this;
            hardwareSettingsWindow.WindowStartupLocation = WindowStartupLocation.CenterOwner;

            hardwareSettingsWindow.SpexPos  = SpexPos;
            hardwareSettingsWindow.Temp     = Ccd.Temp;
            hardwareSettingsWindow.ExpoTime = Ccd.ExpoTime;
            hardwareSettingsWindow.ROIFrom  = Ccd.ROIFrom;
            hardwareSettingsWindow.ROITo    = Ccd.ROITo;

            hardwareSettingsWindow.ShowDialog();
            if (hardwareSettingsWindow.DialogResult == true)
            {
                if (hardwareSettingsWindow.SpexPos != SpexPos)
                {
                    if (moving)
                    {
                        MessageBox.Show("请等待电机停止转动", this.Title, MessageBoxButton.OK, MessageBoxImage.Error);
                    }
                    else
                    {
                        SpexPos = hardwareSettingsWindow.SpexPos;
                    }
                }
                //if (hardwareSettingsWindow.Temp > -100 && hardwareSettingsWindow.Temp < 40)
                {
                    Ccd.SetTemp((Int16)(hardwareSettingsWindow.Temp * 100));
                    Ccd.Temp = hardwareSettingsWindow.Temp;
                }
                if (Ccd.ExpoTime != hardwareSettingsWindow.ExpoTime || Ccd.ROIFrom != hardwareSettingsWindow.ROIFrom || Ccd.ROITo != hardwareSettingsWindow.ROITo)
                {
                    if (capturing)
                    {
                        MessageBox.Show("请等待CCD停止读取数据", this.Title, MessageBoxButton.OK, MessageBoxImage.Error);
                    }
                    else
                    {
                        Ccd.ExpoTime = hardwareSettingsWindow.ExpoTime;
                        Ccd.ROIFrom  = hardwareSettingsWindow.ROIFrom;
                        Ccd.ROITo    = hardwareSettingsWindow.ROITo;
                    }
                }
            }
        }
コード例 #4
0
 private void window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
 {
     if (capturing)
     {
         capturing = false;
         getFrameThread.Join();
     }
     if (getTemp)
     {
         getTemp = false;
         getTempThread.Join();
     }
     if (moving)
     {
         Move.Stop();
         moveThread.Join();
         moving = false;
         moveProgressThread.Join();
     }
     saveConfig("spexPos", SpexPos.ToString());
     PortIO.Uninit();
     Ccd.Uninit();
 }
コード例 #5
0
        private void autoSpex_Click(object sender, RoutedEventArgs e)
        {
            if (!acquiring)
            {
                AutoSpexWindow autoSpexWindow = new AutoSpexWindow();
                autoSpexWindow.Owner = this;
                autoSpexWindow.WindowStartupLocation = System.Windows.WindowStartupLocation.CenterOwner;

                autoSpexWindow.ShowDialog();
                if (autoSpexWindow.DialogResult == true)
                {
                    acquiring                  = true;
                    acquire                    = true;
                    autoSpex.Content           = "停止采谱";
                    autoSpex.ToolTip           = "Stop acquiring";
                    startStopMoving.IsEnabled  = false;
                    startStopCapture.IsEnabled = false;
                    displaySettings.IsEnabled  = false;
                    hardwareSettings.IsEnabled = false;

                    Move.Stop();
                    capturing = false;

                    double waveNumFrom, waveNumTo, waveNumStep, waveNumDisInit, waveNumNow;
                    int    overlappedPixel;
                    int    expoTime;

                    waveNumFrom     = autoSpexWindow.WaveNumFrom;
                    waveNumTo       = autoSpexWindow.WaveNumTo;
                    waveNumStep     = (Ccd.ROITo - Ccd.ROIFrom) * DataProcessing.XScale - autoSpexWindow.OverlappedWaveNum;
                    overlappedPixel = (int)(autoSpexWindow.OverlappedWaveNum / monitor.XScale + 0.5);
                    waveNumDisInit  = waveNumFrom - (Ccd.ROIFrom - DataProcessing.XDataBase) * DataProcessing.XScale - SpexPos;
                    expoTime        = autoSpexWindow.ExpoTime;
                    waveNumNow      = SpexPos;

                    autoSpexThread = new Thread(new ThreadStart(
                                                    () =>
                    {
                        List <Point> data = new List <Point>();
                        if (moveThread != null)
                        {
                            moveThread.Join();
                        }
                        if (moveProgressThread != null)
                        {
                            moveProgressThread.Join();
                        }
                        if (getFrameThread != null)
                        {
                            getFrameThread.Join();
                        }

                        DataProcessing dp = new DataProcessing(true);
                        this.Dispatcher.Invoke((ThreadStart) delegate()
                        {
                            moveAndProgress(waveNumNow, waveNumNow + waveNumDisInit);
                        });
                        moveThread.Join();
                        waveNumNow += waveNumDisInit;
                        if (Ccd.Setup(true, (UInt32)expoTime) != 0)
                        {
                            Ccd.GetFrame(dp.DataArray);
                            Ccd.Stop();
                            this.Dispatcher.BeginInvoke((ThreadStart) delegate()
                            {
                                dp.GetList(SpexPos);
                                monitor.Data = new List <Point>(dp.PointArray);
                            });
                            waveNumFrom += waveNumStep;
                            while (acquire && waveNumFrom < waveNumTo)
                            {
                                //MessageBox.Show(waveNumNow.ToString());
                                this.Dispatcher.Invoke((ThreadStart) delegate()
                                {
                                    moveAndProgress(waveNumNow, waveNumNow + waveNumStep);
                                });
                                moveThread.Join();
                                waveNumNow += waveNumStep;
                                if (Ccd.Setup(true, (UInt32)expoTime) == 0)
                                {
                                    MessageBox.Show("无法初始化sequence", this.Title, MessageBoxButton.OK, MessageBoxImage.Error);
                                    break;
                                }
                                Ccd.GetFrame(dp.DataArray);
                                Ccd.Stop();
                                this.Dispatcher.BeginInvoke((ThreadStart) delegate()
                                {
                                    dp.GetList(SpexPos);
                                    dp.Append((System.Collections.Generic.List <Point>)monitor.Data);
                                    monitor.RepaintLine(monitor.Data, false);
                                });
                                waveNumFrom += waveNumStep;
                            }
                        }

                        this.Dispatcher.BeginInvoke((ThreadStart) delegate()
                        {
                            MessageBox.Show(SpexPos.ToString());
                            displaySettings.IsEnabled  = true;
                            hardwareSettings.IsEnabled = true;
                            startStopCapture.IsEnabled = true;
                            startStopMoving.IsEnabled  = true;
                            autoSpex.Content           = "自动采谱";
                            autoSpex.ToolTip           = "Start acquiring";
                        });
                        acquiring = false;
                    }));
                    autoSpexThread.Start();
                }
            }
            else
            {
                acquire = false;
                Move.Stop();
            }
        }
コード例 #6
0
 private void startStopCapture_Click(object sender, RoutedEventArgs e)
 {
     if (!capturing)
     {
         capturing = true;
         startStopCapture.Content = "停止";
         startStopCapture.ToolTip = "Stop";
         UInt32 size = Ccd.Setup(specCapturing, (UInt32)Ccd.ExpoTime);
         if (size == 0)
         {
             MessageBox.Show("无法初始化sequence", this.Title, MessageBoxButton.OK, MessageBoxImage.Error);
             startStopCapture.Content = "监测";
             startStopCapture.ToolTip = "Start";
             capturing = false;
         }
         else
         {
             bool specNow = specCapturing;
             getFrameThread = new Thread(new ThreadStart(
                                             () =>
             {
                 DataProcessing dp = new DataProcessing(specNow);
                 while (capturing)
                 {
                     Thread.Sleep(Ccd.ExpoTime);
                     Ccd.GetFrame(dp.DataArray);
                     this.Dispatcher.BeginInvoke((ThreadStart) delegate()
                     {
                         if (specNow)
                         {
                             dp.GetList(SpexPos);
                             monitor.Data = dp.PointArray;
                         }
                         if (cw != null && cw.IsVisible)
                         {
                             cw.DataArray = dp.DataArray;
                         }
                     });
                     if (specNow != specCapturing)
                     {
                         Ccd.Stop();
                         if (Ccd.Setup(specCapturing, (UInt32)Ccd.ExpoTime) == 0)
                         {
                             break;
                         }
                         specNow = specCapturing;
                         dp      = new DataProcessing(specNow);
                     }
                 }
                 Ccd.Stop();
                 this.Dispatcher.BeginInvoke((ThreadStart) delegate()
                 {
                     startStopCapture.Content = "监测";
                     startStopCapture.ToolTip = "Start";
                 });
             }));
             getFrameThread.Start();
         }
     }
     else
     {
         capturing = false;
     }
 }