tag 标签: 控制电源的程序

相关博文
  • 热度 18
    2014-3-22 21:51
    944 次阅读|
    1 个评论
    在自动测试系统中,一台更为快速的电源,可以使系统的吞吐率提升10-20%,从而节省大把银子的测试成本。之前有好几篇文章谈到了具备快速编程的电源对测试速度的影响,例如《 新电源挑战测试速度极限 - 程控电源技术和应用( 34 )》 等。 这篇文章中,我们将 继续 讨论 关于吞吐率的问题, 我们会关注在充分发挥电源状态子系统的作用。 有些电源操作时间明显大于其它产品。下面是两个典型的实例: 1.    触发测量初始化 2.    触发输出瞬态或输出列表事件的初始化 在开发程序时 , 您可能会使用较长固定等待时间的程序 , 以确保在下一个操作开始之前前面的操作已经完成。但是,这可能是 不必要的等待时间, 会增添几十毫秒的测试时间,从而增加整体测试时间。 更好的办法是利用直流电源的状态子系统特性,消除不必要的等待时间。 将测量和电源输出生成事件触发,用于紧密同步其它测试活动 , 能够显著提高测试速度,但它们在进行初始化时需要预先进行设置,这需要一定的时间。相比与初始化后采用固定程序控制时延, 更好的办法是使用电源状态子系统中的操作状态组(Operation Status Group)寄存器,如图 1 所示。   图 1 : Agilent N6700 系列直流电源系统操作状态组   在测试程序内使用循环语句可以监测条件寄存器中的 “ WTG 测量 ” 位 ( #3 ) 或 “ WTG 传输位 ”( #4 ), 查看这些位何时变成有效。当测量或输出电源事件经过初始化、并在触发准备做好,测试程序将开始执行操作。这样不会进行任何多余的等待。如图 2 所示,这可以节省大量的时间。     图 2:操作完成等待时间分布   现在 , 测量程序不必每次都等待最坏情况下的时间 ,而是 只需等待实际的时间。统计所有被测件在测试时的等待时间,得到的最终结果就是实际等待时间的平均值,它在大多数情况下只相当于最坏情况等待时间的小部分。最终,每个参数的测试时间可能会节省几十毫秒,带动测试吞吐率的进一步提高。  
  • 热度 20
    2014-3-16 09:47
    1995 次阅读|
    6 个评论
    上一篇文章中,我介绍了利用安捷伦的 IO 库,向电源发送指令。今天我想讨论一下大家使用的编程语言。我不会特别推荐哪种语言,而是要通过对比图形环境和文本两种编程方式,详细剖析它们各自的优缺点。首先要声明 , 这个问题实际上是没有最终的正确答案 ,它 完全取决于个人偏好,还有就是测试环境的要求。 测试测量中的标准语言是 SCPI 指令。 这是在上世纪 70 年代就非常成熟的对仪器的控制指令,是与当时的仪器标准接口,即 HPIB 接口一同诞生的。在 70 年的中期,随着 HPIB 接口标准被 IEEE 组织接纳,形成了我们熟知的 IEEE-488 标准,也就是我们熟悉的 GPIB 接口。同时,针对这种接口的编程语言 SCPI 指令,也被标准化,一直流传至今。有些测试测量系统开发高手仍然在使用这种编程语言。这种语言的最大优势就是极高的执行效率。特别在生产线上,这点变得尤其重要。它无需调用任何驱动程序( Instrument Driver ),直接通过 IO 库即可编程( DirectIO ); 而且 SCPI 可以访问仪器所有的功能。通常情况下,仪器的对这种语言的执行速度要高出 20-50% ! 但这种语言毕竟发展得非常早,基本上属于汇编语言,比较难懂,而且缺乏调试工具,在程序开发的时候费时费力。 有些工程师有计算机工程或软件工程的教育背景或工作背景,他们很多是编程高手,他们可能会更喜欢使用 C , C++ 等文本格式的编程语言。于是,使用文本编程语言进行编程对他们来说则是轻车熟路。 图形编程语言是一种非常流行的选择,诸如过去曾经比较流行的 Agilent VEE 。这种语言 最适用于编写短程序。尤其是在电脑屏幕上不会占满一页时,运行起来非常流畅。这些语言还可以非常轻松地构建用户界面,因为它们可以提供许多易于访问的函数,用来控制和显示仪器数据。不过,如果想要通过仪器发送和读取大量数据,这些语言就会显得非常笨拙;另外循环结构也变得非常奇怪。有时图形语言看上去更像是电路图,因此也就不难理解为什么有人更喜欢用纯文本编程了。 现在 , 越来越多的工程师更喜欢使用 Visual Basic 语言。在使用 VB 时,可通过 VISA-COM IO 对仪器发送指令,或者调用 IVI-COM 驱动,直接在 VB 的编程环境中进行开发。 如果您查看我们的电源程序实例 , 就会发现有许多程序是用 VB 编写的。文本程序编写的代码更为简洁,它占用的屏幕空间远远小于等效的图形语言; 而 Visual Basic 等语言则更为通用,因为它不仅适用于测试与测量,还适用于其他通用应用,此时循环结构可以非常顺畅地运行。有些工程师可能会觉得这一流程更有意义,而且开发速度也会更快一些。不过文本编程并非完美无缺。例如,图形语言是全新编写的,用于进行仪器控制。它们拥有内置的函数和数据处理能力,可以简化编程。图形语言还配有许多真正出色的程序库,可用于构建用户界面。   总之, 用起来 最得心应手的编程语言就是最适用的语言。
  • 热度 19
    2014-3-14 08:59
    2662 次阅读|
    0 个评论
    我将用几篇文章的篇幅,介绍如何向可编程电源发送控制指令,已经利用何种语言对程控电源进行编程。今天我将重点讨论利用哪类 IO 程序库来发送指令 我的建议是以 Agilent IO 程序库为基础,因为它支持安捷伦所以的可编程仪器,也同时支持符合相关标准规范的各种接口,例如RS232, USB, GPIB, LXL等等。您主要有两个选择:使用仪器提供的 SCPI (标准仪器控制指令)通过 IO 直接进行控制(Direct IO);或使用驱动程序(Instrument Driver)来调用各种功能。这套IO库是免费的,无论您在使用安捷伦的仪器,或者其它厂家的仪器,都可以使用这套IO库。您可以点击进入 www.agilent.com.cn/find/io lib   直接免费下载和安装最新版本的 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 , 它的编程最简单。当然,关于这个问题仁者见仁,智者见智,如果您能够购买我们的仪器并自己编写控制程序,我们将非常高兴。谢谢 !