0
LabVIEW与C接口设计
2008-12-22 20:20:51 admin 浏览:1639次 【
摘 要:介绍一种LabVIEWC接口的设计方法。利用此接口方法,可以根据实际应用的要求,扩展LabVIEW的功能。
  关键词:LabVIEWCINVisual C++

1引言
  
LabViEW提供支持VXI总线、GPIB总线、RS?232串行总线接口硬件的驱动程序库,但它对物理内存的操作受到限制,且对硬件操作的实时性不好。但它提供了CIN(Code Interface Node)节点。用户可在LabVIEW中确定CIN节点的入口与出口参数个数类型,在C编译环境下,生.lsb文件,然后在LabVIEW中对CIN节点选择Load cin object code,最后将该节点封装成一个VI,由主程序调用。采用CIN节点,也可充分利用Win95支持多线程的功能,提高运行效率,利用主线程监控各子线程,有效地避免因硬件通信错误而导致程序被挂起的现象,同时,可充分利用Win95有效的内存管理技术,提高数据处理及运算速度。

2CIN设计及C编译环境设置
  
CINLabVIEW提供了一个与外部代码相链接的节点(Node),常用于同步执行在外部编译的执行代码,也可用来调用外部子程序。CINLabVIEW块流图中的一个节点,它与一段用传统C语言书写的源代码相连,必须用第三方提供的C(C++)编译器编译并链接该代码成为可执行代码。目前对于LabVIEW 5.0 for Windows95/NT,支持CIN的第三方编译器Visual C++Symantec CWatcom C/386。设计CIN的步骤为VI设计、生成.c件、用户代码设计、编译代码生成.lsb文件、装载CIN目标代码。下面以在封装驱动程序时设计的StdCMD.VI为例,说明在LabVIEW 5.0Visual C++ 5.0环境CIN的设计方法。
2.1VI
设计
  
首先在块流图(Block Diagram)上放置一个CIN VI,然后通过CIN弹出菜单中的Add Parameter增加接线端子(Terminal),通过接线端子来标识CIN的输入和输出。接线端子通常有输入输出接线端子(Input?Output Terminal)和输出接线端子(Output?Only Terminal),在缺省情况下,接线端子是输入输出接线端子,其左边是输入,而右边是输出。在生成的代码中,与输入输出接线端子对应的是一个参数,通过该参数,数据输入CINCIN可以使用该参数的值或修改参数的值能够由该参数返回;如果输入输出接线端子的右边没有使用,即只有输入,则CIN只能使用该参数的值而不能修改它。对于输出接线端子,它只有输出端,没有输入端。由LabVIEW在内存中设置空间保存CIN的返回值。在定义了CIN接线端子后,将设定的数据控制器(Control,连接输入)、数据指示器(Indicator,连接输出)与对应的接线端子用线
(Wire,代表数据流)连接起来,这样将确定所生成代码中的参数类型。
  
上面的过程只是定义了CIN的内部接口,还必须定义VI的编程接口,即肖像/连接器,通过它才能在程序中调用设计好的VI。在肖像/连接器的设计中,尽量使所画的肖像能够表达出所设计的VI的功能,采用在肖像上标识该VI名称的方法。连接器则是标明肖像的输入输出属性,数据和信息通过连接器的端点在两个VI间传递。这样就设计好了一个VI,但要给它装入目
标代码后才能执行。
2.2生成.c
文件
  
在设计好CIN VI后,可用LabVIEW生成C语言格式的.c文件。下面是我们设计的StdCMD.VI生成的StdCMD.c
文件:
  
  在所生成的文件中,自动包含了文件extcode.h,它是定义能够被CIN使用的基本数据类型和外部子程序的头文件。如果设计的CIN代码含有系统调用,还必须包含文件hosttype.h。当CIN代码执行时,LabVIEW调用CINRun函数,通过CINRun函数的参数传递VI的输入输出值。LabVIEW定义的程序返回值是MgErr数据类型,在执行完CIN代码后,LabVIEW能够检查返回值并确定代码执行是否有错误。
2.3
用户代码设计
  
CINRun函数体内编写用户代码是实现所设计的CIN VI功能的关键。在我们所设计的5VI
中,这部分代码的编写主要是利用设计好的驱动程序完成多机测控系统的控制任务,将驱动程序的接口函数封装在VI内,在用LabVIEW编制测试软件时,通过调用VI来实现对多机测控系统的控制操作。
2.4编译代码生成.lsb
文件
  
Windows95/98下,利用Visual C+ 5.0 IDE编译设计代码,具体操作过程
如下:
  
(1)创建一个新的DLL项目。在Visual C++ 5.0 IDE环境中选择菜单命令FileNew..在弹出的对话框中New:域中选择Project Workspace项,按OK键。在接着弹出的对话框中Type:域中选择Dynamic?Link Library项,在Name:域中输入StdCMD(该项目的名称),在Platforms:域中选择Win32(表示将要生成的DLL32位的),在Location:域中输入(或按Browser…键,选择)源代码文件所在的路径(注:编译过程中生成的中间文件和可执行代码也会产生在这个路径下),按Create…键完成DLL
项目的创建。
  
