コード例 #1
0
ファイル: Hardware.cs プロジェクト: robojames/Keithley-DMM
        public Ke37XX InitializeDMM(double timeStep, string channelNumber, double nplc)
        {
            try
            {
                Ke37XX          DMM  = new Ke37XX();
                FormattedIO488  udT  = new FormattedIO488();
                ResourceManager udTR = new ResourceManager();



                if (DMM.Initialized == false)
                {
                    DMM.Initialize("GPIB0::16::INSTR", false, true, "");
                }

                DMM.Channel.Close("2001:2060,6009:6060");

                DMM.Measurement.Nplc      = nplc;// 0.0005, 0.11 for accurate ultrafast;
                DMM.Measurement.AutoDelay = Ke37XXAutoDelayEnum.Ke37XXAutoDelayOff;

                DMM.Measurement.Function = Ke37XXMeasurementFunctionEnum.Ke37XXMeasurementFunctionDCVolts;

                DMM.Measurement.AutoRange = true;

                DMM.Measurement.AutoZero = Ke37XXAutoZeroEnum.Ke37XXAutoZeroOnce;

                DMM.Measurement.Configuration.Create("DCVoltsCfg");

                DMM.Scan.CreateScanList(channelNumber, "DCVoltsCfg");

                udT.IO = (IMessage)udTR.Open("GPIB::16::INSTR", AccessMode.NO_LOCK, 10000, "");

                // udT.WriteString("PERIOD = trigger.timer[1]", true);
                // udT.WriteString("PERIOD.delay = " + timeStep, true);

                // udT.WriteString("PERIOD.stimulus = scan.trigger.EVENT_SCAN_START", true);

                // udT.WriteString("PERIOD.count = 1", true);

                // udT.WriteString("scan.trigger.measure.stimulus = PERIOD.EVENT_ID", true);

                DMM.Scan.Mode = Ke37XXScanModeEnum.Ke37XXScanModeOpenAll;

                DMM.Display.Text = "Initialized";

                return(DMM);
            }
            catch
            {
                MessageBox.Show("DMM Initialization Failure", "Error!", MessageBoxButtons.OK);
            }

            Ke37XX BAD = new Ke37XX();

            return(BAD);
        }
コード例 #2
0
ファイル: Hardware.cs プロジェクト: robojames/Keithley-DMM
        public Ke37XX InitializeDMM(double timeStep, string channelNumber, double nplc)
        {
            try
            {
                Ke37XX DMM = new Ke37XX();
                FormattedIO488 udT = new FormattedIO488();
                ResourceManager udTR = new ResourceManager();

                if (DMM.Initialized == false)
                {
                    DMM.Initialize("GPIB0::16::INSTR", false, true, "");
                }

                DMM.Channel.Close("2001:2060,6009:6060");

                DMM.Measurement.Nplc = nplc;// 0.0005, 0.11 for accurate ultrafast;
                DMM.Measurement.AutoDelay = Ke37XXAutoDelayEnum.Ke37XXAutoDelayOff;

                DMM.Measurement.Function = Ke37XXMeasurementFunctionEnum.Ke37XXMeasurementFunctionDCVolts;

                DMM.Measurement.AutoRange = true;

                DMM.Measurement.AutoZero = Ke37XXAutoZeroEnum.Ke37XXAutoZeroOnce;

                DMM.Measurement.Configuration.Create("DCVoltsCfg");

                DMM.Scan.CreateScanList(channelNumber, "DCVoltsCfg");

                udT.IO = (IMessage)udTR.Open("GPIB::16::INSTR", AccessMode.NO_LOCK, 10000, "");

               // udT.WriteString("PERIOD = trigger.timer[1]", true);
               // udT.WriteString("PERIOD.delay = " + timeStep, true);

               // udT.WriteString("PERIOD.stimulus = scan.trigger.EVENT_SCAN_START", true);

               // udT.WriteString("PERIOD.count = 1", true);

               // udT.WriteString("scan.trigger.measure.stimulus = PERIOD.EVENT_ID", true);

                DMM.Scan.Mode = Ke37XXScanModeEnum.Ke37XXScanModeOpenAll;

                DMM.Display.Text = "Initialized";

                return DMM;
            }
            catch
            {
                MessageBox.Show("DMM Initialization Failure", "Error!", MessageBoxButtons.OK);
            }

            Ke37XX BAD = new Ke37XX();

            return BAD;
        }
