LabVIEW在测控系统登录与管理中的应用

2012-12-01 10:08万文略崔冰波
自动化仪表 2012年4期
关键词:数据源控件密码

万文略 崔冰波

(重庆理工大学机械检测技术与装备教育部工程中心,重庆 400054)

0 引言

虚拟仪器 (virtual instruments,VI)是美国National Instruments(NI)公司在其产品LabVIEW中首先提出的概念。随着现代测试技术与仪器的发展,虚拟仪器概念已经发展成为一种创新的仪器设计思想,成为设计复杂测控系统与测试仪器的主要方法和手段。

现代测控系统大多需要对被测目标进行全方位的检测以及多传感器网络协调应用,这就使得产生的数据量急剧增长,采用数据库技术可以准确地反映各类数据间的关系。多数工业测控系统需要设计系统用户的登录与管理模块,它主要用来保障系统的正常运行。设置了软件使用权限以后,能够将非专业人员“拒之门外”,有效防止误操作引起的系统运行障碍,保护工业测试现场的数据安全与可靠性。由于大多数LabVIEW的程序针对的是工业测控领域,其对关于操作对象、配套设施的知识要求都很高,因此,设置对硬件设施参数的保护能保障测试过程的准确性[1]。

本文针对一款工业测控系统,开发了用户登录与管理模块,显著地提高了系统的使用安全性。同时,本文描述的数据库访问方法也可以实现测控系统中其他数据的有效组织与管理,其开发工具为LabVIEW8.2,操作系统使用 Windows XP。

1 LabVIEW与数据库

1.1 LabVIEW的数据库访问

LabVIEW中常用的数据库访问方式有以下五种[2-4]。

①使用LabVIEW的ActiveX功能,调用Microsoft ADO控件,利用SQL语言实现数据库访问。该方法需要用户对Microsoft ADO控件和SQL语言有较深的理解,编程复杂。

②使用NI公司的附加工具包LabVIEW SQL Toolkit进行数据库的访问。该工具包集成了一系列的高级功能模块,这些模块封装了大多数的数据库操作和一些高级的数据库访问功能,其优点是易于理解、操作简单,用户不需要学习SQL语法,但这种工具包价格昂贵,系统成本高,大多数用户无法承受。

③通过第三方开发的免费LabVIEW数据库访问工具包LabSQL来实现对数据库的访问。LabSQL利用Microsoft ADO和SQL语言来完成数据库的访问,将复杂的底层ADO和SQL操作封装成一系列的LabSQL VIs。该方法编程简单、快捷,无需对数据库底层作深入了解,支持Windows平台下的任何基于开放式数据库连接(open database connectivity,ODBC)的数据库。

④ 通过调用动态链接库(dynamic link library,DLL)实现数据库访问,先利用其他语言如Visual C++编写DLL,再利用LabVIEW的调用库函数节点(calling function node,CLFN)调用此DLL访问数据库。该方法需要从底层进行复杂的编程才能实现,对于非专业编程人员来讲是不现实的。

⑤利用中间文件存取数据,先将数据存入文件之中,待测量结束后再用专门的工具将数据导入到数据库中。该方法需要磁盘文件作为中介且不具有实时性,使用不方便。

前三种方法是工程应用过程中经常使用的,本文设计的数据库访问过程是采用免费、跨平台的LabVIEW数据库访问工具包LabSQL实现的。

1.2 数据源的注册

注册数据源的方式有手动创建和动态创建两种。手动创建的步骤为:在开始→控制面板→性能和维护→管理工具→数据源(ODBC)下的数据源管理器中选择添加数据源,选择数据源的驱动程序,然后绑定数据库,给数据源命名。这样就在主机上完成了数据源的注册,本设计数据源仅包括系统的用户登录数据,所以该方法简单易行。有些情况下系统使用的数据源可能是多选或不确定的,这种情况下手动创建数据源就无法满足系统的要求,区别于采用修改注册表的方式动态创建数据源[3]。本设计首先获取VI应用程序文件所在的绝对路径,从得到的路径字符串中获得当前目录;然后在当前目录中创建名称为“数据库文件”的文件夹,用以存放数据库文件;最后使用连接字符串控件实现数据库连接字符串的创建。数据源动态注册实现代码如图1所示。

图1 数据源的动态注册实现代码Fig.1 Implementation for dynamic registration of data source

2 系统设计与实现

