毕家鑫,钟绍华,杨胜兵,吉孔武
(1.武汉理工大学 汽车工程学院,湖北 武汉430070;2.现代汽车零部件技术湖北省重点实验室,湖北 武汉430070)
在开发测控系统的过程中,往往要用到数据库设计技术,如将测试样品的各种参数、测试结果入库以便测试后检索。数据库的设计给数据的管理带来了极大的便利,同时也解决了大量数据的存储占用存储空间的问题。根据笔者有关项目开发的经验,用Excel 文件的形式保存3 个月的测试数据需要接近1 GB 的存储空间,而利用数据库单独存储只需要不到20 MB 的存储空间。充分说明测量和监测领域离不开对测量数据的管理与维护,这就需要创建一个数据库来管理存储的测试数据,并且能够总结测试结果及生成报表。
LabVIEW 本身不具备访问数据库的功能,主要通过以下几种方式访问数据库[1-2]:①调用动态链接库DLL,该方法需要从底层经过复杂的编程才能实现,开发难度大。②LabVIEW SQL Toolkit 工具包[3-4],该工具包价格昂贵,开发成本高。③基于LabVIEW 的ActiveX 功能[5-7],该方法需用户对Microsoft ADO 及SQL 语言有较深的了解。④LabSQL 工具包,基于第三方软件LabSQL编程来实现通过LabVIEW 对数据库的访问[8]。
LabSQL 是由Premkc Development 公司开发的一个免费、开源、多数据库和跨平台的Lab-VIEW 数据库访问工具包,该工具包支持Windows操作平台中任何支持ODBC 的数据库,如Access2000、Oracle 及SQL Server 等。LabSQL 基于ADO(ActiveX Data Object)和SQL 语言技术,将底层API 函数高度封装为VI 子函数,用户可以通过调用子Vl 的方式轻松实现对数据库的访问,简单易用。笔者选择LabVIEW 数据库访问工具包LabSQL 来开发数据库。
常用的3 种数据库为Access、SQL Server 和Oracle。其中SQL Server 是基于服务器端的中型数据库,适合大容量数据的应用,主要用于企业级高性能数据库;而Oracle 是服务器端的大型数据库且能在所有主流平台上运行(包括Windows),完全支持所有的工业标准,采用完全开放策略,主要用于大型企业数据库。两者价格都非常昂贵,属于高安全级别的网络型数据库。
Access 数据库是由微软发布的关系数据库管理系统,融合了Microsoft Jet Database Engine 和图形用户界面两项特点,是Microsoft Office 的系统程式之一。Access 数据库是运行环境简单的小型关系型数据库,在处理少量数据和单机访问的数据库时操作效率很高。但Access 数据库有一定的极限,如果数据量过大,很容易造成服务器假死,或者消耗掉服务器的内存导致服务器崩溃。不过其数据存储量完全满足了测控系统的需求,笔者选用Access 作为测控系统的数据库。
在LabVIEW 环境下主要有5 种生成报表的方法[9-10]:①通过File IO 类函数生成报表且生成的报表是ASCII 格式文本。生成文本的格式单一,只能用在对报表要求不高的场合。②通过Report Generation 类函数生成报表,可以生成Lab-VIEW 的标准报表或HTML 网页格式的报表,但其调试比较麻烦,不适合做样式复杂、格式不规则的报表。③通过DDE 即动态数据交换生成报表是Windows 的主要特征之一。该方法虽然功能强大,但程序流程不够直观,且需要开发者对VBA有一定的了解。④通过ActiveX 生成报表。通过ActiveX Automation 访问某Windows 应用程序中的对象所集成的属性和方法。该方法编程难度大。⑤通过Report Generation Toolkit 工具包生成报表。该套件是LabVIEW 中一个专用的功能模板,可以方便地生成Microsoft Office 支持的报表,是最方便的报表生成方法。综上所述,结合合作企业的Excel 报表模板,在开发时间有限且对报表生成功能要求严格的情况下,利用Report Generation Toolkit 工具包开发报表最为快捷有效。
基于LabVIEW 的后视镜曲率半径测控系统由硬件和软件两部分组成。硬件部分主要是采集位移传感器的信号,将信号通过串口通信传输至计算机;软件部分完成位移传感器信号数据的转换,通过运动板卡控制位移传感器运动收集传感器在后视镜不同位置的位移数据,通过曲率半径算法得到国标规定的9 个点的曲率半径,并将测试数据导入数据库,最后进行数据检索并生成Excel 报表。后视镜曲率半径测控系统的总体设计框图如图1 所示。
数据库存储的不是硬件采集的数据,而是通过算法得到的曲率半径数据。按国家标准规定,测试规定的9 个位置的曲率半径,每个位置包括x轴方向和y轴方向的数据。测控系统按照如图2 所示后视镜测试点位置示意图中P1 到P9 的顺序测试,并将每个点两个方向的测试结果依次显示在前面板,整个测试过程结束后,由工作人员在系统控制界面手动输入该样件的型号、规格和制造商等参数,以及有关试验目的、方法等要求后,将检索需要的参数(如样件型号、规格和制造商等)及测试结果一起导入数据库。需将测试结果生成报表时,在数据检索界面按照输入的检索参数任意选择一个或者多个检索数据并显示在界面上,确定无误后即可生成Excel 报表。
图1 后视镜曲率半径测控系统的总体设计框图
图2 后视镜测试位置示意图
首先将LabSQL 文件夹复制到LabVIEW 安装目录的user.lib 文件夹下,然后在Microsoft Office 里建立所需要的Access 数据库文件,将其命名为“data. mdb”。安装LabSQL 后,可按照下列步骤实现LabVIEW 对Access 数据库的操作。
(1)利用ADO Connection Create.vi 创建一个ADO 连接对象。
(2)利用ADO Connection Open. vi 建立与数据库的连接,要连接的数据库文件由该VI 的Connection String 输入端的字符串指定。由于LabSQL 与数据库是通过ODBC 标准连接的,用户需在ODBC 中指定数据源名称和驱动程序。
在建立与数据库连接的过程中,常会出现两个问题:一是当数据库文件被移动或程序被打包成可执行文件时,会因文件路径的改变而导致访问出错;二是程序打包成EXE 文件后,可能产生一个不合法的路径,会导致打包后的程序无法调用数据库文件。为解决上述问题,首先利用Lab-VIEW 提供的当前VI 路径功能、拆分路径功能和创建路径功能获取数据库文件路径,开发程序如图3 所示,当程序在改变文件路径时,可以自动得到当前的正确路径。
在Windows 管理工具中对数据源驱动进行设置,操作不够灵活,因此使用SQL 语句“Driver ={Microsoft Access Driver (* .mdb)};”指定数据源的驱动,并将该语句连同文件路径一起转换为字符串,转换后的完整字符串为:“Driver = {Microsoft Access Driver (* .mdb)};Dbq =data;”,将其连接到ADO Connection Open.vi 的Connection String输入端。开发程序如图4 所示。
图3 获取文件路径
图4 指定数据源和驱动程序的开发程序
为解决上述问题二,在程序运行时应判断运行的是源程序还是打包后可执行的EXE 程序,可以使用LabVIEW 提供的属性节点获得应用程序的类别,再根据类别给出相应的路径。若为EXE程序,则如图5 所示,需再次利用属性节点获得EXE 程序的路径;若为源程序,则按照图6 所示,获得当前路径后实现与数据库的连接。
图5 应用程序中指定数据源和驱动程序
图6 源程序中指定数据源和驱动程序
(3)利用ADO SQL Execute.vi 完成相应的数据库查询、添加、删除和修改等操作。SQL 语句由字符串Command Text 指定。
(4)利用ADO Connection Close. vi 关闭与数据库之间的连接。
在向数据库中存储数据之前,必须首先定义数据结构。测控系统应包括以下几个部分:①样件属性,包括制造商、样件型号和样件规格等参数,设计上限为100 个字符。②测试位置,测试样件曲率半径的位置,按国家标准总共9 个,2 个字符。③x轴方向,x轴方向的曲率半径,浮点数。④y轴方向,y轴方向的曲率半径,浮点数。
测试数据常常需要显示在前面板,让工作人员了解测试状态;更重要的是测试数据需要写入数据库。为此需要将测试数据暂时保存,以供不同程序获取测试数据。图7 所示为曲率半径数据存储初始化过程。先定义存储路径,在开发根目录创建名为“test_result”的文件夹,将配置文件“curve_res. ini”存放在该文件夹中;利用Open Config Data. vi 和Write Key. vi 可以将“键”、“段”、“值”分别存储。其中“键”指当前状态位移传感器的测试位置,即P1 到P9 中一点;“段”指测试点的测试方向,即x轴方向或y轴方向。
图7 曲率半径数据存储初始化过程
根据开发程序可以将数据暂时保存,现需要将保存的数据提取出来显示在前面板。首先设置读取路径,即之前保存的路径,然后利用Get Section Names.vi 、Get Key Names.vi 和Read Key.vi分别读取“键”和“段”,根据两者可以确定该位置曲率半径的测试值。
利用SQL 语言向数据库里添加数据,如语句“INSERT INTO 测试结果(样件属性,测试位置,x轴方向,y轴方向)VALUES('武汉理工大学,P1,1 302.12,1 278.61);”利用了SQL 中的INSERT INTO 语句,向测试结果数据表中写入:“样件属性=武汉理工大学”、“测试位置=P1”、“x轴方向=1 302.12”和“y轴方向=1 278.61”。
将前面板输入控件“制造单位”、“样件型号”和“样件规格”3 个全局变量的输入字符及测试时间日期连接成一串字符写入数据表中的“样件属性”,整合成一个变量的优点是便于管理和方便检索数据。
将保存的数据提取出来显示在数据表格中,表现形式如图8 所示。当P1 到P9 的9 个测试点测试完成后,需要添加事件结构“写入数据库”,将表格中的测试数据写入数据库。根据3 个全局变量确定“样件属性”,然后通过索引数组将数据表格的“测试位置”、“x轴方向”和“y轴方向”这3 列数据提取出来,然后按照P1 到P9 的顺序依次提取这9 行数据分别给“测试位置”、“x轴方向”和“y轴方向”这3 个变量赋值,每两次索引程序之间添加延时,保证顺序性,这样共有9 次索引,8 次延时。
图8 前面板的数据表格
在程序设计中笔者将多个参数整合成一个变量,用SQL 语句中的LIKE 语句进行数据检索。LIKE 语句可以检索文本字段的内容匹配一些特定文本的记录。例如,“SELECT 测试位置,x轴方向,y轴方向FROM 测试结果WHERE 样件属性LIKE'%武汉理工大学%'”,这条语句是从数据表“测试结果”中选择“样件属性”这个变量查看是否有“武汉理工大学”这段字符,如果有就将“测试位置”、“x轴方向”和“y轴方向”这3 个变量记录的数据显示出来。其中%为通配符字符,可以匹配任何顺序的0 或更多的字符,其可以出现在模式字符串的任何地方,几个通配符也可以在一个字符串内。根据制造单位、样件型号、样件规格和测试时间中的任何一种或多种作为检索条件检索测试的曲率半径数据,并将检索的数据发送给Excel 报表。由于创建报表的变量和参数过多,整体程序非常庞大,无法截图显示,于是截取了创建Excel 报表的核心程序如图9 所示。利用Lab-VIEW Report Generation Toolkit For Microsoft Office 模块实现Excel 报表生成。首先,调用New Report.vi 设置报表类型为Excel,再调用Excel Easy Title.vi 设置标题的内容、位置及字体,其中位置以表格的行列值表示(从0 开始);再调用Excel Easy Text.vi 用于向工作表中添加文本和设置文本属性,并设置其字体和位置,图9 中“测试报告”为设置的单元格的副标题,“样件型号”一个为固定文本,另一个为手动输入控件,在测试结束后由工作人员手动键入该参数检索数据,最后生成报表。其次,调用Excel Set Cell Alignment.vi设置单元格对齐方式。最后,利用Excel Bring to Front.vi 将Excel 文件置于顶层,使用Save Report to File.vi 设定文件的保存路径,当不需要保存生成的文件时调用Dispose Report.vi 关闭文件。
图9 创建Excel 报表程序
笔者针对后视镜曲率半径测试进行了数据库的开发,在LabVIEW 中通过调用工具包LabSQL实现了对Access 数据库的访问,该方法无需底层编程,开发简单易行,且无需购买开发工具包,降低设计成本;运用LabVIEW 的Report Generation Toolkit 将检索的数据生成Microsoft Excel 报表,其界面简洁美观、内容专业,该方法在数据量较大,报表结构较复杂的报表生成条件下优势明显。在测试后视镜曲率半径的过程中,通过数据库进行数据管理节约了电脑资源,大大提升了工作效率。
[1]National Instruments Corp. Report generation toolkit user guide [R]. New York:National Instruments Corp,2004.
[2]杨乐平,李海涛,赵勇,等.LabVIEW 高级程序设计[M].北京:清华大学出版社,2003:32 -151.
[3]JAMES G P W. SQL:the complete reference[M].[S.l.]:Mcgraw-Hill,2009:1 -66.
[4]吴松涛,龚家伟. 在LabVIEW 中利用LabSQL 实现数据库访问[J]. 国外电子测量技术,2006,25(4):53 -56.
[5]陈雷,王忠东,陈爽.基于LabVIEW 的机床振动信号数据库访问技术的研究[J].组合机床与自动化加工技术,2013,7(7):92-93.
[6]李文涛,曹彦红,卜旭芳,等.LabVIEW 数据库访问技术的实现及应用[J].工矿自动化,2012(3):69-71.
[7]李华,朱波.LabVIEW 报表生成技术在机载电源测试系统中的应用[J].电子测试,2008,3(3):48-51.
[8]尹技虎,王峰.基于LabSQL 的LabVIEW 数据库访问技术[J].仪表技术,2011,20(4):55 -56.
[9]谷玉海,张桂彬,胡宪能.基于LabVIEW 的数据存储及报表设计方法[J]. 北京机械工业学院学报,2007,22(1):9 -11.
[10]王靖,李学军,罗善明.基于LabVIEW 的机床监测诊断软件研究[J].现代制造工程,2005(11):18-21.