コード例 #3
0
ファイル: Form1.cs プロジェクト: robojames/Keithley-DMM
        public void importedCurrentProfileNoMeasurement(double[] ampArrayD, Ke37XX DMM, Hardware basicSetup, FormattedIO488 pS1, FormattedIO488 pS2)
        {
            double[] timeArray = TimeArray.ToArray();

            timeStepArray = new double[timeArray.Length];

            timeStepArrayInt = new int[timeArray.Length];

            for (int i = 0; i <= timeArray.Length - 2; i++)
            {
                timeStepArray[i] = -1000*(timeArray[i] - timeArray[i + 1]);

                timeStepArray[i] = Math.Round(timeStepArray[i], 0);

                timeStepArrayInt[i] = (int)timeStepArray[i] - 4;

                if (checkBox4.Checked == true)
                {
                    timeStepArrayInt[i] = (int)(1000 * const_timeStep) - 4;
                    Debug.WriteLine(timeStepArray[i].ToString());
                }

            }

            int iscanCount = SampleNumberDMMHalf + 100;
            int ibufferSize = iscanCount;

            double amps = constantA;

            double[] dTdt = new double[SampleNumberDMMHalf + 1];
            double[] time = new double[SampleNumberDMMHalf + 1];
            double[] temp = new double[SampleNumberDMMHalf + 1];
            double[] temp2 = new double[SampleNumberDMMHalf + 1];
            double[] timeDiff = new double[SampleNumberDMMHalf + 1];
            double[] data = new double[SampleNumberDMMHalf + 1];
            double[] readings = new double[SampleNumberDMMHalf + 1];
            double[] ampstoWrite = new double[SampleNumberDMMHalf + 1];

            string sbufferName = "Mybuffer";

            DMM.Display.Clear();

            DMM.Display.Text = "Scanning...";

            DMM.Scan.ScanCount = SampleNumberDMMHalf;

            DMM.Measurement.Buffer.Create(sbufferName, ibufferSize);

            DMM.System.DirectIO.IO.Timeout = 10000;

            DMM.Timer.Reset();

            DMM.Scan.ExecuteBackground(sbufferName);

            for (int i = 0; i <= ampArrayD.Length-1; i++)
            {
                Thread.Sleep(timeStepArrayInt[i]);

                pS1.IO.WriteString("ISET " + ampArrayD[i] + "\n");

                if (relayFlag == false & readRelayArray[i] == 1)
                {
                    relayFlag = switchRelay(pS2, relayFlag);
                }

                if (relayFlag == true & readRelayArray[i] == 0)
                {
                    relayFlag = switchRelay(pS2, relayFlag);
                }

            }

            readings = DMM.Measurement.Buffer.ReadingData.GetAllFormattedReadings(sbufferName);

            double[] timereadings = DMM.Measurement.Buffer.TimeStampData.GetAllRelativeTimeStamps(sbufferName);

            for (int i = 0; i <= readings.Length - 1; i++)
            {
                temp[i] = getTemp(readings[i]);

            }

            for (int j = 0; j <= readings.Length - 1; j++)
            {
                toWriteAmp[j] = 0;
                toWriteTemp[j] = temp[j];
                toWriteTime[j] = timereadings[j];
                toWriteTemp2[j] = 0;
            }
            pS1.IO.WriteString("ISET 2.0\n");

            //switchRelay(pS2, relayFlag); // Turns relay back off

            DMM.Display.Clear();

            DMM.Display.Text = "Finished!";

            //writeFile(temp, time, dTdt, iscanCount, ampstoWrite); // Writes data to .csv file
            newWriteFile();

            Cleanup();

            switchRelay(pS2, relayFlag);
        }
コード例 #4
0
ファイル: Form1.cs プロジェクト: robojames/Keithley-DMM
        public void warmingProfile(FormattedIO488 ps1, FormattedIO488 ps2, Ke37XX DMM)
        {
            int iscanCount = 50000;

            double[] dTdt = new double[iscanCount + 1];
            double[] time = new double[iscanCount + 1];
            double[] temp = new double[iscanCount + 1];
            double[] temp2 = new double[iscanCount + 1];
            double[] timeDiff = new double[iscanCount + 1];
            double[] data = new double[iscanCount + 1];
            double[] readings = new double[iscanCount + 1];
            double[] tErr = new double[iscanCount + 1];
            double[] tErrInt = new double[iscanCount + 1];
            double amps;

            string sbufferName = "Mybuffer";
            DMM.Measurement.Buffer.Clear(sbufferName);

            DMM.Display.Clear();

            DMM.Display.Text = "Scanning...";

            DMM.Scan.ScanCount = 1;

            DMM.Measurement.Buffer.Create(sbufferName, 50000);

            DMM.System.DirectIO.IO.Timeout = 10000;

            DMM.Timer.Reset();

            int i = 0;

            Stopwatch debugTimer = new Stopwatch();

            while (ExperimentReadyFlag == false)
            {

                time[i] = DMM.Timer.Measure();

                DMM.Scan.Execute(sbufferName);

                readings = DMM.Measurement.Buffer.ReadingData.GetAllFormattedReadings(sbufferName);

                temp[i] = getTemp(readings[0]);

                tErr[i] = setTemp - temp[i];

                if (i > 2)
                    tErrInt[i] = tErrInt[i - 1] + tErr[i];

               // debugTimer.Start();

                if (i > 5)
                {
                    int kk = i - 2;

                    timeDiff[i] = time[i] - time[i - 1];

                    dTdt[i] = (8 * (temp[kk + 1] - temp[kk - 1]) + (temp[kk - 2] - temp[kk + 2])) / (12 * (timeDiff[i]));
                }
                else
                {
                    dTdt[i] = 0;
                }

                DMM.Display.Clear();

                DMM.Display.Text = "Temp: " + String.Format("{0:0.000}", temp[i]) + " C";

                Debug.WriteLine("Temp: " + temp[i]);

                amps = 0.45 * tErr[i] + 0.0015 * tErrInt[i];

                Debug.WriteLine(tErr[i].ToString() + "         " + tErrInt[i].ToString());

                if (amps > 4)
                    amps = 4;

                if (amps < 0)
                    amps = 0;

                ps1.IO.WriteString("ISET " + amps + "\n");

                i++;

               // debugTimer.Stop();

              //  Debug.WriteLine(debugTimer.ElapsedMilliseconds.ToString());

                //debugTimer.Reset();

            }

            DMM.Display.Clear();

            DMM.Display.Text = "Finished!";
        }