agilent

如何向电源发送编程指令 – 程控电源技术和应用(53)

0
阅读(10355)

我将用几篇文章的篇幅,介绍如何向可编程电源发送控制指令,已经利用何种语言对程控电源进行编程。今天我将重点讨论利用哪类 IO 程序库来发送指令

我的建议是以 Agilent IO 程序库为基础,因为它支持安捷伦所以的可编程仪器,也同时支持符合相关标准规范的各种接口,例如RS232, USB, GPIB, LXL等等。您主要有两个选择:使用仪器提供的 SCPI(标准仪器控制指令)通过IO直接进行控制(Direct IO);或使用驱动程序(Instrument Driver)来调用各种功能。这套IO库是免费的,无论您在使用安捷伦的仪器,或者其它厂家的仪器,都可以使用这套IO库。您可以点击进入www.agilent.com.cn/find/iolib  直接免费下载和安装最新版本的IO库

我们首先讨论通过IO库的直接控制(Direct IO)。最早我们使用 HPBASIC 编程语言编写仪器控制程序。安捷伦在此方面有两个现代化标准件。第一个标准件是 VISA 程序库。当您使用 C 编程语言对仪器进行编程时,VISA 非常适用。下面是配有 VISA 的 N6700 模块化电源的一小段 C 代码实例(我故意没有提供注释,让程序以最单纯的形式显示):

VISAstatus=viOpenDefaultRM(&defrm);

VISAstatus=viOpen(defrm,”GPIB0::5”,VI_NULL,VI_NULL,&session);

viPrintf(session,"VOLT 5,(@1) \n");

viPrintf(session, "OUTP ON, (@1) \n");

viPrintf(session, "MEAS:VOLT? (@1) \n");

viScanf(session,"%s",&voltmeasurement);

viClose(session);

viClose(defrm);

一旦您了解了它的用法,便可以得心应手地进行使用。viPrintf 和 viScanf 函数与某些基本的 C 函数非常相似,因此如果您是熟悉 C 语言的程序员,那么最好使用这种方法。

另一个较新的选择是 Agilent VISA COM,适用于支持 COM 的语言。VISA COM 适用于 Visual Basic 和 C# 环境。下面的程序与上面的程序功能相同,但使用 VB 编程。这要比 VISA 更容易阅读。

Set ioMgr = New AgilentRMLib.SRMCls

Set Instrument = New VisaComLib.FormattedIO488

Set Instrument.IO = ioMgr.Open("GPIB0::5")

Instrument.WriteString " VOLT 5,(@1)"

Instrument.WriteString " OUTP ON, (@1)”

Instrument.WriteString "MEAS:VOLT? (@1)”

Result = Instrument.Readstring

Instrument.IO.Close

另一种选择是使用驱动程序。我们的仪器目前提供两种不同类型的驱动程序:VXI 即插即用驱动程序和 IVI COM 驱动程序。VXI 即插即用驱动程序在15年前非常流行,目前已经很少用了,在此不予说明。下面是使用IVI 驱动程序(C# 语言)的程序实例:

driver = new Agilent.AgilentN67xx.Interop.AgilentN67xx();

IAgilentN67xxProtection2 protectionPtr;

IAgilentN67xxMeasurement measurementPtr;

IAgilentN67xxOutput3 outputPtr;

int channel

driver.Initialize(“GPIB0::5”, idquery, reset, initOptions);

outputPtr = driver.Outputs.get_Item(driver.Outputs.get_Name(channel));

protectionPtr = driver.Protections.get_Item(driver.Protections.get_Name(channel));

measurementPtr = driver.Measurements.get_Item(driver.Measurements.get_Name(channel));

outputPtr.VoltageLevel(3.0, 3.0);

outputPtr.Enabled = true;

mVolt = measurementPtr.Measure(AgilentN67xxMeasurementTypeEnum.AgilentN67xxMeasurementVoltage);

driver.Close();

您可以看到,驱动程序比Dirct IO 程序复杂得多。不过仍然有很多理由支持您使用驱动程序。第一个也是最常见的理由是,您的系统本身就是为使用驱动程序设计的。另一个理由是可移植性。有些类型的仪器的 IVI 驱动程序适用于兼容的直流电源。但IVI 驱动程序的缺点是,其功能与 SCPI 几乎都是一一对应的,因此更高级的功能没多少,您无法节省任何编程时间。

我们主要使用以 Visual Basic 编程的 VISA COM,它的编程最简单。当然,关于这个问题仁者见仁,智者见智,如果您能够购买我们的仪器并自己编写控制程序,我们将非常高兴。谢谢!