(2)CIN的目标文件和运行库添加到项目中。选择菜单InsertFiles into Project…。把文件…\StdCMDStdCMD.c添加到项目中;文件把存放在子目录…\LABVIEWCintoolsWin32下的文件cin.objlabview.liblvsb.liblvsbmain.def添加到项目中。这些文件对于创建CIN节点都是必须的;把项目包含的头文件(.h文件)添加到项目中,这些文件必须在同一目录(文件夹)
中。
  
(3)把生成节点的工具所在子目标添加到包含路径中。选择菜单命令…,在弹出的对话框中,选中Settings For:域中的全部内容;选中C/C++标签,将其中的Category置为Preprocessor;在Additional include directories域中输入CIN节点工具所在的子目录…\LabVIEWCintools

  
(4)设置校准为1Byte。选择菜单命令…。在弹出的对话框中,选Settings For:域中的全部内容;选中C++标签,将其中的Category置为Code Generations;从Struct member alignment域中选择1Byte

  
(5)选用多线程run-time函数库。选择菜单命令…,在弹出的对话框中,选出Settings For:域中的全部内容;选中C/C++标签,将其中的Category置为Code Generations;从Use run?time library域中选择Multithreaded

  
(6)建立一个定制的生成命令来运行lvsbutil程序。选择菜单命令…在弹出的对话框中,选中Settings For:域中的全部内容;选中Custom Build标签,在Build command(s):域中输入…\LabVIEWCintoolsWin32lvsbutil$(TargeName)-d$(WkspDir)$(OutDir);在Output file(s):域中输入$(OutDir)$(TargetName).lsb

  
(7)执行生成动态库命令。执行菜单命令Build?Build StdCMD.Dll。编译连接正常的情况下,Visual C++编辑器会按照定制的要求在…\StdCMDdebug目录下生成
StdCMD.lsb文件。
  
由于编译代码的过程比较烦琐,容易出错,因此我们设计了CIN模板应用向导(CinTemp AppWizard),并给出CinTemp.awxCinTemp.pdb文件。将其添加到Visual C++ 5.0 IDE中,可以由用户方便地自动生成编译CIN
代码的项目。
2.5装载CIN
目标代码
  
装载CIN目标代码是将生成的.lsb文件装入VI的过程。这一过程将目标代码装入内存并与VI的前面板/块流图链接起来,保存VI后,即可在程序中调用该VI实现设定的功能。这一过程的操作是在LabVIEW环境中打开StdCMD.VI程序,将光标指到框图中的CIN节点按右键。选中弹出菜单中的命令,将StdCMD.lsb文件装载到CIN节点上。在使用过程中,也可修改CIN代码以扩充其功能,只需重新装入新的.lsb文件即可。

3结束语
  本文利用LabVIEWCIN节点以及Visual C++ 5.0编译环境,详细介绍了LabViEWC接口的设计方法。该方法使用方便,可以根据实际应用的要求,充分利用目前C语言及其编译器的优势,扩展LabVIEW的功能。

参考文献

1]张凯,周陬,郭东.LabVIEW虚拟仪器工程设计与开发[M.北京:国防工业出版社,2004.
2]刘振安,刘大路.C++程序设计[M.青岛:青岛出版社,1999.

0 条评论
查看更多评论
  • 附件包括开题报告、论文、源程序1本选题的意义及国内外发展状况1.1研究目的和意义    随着工业自动化程度不断发展,对位移测量的精准度、效率以及..

    浏览:3992次 评论:0
    2020-02-21 09:30:14
浏览:5528次 评论:0
2018-05-13 22:08:20
浏览:8087次 评论:1
2018-04-14 20:41:34
  • 摘 要:探讨在MATLAB中使用FIS编辑器与Simulink相结合的方法构造模糊推理结构,并通过MATLAB Script Node实现LabVIEW与MATLAB的混合编程,设计出具有模糊自整..

    浏览:4555次 评论:0
    2017-07-28 15:43:26
  • 摘要:针对现代工业过程控制中实时通讯要求和现场总线存在的缺点,用现在流行的开放式标准接口技术OPC规范,设计了一种基于LabV IEW的PC与PCC实时数据通讯方..

    浏览:4589次 评论:0
    2017-07-28 15:27:50
作者专栏
  • sltang

    注册时间:2024-12-21 15:45:59

  • samhuang63

    注册时间:2024-12-20 09:42:58

  • csq663347

    注册时间:2024-12-05 16:34:39

  • guohuiming

    注册时间:2024-11-14 08:49:44

  • 机飞弹打

    注册时间:2024-11-11 13:46:27

Copyright@http://nilab.com.cn all rights reserved 备案号:京ICP备12043750号-1
Powered by qibosoft V9.0 Code © 2003-2017 qibosoft
LABVIEW之家 QQ:181237912; email:Labviewzj@qq.com 项目合作 微信及手机:18510627229