APP下载

用LabVIEW设计监测电压变化报警程序

2011-03-16郭晓金

电子测试 2011年5期
关键词:历史数据驱动程序椭圆

郭晓金 ,杨 柳

(1 辽宁兴城市92853部队4分队 125106 ;2 福州市91267部队17分队 350015)

0 引言

在测量工作实践中,经常会遇到对某一电压量值的变化是否超过设置值进行监测的情况,若利用计算机控制数字电压表进行一般测量是没有任何问题的,如果要求真实反映并记录报警发生的时刻、电压值和报警次数,并不是一件容易的过程。针对这一实际工作要求,在LabVIEW 8.5开发环境下,设计了实现监测电压变化报警测量程序,计算机通过GPIB接口卡控制Fluke8846A实现电压测量数据采集,并以表格的形式实时显示报警结果,此方法简单实用,提高了人机交互性能,为使用者带来了极大的方便,具有较高的应用、借鉴价值。

1 用户事件结构

在LabVIEW开发环境中,可以通过事件结构来捕获用户的各种操作,例如单击按钮、输入数据、关闭面板等,但是除了用户的各种操作引发事件外,可能还需要通过编程产生事件,例如电压超过上限时,系统自动触发报警事件等。对于简单情况可以通过事件发生技术来实现,但是如果还需要传递事件数据或希望一个循环还能用来响应其他事件时,就需要利用到用户事件(User Event)[3]。

用户事件是LabVIEW事件驱动编程的一部分,因此仍然需要使用到事件结构,不同的是,在使用用户事件前,首先必须通过Create User Event函数创建用户事件,然后通过Register For Events节点注册事件。将注册事件的Refnum与 事件结构的Dynamic Event Terminals(右击事件结构边缘并选择Show Dynamic Event Terminals选项可以显示该端子)连接后,在事件结构的事件编辑对话框中就可以看到该用户事件。事件产生是通过Generate User Event函数产生的。不再需要该事件时可以通过Unregister For Events函数注销该用户事件,最后需要通过Destroy User Event函数销毁用户事件。在函数模板→编程→对话框与用户界面→事件中可以找到相应的事件函数[8]。

2 监测电压变化报警程序设计

图1是 在LabVIEW 8.5开 发 环 境 中, 利 用Fluke8846A 数字电压表LabVIEW驱动程序设计的监测电压变化报警程序的前面板,在图1所示的人机交互界面中从“测量功能”下拉框中选择所需要的测量功能类型(可供选择的测量功能类型有:DC /AC Voltage、2 - Wire Resistance、4 - Wire Resistance、DC /AC Current、Frequency、Period、Diode Checking等)[4-5],测量功能类型确定后,根据提示将信号连接到Fluke8846A的相应端,在“FLUKE8846A测量值”文本框中就能显示测量值。可以根据工作需要调节“报警上限”值,当测量值大于报警上限值时,“发生报警”指示灯亮的同时计算机发出声音报警,这里不仅记录报警数,还对报警发生的时刻和电压值进行记录,此时“报警历史数据”显示报警发生时刻和报警时的电压值。“报警次数”累计显示程序运行时发生报警的次数。当用户在任何时候按“清除报警数据”时,“报警历史数据”和“报警次数”分别被清除数据。图1是监测被测DCV大于8V时发生报警的情况。

图1 监测电压变化报警程序前面板

在图2程序框图中椭圆1实现清除“报警次数”和“报警历史数据”显示的内容。椭圆2、3利用“创建用户事件” 函数创建用户事件,该用户事件携带的数据类型为Double,名称为“电压报警",然后通过“注册事件”函数实现以连接的用户事件数据类型、事件的事件名称,实现注册用户事件,同时可将事件及其相关数据发送至为该事件注册的所有事件结构。

椭圆6通过“取消注册事件”函数, 使用事件注册引用句柄的事件结构不再收到任何动态事件,建议在事件无需处理时取消注册事件,如不取消注册事件,只要VI运行,即使没有事件结构等待处理事件,LabVIEW也将继续生成和排列事件,这不仅消耗内存而且在前面板事件锁定被启用时将导致VI挂起。通过“销毁用户事件”引用句柄,释放用户事件引用,所有注册为该用户事件的事件结构不再收到该事件。椭圆4是利用Fluke8846A数字电压表LabVIEW驱动程序实现的电压测量程序,其中用到“Initialize.vi”初始化、“Configure Measurement.

