private void UpdateVariables() { // 扫描模式 SCAN_MODE mode = rbtnGalv.Checked ? SCAN_MODE.GALVANOMETER : SCAN_MODE.RESONANT; m_config.SetScanMode(mode); // 扫描策略 SCAN_STRATEGY strategy = ((KeyValuePair <SCAN_STRATEGY, string>)cbxScanStrategy.SelectedItem).Key; m_config.SetScanStartegy(strategy); // 振镜系统 SCAN_MIRROR_NUM mirrorNum = rbtnThree.Checked ? SCAN_MIRROR_NUM.THREEE : SCAN_MIRROR_NUM.TWO; m_config.SetScanMirrorNum(mirrorNum); // 采集模式 & 采集数量 SCAN_ACQUISITION_MODE acquisitionMode = ((KeyValuePair <SCAN_ACQUISITION_MODE, string>)cbxAcquisitionMode.SelectedItem).Key; m_config.SetScanAcquisitionMode(acquisitionMode); // 采集模式数量 int acquisitionModeNum = (int)cbxAcquisitionModeNum.SelectedItem; m_config.SetScanAcquisitionModeNum(acquisitionModeNum); // Dwell Time m_config.SetScanDwellTime(double.Parse(cbxDwellTime.SelectedItem.ToString())); // 扫描像素 int scanPixels = ((KeyValuePair <int, string>)cbxScanPixels.SelectedItem).Key; m_config.SetScanXPoints(scanPixels); m_config.SetScanYPoints(scanPixels); // 激光[通道]开关状态 LASER_CHAN_SWITCH status = chbx405.Checked ? LASER_CHAN_SWITCH.ON : LASER_CHAN_SWITCH.OFF; m_config.SetLaserSwitch(CHAN_ID.WAVELENGTH_405_NM, status); status = chbx488.Checked ? LASER_CHAN_SWITCH.ON : LASER_CHAN_SWITCH.OFF; m_config.SetLaserSwitch(CHAN_ID.WAVELENGTH_488_NM, status); status = chbx561.Checked ? LASER_CHAN_SWITCH.ON : LASER_CHAN_SWITCH.OFF; m_config.SetLaserSwitch(CHAN_ID.WAVELENGTH_561_NM, status); status = chbx640.Checked ? LASER_CHAN_SWITCH.ON : LASER_CHAN_SWITCH.OFF; m_config.SetLaserSwitch(CHAN_ID.WAVELENGTH_640_NM, status); m_params.Calculate(); }
private void rbtnTwo_CheckedChanged(object sender, EventArgs e) { SCAN_MIRROR_NUM mirrorNum = rbtnTwo.Checked ? SCAN_MIRROR_NUM.TWO : SCAN_MIRROR_NUM.THREEE; if (m_config.GetScanMirrorNum() == mirrorNum) { return; } this.Cursor = System.Windows.Forms.Cursors.WaitCursor; // if task is not running, just update config if (m_scheduler.TaskScanning() == false) { m_config.SetScanMirrorNum(mirrorNum); m_scheduler.ConfigScanTask(m_scheduler.GetScanningTask()); // UpdateControlers(); this.Cursor = System.Windows.Forms.Cursors.Default; return; } // if task is already running, stop first m_scheduler.StopScanTask(m_scheduler.GetScanningTask()); // update config m_config.SetScanMirrorNum(mirrorNum); // create & start task m_scheduler.CreateScanTask(0, "实时扫描", out ScanTask scanTask); API_RETURN_CODE code = m_scheduler.StartScanTask(scanTask); // UpdateControlers(); this.Cursor = System.Windows.Forms.Cursors.Default; if (code != API_RETURN_CODE.API_SUCCESS) { MessageBox.Show(string.Format("启动扫描任务失败,失败码: [0x{0}][{1}].", ((int)code).ToString("X"), code)); } }
public API_RETURN_CODE SetScanMirrorNum(SCAN_MIRROR_NUM mirrorNum) { Logger.Info(string.Format("set scan mirror num: [{0}].", mirrorNum)); m_scan.MirrorNum = mirrorNum; return(API_RETURN_CODE.API_SUCCESS); }
private void UpdateChart() { chart.Series[0].Points.Clear(); chart.Series[1].Points.Clear(); chart.Series[2].Points.Clear(); chart.Series[3].Points.Clear(); Params m_params = Params.GetParams(); SCAN_STRATEGY strategy = Config.GetConfig().GetScanStrategy(); SCAN_MIRROR_NUM mirror = Config.GetConfig().GetScanMirrorNum(); int aoPointCount = m_params.AoSampleCountPerLine * 2; double aoSampleTime = 1e3 / m_params.AoSampleRate; double[] aoXValues = new double[aoPointCount]; double[] xGalvSamples = new double[aoPointCount]; double[] y1GalvSamples, y2GalvSamples; if (m_config.GetScanStrategy() == SCAN_STRATEGY.Z_UNIDIRECTION) { y1GalvSamples = Enumerable.Concat( Enumerable.Repeat <double>(m_params.AoY1SamplesPerRow[0], m_params.AoSampleCountPerLine), Enumerable.Repeat <double>(m_params.AoY1SamplesPerRow[1], m_params.AoSampleCountPerLine)).ToArray(); y2GalvSamples = Enumerable.Concat( Enumerable.Repeat <double>(m_params.AoY2SamplesPerRow[0], m_params.AoSampleCountPerLine), Enumerable.Repeat <double>(m_params.AoY2SamplesPerRow[1], m_params.AoSampleCountPerLine)).ToArray(); } else { y1GalvSamples = Enumerable.Concat( Enumerable.Concat( Enumerable.Repeat <double>(m_params.AoY1SamplesPerRow[0], m_params.AoSampleCountPerLine / 2), Enumerable.Repeat <double>(m_params.AoY1SamplesPerRow[1], m_params.AoSampleCountPerLine / 2)), Enumerable.Concat( Enumerable.Repeat <double>(m_params.AoY1SamplesPerRow[2], m_params.AoSampleCountPerLine / 2), Enumerable.Repeat <double>(m_params.AoY1SamplesPerRow[3], m_params.AoSampleCountPerLine / 2)) ).ToArray(); y2GalvSamples = Enumerable.Concat( Enumerable.Concat( Enumerable.Repeat <double>(m_params.AoY2SamplesPerRow[0], m_params.AoSampleCountPerLine / 2), Enumerable.Repeat <double>(m_params.AoY2SamplesPerRow[1], m_params.AoSampleCountPerLine / 2)), Enumerable.Concat( Enumerable.Repeat <double>(m_params.AoY2SamplesPerRow[2], m_params.AoSampleCountPerLine / 2), Enumerable.Repeat <double>(m_params.AoY2SamplesPerRow[3], m_params.AoSampleCountPerLine / 2)) ).ToArray(); } aoXValues[0] = 0; for (int i = 1; i < aoPointCount; i++) { aoXValues[i] = aoXValues[i - 1] + aoSampleTime; } Array.Copy(m_params.AoXSamplesPerLine, 0, xGalvSamples, 0, m_params.AoSampleCountPerLine); Array.Copy(m_params.AoXSamplesPerLine, 0, xGalvSamples, m_params.AoSampleCountPerLine, m_params.AoSampleCountPerLine); chart.Series[0].Points.DataBindXY(aoXValues, xGalvSamples); chart.Series[1].Points.DataBindXY(aoXValues, y1GalvSamples); chart.Series[2].Points.DataBindXY(aoXValues, y2GalvSamples); chart.Series[2].IsVisibleInLegend = Config.GetConfig().GetScanMirrorNum() == SCAN_MIRROR_NUM.THREEE ? true : false; int doPointCount = m_params.DoSampleCountPerLine * 2; double doSampleTime = 1e3 / m_params.DoSampleRate; double[] doXValues = new double[doPointCount]; double[] doSamples = new double[doPointCount]; doXValues[0] = 0; for (int i = 1; i < doPointCount; i++) { doXValues[i] = doXValues[i - 1] + doSampleTime; } Array.Copy(m_params.DigitalTriggerSamplesPerLine, 0, doSamples, 0, m_params.DoSampleCountPerLine); Array.Copy(m_params.DigitalTriggerSamplesPerLine, 0, doSamples, m_params.DoSampleCountPerLine, m_params.DoSampleCountPerLine); chart.Series[3].Points.DataBindXY(doXValues, doSamples); //double xValue; //int index, line; //for (int i = 0; i < pointCount; i++) //{ // line = i / m_params.AoSampleCountPerLine; // index = i % m_params.AoSampleCountPerLine; // xValue = aoSampleTime * i; // chart.Series[0].Points.AddXY(xValue, m_params.AoXSamplesPerLine[index]); // if (strategy == SCAN_STRATEGY.Z_UNIDIRECTION) // { // chart.Series[1].Points.AddXY(xValue, m_params.AoY1SamplesPerRow[line]); // chart.Series[2].Points.AddXY(xValue, m_params.AoY2SamplesPerRow[line]); // } // else // { // if (index < m_params.AoPreviousSampleCountPerLine + m_params.AoValidSampleCountPerLine) // { // chart.Series[1].Points.AddXY(xValue, m_params.AoY1SamplesPerRow[line]); // chart.Series[2].Points.AddXY(xValue, m_params.AoY2SamplesPerRow[line]); // } // else // { // chart.Series[1].Points.AddXY(xValue, m_params.AoY1SamplesPerRow[line] + m_params.AoVoltagePerPixel); // chart.Series[2].Points.AddXY(xValue, m_params.AoY2SamplesPerRow[line] + m_params.AoVoltagePerPixel * 2); // } // } // chart.Series[3].Points.AddXY(xValue, m_params.DigitalTriggerSamplesPerLine[index*2]); // chart.Series[3].Points.AddXY(xValue + aoSampleTime, m_params.DigitalTriggerSamplesPerLine[index*2+1]); //} //chart.Series[2].IsVisibleInLegend = Config.GetConfig().GetScanMirrorNum() == SCAN_MIRROR_NUM.THREEE ? true : false; }