2.1 系统主界面设计

软件人机界面是评价软件的重要指标,良好的人机界面可显著减少误操作,方便用户使用。构建界面友好的人机界面,主要包括协调的色调搭配、鲜明的控件排版以及软件功能主次的突出显示等。LabVIEW可以快速地开发出良好的人机交互界面,这得益于其高效的G语言编程方式和灵活的控件属性设置[5]。本文设计的系统包括登录系统、密码修改、用户管理等模块。当系统开始运行时,界面上只存在登录系统和退出系统事件,初始时通过设置控件的“可见”属性,使密码修改、用户管理和进入系统模块为隐藏状态。当用户输入的用户名和密码通过登录系统查询到相应的信息后,就更新用户的界面状态。登录系统后,主界面显示用户登录系统的历史信息和当前用户的权限,以便于用户的使用管理。

2.2 系统详细设计

2.2.1 系统初始化

系统的初始化主要完成两个任务:隐藏相关的控件,清空输入和显示字符串控件;鼠标指向用户名输入栏。

2.2.2 用户信息验证

用户信息的验证主要由两部分组成,首先是数据库信息的读取,本系统设计的数据库只包含用户登录信息表。记录集的遍历查询实现代码如图2所示。程序首先使用数据源动态注册SubVI,生成数据库连接字符串,然后执行SQL查询语句,导出数据库数据并显示到名称为ReadData的表格控件中,其中NI为数据库文件名称,数据库用户名为admin,密码为123。

图2 数据表信息的遍历查询实现代码Fig.2 Implementation for traversal inquiry of data sheet information

另外一部分是用户信息的验证,用户信息验证部分主要实现用户登录权限的查询。以用户名和用户密码为参数查询记录集的匹配数据,如包含此用户且密码正确,则进入到权限分级模块。该部分的实现代码如图3所示,其中外层的条件语句实现程序运行的总体使能。

程序首先从读取的数据库信息中获得列索引的一维数组(该数组存储的是用户名信息),再调用搜索一维数组函数,对搜索结果进行判断后,进入密码的匹配以及用户登录信息的分割输出显示。

图3 登录信息的验证实现代码Fig.3 Implementation for verification of the login information

当用户信息验证完成后,对系统用户的权限进行判断,使系统功能分级显示给不同权限的用户。其实现方法是在得到当前用户的登录信息且密码正确后,判断该用户的权限:如果是管理员,就隐藏登录系统,显示进入系统、用户管理模块和密码修改模块;如果是普通用户,就隐藏系统用户的管理模块,其余功能与管理员相同。当用户密码输入错误且继续出错超过3次时,就弹出提示框,并将此次登录活动记录到日志文件中。

2.2.3 用户信息修改

用户在完成信息验证后,就获得了修改自己密码信息的权限。该过程主要包括编辑新的密码和更新数据库中的对应信息。其实现代码如图4所示。

图4 数据表信息更新实现代码Fig.4 Implementation for the data sheet information update

编辑用户的新密码主要采用确认密码的形式,防止用户遗忘和误输入,并基于输入框的事件元素V键,设置键盘按键的连续操作。更新数据库中的信息是修改用户信息的最终目的,以确保用户下一次登录时信息有效。

2.2.4 登录信息的更新

用户登录系统后,系统的相应功能也就分级完成,这样用户点击“进入系统”就完成了整个用户登录与管理系统的使用。由于本系统只设计了登录与用户管理模块,所以进入系统事件发生后就停止了VI主界面的运行,但用户的登录信息,包括登录的时间、登录的次数都会在下一次的登录系统后显示出来,这在工程实践中是十分有用的。这些参数的更新是在“进入系统”事件中完成的,其实现过程与用户信息修改类似。

2.2.5 管理模块的设计

为有效管理软件操作人员的数量和权限,需要修改用户表中的数据项。修改可通过两种方式实现:一种是直接修改数据库,但是在没有安装Access的工控机上难以实现且操作不灵活;另一种方法是为系统增加用户管理模块,方便系统用户的增删查改。本文采用后者完成对系统用户的管理。在管理过程中,设置了管理员和普通用户身份,其中,管理员能够进行系统用户的管理,包括添加系统用户、删除系统用户和修改系统用户权限与密码。