vi”设置测量功能、“Read(single point).vi”读测量数据、“Close.vi”关闭[1-2]。椭圆7一是利用“<电压报警>:用户事件”中的事件数据节点“电压报警”将电压测量数据,经“数值至小数字符串转换”到“创建数组”;二是利用“获取日期/时间(秒)”和“格式化日期/时间字符串” 到“创建数组”; 三是报警次数经“数值至十进制数字符串转换” 到“创建数组”;从而实现将报警次数、报警发生的时刻和电压值进行记录并添加“报警历史数据”表格中。椭圆8利用寄存功能实现图1“报警历史数据”表格自动移动功能,即随着报警历史数据的不断增加,“报警历史数据”表格垂直滚动自动滑动。椭圆9通过“调用库函数节点”调用winmm.dll中的“sndPlaySoundA”[6]函数实现声音报警。

简而言之,程序的工作过程是,在设置一个报警电压值后,主循环中如果测量的电压值超过上限时将产生一个报警事件,另一个循环获得该事件后将报警数加1,并将有关信息添加到“报警历史数据”中进行显示。

图2 监测电压变化报警程序框图

3 注意事项

由于Fluke8846A 数字电压表LabVIEW驱动程序是利用VISA(Virtual Instrumentation Software Architecture虚拟仪器软件结构)编写的,因此运行时必须在开发环境中安装该软件。对于驱动程序、应用程序开发者而言,VISA库函数是一套可方便调用的函数,其中核心函数可控制各种类型器件,而不用考虑器件的接口类型,VISA也包含部分特定接口函数,这样用户可以用同一套函数为GPIB、RS232、LAN、USB接口仪器仪表、VXI器件等各种类型器件编写软件,熟悉了VISA就可以处理各种情况,用户利用VISA开发的软件具有更好的适应性,且具有以下几个特点:(1)VISA的I/O控制功能适用于各种类型仪器,适于单处理器系统结构,也适于多处理器结构或分布式网络结构;(2)与仪器硬件接口无关的特性,即利用VISA编写的模块驱动程序既可以用于嵌入式计算机VXI系统,也可以用于通过MXI、GPIB-VXI或1394接口控制的系统中,当更换不同厂家符合VPP规范的硬件时,模块驱动程序无须改动。上述程序设计中使用的VISA是 4.2版本,低版本不适应,可到ni.com网站免费下载。

4 结论

从上述程序中可以看出,研究利用了LabVIEW中的用户事件结构,在程序满足设置的条件时才会产生事件,克服了“应用程序”、“本VI”、“窗格”、“分隔栏”和“控件”事件[7-8]不能实现测量和程序处于等待状态时,占用系统资源问题,取得良好的效果。当被控制的仪器发生变化时,只需要根据被控制仪器的GPIB地址,在程序中改变仪器的资源名和相应LabVIEW驱动程序就可以了,其他不需要做任何改动,就可以应用到自己开发的测量系统中,从而可以缩短程序开发时间,达到最佳设计效果。

[1] VISA 4.2 Help,National Instrument Corporation ,2005.

[2] LabVIEW 8.5 Help,National Instrument Corporation ,2006.

[3] 陈锡辉,LabVIEW 8.2 程序设计从入门到精通[M].北京:清华大学出版社,2007:259-273.

[4] Fluke 8846A Digit Multimeter Quick Start Tutorial, 2007.

[5] Fluke 8846A Digit Multimeter Programmer Manual, 2007.

[6] 王磊,精通LabVIEW 8.X[M].北京:电子工业出版社,2008:129-138.

[7] 阮奇桢,我和LabVIEW[M].北京:航空航天大学出版社,2009:96-106.

[8] 邓焱. LabVIEW7.1测试技术与仪器应用[M].北京:机械工业出版社,2004:200-205

猜你喜欢

历史数据驱动程序椭圆
Heisenberg群上由加权次椭圆p-Laplace不等方程导出的Hardy型不等式及应用
基于设备PF性能曲线和设备历史数据实现CBM的一个应用模型探讨
基于故障历史数据和BP神经网络的接地选线方案研究
例谈椭圆的定义及其应用
一道椭圆试题的别样求法
基于Hadoop技术实现银行历史数据线上化研究
用好细节材料 提高课堂实效
椭圆的三类切点弦的包络
驱动程序更新与推荐
驱动程序更新与推荐