public MeasureTimeTrace(IMotion motor, double startPosition, double destination, I_SMU measureDevice, KEITHLEY_2601A_SourceMode sourceMode, KEITHLEY_2601A_MeasureMode measureMode, double valueThroughTheStructure) { _Motor = motor; _StartPosition = startPosition; _Destination = destination; _MeasureDevice = measureDevice; _SourceMode = sourceMode; _MeasureMode = measureMode; _ValueThroughTheStructure = valueThroughTheStructure; AllEventsHandler.Instance.TimeTraceMeasurementsStateChanged += OnTimeTraceMeasurementsStateChanged; AllEventsHandler.Instance.Motion += OnMotionPositionMeasured; }
/// <summary> /// Measures the resistance or power in appropriate channel /// </summary> /// <param name="Channel">Channel</param> /// <param name="SourceMode">Source mode (voltage / current)</param> /// <param name="MeasureMode">Measure mode (resistance / power)</param> /// <param name="NumberOfAverages">Number of averages per one measure</param> /// <param name="TimeDelay">Time delay between two measurenments</param> /// <returns></returns> public string MeasureResistanceOrPowerValueInChannel(KEITHLEY_2602A_Channels Channel, KEITHLEY_2601A_SourceMode SourceMode, KEITHLEY_2601A_MeasureMode MeasureMode, double valueThroughTheStructure, int NumberOfAverages, double TimeDelay) { var _TimeDelay = TimeDelay.ToString().Replace(',', '.'); var _valueThroughTheStructure = valueThroughTheStructure.ToString().Replace(',', '.'); var _limiti = (1.0).ToString().Replace(',', '.'); var _limitv = (40.0).ToString().Replace(',', '.'); var MeasuredValue = ""; var R_Script = "loadscript MeasureResistanceInChannel\n" + "smu{0}.source.func = smu{0}.{1}\n" + "smu{0}.source.autorange{2} = smu{0}.AUTORANGE_ON\n" + "smu{0}.source.level{2} = {3}\n" + "smu{0}.source.limit{4} = {5}\n" + "smu{0}.measure.autorange{4} = smu{0}.AUTORANGE_ON\n" + "display.screen = display.{6}\n" + "display.smu{0}.measure.func = display.{7}\n" + "trigger.clear()\n" + "result = 0.0\n" + "for parameterMeasure = 1, {8} do\n" + "trigger.wait({9})\n" + "result = result + smu{0}.measure.r()\n" + "end\n" + "result = result / {8}\n" + "print (result)\n" + "endscript\n" + "MeasureResistanceInChannel()\n"; var P_Script = "loadscript MeasurePowerInChannel\n" + "smu{0}.measure.autorange{1} = smu{0}.AUTORANGE_ON\n" + "display.screen = display.{2}\n" + "display.smu{0}.measure.func = display.{3}\n" + "trigger.clear()\n" + "result = 0.0\n" + "for parameterMeasure = 1, {4} do\n" + "trigger.wait({5})\n" + "result = result + smu{0}.measure.p()\n" + "end\n" + "result = result / ({4} - 1)\n" + "print (result)\n" + "endscript\n" + "MeasurePowerInChannel()\n"; CommandBuilder = new StringBuilder(); switch (MeasureMode) { case KEITHLEY_2601A_MeasureMode.Voltage: { throw new NotImplementedException(); } case KEITHLEY_2601A_MeasureMode.Current: { throw new NotImplementedException(); } case KEITHLEY_2601A_MeasureMode.Resistance: { switch (Channel) { case KEITHLEY_2602A_Channels.ChannelA: { switch (SourceMode) { case KEITHLEY_2601A_SourceMode.Voltage: { R_Script = CommandBuilder.AppendFormat(R_Script, "a", "OUTPUT_DCVOLTS", "v", _valueThroughTheStructure, "i", _limiti, "SMUA", "MEASURE_OHMS", NumberOfAverages, _TimeDelay).ToString(); ExecuteQuery(R_Script, ref MeasuredValue); } break; case KEITHLEY_2601A_SourceMode.Current: { R_Script = CommandBuilder.AppendFormat(R_Script, "a", "OUTPUT_DCAMPS", "i", _valueThroughTheStructure, "v", _limitv, "SMUA", "MEASURE_OHMS", NumberOfAverages, _TimeDelay).ToString(); ExecuteQuery(R_Script, ref MeasuredValue); } break; default: break; } } break; case KEITHLEY_2602A_Channels.ChannelB: { switch (SourceMode) { case KEITHLEY_2601A_SourceMode.Voltage: { R_Script = CommandBuilder.AppendFormat(R_Script, "b", "OUTPUT_DCVOLTS", "v", _valueThroughTheStructure, "i", _limiti, "SMUB", "MEASURE_OHMS", NumberOfAverages, _TimeDelay).ToString(); ExecuteQuery(R_Script, ref MeasuredValue); } break; case KEITHLEY_2601A_SourceMode.Current: { R_Script = CommandBuilder.AppendFormat(R_Script, "b", "OUTPUT_DCAMPS", "i", _valueThroughTheStructure, "v", _limitv, "SMUB", "MEASURE_OHMS", NumberOfAverages, _TimeDelay).ToString(); ExecuteQuery(R_Script, ref MeasuredValue); } break; default: break; } } break; default: break; } } break; case KEITHLEY_2601A_MeasureMode.Power: { switch (Channel) { case KEITHLEY_2602A_Channels.ChannelA: { switch (SourceMode) { case KEITHLEY_2601A_SourceMode.Voltage: { P_Script = CommandBuilder.AppendFormat(P_Script, "a", "i", "SMUA", "MEASURE_WATTS", NumberOfAverages, _TimeDelay).ToString(); ExecuteQuery(P_Script, ref MeasuredValue); } break; case KEITHLEY_2601A_SourceMode.Current: { P_Script = CommandBuilder.AppendFormat(P_Script, "a", "v", "SMUA", "MEASURE_WATTS", NumberOfAverages, _TimeDelay).ToString(); ExecuteQuery(P_Script, ref MeasuredValue); } break; default: break; } } break; case KEITHLEY_2602A_Channels.ChannelB: { switch (SourceMode) { case KEITHLEY_2601A_SourceMode.Voltage: { P_Script = CommandBuilder.AppendFormat(P_Script, "b", "i", "SMUA", "MEASURE_WATTS", NumberOfAverages, _TimeDelay).ToString(); ExecuteQuery(P_Script, ref MeasuredValue); } break; case KEITHLEY_2601A_SourceMode.Current: { P_Script = CommandBuilder.AppendFormat(P_Script, "b", "v", "SMUA", "MEASURE_WATTS", NumberOfAverages, _TimeDelay).ToString(); ExecuteQuery(P_Script, ref MeasuredValue); } break; default: break; } } break; default: break; } } break; default: break; } return(MeasuredValue); }
/// <summary> /// Measures the value in appropriate channel /// </summary> /// <param name="Channel">Channel</param> /// <param name="MeasureMode">Measure mode (voltage / current)</param> /// <param name="NumberOfAverages">Number of averages per one measure</param> /// <param name="TimeDelay">Time delay between two measurenments</param> /// <returns></returns> public string MeasureIV_ValueInChannel(KEITHLEY_2602A_Channels Channel, KEITHLEY_2601A_MeasureMode MeasureMode, int NumberOfAverages, double TimeDelay) { var _TimeDelay = TimeDelay.ToString().Replace(',', '.'); var MeasuredValue = ""; var IV_Script = "loadscript MeasureValueInChannel\n" + "smu{0}.measure.autorange{1} = smu{0}.AUTORANGE_ON\n" + "display.screen = display.{4}\n" + "display.smu{0}.measure.func = display.{5}\n" + "trigger.clear()\n" + "result = 0.0\n" + "for parameterMeasure = 1, {2} do\n" + "trigger.wait({3})\n" + "result = result + smu{0}.measure.{1}()\n" + "end\n" + "result = result / ({2} - 1)\n" + "print (result)\n" + "endscript\n" + "MeasureValueInChannel()\n"; CommandBuilder = new StringBuilder(); switch (MeasureMode) { case KEITHLEY_2601A_MeasureMode.Voltage: { switch (Channel) { case KEITHLEY_2602A_Channels.ChannelA: { IV_Script = CommandBuilder.AppendFormat(IV_Script, "a", "v", NumberOfAverages, _TimeDelay, "SMUA", "MEASURE_DCVOLTS").ToString(); ExecuteQuery(IV_Script, ref MeasuredValue); } break; case KEITHLEY_2602A_Channels.ChannelB: { IV_Script = CommandBuilder.AppendFormat(IV_Script, "b", "v", NumberOfAverages, _TimeDelay, "SMUB", "MEASURE_DCVOLTS").ToString(); ExecuteQuery(IV_Script, ref MeasuredValue); } break; default: break; } } break; case KEITHLEY_2601A_MeasureMode.Current: { switch (Channel) { case KEITHLEY_2602A_Channels.ChannelA: { IV_Script = CommandBuilder.AppendFormat(IV_Script, "a", "i", NumberOfAverages, _TimeDelay, "SMUA", "MEASURE_DCAMPS").ToString(); ExecuteQuery(IV_Script, ref MeasuredValue); } break; case KEITHLEY_2602A_Channels.ChannelB: { IV_Script = CommandBuilder.AppendFormat(IV_Script, "b", "i", NumberOfAverages, _TimeDelay, "SMUB", "MEASURE_DCAMPS").ToString(); ExecuteQuery(IV_Script, ref MeasuredValue); } break; default: break; } } break; case KEITHLEY_2601A_MeasureMode.Resistance: { throw new NotImplementedException(); } case KEITHLEY_2601A_MeasureMode.Power: { throw new NotImplementedException(); } default: break; } return(MeasuredValue); }
/// <summary> /// Measures the resistance or power in appropriate channel /// </summary> /// <param name="Channel">Channel</param> /// <param name="SourceMode">Source mode (voltage / current)</param> /// <param name="MeasureMode">Measure mode (resistance / power)</param> /// <param name="NumberOfAverages">Number of averages per one measure</param> /// <param name="TimeDelay">Time delay between two measurenments</param> /// <returns></returns> public string MeasureResistanceOrPowerValueInChannel(KEITHLEY_2602A_Channels Channel, KEITHLEY_2601A_SourceMode SourceMode, KEITHLEY_2601A_MeasureMode MeasureMode, double valueThroughTheStructure, int NumberOfAverages, double TimeDelay) { var _TimeDelay = TimeDelay.ToString().Replace(',', '.'); var _valueThroughTheStructure = valueThroughTheStructure.ToString().Replace(',', '.'); var _limiti = (1.0).ToString().Replace(',', '.'); var _limitv = (40.0).ToString().Replace(',', '.'); var MeasuredValue = ""; var R_Script = "loadscript MeasureResistanceInChannel\n" + "smu{0}.source.func = smu{0}.{1}\n" + "smu{0}.source.autorange{2} = smu{0}.AUTORANGE_ON\n" + "smu{0}.source.level{2} = {3}\n" + "smu{0}.source.limit{4} = {5}\n" + "smu{0}.measure.autorange{4} = smu{0}.AUTORANGE_ON\n" + "display.screen = display.{6}\n" + "display.smu{0}.measure.func = display.{7}\n" + "trigger.clear()\n" + "result = 0.0\n" + "for parameterMeasure = 1, {8} do\n" + "trigger.wait({9})\n" + "result = result + smu{0}.measure.r()\n" + "end\n" + "result = result / {8}\n" + "print (result)\n" + "endscript\n" + "MeasureResistanceInChannel()\n"; var P_Script = "loadscript MeasurePowerInChannel\n" + "smu{0}.measure.autorange{1} = smu{0}.AUTORANGE_ON\n" + "display.screen = display.{2}\n" + "display.smu{0}.measure.func = display.{3}\n" + "trigger.clear()\n" + "result = 0.0\n" + "for parameterMeasure = 1, {4} do\n" + "trigger.wait({5})\n" + "result = result + smu{0}.measure.p()\n" + "end\n" + "result = result / ({4} - 1)\n" + "print (result)\n" + "endscript\n" + "MeasurePowerInChannel()\n"; CommandBuilder = new StringBuilder(); switch (MeasureMode) { case KEITHLEY_2601A_MeasureMode.Voltage: { throw new NotImplementedException(); } case KEITHLEY_2601A_MeasureMode.Current: { throw new NotImplementedException(); } case KEITHLEY_2601A_MeasureMode.Resistance: { switch (Channel) { case KEITHLEY_2602A_Channels.ChannelA: { switch (SourceMode) { case KEITHLEY_2601A_SourceMode.Voltage: { R_Script = CommandBuilder.AppendFormat(R_Script, "a", "OUTPUT_DCVOLTS", "v", _valueThroughTheStructure, "i", _limiti, "SMUA", "MEASURE_OHMS", NumberOfAverages, _TimeDelay).ToString(); ExecuteQuery(R_Script, ref MeasuredValue); } break; case KEITHLEY_2601A_SourceMode.Current: { R_Script = CommandBuilder.AppendFormat(R_Script, "a", "OUTPUT_DCAMPS", "i", _valueThroughTheStructure, "v", _limitv, "SMUA", "MEASURE_OHMS", NumberOfAverages, _TimeDelay).ToString(); ExecuteQuery(R_Script, ref MeasuredValue); } break; default: break; } } break; case KEITHLEY_2602A_Channels.ChannelB: { switch (SourceMode) { case KEITHLEY_2601A_SourceMode.Voltage: { R_Script = CommandBuilder.AppendFormat(R_Script, "b", "OUTPUT_DCVOLTS", "v", _valueThroughTheStructure, "i", _limiti, "SMUB", "MEASURE_OHMS", NumberOfAverages, _TimeDelay).ToString(); ExecuteQuery(R_Script, ref MeasuredValue); } break; case KEITHLEY_2601A_SourceMode.Current: { R_Script = CommandBuilder.AppendFormat(R_Script, "b", "OUTPUT_DCAMPS", "i", _valueThroughTheStructure, "v", _limitv, "SMUB", "MEASURE_OHMS", NumberOfAverages, _TimeDelay).ToString(); ExecuteQuery(R_Script, ref MeasuredValue); } break; default: break; } } break; default: break; } } break; case KEITHLEY_2601A_MeasureMode.Power: { switch (Channel) { case KEITHLEY_2602A_Channels.ChannelA: { switch (SourceMode) { case KEITHLEY_2601A_SourceMode.Voltage: { P_Script = CommandBuilder.AppendFormat(P_Script, "a", "i", "SMUA", "MEASURE_WATTS", NumberOfAverages, _TimeDelay).ToString(); ExecuteQuery(P_Script, ref MeasuredValue); } break; case KEITHLEY_2601A_SourceMode.Current: { P_Script = CommandBuilder.AppendFormat(P_Script, "a", "v", "SMUA", "MEASURE_WATTS", NumberOfAverages, _TimeDelay).ToString(); ExecuteQuery(P_Script, ref MeasuredValue); } break; default: break; } } break; case KEITHLEY_2602A_Channels.ChannelB: { switch (SourceMode) { case KEITHLEY_2601A_SourceMode.Voltage: { P_Script = CommandBuilder.AppendFormat(P_Script, "b", "i", "SMUA", "MEASURE_WATTS", NumberOfAverages, _TimeDelay).ToString(); ExecuteQuery(P_Script, ref MeasuredValue); } break; case KEITHLEY_2601A_SourceMode.Current: { P_Script = CommandBuilder.AppendFormat(P_Script, "b", "v", "SMUA", "MEASURE_WATTS", NumberOfAverages, _TimeDelay).ToString(); ExecuteQuery(P_Script, ref MeasuredValue); } break; default: break; } } break; default: break; } } break; default: break; } return MeasuredValue; }
/// <summary> /// Measures the value in appropriate channel /// </summary> /// <param name="Channel">Channel</param> /// <param name="MeasureMode">Measure mode (voltage / current)</param> /// <param name="NumberOfAverages">Number of averages per one measure</param> /// <param name="TimeDelay">Time delay between two measurenments</param> /// <returns></returns> public string MeasureIV_ValueInChannel(KEITHLEY_2602A_Channels Channel, KEITHLEY_2601A_MeasureMode MeasureMode, int NumberOfAverages, double TimeDelay) { var _TimeDelay = TimeDelay.ToString().Replace(',', '.'); var MeasuredValue = ""; var IV_Script = "loadscript MeasureValueInChannel\n" + "smu{0}.measure.autorange{1} = smu{0}.AUTORANGE_ON\n" + "display.screen = display.{4}\n" + "display.smu{0}.measure.func = display.{5}\n" + "trigger.clear()\n" + "result = 0.0\n" + "for parameterMeasure = 1, {2} do\n" + "trigger.wait({3})\n" + "result = result + smu{0}.measure.{1}()\n" + "end\n" + "result = result / ({2} - 1)\n" + "print (result)\n" + "endscript\n" + "MeasureValueInChannel()\n"; CommandBuilder = new StringBuilder(); switch (MeasureMode) { case KEITHLEY_2601A_MeasureMode.Voltage: { switch (Channel) { case KEITHLEY_2602A_Channels.ChannelA: { IV_Script = CommandBuilder.AppendFormat(IV_Script, "a", "v", NumberOfAverages, _TimeDelay, "SMUA", "MEASURE_DCVOLTS").ToString(); ExecuteQuery(IV_Script, ref MeasuredValue); } break; case KEITHLEY_2602A_Channels.ChannelB: { IV_Script = CommandBuilder.AppendFormat(IV_Script, "b", "v", NumberOfAverages, _TimeDelay, "SMUB", "MEASURE_DCVOLTS").ToString(); ExecuteQuery(IV_Script, ref MeasuredValue); } break; default: break; } } break; case KEITHLEY_2601A_MeasureMode.Current: { switch (Channel) { case KEITHLEY_2602A_Channels.ChannelA: { IV_Script = CommandBuilder.AppendFormat(IV_Script, "a", "i", NumberOfAverages, _TimeDelay, "SMUA", "MEASURE_DCAMPS").ToString(); ExecuteQuery(IV_Script, ref MeasuredValue); } break; case KEITHLEY_2602A_Channels.ChannelB: { IV_Script = CommandBuilder.AppendFormat(IV_Script, "b", "i", NumberOfAverages, _TimeDelay, "SMUB", "MEASURE_DCAMPS").ToString(); ExecuteQuery(IV_Script, ref MeasuredValue); } break; default: break; } } break; case KEITHLEY_2601A_MeasureMode.Resistance: { throw new NotImplementedException(); } case KEITHLEY_2601A_MeasureMode.Power: { throw new NotImplementedException(); } default: break; } return MeasuredValue; }