嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300
本次赞助数额为: 2 元微信扫码支付:2 元
请留下您的邮箱,我们将在2小时内将文件发到您的邮箱
用C#程控安捷伦电源和频率计进行自动测试
sing System;
using System.Linq;
using System.Windows.Forms;
using System.IO.Ports;
using System.Reflection;
using System.Threading;
using System.Runtime.InteropServices;
using Ginkgo;
using System.Collections.Generic;
using System.Drawing;
using NPOI.SS.UserModel;
using NPOI.HSSF.UserModel;
using NPOI.XSSF.UserModel;
using System.IO;
using Modbus.Device;
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 Microsoft.Office;
using System.Text.RegularExpressions;
using ATS545;
using System.ComponentModel;
using System.Data;
using System.Windows.Forms.DataVisualization.Charting;
namespace createxcel_2
{
public partial class Form1 : Form
{
Form2 OA = new Form2();
public Form1()
{
InitializeComponent();
OA.Hide(); // 隐藏form2窗体
}
//Ag53210 v53131A = new Ag53210("GPIB0::2::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.Text = "";
Thread.Sleep(300);
textFreq.Clear();
Ag53210 v53131A = new Ag53210(textBox1.Text);
AgE3631 E3631A = new AgE3631(textBox2.Text);
AgE364xS E3642A = new AgE364xS(textBox2.Text);
string GPIB_Address= textBox3.Text;
string path = textBox7.Text textBox5.Text ".txt"; //测试文件存储路径
if (File.Exists(path))
{
MessageBox.Show("文件已经存在,请更换文件名!!!");
Environment.Exit(0);
}
StreamWriter sw = File.CreateText(path); // 创建文件
double[] vcc = new double[1000];
double[] measure = null;
double[] freq = new double[1000];
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);
int P = Convert.ToInt16(1 / Step);
double z = (VDD_Max - VDD_Min) * P 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 (textBox1.Text == "" || textBox2.Text == "" || textBox3.Text == "")
{
MessageBox.Show("请输出GPIB地址!!!");
System.Environment.Exit(0);
}
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);
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;
}
}
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);
//this.BackColor = Color.PaleTurquoise;
//button1.BackColor = Color.Bisque;
}
else if (radioButton3.Checked == true && radioButton4.Checked == true) //选择多通道电源,只使用P6V 通道
{
try
{
v53131A.Connect();
E3631A.Connect();
Thread.Sleep(100);
v53131A.SCPI.RST.Command();
E3631A.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;
E3631A.SCPI.OUTPut.STATe.Command(false);
Thread.Sleep(100);
E3631A.SCPI.APPLy.Command("P6V", vcc[i], 0.1D);
Thread.Sleep(500);
E3631A.SCPI.OUTPut.STATe.Command(true);
Thread.Sleep(1000);
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;
}
}
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);
//this.BackColor = Color.PaleTurquoise;
//button1.BackColor = Color.Bisque;
}
else if (radioButton3.Checked == true && radioButton5.Checked == true) //选择多通道电源,使用P6V, P25V
{
string[] Vstr = Regex.Split(textBox4.Text, ",");
int Vt = Vstr.Length;
double[] VDD2 = new double[Vt];
for (int k = 0; k < Vt; k ) //第二电源设置
{
VDD2[k] = Convert.ToDouble(Tstr[k]);
Thread.Sleep(100);
}
try
{
v53131A.Connect();
E3631A.Connect();
Thread.Sleep(300);
v53131A.SCPI.RST.Command();
E3631A.SCPI.RST.Command();
}
catch
{
MessageBox.Show("Ini Equip Error");
return;
}
Thread.Sleep(100);
for (int k = 0; k < Vt; k ) //第二电源设置
{
double VDD = VDD2[k];
Thread.Sleep(100);
E3631A.SCPI.OUTPut.STATe.Command(false);
Thread.Sleep(100);
E3631A.SCPI.APPLy.Command("P25V", VDD, 0.1D);
Thread.Sleep(100);
for (i = 0; i < z; i )
{
vcc[i] = (double)(VDD_Min Step * i);
try
{
measure = null;
E3631A.SCPI.OUTPut.STATe.Command(false);
Thread.Sleep(100);
E3631A.SCPI.APPLy.Command("P6V", vcc[i], 0.1D);
Thread.Sleep(100);
E3631A.SCPI.OUTPut.STATe.Command(true);
Thread.Sleep(1000);
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;
}
}
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);
this.BackColor = Color.PaleTurquoise;
button1.BackColor = Color.Bisque;
Thread.Sleep(100);
OA.ATS545_Set(70);
Thread.Sleep(10000);
OA.ATS545_Stop();
//OA.ATS545_OFF();
}
else //不选择高低温,只测试常温
{
//if (textBox1.Text == "" || textBox2.Text == "" || textBox3.Text == "")
//{
// MessageBox.Show("请输出GPIB地址!!!");
// System.Environment.Exit(0);
//}
//StreamWriter sw = File.CreateText(path name ".txt"); // 创建存在文件
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);
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;
}
}
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);
//this.BackColor = Color.PaleTurquoise;
//button1.BackColor = Color.Bisque;
}
else if (radioButton3.Checked == true && radioButton4.Checked == true)
{
try
{
v53131A.Connect();
E3631A.Connect();
Thread.Sleep(100);
v53131A.SCPI.RST.Command();
E3631A.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;
E3631A.SCPI.OUTPut.STATe.Command(false);
Thread.Sleep(100);
E3631A.SCPI.APPLy.Command("P6V", vcc[i], 0.1D);
Thread.Sleep(100);
E3631A.SCPI.OUTPut.STATe.Command(true);
Thread.Sleep(1000);
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;
}
}
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);
//this.BackColor = Color.PaleTurquoise;
//button1.BackColor = Color.Bisque;
}
else if (radioButton3.Checked == true && radioButton5.Checked == true)
{
string[] Vstr = Regex.Split(textBox4.Text, ",");
int Vt = Vstr.Length;
double[] VDD2 = new double[Vt];
for (int j = 0; j < Vt; j ) //第二电源设置
{
VDD2[j] = Convert.ToDouble(Vstr[j]);
Thread.Sleep(100);
}
try
{
v53131A.Connect();
E3631A.Connect();
Thread.Sleep(100);
v53131A.SCPI.RST.Command();
E3631A.SCPI.RST.Command();
}
catch
{
MessageBox.Show("Ini Equip Error");
return;
}
for (int j = 0; j < Vt; j ) //第二电源设置
{
VDD2[j] = Convert.ToDouble(Vstr[j]);
Thread.Sleep(100);
E3631A.SCPI.APPLy.Command("P25V", VDD2[j], 0.1D);
Thread.Sleep(100);
for (i = 0; i < z; i )
{
vcc[i] = (double)(VDD_Min Step * i);
try
{
measure = null;
E3631A.SCPI.OUTPut.STATe.Command(false);
Thread.Sleep(1000);
E3631A.SCPI.APPLy.Command("P6V", vcc[i], 0.1D);
Thread.Sleep(1000);
E3631A.SCPI.OUTPut.STATe.Command(true);
Thread.Sleep(1000);
v53131A.SCPI.READ.QueryAsciiReal(out measure);
av1 = measure[0];
Thread.Sleep(500);
v53131A.SCPI.READ.QueryAsciiReal(out measure);
av2 = measure[0];
Thread.Sleep(500);
v53131A.SCPI.READ.QueryAsciiReal(out measure);
av3 = measure[0];
Thread.Sleep(500);
if (measure.Count() > 0)
{
freq[i] = (av1 av2 av3) / 3000000;
}
else
{
freq[i] = 0;
}
}
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);
//this.BackColor = Color.PaleTurquoise;
//button1.BackColor = Color.Bisque;
}
sw.Flush();
sw.Close();
E3631A.SCPI.OUTPut.STATe.Command(false);
this.BackColor = Color.PaleTurquoise;
button1.BackColor = Color.Bisque;
}
}
private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
{
if (treeView1.SelectedNode != null)
{
string str4 = treeView1.SelectedNode.Text;
try
{
textBox8.Text = Idn(str4);
}
catch
{
MessageBox.Show("系统内无此仪器~", "ERROR");
}
}
else
{
textBox8.Text = "";
}
}
private void button3_Click(object sender, EventArgs e)
{
textBox1.Clear();
if (treeView1.SelectedNode != null)
{
string str1 = treeView1.SelectedNode.Text;
textBox1.Text = str1;
}
else
{
MessageBox.Show("选择信息不能为空,请选择对应的地址!");
}
}
private void button4_Click(object sender, EventArgs e)
{
textBox2.Clear();
if (treeView1.SelectedNode != null)
{
string str1 = treeView1.SelectedNode.Text;
textBox2.Text = str1;
}
else
{
MessageBox.Show("选择信息不能为空,请选择对应的地址!");
}
}
private void button5_Click(object sender, EventArgs e)
{
textBox3.Clear();
if (treeView1.SelectedNode != null)
{
string str3 = treeView1.SelectedNode.Text;
textBox3.Text = str3;
}
else
{
MessageBox.Show("选择信息不能为空,请选择对应的地址!");
}
}
private void radioButton3_CheckedChanged(object sender, EventArgs e) //显示单电源,双电源选择项
{
if (radioButton3.Checked == true)
{
radioButton4.Visible = true;
radioButton5.Visible = true;
if (radioButton5.Checked == true)
{
label12.Visible = true;
textBox4.Visible = true;
}
else
{
label12.Visible = false;
textBox4.Visible = false;
}
}
else
{
radioButton4.Visible = false;
radioButton5.Visible = false;
label12.Visible = false;
textBox4.Visible = false;
}
}
private void radioButton5_CheckedChanged(object sender, EventArgs e) // 显示第二电源设置
{
if (radioButton5.Checked == true)
{
label12.Visible = true;
textBox4.Visible = true;
}
else
{
label12.Visible = false;
textBox4.Visible = false;
}
}
private void button2_Click(object sender, EventArgs e) //查询选中地址的设备信息
{
System.Environment.Exit(0);
}
public string Idn(string name) // 查询设备信息的函数
{
string str1 = "*IDN?";
string str2;
ResourceManager rm1 = new ResourceManager();
var mbsession = (MessageBasedSession)rm1.Open(name);
mbsession.RawIO.Write(str1);
str2 = mbsession.RawIO.ReadString();
return str2;
}
private void button1_MouseDown(object sender, MouseEventArgs e)
{
button1.BackColor = Color.YellowGreen;
this.BackColor = Color.Wheat;
textFreq.Text = "";
}
private void GPIBaddress_Click(object sender, EventArgs e) // 查询GPIB地址--------------------------------
{
//textBox1.Clear();
//textBox2.Clear();
//textBox3.Clear();
treeView1.Nodes.Clear();
Ivi.Visa.Interop.ResourceManager rm = new Ivi.Visa.Interop.ResourceManager();
{
try
{
IEnumerable<string> names = rm.FindRsrc("?*");
foreach (string s in names)
{
treeView1.Nodes.Add(s);
}
}
catch (Exception)
{
MessageBox.Show("系统内不存在此类系统~", "ERROR");
}
}
}
}
}