LabWindows/CVI与Visual C#混合编程

2013-10-20 08:36玫,孔波,李
微型电脑应用 2013年4期
关键词:虚拟仪器调用测控

杨 玫,孔 波,李 祁

0 引言

LabWindows/CVI是 National Instruments公司开发的Measurement Studio软件组中的一员。它是32位的面向计算机测控领域的虚拟仪器软件开发平台,可以在多操作系统下运行。LabWindows/CVI是以ANSI C为核心的交互式虚拟仪器开发环境,它将功能强大的 C语言与测控技术有机结合,具有灵活的交互式编程方法、丰富的控件和库函数,为开发人员建立检测系统、自动测量环境、数据采集系统和过程监控系统等提供了一个理想的软件开发环境,是实现虚拟仪器及网络化仪器的快速途径。

但是,LabWindows/CVI在制作通用软件功能,例如应用程序主界面等方面,跟 Visual Studio等集成开发环境相比,稍显不尽如人意。因此测试系统的软件开发通常采用高级语言结合专用测控软件来开发。这里采用LabWindows/CVI开发具体的测控功能,而Visual Studio集成开发环境支持多种程序设计语言,如Visual Basic,Visual C++和Visual C#等,其中的C#在保持了C++强大功能的同时,添加了大量的高效代码,是完全的面向对象编程语言,能够提供更高的可靠性和安全性,这里选择C#。

1 LabWindows/CVI与Visual C#混合编程

利用组件技术可以实现LabWindows/CVI与Visual C#的混合编程。一方面,利用 LabWindows/CVI中提供的ActiveX Server工具生成COM组件,在Visual Studio 2010中添加COM引用,Visual Studio 2010便可以访问该COM组件。另一方面,在Visual Studio 2010中创建类库项目生成动态链接库DLL,LabWindows/CVI利用.NET Controller工具可以生成fp文件。

下面通过两个实例说明LabWindows/CVI与Visual C#的混合编程过程。实例1利用LabWindows/CVI制作高斯噪声发生器,然后在Visual Studio 2010中调用。实例2在Visual Studio 2010中生成访问 Access的类库,然后在LabWindows/CVI中调用。

2 Visual Studio调用 LabWindows/CVI生成的COM组件

LabWindows/CVI提供若干制作虚拟仪器的控件,例如Thermometer控件等,能够轻松简洁的制作出复杂的仪器界面,但是在制作通用程序界面时不够美观,可以利用LabWindows/CVI将虚拟仪器制作成COM组件,然后在其他开发环境例如Visual C#中调用。

2.1 LabWindows/CVI创建COM组件

选择 Tools>>Create ActiveX Server…,启动 Create ActiveX Server向导,开始配置工程,其中工程名为GaussAXS,工程类型为EXE,其他设置默认。工程配置结束生成 4个目标文件 GaussAXS.axs、GaussAXS_axs.c、GaussAXS_axs.h、GaussAXS_axs.idl,并包含进工程。其中GaussAXS_axs.c、GaussAXS_axs.h和GaussAXS_axs.idl3个文件由 CVI自动生成,不能添加、删除和修改内容,目前均为空。

选择 Tools→Edit ActiveX Server…,或双击 Gauss AXS.axs弹出Edit ActiveX Server对话框,设置接口和对象。本例比较简单,设置一个接口 IGauss,包含一个方法MethodG;为 IGauss接口设置一个对象GaussAXSObj,本例未添加属性。点击Edit ActiveX Server对话框中的Save and Generate按钮,自动生成代码。

新建 GaussAXS.uir,制作高斯噪声发生器的界面。新建GaussAXS.c文件,实现产生高斯噪声数据等相关功能,包括实现WinMain主函数和回调函数等,并实现前述在接口IGauss中声明的成员函数GaussAXSObjIGaussMethodG。其中 WinMain函数的模板和 GaussAXSObjIGaussMethodG的原型都在GaussAXS_axs.h中。

最后选择Build>>Create Release Executable,在目录下生成GaussAXS.exe,这就是Visual C#可以调用的。

2.2 Visual C#调用COM组件

新建一个Windows窗口应用程序,添加一个菜单项目“高斯噪声发生器”,将CVI中生成的GaussAXS.exe拷贝过来,添加引用。这时对象在浏览器中会看到程序集Interop.GaussAXS下有命名空间GaussAXS,该命名空间包含接口GaussAXSObj、类GaussAXSObjClass和接口IGauss。

