110,539
社区成员
发帖
与我相关
我的任务
分享
using System;
using Agilent.Agilent546XX.Interop;
using System.Runtime.InteropServices;
using System.Data;
using System.Collections;
namespace Acery.DSO6014L
{
/// <summary>
/// Class1 的摘要说明。
/// </summary>
public class DSO6014Class
{
public DSO6014Class()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
Agilent.Agilent546XX.Interop.Agilent546XXClass IviDriver = new Agilent.Agilent546XX.Interop.Agilent546XXClass();
// IAgilent546XXMeasurement pMeasurement;
public double timebase = 0.0;
/// <summary>
/// 初始化函数
/// </summary>
public bool Initialize(string ResourceName)
{
try
{
IviDriver.Initialize(ResourceName,false,true,"");
Configure();
}
catch
{
return false;
}
return IviDriver.Initialized;
}
/// <summary>
/// 关闭示波器
/// </summary>
public bool Close()
{
try
{
IviDriver.Close();
}
catch(Exception ee)
{
Console.WriteLine(ee.Message);
return false;
}
return true;
}
/// <summary>
/// 中止采集
/// </summary>
public bool Abort()
{
try
{
IviDriver.Measurements.Abort();
}
catch
{
return false;
}
return true;
}
/// <summary>
/// 配置示波器各参数
/// </summary>
private bool Configure()
{
try
{
//配置示波器正常取数模式
IviDriver.Acquisition.Type = Agilent546XXAcquisitionTypeEnum.Agilent546XXAcquisitionTypeNormal;
//定义采集的最小点数
IviDriver.Acquisition.NumberOfPointsMin = 1000;
// pMeasurement = IviDriver.Measurements.get_Item("Channel1");
}
catch(Exception ee)
{
Console.WriteLine(ee.Message);
return false;
}
return true;
}
/// <summary>
/// 测峰峰值
/// </summary>
public bool FetchVppValue(ref double resultVpp)
{
try
{
// Configure();
IAgilent546XXMeasurement pMeasurement = IviDriver.Measurements.get_Item("UserChannel1");
IviDriver.Measurements.AutoSetup();
pMeasurement.ReadWaveformMeasurement
(Agilent546XXMeasurementEnum.Agilent546XXMeasurementVoltagePeakToPeak,(Agilent546XXTimeOutEnum)20000,ref resultVpp);
}
catch
{
return false;
}
return true;
}
/// <summary>
/// 取值
/// </summary>
public bool FetchData(ref double[] WaveData)
{
try
{
double dInitialX = 0.0;
double dXIncrement = 0.0;
WaveData = new double[1000];
IAgilent546XXMeasurement pMeasurement = IviDriver.Measurements.get_Item("UserChannel1");
IviDriver.Measurements.AutoSetup();
timebase = IviDriver.Acquisition.TimePerRecord;//timebase值
pMeasurement.ReadWaveform((Agilent546XXTimeOutEnum) 20000, ref(WaveData), ref(dInitialX),
ref(dXIncrement));
}
catch(Exception ee)
{
Console.WriteLine(ee.Message);
return false;
}
return true;
}
/// <summary>
/// 测频率值
/// </summary>
public bool FetchFreq(ref double resultFreq)
{
try
{
// Configure();
IAgilent546XXMeasurement pMeasurement = IviDriver.Measurements.get_Item("UserChannel1");
IviDriver.Measurements.AutoSetup();
pMeasurement.ReadWaveformMeasurement
(Agilent546XXMeasurementEnum.Agilent546XXMeasurementFrequency,(Agilent546XXTimeOutEnum)20000,ref resultFreq);
}
catch
{
return false;
}
return true;
}
}
}
if(A615_02Data.m_St_ProjectInfo.prjStatus.currentTestID == TestItemNameIDEnum.CABLE_CONNECT_TEST)
{
m_IvkDisplayTestLogInfo(false, true, "正在执行电缆连接测试...");
this.CableConnectTestThread=newThread(newThreadStart(CableConnectTestThreadBod));
CableConnectTestThread.IsBackground=false;
CableConnectTestThread.Start();
}
else if(A615_02Data.m_St_ProjectInfo.prjStatus.currentTestID == TestItemNameIDEnum.MANUAL_MONITOR_TEST)
{
m_IvkDisplayTestLogInfo(false, true, "正在进行手动监测...");
this.ManualTestThread = new Thread(new ThreadStart(ManualTestThreadBody));
ManualTestThread.IsBackground=false;
ManualTestThread.Start();
}
else if(A615_02Data.m_St_ProjectInfo.prjStatus.currentTestID == TestItemNameIDEnum.DISTORTION_TEST)
{
tmpThreadID = 0;
m_IvkDisplayTestLogInfo(false, true, "正在进行畸变测试...");
this.VaryTestThread = new Thread(new ThreadStart(VaryTestThreadBody));
VaryTestThread.IsBackground = false;
VaryTestThread.Start();
}
// 畸变测试
Thread VaryTestThread;
private void VaryTestThreadBody()
{
if(A615_02Data.m_St_FlagSelectedTestItem[(int)TestItemNameIDEnum.FREQUENCY_TEST])//频响
{
m_IvkDisplayTestLogInfo(false, true, "正在执行畸变测试中的频响测试...");
FreqTestForVary();
}
if(A615_02Data.m_St_FlagSelectedTestItem[(int)TestItemNameIDEnum.OUTPUT_AC_IMPEDANCE_TEST])//阻抗
{
m_IvkDisplayTestLogInfo(false, true, "正在执行畸变测试中的阻抗测试...");
OutAcImpedanceTestForVary();
}
}
//畸变中的频响测试(先循环通道,再循环频率点)
private void FreqTestForVary()
{
for(int iChl = 0;(iChl < A615_02Data.m_St_ProjectInfo.outputChlCount)&&(!m_FlagAbortTest);iChl++)
{
for(int iFreq = 0; (iFreq < tmpFreqParams[iChl].requiredACSignals.Length) && (!m_FlagAbortTest); iFreq++)
{
DSO6014Driver.FetchData(ref WaveData); //调用示波器取值函数
}
}
}