,李红梁21华东交通大学电气与电子工程学院,江西南昌(330013)2南车时代电子技术有限公司,湖南株洲(412007)E-mail:y06yndeng@4y.com.cn摘要:LabVIEW软件是当前开发虚拟仪器的主要工具之一。根据LabVIEW测试系统数据处理方面的实际需要,提出了一种应用免费工具包LabSQL实现LabVIEW与专业数据库SQLserver互访的方法,详细介绍了LabSQL工具包的安装以及与access数据库的连接,并通过实例实现了LabSQL对SQLserver的访问。实验表明此方法简单易用,能有效地解决LabVIEW与外部数据库的连接以及数据操作,扩大LabVIEW测试系统的应用范围。关键词:LabVIEW;数据库;SQLServer;LabSQL中图分类号:TP311文献标识码:B1.引言LabVIEW(LaboratoryVirtualInstrumentEngineeringWorkbench)是由美国NI公司推出的面向仪器与测控工程的图形化编程语言,主要用于数据采集分析、仪器和控制、测试测量及过程监控等领域,是专门的虚拟仪器开发软件,也是目前应用范围最广、功能最为强大的虚拟仪器开发平台。在工业自动化和测试测量系统中,LabVIEW利用各种设备进行数据采集,包括:串口设备、PLC、GPIB、VXI以及插入式数据采集卡等,同时也可以通过网络、交互应用通讯和结构化查询语言(SQL)等方式与其他数据源相连,完成数据存储、查询、调用等功能。而要想对数据存储和查询等能力有较高的要求,就必须采用数据库技术,因此在LabVIEW开发中必须解决专业软件与数据库之间的互访问题。2.LabVIEW中数据库的访问方式在利用LabVIEW开发应用软件时,某些应用场合不可避免地要进行数据库的访问,而LabVIEW本身并不具备数据库访问功能,在LabVIEW编程环境下通常有以下几种途径访问数据库[1]:(1)利用NI公司的附加工具包LabVIEWSQLToolkit进行数据库访问。该工具包集成了一系列的高级功能模块,这些模块封装了大多数的数据库操作和一些高级的数据库访问功能。但是这种工具包比较昂贵,无疑会提高开发成本,对于许多的LabVIEW用户来说是不太现实的。(2)利用其他语言,如VisualC++编写DLL程序访问数据库,通过调用LabVIEW中动态链接库DLL(DynamicLinkLibrary)访问该程序,这样可以实现间接访问数据库。但这种方法需要从底层进行复杂的编程才能完成,工作量太大,对于非专业的编程人员来说也是不可取的。(3)利用LabVIEW的ActiveX功能,调用MicrosoftADO控件,利用SQL语言来实现数据库访问。利用这种方式进行数据库访问需要用户对MicrosoftADO以及SQL语言有教深的了解。(4)利用第三方开发的免费LabSQL工具包访问数据库。LabSQL利用MicrosoftADO及SQL语言来完成数据库访问,将复杂的底层ADO及SQL操作封装成一系列的子VI,简单易用,适合大多数用户使用。为基础,通过LabSQL工具包实现对SQLServer数据库的访问。3.ADO技术简介ADO(ActiveDataObject)是Microsoft公司专门为适应网络数据库开发和瘦客户端需求而推出的一种跨平台远程数据库访问技术。它对OLEDB进行了封装,建立在OLEDB底层技术之上,包括了OLEDB的许多功能函数,通过OLEDB提供的COM接口访问数据库,并可以处理各种OLEDB支持的数据源,包括Access、Oracle、SQLServer等数据库,大大简化了程序编制,增加了程序的可移植性,同时还具有易于使用、功能强、速度快和内存占用率低等优点[2]。ADO的对象模型包括3个主要对象:Connection对象、Command对象和Recordset对象。还有4个对象作为主要对象的补充:Error对象、Parameter对象、Field对象和Property对象。(1)Connection对象:用于建立连接,每个Connection对象控制一个连接。可以在使用Connection对象前设置目的数据库名称。用Connection对象还可以完成对数据库的事务管理。(2)Command对象:主要用于访问数据库中的存储对象,通常用于执行数据库中带返回值的存储过程。(3)Recordset对象:为执行查询后从数据库返回值的一组数据集合,用于实现数据导航、插入、删除和编辑数据等功能。(4)Error对象:用于获得连接对象所发生的错误信息。(5)Parameter对象:用于对传递给数据源的命令赋值参数。(6)Field对象:用于表示记录集中的列信息,包括列值以及其他信息。(7)Property对象:用于操作在ADO中使用的其他对象的详细属性。其中主要对象能够独立创建访问数据源的连线,辅助对象主要实现其他补充功能。4.LabSQL软件包简介及安装配置4.1LabSQL简介LabSQL是一个免费的、多数据库、跨平台的LabVIEW数据库访问工具包,其支持Windows操作系统中任何基于OBDC的数据库,包括Access、Oracle、SQLServer等。LabSQL是利用MicrosoftADO以及SQL语言来完成数据库访问,将复杂的底层ADO及SQL操作封装成一系列的功能函数。利用LabSQL几乎可以访问任何类型地数据库,执行各种查询,对记录进行各种操作。它的优点是易于理解、操作简单,用户只需进行简单的编程,就可在LabVIEW中实现数据库访问。它还有一个最大的优点是源代码开放,并且是全免费的。4.2LabSQL的安装首先从相关网站上下载LabSQL工具包,得到的是一个名为LabSQL-1.1a.zip的压缩文件,解压后是一个LabSQL文件夹,里面包含两个文件夹:Examples文件夹和LabSQLADOfunctions文件夹,以及两个说明文件:ADO210.CHM和README_FIRST.tet。Examples文件夹中是LabSQL的应用实例,LabSQLADOfunctions文件夹中是LabSQL工具包,ADO210.CHM和README_FIRST.tet是对LabSQL的版本信息、系统需求、安装步骤、使用方法等的说明。的安装目录,找到子目录user.lib,将下载并解压后得到的LabSQL文件夹复制到该目录下,运行LabVIEW8.2,在编程环境下就会看到LabSQL的功能模块,如图1所示:图1LabSQL功能模块4.3LabSQL的配置在使用LabSQL之前,首先需要在Windows操作系统中的ODBC数据源中创建一个数据源名,英文缩写为DSN,LabSQL与数据库之间的连接就是建立在这个DSN基础之上。DSN的创建步骤如下:(1)打开控制面板中的管理工具,点击数据源(ODBC),弹出ODBC数据源管理器,选择“系统DSN”,单击“添加”按钮,在弹出的“创建新数据源”窗口中选择MicrosoftAccessDriver(*.mdb),单击“完成”。(2)在弹出的“ODBCMicrosoftAccess安装”对话框中的“数据源”一栏中创建DSN名称,如“test”,然后单击“选择”按钮,选择将要被访问的数据库,按“确定”。如图2所示:(3)图2ODBCMicrosoftAccess安装对话框安装完成后,可以看到在“ODBC数据源管理器”中的“系统DSN”里看到刚才创建的名为“test”的DSN,如图3所示。LabSQL就可以利用这个DSN访问与之相关联的数据库。图3ODBC数据源管理器4.4LabSQL子VI的完善LabSQlVIs按照功能主要分为3类:CommandVIs、ConnectionVIs和RecordsetVIs。CommandVIs主要用于完成一系列的基本ADO操作;ConnectionVIs用于管理LabVIEW与数据库之间的连接;RecordsetVIs用于对数据库中的记录进行添加、修改、删除等各种操作。除了这三大类VI外,还包括三个TopLevelVIs,分别是SQLExecute.vi、SQLFetchData(GetString)vi、SQLFetchData.vi,主要用于对前面3类LabSQLVIs某些功能的封装。目前从网上下载的免费LabSQL-1.1a.zip压缩文件中LabSQL工具包一般不完整,其RecordsetVIs中只有17个子VI,与完整的LabSQL工具包相比缺少5个子VI,分别是:ADORecordsetAddnew.vi添加一条新记录;ADORecordsetDeleteRecord.vi删除一条记录;ADORecordsetFind.vi查找记录;ADORecordsetMovePrev.vi把Recordset对象中当前记录的位置移动到前一条记录上;ADOSetFieldValue.vi修改记录中某个字段的值。以上5个子VI可实现LabSQL对数据库中的记录进行添加、修改、删除、查找等操作,有必要对这些功能模块进行有效补充,方法是:以其他的RecordsetVIs为参考对象,通过对“调用节点”属性的设置编写并封装。步骤如下(以ADORecordsetAddnew.vi为例):(1)打开LabVIEW8.2,在程序框图编程环境下按鼠标右键,找到“应用程序控制”中的“调用节点”模块,置于程序框图中。(2)选择“连线”工具,对“调用节点”两端的“引用”接线端口分别引用ADODB_Recordset.In和ADODB_Recordset.Out,此时调用节点模块自动变成对“_Recordset”类的调用形式,如图四所示。(3)将鼠标置于模块上,按右键,找到“方法”中的“Addnew”单击,并对模块中的输入输出接线端有效连接,如图五所示。(4)将程序封装成名为ADORecordsetAddnew.vi的子Vi。(5)重复上述步骤,完成其余子Vi。其中ADOSetFieldValue.vi稍有不同,增加了一个循环和移位寄存器,如图六所示。图4调用节点前后对比图5ADORecordsetAddnew.vi程序框图图6ADOSetFieldValue.vi程序框图将以上5个子Vi复制到下载的LabSQL工具包LabSQL\LabSQLADOfunctions\Recordset文件夹中,与之一起加载,从LabVIEW编程环境下就可以发现完整的LabSQL功能模块。5.LabSQL访问数据库实例以DC600V客车电源综合测试台为例,如图7是对充电机的输出特性测试界面。将不同负载下的输出特性参数结果存入Access表格,存入名为”test”的.mdb数据文件中(与3.3中数据源的DSN名一致),数据表如表1所示。中的“企业管理器”,单击“SQLServer组”,在其子目录下的项目窗口中找到“数据库”文件包,单击右键,新建名为“test”的数据库,这样就实现了数据库与SQL之间的配置连接,接下来就是在LabVIEW编程环境中编写LabSQL程序,完成对数据库的访问。5.1实现查询功能利用SQL命令查询在不同负载投切时的记录,步骤如下:第一步:利用ADOConnectionCreate.vi创建一个Connection对象,并利用ADOConnectionOpen.vi建立与数据库的连接,并在ConnectionString中输入“DSN=