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();