Ejemplo n.º 1
0
        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();
        }
Ejemplo n.º 2
0
        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;
            }
        }