private bool InitTimeTraceMeasurements() { #region SMU, rendering and save data configurations if (sourceDeviceConfiguration != null) { #region Chart rendering settings if (_TimeTraceLineGraph != null) { _experimentalTimeTraceDataSource.DetachPointReceiveEvent(); _TimeTraceLineGraph.Remove(); _CurrentTimeTrace.Clear(); } _CurrentTimeTrace = new List <PointD>(); _experimentalTimeTraceDataSource = new ExperimentalTimetraceDataSource(_CurrentTimeTrace); _experimentalTimeTraceDataSource.AttachPointReceiveEvent(); _TimeTraceLineGraph = new LineGraph(_experimentalTimeTraceDataSource); _TimeTraceLineGraph.AddToPlotter(chartTimeTrace); #endregion //Getting SMU device Device = sourceDeviceConfiguration.Keithley2602A_DeviceSettings.Device; #region Time trace measurement configuration var pAddress = sourceDeviceConfiguration.Keithley2602A_DeviceSettings.DeviceSettings.PrimaryAddress; var sAddress = sourceDeviceConfiguration.Keithley2602A_DeviceSettings.DeviceSettings.SecondaryAddress; var bNumber = sourceDeviceConfiguration.Keithley2602A_DeviceSettings.DeviceSettings.BoardNumber; var motor = new ORDINARY_MOTOR(pAddress, sAddress, bNumber); motor.FinalDestination = 0.0; Motor = motor; if (TimeTraceCurve != null) { TimeTraceCurve.Dispose(); } var ExperimentSettings = IV_And_TimeTraceViewModel.Instance; var valueThroughTheStructure = ExperimentSettings.TimeTraceMeasurementValueThrougtTheStructure; var isTimeTraceVoltageModeChecked = ExperimentSettings.IsTimeTraceMeasurementVoltageModeChecked; var isTimeTraceCurrentModeChecked = ExperimentSettings.IsTimeTraceMeasurementCurrentModeChecked; var selectedTimeTraceModeItem = (tabControlTimeTraceMeasurementParameters.SelectedItem as TabItem).Header.ToString(); switch (selectedTimeTraceModeItem) { case "Distance": { var motionStartPosition = ExperimentSettings.TimeTraceMeasurementMotionCurrentDestination; var motionFinalDestination = ExperimentSettings.TimeTraceMeasurementMotionFinalDestination; if (isTimeTraceVoltageModeChecked == true) { TimeTraceCurve = new MeasureTimeTrace(Motor, motionStartPosition, motionFinalDestination, Device, KEITHLEY_2601A_SourceMode.Voltage, KEITHLEY_2601A_MeasureMode.Resistance, valueThroughTheStructure); } else if (isTimeTraceCurrentModeChecked == true) { TimeTraceCurve = new MeasureTimeTrace(Motor, motionStartPosition, motionFinalDestination, Device, KEITHLEY_2601A_SourceMode.Current, KEITHLEY_2601A_MeasureMode.Resistance, valueThroughTheStructure); } } break; case "Distance (Repetitive)": { var motionRepetitiveStartPosition = ExperimentSettings.TimeTraceMeasurementDistanceRepetitiveStartPosition; var motionRepetitiveEndPosition = ExperimentSettings.TimeTraceMeasurementDistanceRepetitiveEndPosition; var numerCycles = ExperimentSettings.TimeTraceMeasurementDistanceRepetitiveNumberCycles; if (isTimeTraceVoltageModeChecked == true) { TimeTraceCurve = new MeasureTimeTrace(Motor, motionRepetitiveStartPosition, motionRepetitiveEndPosition, Device, KEITHLEY_2601A_SourceMode.Voltage, KEITHLEY_2601A_MeasureMode.Resistance, valueThroughTheStructure); } else if (isTimeTraceCurrentModeChecked == true) { TimeTraceCurve = new MeasureTimeTrace(Motor, motionRepetitiveStartPosition, motionRepetitiveEndPosition, Device, KEITHLEY_2601A_SourceMode.Current, KEITHLEY_2601A_MeasureMode.Resistance, valueThroughTheStructure); } } break; case "Time": { } break; case "Fixed R": { } break; default: break; } #endregion #region Saving Time Trace data into files var _TimeTraceFileNumber = String.Format("_{0}{1}{2}", (_TimeTraceFilesCounter / 100) % 10, (_TimeTraceFilesCounter / 10) % 10, _TimeTraceFilesCounter % 10); string newFileName = string.Empty; if (!string.IsNullOrEmpty(_SaveTimeTraceMeasuremrentFileName)) { _TimeTraceMeasurementLog = new TimeTraceMeasurementLog((new FileInfo(_SaveTimeTraceMeasuremrentFileName)).DirectoryName + "\\TimeTraceMeasurementLog.dat"); newFileName = _SaveTimeTraceMeasuremrentFileName.Insert(_SaveTimeTraceMeasuremrentFileName.LastIndexOf('.'), _TimeTraceFileNumber); ++_TimeTraceFilesCounter; } string sourceMode = string.Empty; if (!string.IsNullOrEmpty(_SaveTimeTraceMeasuremrentFileName)) { string fileName = (new FileInfo(newFileName)).Name; if (this.radioTimeTraceSourceVoltage.IsChecked == true) { sourceMode = "Source mode: Voltage"; } else if (this.radioTimeTraceSourceCurrent.IsChecked == true) { sourceMode = "SourceMode: Current"; } double micrometricBoltPosition = double.NaN; double.TryParse(this.textBoxTimeTraceMicrometricBoltPosition.Text, numberStyle, culture, out micrometricBoltPosition); string comment = this.textBoxTimeTraceComment.Text; _TimeTraceMeasurementLog.AddNewTimeTraceMeasurementLog(fileName, sourceMode, valueThroughTheStructure, comment); } SourceMode _sourceMode = SourceMode.Voltage; //Source mode is voltage by default if (sourceMode == "Source mode: Voltage") { _sourceMode = SourceMode.Voltage; } else if (sourceMode == "SourceMode: Current") { _sourceMode = SourceMode.Current; } if (_TimeTraceSingleMeasurement != null) { _TimeTraceSingleMeasurement.Dispose(); } _TimeTraceSingleMeasurement = new TimeTraceSingleMeasurement(newFileName, _sourceMode); #endregion return(true); } else { return(false); } #endregion }
private bool InitTimeTraceMeasurements() { #region SMU, rendering and save data configurations if (sourceDeviceConfiguration != null) { #region Chart rendering settings if (_TimeTraceLineGraph != null) { _experimentalTimeTraceDataSource.DetachPointReceiveEvent(); _TimeTraceLineGraph.Remove(); _CurrentTimeTrace.Clear(); } _CurrentTimeTrace = new List<PointD>(); _experimentalTimeTraceDataSource = new ExperimentalTimetraceDataSource(_CurrentTimeTrace); _experimentalTimeTraceDataSource.AttachPointReceiveEvent(); _TimeTraceLineGraph = new LineGraph(_experimentalTimeTraceDataSource); _TimeTraceLineGraph.AddToPlotter(chartTimeTrace); #endregion //Getting SMU device Device = sourceDeviceConfiguration.Keithley2602A_DeviceSettings.Device; #region Time trace measurement configuration var pAddress = sourceDeviceConfiguration.Keithley2602A_DeviceSettings.DeviceSettings.PrimaryAddress; var sAddress = sourceDeviceConfiguration.Keithley2602A_DeviceSettings.DeviceSettings.SecondaryAddress; var bNumber = sourceDeviceConfiguration.Keithley2602A_DeviceSettings.DeviceSettings.BoardNumber; var motor = new ORDINARY_MOTOR(pAddress, sAddress, bNumber); motor.FinalDestination = 0.0; Motor = motor; if (TimeTraceCurve != null) { TimeTraceCurve.Dispose(); } var ExperimentSettings = IV_And_TimeTraceViewModel.Instance; var valueThroughTheStructure = ExperimentSettings.TimeTraceMeasurementValueThrougtTheStructure; var isTimeTraceVoltageModeChecked = ExperimentSettings.IsTimeTraceMeasurementVoltageModeChecked; var isTimeTraceCurrentModeChecked = ExperimentSettings.IsTimeTraceMeasurementCurrentModeChecked; var selectedTimeTraceModeItem = (tabControlTimeTraceMeasurementParameters.SelectedItem as TabItem).Header.ToString(); switch (selectedTimeTraceModeItem) { case "Distance": { var motionStartPosition = ExperimentSettings.TimeTraceMeasurementMotionCurrentDestination; var motionFinalDestination = ExperimentSettings.TimeTraceMeasurementMotionFinalDestination; if (isTimeTraceVoltageModeChecked == true) TimeTraceCurve = new MeasureTimeTrace(Motor, motionStartPosition, motionFinalDestination, Device, KEITHLEY_2601A_SourceMode.Voltage, KEITHLEY_2601A_MeasureMode.Resistance, valueThroughTheStructure); else if (isTimeTraceCurrentModeChecked == true) TimeTraceCurve = new MeasureTimeTrace(Motor, motionStartPosition, motionFinalDestination, Device, KEITHLEY_2601A_SourceMode.Current, KEITHLEY_2601A_MeasureMode.Resistance, valueThroughTheStructure); } break; case "Distance (Repetitive)": { var motionRepetitiveStartPosition = ExperimentSettings.TimeTraceMeasurementDistanceRepetitiveStartPosition; var motionRepetitiveEndPosition = ExperimentSettings.TimeTraceMeasurementDistanceRepetitiveEndPosition; var numerCycles = ExperimentSettings.TimeTraceMeasurementDistanceRepetitiveNumberCycles; if (isTimeTraceVoltageModeChecked == true) TimeTraceCurve = new MeasureTimeTrace(Motor, motionRepetitiveStartPosition, motionRepetitiveEndPosition, Device, KEITHLEY_2601A_SourceMode.Voltage, KEITHLEY_2601A_MeasureMode.Resistance, valueThroughTheStructure); else if (isTimeTraceCurrentModeChecked == true) TimeTraceCurve = new MeasureTimeTrace(Motor, motionRepetitiveStartPosition, motionRepetitiveEndPosition, Device, KEITHLEY_2601A_SourceMode.Current, KEITHLEY_2601A_MeasureMode.Resistance, valueThroughTheStructure); } break; case "Time": { } break; case "Fixed R": { } break; default: break; } #endregion #region Saving Time Trace data into files var _TimeTraceFileNumber = String.Format("_{0}{1}{2}", (_TimeTraceFilesCounter / 100) % 10, (_TimeTraceFilesCounter / 10) % 10, _TimeTraceFilesCounter % 10); string newFileName = string.Empty; if (!string.IsNullOrEmpty(_SaveTimeTraceMeasuremrentFileName)) { _TimeTraceMeasurementLog = new TimeTraceMeasurementLog((new FileInfo(_SaveTimeTraceMeasuremrentFileName)).DirectoryName + "\\TimeTraceMeasurementLog.dat"); newFileName = _SaveTimeTraceMeasuremrentFileName.Insert(_SaveTimeTraceMeasuremrentFileName.LastIndexOf('.'), _TimeTraceFileNumber); ++_TimeTraceFilesCounter; } string sourceMode = string.Empty; if (!string.IsNullOrEmpty(_SaveTimeTraceMeasuremrentFileName)) { string fileName = (new FileInfo(newFileName)).Name; if (this.radioTimeTraceSourceVoltage.IsChecked == true) { sourceMode = "Source mode: Voltage"; } else if (this.radioTimeTraceSourceCurrent.IsChecked == true) { sourceMode = "SourceMode: Current"; } double micrometricBoltPosition = double.NaN; double.TryParse(this.textBoxTimeTraceMicrometricBoltPosition.Text, numberStyle, culture, out micrometricBoltPosition); string comment = this.textBoxTimeTraceComment.Text; _TimeTraceMeasurementLog.AddNewTimeTraceMeasurementLog(fileName, sourceMode, valueThroughTheStructure, comment); } SourceMode _sourceMode = SourceMode.Voltage; //Source mode is voltage by default if (sourceMode == "Source mode: Voltage") _sourceMode = SourceMode.Voltage; else if (sourceMode == "SourceMode: Current") _sourceMode = SourceMode.Current; if (_TimeTraceSingleMeasurement != null) _TimeTraceSingleMeasurement.Dispose(); _TimeTraceSingleMeasurement = new TimeTraceSingleMeasurement(newFileName, _sourceMode); #endregion return true; } else { return false; } #endregion }