在文件中添加引用语句:using GaussAXS;

利用GaussAXSObj接口可以访问:GaussAXSObj obj =new GaussAXSObj();

运行结果,如图1所示:

图1 Visual C#调用LabWindows/CVI生成的COM组件

3 LabWindows/CVI调用Visual Studio生成的类库

LabWindows/CVI的标准函数库没有提供访问数据库的函数,也没有在工具包中包含数据库的驱动器。如果要在LabWindows/CVI开发环境下访问数据库,则需要安装LabWindows SQL工具包,它是用于数据库访问的附加工具包,内部集成了一系列的高级功能模块,封装了大多数的数据库操作。用户可以使用 LabWindows SQL工具包在LabWindows/CVI中支持ODBC的本地或远程数据库,例如Microsoft Access,Microsoft SQL Server和Oracle等。

这里利用LabWindows/CVI提供的Create .NET Controller工具,结合.NET技术来实现对数据库的访问。首先在Visual Studio中设计开发一个访问数据库的动态链接库,再在LabWindows/CVI中使用动态链接库文件生成fp文件。这里以Access数据库为例,数据库文件为test.mdb,其中包含数据表tuser,其结构,如表1所示:

表1 数据表tuser

3.1 Visual Studio创建动态链接库DLL

在 Microsoft Visual Studio 2010中创建类库项目ClassLibDB,将系统自动生成的 Class1.cs文件重命名为AccessDB.cs,其中包含访问 Access数据库的类 AccessDB的定义,类AccessDB包含成员函数GetRecord和Close,调试并最终生成ClassLibDB.dll文件。

3.2 LabWindows/CVI调用动态链接库DLL

在LabWindows/CVI 8.5中创建User Interface Application类型的工程 DataBaseApp,在系统自动生成的DataBase.uir中制作登陆界面。

将前述生成的ClassLibDB.dll文件拷贝到DataBaseApp工程下,创建test.mdb数据库,设置密码为123,创建数据表tuser并插入至少1条记录,这里插入记录:1,admin,123456。

选择 Tool>>Create .NET Controller,在弹出的 Create LabWindows/CVI .NET Controller对话框中,选择 Specify Assembly by Path,设置Assembly Path为ClassLibDB.dll,设置Target Instrument为AccessDB.fp,选中Add Instrument to Project,点击 OK 后,系统自动生成 AccessDB.fp、AccessDB.h和 AccessDB.c,并将 AccessDB.fp包含进DataBaseApp工程。

为登录按钮编写回调函数,重要代码如下:

运行结果,如图2所示:

图2 LabWindows/CVI调用Visual C#生成的DLL文件

这里为了方便查看键盘输入情况,密码框采用的是文本框,可以通过调用函数 PasswordCtrl_ConvertFromString将文本框转换为密码框。

4 总结

本文介绍了LabWindows/CVI和Visual C#混合编程的方法,根据两种开发工具的优缺点,利用Visual C#广泛的适用性结合 LabWindows/CVI对测控数据强大的分析处理能力和它简单直观的仪器面板设计。实践证明这种方法是完全可行的。

[1]孙晓云等.基于 LabWindows/CVI的虚拟仪器设计与应用(第2版)[M].北京:电子工业出版社, 2010.

[2]李宁,雷志军,陈伟.Visual C#+Oracle数据库系统开发全程导引与实战精研[M].北京:电子工业出版社,2008:1-25.

[3]张鹏.基于LabWindows/CVI的MDB数据库设计,[J]计算机与现代化,2009(2): 89-90.

[4]杨玫,刘瑜,张燕红.ActiveX技术在LabWindows/CVI中的应用,[J]电脑编程技巧与维护,2012(12)

猜你喜欢
虚拟仪器调用测控
昆山祺迈测控设备有限公司
核电项目物项调用管理的应用研究
PCB 刻制机功能开发及在虚拟仪器实验室建设中的应用
虚拟仪器及其在电工电子实验中的应用
基于系统调用的恶意软件检测技术研究
基于现代测控技术及其应用分析
虚拟仪器技术在农业装备测控中的应用
向着新航程进发——远望7号测控船首航记录
基于虚拟仪器的DMFC实时监控系统
利用RFC技术实现SAP系统接口通信