实例介绍
【实例截图】

【核心代码】
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");
}
}
}
}
}
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论