public void StartMeasurement(object sender, DoWorkEventArgs e, MotionKind motionKind, int numberRepetities = 1) { var worker = sender as BackgroundWorker; switch (_SourceMode) { case KEITHLEY_2601A_SourceMode.Voltage: { _MeasureDevice.SetSourceVoltage(_ValueThroughTheStructure); } break; case KEITHLEY_2601A_SourceMode.Current: { _MeasureDevice.SetSourceCurrent(_ValueThroughTheStructure); } break; default: break; } AllEventsHandler.Instance.OnTimeTraceMeasurementsStateChanged(this, new TimeTraceMeasurementStateChanged_EventArgs(true)); _MeasureDevice.SwitchON(); switch (motionKind) { case MotionKind.Single: { _Motor.StartMotion(_StartPosition, _Destination, MotionKind.Single); } break; case MotionKind.Repetitive: { _Motor.StartMotion(_StartPosition, _Destination, MotionKind.Repetitive, numberRepetities); } break; default: break; } while (true) { if (worker.CancellationPending == true) { _Motor.StopMotion(); e.Cancel = true; break; } if (_CancelMeasures == true) { _Motor.StopMotion(); break; } } _MeasureDevice.SwitchOFF(); }
public void StartMeasurement(object sender, DoWorkEventArgs e) { AllEventsHandler.Instance.OnIV_MeasurementsStateChanged(sender, new IV_MeasurementStateChanged_EventArgs(true)); var worker = sender as BackgroundWorker; switch (_sourceMode) { case SourceMode.Voltage: { _Device.SwitchON(); for (double V = _StartValue; V <= _EndValue; V += _Step) { if (worker.CancellationPending == true) { AllEventsHandler.Instance.OnIV_MeasurementsStateChanged(sender, new IV_MeasurementStateChanged_EventArgs(false)); e.Cancel = true; break; } else { var X = V; _Device.SetSourceVoltage(V); var Y = _Device.MeasureCurrent(_NumberOfAverages, _TimeDelay); if (!(double.IsNaN(X) || double.IsNaN(Y))) { AllEventsHandler.Instance.OnIV_PointReceived(null, new IV_PointReceived_EventArgs(X, Y)); worker.ReportProgress((int)(Math.Abs(1.0 - (_EndValue - X) / _EndValue) * 100 + 1)); } } } _Device.SetSourceVoltage(0.0); _Device.SwitchOFF(); worker.ReportProgress(0); AllEventsHandler.Instance.OnIV_MeasurementsStateChanged(sender, new IV_MeasurementStateChanged_EventArgs(false)); } break; case SourceMode.Current: { _Device.SwitchON(); for (double I = _StartValue; I <= _EndValue; I += _Step) { if (worker.CancellationPending == true) { AllEventsHandler.Instance.OnIV_MeasurementsStateChanged(sender, new IV_MeasurementStateChanged_EventArgs(false)); e.Cancel = true; break; } else { _Device.SetSourceCurrent(I); var X = _Device.MeasureVoltage(_NumberOfAverages, _TimeDelay); var Y = I; if (!(double.IsNaN(X) || double.IsNaN(Y))) { AllEventsHandler.Instance.OnIV_PointReceived(null, new IV_PointReceived_EventArgs(X, Y)); worker.ReportProgress((int)(Math.Abs(1.0 - (_EndValue - X) / _EndValue) * 100 + 1)); } } } _Device.SetSourceCurrent(0.0); _Device.SwitchOFF(); worker.ReportProgress(0); AllEventsHandler.Instance.OnIV_MeasurementsStateChanged(sender, new IV_MeasurementStateChanged_EventArgs(false)); } break; default: break; } }