安捷伦电源6319D实现GPIB通信

设备:PC+安捷伦电源(型号:6319D)+GPIB

开发环境:VS2010+MFC+VISA

定义电源信息如下,

typedef struct PowerUnitTag
{
	BOOL bOpenEnable;
	ViSession instrumentHandle;
	int nGPIBAddress;
	int nPowerAddress;
	int nPowerModel;
	int nStatus;
	double dbVoltage;
	double dbVoltageOffset;
	double dbCurrent;
	double dbMeasureCurrent;
	char cDeviceID[80];

}PowerUnit;

功能:

1)电源输出开关控制

void CXXXXDlg::OnBnClickedBtnOnPower()
{
	int viStatus = NULL;
	powerUnit.nPowerModel = 1;
	powerUnit.nGPIBAddress = 0;
	//powerUnit.nPowerAddress = 5;
	powerUnit.nPowerAddress = atoi(ini_poweraddress);
	powerUnit.nStatus = NEED_OPEN;
	viStatus = PowerOpen(&powerUnit);

	if(viStatus)
	{
		MessageBox("电源控制错误!", "警告:",MB_ICONWARNING);
		return;
	}

	powerUnit.nStatus = OUTPUT_NULL;
	powerUnit.dbVoltage =3.8;//OUT_VOLTAGE;
	powerUnit.dbVoltageOffset = 0;//OUT_VOLTAGE;
	powerUnit.dbCurrent = 2.5;

	viStatus = PowerOutput(&powerUnit,OUTPUT_ON);
	if(viStatus)
	{
		MessageBox("电源控制错误!","警告:",MB_ICONWARNING);
		return;
	}
	powerUnit.nStatus = OUTPUT_ON;

	 nTimeElapsed=0;
}

2)电流测量

void CXXXDlg::tmSampleTimer()
{
	double    dbCurrent=0.0;
	double    dbDisplayCurrent=0.0;

	dbAverage = 0.0;

	// begin sample current
	nTickCount++;

	PowerMeasureCurrent(powerUnit, &dbCurrent);
	dbCurrent *= 1000;//current is milliampere

	//calculate the max /min /average current
	CString strCurren=_T("");
	CString strMaxCurren=_T("");
	CString strMinCurren=_T("");
	CString strAverageCurren=_T("");

	if(nTickCount == 1)
	{
		dbTotal = dbMaximum = dbMininum = dbAverage = dbCurrent;
	}
	else if(nTickCount > 0)
	{
		if(dbCurrent > dbMaximum)
		{
			dbMaximum = dbCurrent;
		}
		else if(dbCurrent < dbMininum)
		{
			dbMininum = dbCurrent;
		}
		dbTotal += dbCurrent;
		dbAverage = dbTotal/nTickCount;
	}
	dbDisplayCurrent = dbAverage;
	strCurren.Format("%6.1fmA", dbCurrent);
	SetDlgItemText(IDC_STATIC_CURRENT_VALUE,strCurren);

	strMaxCurren.Format("%6.1fmA", dbMaximum);
	SetDlgItemText(IDC_STATIC_MAXCURRENT_VALUE,strMaxCurren);

	strMinCurren.Format("%6.1fmA", dbMininum);
	SetDlgItemText(IDC_STATIC_MINCURRENT_VALUE,strMinCurren);

	strAverageCurren.Format("%6.1fmA", dbAverage);
	SetDlgItemText(IDC_STATIC_AVERAGECURRENT_VALUE,strAverageCurren);
	SetDlgItemText(IDC_EDIT_CURRENT_VALUE,strAverageCurren);
	UpdateWindow();
}

3)封装接口

extern "C" __declspec(dllexport) int PowerOpen(PowerUnit* Handle,BOOL display = TRUE);
extern "C" __declspec(dllexport) int PowerOutput(PowerUnit* Handle,const int mode);
extern "C" __declspec(dllexport) int PowerMeasureCurrent(const PowerUnit Handle,double *dbCurrent);
extern "C" __declspec(dllexport) int PowerClose(const PowerUnit Handle);

通过这里提供的接口,可以通过程序自动控制电源输出的打开关闭,模拟上下电的压力测试;还可以对电流进行采样分析,绘制波形图,分析功耗等。qq:2533740151

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

法哥2012

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值