由于增加用户与修改用户只在用户名的处理上有区别,所以增加和修改用户信息共用了编辑信息SubVI前面板。当增加用户事件发生时,用户名编辑框为输入;当修改用户事件发生时(列表框的双击事件),用户名设置为输出。通过设置编辑框属性即可完成修改和添加界面的复用,用户编辑完成后即可更新数据库中的数据,其实现代码如图5所示,其中UserEdit和 UserAdd 为 SubVI。

图5 系统新用户添加实现代码Fig.5 Implementation for adding new user into the system

单击列表框,选中一行后,触发列表框单击事件;获取该行的用户信息后,就可将它作为参数,删除用户在数据库中的记录。列表框双击事件处理实现代码如图6所示,在事件处理框图中完成弹出用户编辑对话框,此时用户名作为用户表的主键是不能修改的。完成用户信息的编辑后,就可以将编辑后的信息更新到数据库中,更新数据库的子程序UpdateData与登录参数的更新过程类似。

图6 列表框双击事件处理实现代码Fig.6 Implementation for double-click event processing of list box

2.3 SubVI与事件结构

本系统的设计过程中多次用到SubVI的调用和事件结构的编写,作者在编写程序时也总结了一些关于两者的用法与注意事项,主要包括以下3点。

①在设置SubVI界面运行不弹出时,SubVI中最好不要使用循环,如果界面弹出,则需考虑循环结束条件,如本设计中的用户验证信息程序、用户登录历史信息更新等程序;

②事件结构用在主控面板上容易实现程序与面板操作的直接交互,但是事件处理过程不适合运行复杂的程序,如包含的SubVI中如果含有没有处理好的循环,那么事件结构中的处理程序无法返回到主面板中,这样主面板上触发的其他事件就无法工作;

③ 事件结构中超时事件的使用[6],事件结构左上角的漏斗指明该事件处理程序在无其他事件的情况下,延时多长时间进入“超时”事件处理分支。编程实践中配合while循环中的移位寄存器使用,可以显著地扩展程序功能。

3 LabVIEW调试技术

类似文本语言开发环境,LabVIEW环境集成了丰富的调试策略[7]。下面结合本次设计过程,简单地阐述labVIEW调试技术的使用方法。

LabVIEW提供断裂的箭头,以指示当前程序含有语法错误,连线过程中实时提示错误类型。同时LabVIEW设有高亮运行模式,用户在单步运行程序的过程中,可以通过此种方式观察程序运行的实时数据。右击数据线选择Probe命令,数据通过该线段时,探针可显示数据的值。此外,可设置程序运行断点,单步运行程序,遇到SubVI,可以配合“跟入”、“跳出”命令出入SubVI,观察参数传递过程中的数据流,以完成进一步的调试。

4 结束语

本文设计了测控系统用户登录和管理模块的方案,主要涉及界面事件处理和使用 LabSQL操作MSAcess。测试结果表明,本设计包含的用户管理模块可方便地在工控机上添加或者修改系统用户,同时,由于系统具有高内聚和松散耦合的特点,可以作为大型应用程序的组件。文章中介绍的LabVIEW访问数据库的方法可用来组织和管理工业测控系统中的其他数据。

[1]王鲁涛,罗马吉.基于LabVIEW用户登录系统设计[J].软件导刊,2009,8(6):86 -87.

[2]吉顺祥,刘旺锁,宋晓婷.基于LabVIEW的数据库访问技术[J].船海工程,2007,36(3):125 -128.

[3]罗文辉.LabVIEW中的数据库访问[J].武汉理工大学学报:信息与管理工程版,2006,28(3):13 -16.

[4]毕虎,律方成,李燕青,等.LabVIEW中访问数据库的几种不同方法[J].微计算机信息,2006,22(1):131 -134.

[5]陈锡辉.LabVIEW8.20程序设计从入门到精通[M].北京:清华大学出版社,2007.

[6]Conwy J,Watts S.软件工程方法在 LabVIEW 中的应用[M].罗霄,周毅,译.北京:清华大学出版社,2006.

[7]Travis J.LabVIEW 大学实用教程[M].乔瑞萍,译.北京:电子工业出版社,2008.

猜你喜欢
数据源控件密码
密码里的爱
基于.net的用户定义验证控件的应用分析
利用属性集相关性与源误差的多真值发现方法研究
密码抗倭立奇功
关于.net控件数组的探讨
Web 大数据系统数据源选择*
密码藏在何处
夺命密码
基于真值发现的冲突数据源质量评价算法
装备保障数据集成平台