Example #1
0
        public GPIB_KEITHLEY_2602A_CHANNEL(byte _PrimaryAddress, byte _SecondaryAddress, byte _BoardNumber, KEITHLEY_2602A_Channels _Channel)
            : base(_PrimaryAddress, _SecondaryAddress, _BoardNumber)
        {
            style   = NumberStyles.AllowDecimalPoint | NumberStyles.AllowExponent;
            culture = CultureInfo.CreateSpecificCulture("en-US");

            _SelectedChannel = _Channel;
        }
Example #2
0
 public void SetSelectedChannel(KEITHLEY_2602A_Channels selectedChannel)
 {
     _SelectedChannel      = selectedChannel;
     _isSelectedChannelSet = true;
 }
            /// <summary>
            /// Sets sense SENSE_LOCAL (2-wire) or SENSE_REMOTE (4-wire)
            /// </summary>
            /// <param name="Channel">Channel</param>
            /// <param name="Sense">Sense</param>
            public void SetSence(KEITHLEY_2602A_Channels Channel, KEITHLEY_2602A_Sense Sense)
            {
                var SetSenseScript =
                    "smu{0}.sense = smu{0}.{1}";

                CommandBuilder = new StringBuilder();

                switch (Channel)
                {
                    case KEITHLEY_2602A_Channels.ChannelA:
                        {
                            switch (Sense)
                            {
                                case KEITHLEY_2602A_Sense.SENSE_LOCAL:
                                    {
                                        SetSenseScript = CommandBuilder.AppendFormat(SetSenseScript, "a", "SENSE_LOCAL").ToString();
                                        SendCommandRequest(SetSenseScript);
                                    } break;
                                case KEITHLEY_2602A_Sense.SENSE_REMOTE:
                                    {
                                        SetSenseScript = CommandBuilder.AppendFormat(SetSenseScript, "a", "SENSE_REMOTE").ToString();
                                        SendCommandRequest(SetSenseScript);
                                    } break;
                                default:
                                    break;
                            }
                        } break;
                    case KEITHLEY_2602A_Channels.ChannelB:
                        {
                            switch (Sense)
                            {
                                case KEITHLEY_2602A_Sense.SENSE_LOCAL:
                                    {
                                        SetSenseScript = CommandBuilder.AppendFormat(SetSenseScript, "b", "SENSE_LOCAL").ToString();
                                        SendCommandRequest(SetSenseScript);
                                    } break;
                                case KEITHLEY_2602A_Sense.SENSE_REMOTE:
                                    {
                                        SetSenseScript = CommandBuilder.AppendFormat(SetSenseScript, "b", "SENSE_REMOTE").ToString();
                                        SendCommandRequest(SetSenseScript);
                                    } break;
                                default:
                                    break;
                            }
                        } break;
                    default:
                        break;
                }
            }
            /// <summary>
            /// Sets appropriate limits to defined channel
            /// </summary>
            /// <param name="LimitValue">Limit value</param>
            /// <param name="Mode">Source mode</param>
            /// <param name="Channel">Channel</param>
            public void SetSourceLimit(double LimitValue, KEITHLEY_2601A_LimitMode Mode, KEITHLEY_2602A_Channels Channel)
            {
                var SetLimitScript =
                    "smu{0}.source.limit{1} = {2} ";

                var _LimitValue = LimitValue.ToString().Replace(',', '.');

                CommandBuilder = new StringBuilder();

                switch (Channel)
                {
                    case KEITHLEY_2602A_Channels.ChannelA:
                        {
                            switch (Mode)
                            {
                                case KEITHLEY_2601A_LimitMode.Voltage:
                                    {
                                        SetLimitScript = CommandBuilder.AppendFormat(SetLimitScript, "a", "v", _LimitValue).ToString();
                                        SendCommandRequest(SetLimitScript);
                                    } break;
                                case KEITHLEY_2601A_LimitMode.Current:
                                    {
                                        SetLimitScript = CommandBuilder.AppendFormat(SetLimitScript, "a", "i", _LimitValue).ToString();
                                        SendCommandRequest(SetLimitScript);
                                    } break;
                                default:
                                    break;
                            }
                        } break;
                    case KEITHLEY_2602A_Channels.ChannelB:
                        {
                            switch (Mode)
                            {
                                case KEITHLEY_2601A_LimitMode.Voltage:
                                    {
                                        SetLimitScript = CommandBuilder.AppendFormat(SetLimitScript, "b", "v", _LimitValue).ToString();
                                        SendCommandRequest(SetLimitScript);
                                    } break;
                                case KEITHLEY_2601A_LimitMode.Current:
                                    {
                                        SetLimitScript = CommandBuilder.AppendFormat(SetLimitScript, "b", "i", _LimitValue).ToString();
                                        SendCommandRequest(SetLimitScript);
                                    } break;
                                default:
                                    break;
                            }
                        } break;
                    default:
                        break;
                }
            }
            /// <summary>
            /// Sets value to the appropriate channel
            /// </summary>
            /// <param name="Value">Value to be set into device</param>
            /// <param name="SourceMode">Defines voltage or current value should be written to the device</param>
            /// <param name="Channel">Defines channel, on which the value is setted</param>
            public void SetValueToChannel(double Value, KEITHLEY_2601A_SourceMode SourceMode, KEITHLEY_2602A_Channels Channel)
            {
                SetChannelSourceMode(Channel, SourceMode);

                //Changing value to appropriate format

                var _Value = Value.ToString().Replace(',', '.');

                var script = "smu{0}.source.level{1} = {2} ";

                switch (Channel)
                {
                    case KEITHLEY_2602A_Channels.ChannelA:
                        {
                            CommandBuilder = new StringBuilder();

                            switch (SourceMode)
                            {
                                case KEITHLEY_2601A_SourceMode.Voltage:
                                    {
                                        script = CommandBuilder.AppendFormat(script, "a", "v", _Value).ToString();
                                        SendCommandRequest(script);
                                    } break;
                                case KEITHLEY_2601A_SourceMode.Current:
                                    {
                                        script = CommandBuilder.AppendFormat(script, "a", "i", _Value).ToString();
                                        SendCommandRequest(script);
                                    } break;
                                default:
                                    break;
                            }
                        } break;
                    case KEITHLEY_2602A_Channels.ChannelB:
                        {
                            CommandBuilder = new StringBuilder();

                            switch (SourceMode)
                            {
                                case KEITHLEY_2601A_SourceMode.Voltage:
                                    {
                                        script = CommandBuilder.AppendFormat(script, "b", "v", _Value).ToString();
                                        SendCommandRequest(script);
                                    } break;
                                case KEITHLEY_2601A_SourceMode.Current:
                                    {
                                        script = CommandBuilder.AppendFormat(script, "b", "i", _Value).ToString();
                                        SendCommandRequest(script);
                                    } break;
                                default:
                                    break;
                            }
                        } break;
                    default:
                        break;
                }
            }
            /// <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>
            /// Sets source mode of appropriate channel
            /// </summary>
            /// <param name="Channel">Channel</param>
            /// <param name="SourceMode">Source mode (voltage / current)</param>
            public void SetChannelSourceMode(KEITHLEY_2602A_Channels Channel, KEITHLEY_2601A_SourceMode SourceMode)
            {
                var Command = "smu{0}.source.autorange{2} = smu{0}.AUTORANGE_ON ";

                CommandBuilder = new StringBuilder();

                Command = Command.Insert(0, "smu{0}.source.func = smu{0}.{1} ");
                Command += "smu{0}.source.level{2} = 0 ";

                switch (SourceMode)
                {
                    case KEITHLEY_2601A_SourceMode.Voltage:
                        {
                            switch (Channel)
                            {
                                case KEITHLEY_2602A_Channels.ChannelA:
                                    {
                                        Command = CommandBuilder.AppendFormat(Command, "a", "OUTPUT_DCVOLTS", "v").ToString();
                                        SendCommandRequest(Command);
                                    } break;
                                case KEITHLEY_2602A_Channels.ChannelB:
                                    {
                                        Command = CommandBuilder.AppendFormat(Command, "b", "OUTPUT_DCVOLTS", "v").ToString();
                                        SendCommandRequest(Command);
                                    } break;
                                default:
                                    break;
                            }
                        } break;
                    case KEITHLEY_2601A_SourceMode.Current:
                        {
                            switch (Channel)
                            {
                                case KEITHLEY_2602A_Channels.ChannelA:
                                    {
                                        Command = CommandBuilder.AppendFormat(Command, "a", "OUTPUT_DCAMPS", "i").ToString();
                                        SendCommandRequest(Command);
                                    } break;
                                case KEITHLEY_2602A_Channels.ChannelB:
                                    {
                                        Command = CommandBuilder.AppendFormat(Command, "b", "OUTPUT_DCAMPS", "i").ToString();
                                        SendCommandRequest(Command);
                                    } break;
                                default:
                                    break;
                            }
                        } break;
                    default:
                        break;
                }
            }
            /// <summary>
            /// Switching appropriate channel ON or OFF
            /// </summary>
            /// <param name="Channel">Channel to be swithed</param>
            /// <param name="Status">Status of the channel ON / OFF</param>
            public void SwitchChannelState(KEITHLEY_2602A_Channels Channel, KEITHLEY_2602A_Channel_Status Status)
            {
                var Command =
                    "beeper.beep(0.15, 2400) " +
                    "smu{0}.source.output = smu{0}.OUTPUT_STATUS ";

                switch (Status)
                {
                    case KEITHLEY_2602A_Channel_Status.Channel_ON:
                        {
                            Command = Command.Replace("OUTPUT_STATUS", "OUTPUT_ON");
                        }
                        break;
                    case KEITHLEY_2602A_Channel_Status.Channel_OFF:
                        {
                            Command = Command.Replace("OUTPUT_STATUS", "OUTPUT_OFF");
                        }
                        break;
                    default:
                        break;
                }

                switch (Channel)
                {
                    case KEITHLEY_2602A_Channels.ChannelA:
                        {
                            CommandBuilder = new StringBuilder();
                            CommandBuilder.AppendFormat(Command, "a").ToString();

                            var ExequtionRequest = CommandBuilder.ToString();

                            SendCommandRequest(ExequtionRequest);
                        } break;
                    case KEITHLEY_2602A_Channels.ChannelB:
                        {
                            CommandBuilder = new StringBuilder();
                            CommandBuilder.AppendFormat(Command, "b").ToString();

                            var ExequtionRequest = CommandBuilder.ToString();

                            SendCommandRequest(ExequtionRequest);
                        } break;
                    default:
                        {
                            //Some default actions...
                        } break;
                }
            }