C# 程控安捷伦设备

该博客介绍了使用C#语言开发的设备测试程序。通过安捷伦的GPIB - USB和GPIB线连接设备,可改变电压测试产品输出频率,并在不同温度点测试。程序包含GPIB寻址、温度选择、电源设置等功能,还给出了详细的代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 使用安捷伦的GPIB-USB 和 GPIB线连接所有设备;

2.  设备类型: 安捷伦电源(E3631A, E3642A, E3632A); 频率计(53220A,53120A);

3.  高低温冲击仪(非安捷伦)

目的: 改变电压测试产品输出频率, 并在几个不同的温度点测试

截图:

1. GPIB 寻址,单机地址显示设备新,点击相关设备添加按钮,给该设备添加GPIB地址;

2.  温度选择项,如果选择温度测试,可以设置温度点数,和每个温度点等候时间

3. 电源选择,  单双电源选择, 电压设置,频率测试单次或3次求平均值;

4.  文件存在路径和文件名定义 ( 直接创建,未定义是否核对已有文件问题,如果文件名存在会覆盖原文件)

5. 数据显示到textBox里面;

6.  测试按钮和停止按钮(因为未设置多线程,一旦程序运行,停止按钮失效,除非停止运行程序);

以下为程序代码:

using System;
using System.Linq;
using System.Windows.Forms;
using System.Threading;using System.Collections.Generic;
using System.IO;
using Agilent.CommandExpert.ScpiNet.Ag53210_1_05;
using Agilent.CommandExpert.ScpiNet.AgE364xS_1_8;
using Agilent.CommandExpert.ScpiNet.AgE3631_2_1;
using Agilent.CommandExpert.ScpiNet.AgE3632_1_4;
using Ivi.Visa;
using NationalInstruments.Visa;
using System.Text.RegularExpressions;
using ATS545;

namespace createxcel_2
{
    public partial class Form1 : Form
    {
        Form2 OA = new Form2();

        public Form1()
        {
            InitializeComponent();
            OA.Hide();                         // 隐藏form2窗体
            labelControl10.Visible = false;
            textBox4.Visible = false;
            labelControl8.Visible = false;
            textBox6.Visible = false;
            labelControl2.Visible = false;
            textBox12.Visible = false;
        }

        Ag53210 v53131A = new Ag53210("GPIB0::3::INSTR");
        AgE364xS E3642A = new AgE364xS("GPIB0::6::INSTR");
        AgE3631 E3631A = new AgE3631("GPIB0::6::INSTR");

        private void button1_Click(object sender, EventArgs e)
        {
            button2.Enabled = true;
            //textFreq.Clear();
            textFreq.Text = "";
            Thread.Sleep(300);
            Ag53210 v53131A = new Ag53210(textBox1.Text);
            AgE3631 E3631A = new AgE3631(textBox2.Text);
            AgE364xS E3642A = new AgE364xS(textBox2.Text);


            string path = textBox7.Text;  //测试文件存储路径
            string name = textBox5.Text; //测试文件名称
                                         //StreamWriter sw = File.CreateText(path + name + ".txt"); // 创建存在文件

            double[] vcc = new double[100];
            double[] measure = null;
            double[] freq = new double[100];
            int i = 0;


            double VDD_Min = 0; //设置最小电压
            VDD_Min = Convert.ToDouble(textBox9.Text);
            double Step = 0; //设置测试步长
            Step = Convert.ToDouble(textBox10.Text);
            double VDD_Max = 0;  // 设置最大电压
            VDD_Max = Convert.ToDouble(textBox11.Text);

            double z = (VDD_Max - VDD_Min) * 10 + 1;   //设定测试点数
            double av1, av2, av3 = 0.0;

            int Tdelay = Convert.ToInt32(textBox12.Text);
            string[] Tstr = Regex.Split(textBox6.Text, ",");   //输入的温度值转换成字符串数组
            int Tt = Tstr.Length;                             // 计算字符串数组的长度
            double[] Temp = new double[Tt];                   // 定义温度数组
            for (int j = 0; j < Tt; j++)
            {
                Temp[j] = Convert.ToDouble(Tstr[j]);
            }


            if (checkBox1.Checked == true)   //选择温度测试
            {
                Thread thread = new Thread(new ThreadStart(OA.Open545));//创建线程
                thread.Start();

                OA.ATS545_Ini();
                Thread.Sleep(100);        //到达温度后等待时间

                for (int j = 0; j < Tt; j++)
                {
                    StreamWriter sw = File.CreateText(path + name + "-" + Tstr[j] + ".txt"); // 创建存在文件

                    Temp[j] = Convert.ToDouble(Tstr[j]);
                    double Tset = Temp[j];
                    Thread.Sleep(100);
                    OA.ATS545_Set(Tset);
                    Thread.Sleep(Tdelay * 1000);

                    if (radioButton1.Checked == true || radioButton2.Checked == true)  //选择单电源设备
                    {

                        try
                        {
                            v53131A.Connect();
                            E3642A.Connect();
                            Thread.Sleep(100);

                            v53131A.SCPI.RST.Command();
                            E3642A.SCPI.RST.Command();
                        }
                        catch
                        {
                            MessageBox.Show("Ini Equip Error");
                            return;
                        }
                        Thread.Sleep(100);

                        for (i = 0; i < z; i++)
                        {
                            vcc[i] = (double)(VDD_Min + Step * i);

                            try
                            {
                                measure = null;
                                E3642A.SCPI.OUTPut.STATe.Command(false);
                                Thread.Sleep(100);
                                E3642A.SCPI.APPLy.Command(vcc[i], 0.1D);
                                Thread.Sleep(100);

                                E3642A.SCPI.OUTPut.STATe.Command(true);
                                Thread.Sleep(1000);

                                if (ThreeTimes.Checked == true)
                                {
                                    v53131A.SCPI.READ.QueryAsciiReal(out measure);
                                    av1 = measure[0];
                                    Thread.Sleep(100);

                                    v53131A.SCPI.READ.QueryAsciiReal(out measure);
                                    av2 = measure[0];
                                    Thread.Sleep(100);

                                    v53131A.SCPI.READ.QueryAsciiReal(out measure);
                                    av3 = measure[0];
                                    Thread.Sleep(100);

                                    if (measure.Count() > 0)
                                    {
                                        freq[i] = (av1 + av2 + av3) / 3000000;
                                    }

                                    else
                                    {
                                        freq[i] = 0;
                                    }
                                }
                                else if (OneTime.Checked == true)
                                {
                                    v53131A.SCPI.READ.QueryAsciiReal(out measure);
                                    Thread.Sleep(100);
                                    freq[i] = measure[0] / 1000000;
                                }
                            }
                            catch
                            {
                                freq[i] = 0;
                            }

                            string Vcc = Convert.ToString(vcc[i]);
                            string Fr = Convert.ToString(freq[i]);
                            sw.WriteLine(Vcc + "  " + Fr);
                            textFreq.AppendText(Vcc + "  " + Fr + "\r\n");

                        }

                        sw.Flush();
                        sw.Close();
                        E3631A.SCPI.OUTPut.STATe.Command(false);
                    }

                    else if (radioButton3.Checked == true && radioButton4.Checked == true)   //选择多通道电源,只使用P6V 通道
                    {
                        try
                        {
                            v53131A.Connect();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值