您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 信息化管理 > 第6章Advanced子模板及LabVIEW与C语言的接口方法
第6章Advanced子模板及LabVIEW与C语言的接口方法6.1概述6.2Advanced子模板6.3CIN(代码接口节点)图标及其与C语言接口技术6.4CIN图标的调用及参数设置6.5CIN设计步骤6.6应用举例:用CIN图标实现对HY-1232数据采集卡的驱动6.7端口操作图标InPort.vi、OutPort.vi及其应用本章小结6.1概述用前面介绍的知识完全可以完成一个完整的虚拟仪器测试系统的基本编程,但是LabVIEW并不是万能的,它所提供的图标功能是有限的,实际系统中仍然有某些功能是LabVIEW无法或难以实现的。针对这个问题,LabVIEW在Advanced子模板上提供了和C语言的接口,还提供了调用Windows动态链接库DLL函数以及实现多线程编程等高级功能。6.2Advanced子模板1.调用路径FunctionsAdvancedAdvanced子模板如图6–1所示。图6–1Advanced子模板Advanced子模板上提供了五类图标,其简述如下。2.Advanced子模板简介CallLibraryFunction图标。用来调用动态链接库函数。CodeInterfaceNode图标。用来调用源代码程序。DataManipulation图标。用于实现对两个数据进行合并,或把一个数进行分离等任务。Synchronization图标。用于多线程的开发。Memory图标。用于直接访问硬件地址。本章主要介绍CIN(CodeInterfaceNode)的使用方法。6.3CIN(代码接口节点)图标及其与C语言接口技术CIN是CodeInterfaceNode的简称。Advanced子模板上提供了CIN图标,可以实现在LabVIEW中引入C语言源代码,因此它是LabVIEW图形化编程语言环境与C语言的接口。C语言是功能非常强大的文本式编程语言,当遇到某些LabVIEW图标难以实现的功能时,就可以通过CIN图标在LabVIEW中引入C语言源代码来实现,从而大大提高了LabVIEW数据处理的整体功能。作为LabVIEW与C编程语言的接口图标,CIN是通过输入、输出端口实现两种语言之间的数据传递的。输入、输出端口的个数可由设计者根据实际需要确定。当LabVIEW的程序运行到CIN节点时,数据由CIN的输入端口传递给C源代码图标,程序转去执行C源代码,代码执行完后,得到的数据结果由CIN的输出端口返回给LabVIEW。CIN的设计方法大致包括以下几个步骤:(1)确定CIN图标的输入、输出参数个数和数据类型。(2)生成C源代码编辑格式文件。(3)在编辑格式文件中的规定位置(/*EnterYourCodeHere*/)填写实现某种测量功能的C源代码,生成最终的C源代码文件。(4)在LabVIEW指定的环境下编译步骤(3)中生成的C源代码文件,并生成可执行文件。(5)调用CIN的功能菜单将生成的可执行文件载入CIN图标。这样就基本形成了一个具备某种功能的CIN图标。本章以实现c=a+b为例,介绍CIN图标的使用方法,同时着重介绍它在驱动数据采集卡方面的应用。LabVIEW支持的数据采集卡(当然NI公司生产的数据采集卡在其中之列),是Measurement&Automation软件检验时可识别的,从而是可以进行参数设置的数采卡。这种数采卡可以调用第4章介绍的DataAcquisition子模板上的数据采集图标进行各种方式的数据采集。LabVIEW不支持的数据采集卡,Measurement&Automation软件检验时是不可识别的,当然非NI公司生产的数据采集卡通常都属此列,则一般需要设计者自己开发驱动程序。通常驱动程序是采用C语言编写的,用CIN接口图标驱动数据采集卡的实质与关键步骤是,将C语言编写的驱动程序添入规定的位置/*EnterYourCodeHere*/。6.4CIN图标的调用及参数设置6.4.1CIN图标的调用路径FunctionsAdvancedCodeInterfaceNodeCodeInterfaceNode子模板如图6–2所示。图6–2CodeInterfaceNode子模板6.4.2CIN图标及其端口参数设置初始化时的CIN图标如图6–3所示。CIN图标中表格状图案的每一行代表一个参数,左侧为参数的输入值,右侧为CIN运行后该参数的返回值。参数1输入口参数1返回值的输出口图6–3初始时的CIN图标6.4.2.1设置CIN图标的输入、输出参数个数这里以实现c=a+b运算为例来说明CIN图标参数的添加方法。初始时,CIN只有一个参数的输入、输出口。欲增添新的参数输入、输出口,可以利用工具模板上的选择工具拖放CIN图标来实现,也可以从CIN图标的快捷菜单中选择AddParameter选项来添加。有些情况下,有的参数只能作为输出值,而没有对应的输入。当欲实现c=a+b运算时,则c参数只能是输出值,它是CIN的运行结果,没有对应的输入值,这时应当将其对应的输入口置为无效。方法是,把鼠标放在相应的输入口,用鼠标右击CIN图标,弹出快捷菜单,从中选择OnlyOutput项,则该输入口变暗,表明其无效。图6–4为本例的CIN图标输入、输出口的设置情况。无效a返回值b返回值CIN输出b输入值a输入值图6–4添加参数后的CIN图标6.4.2.2设置参数的数据类型CIN输入(输出)口参数的数据类型由连接在该输入(输出)口上的控件的数据类型决定。例如,如果某参数的输入(输出)端口连接在一个数据类型为int32的数字控件上,则该参数的数据类型为int32型。有些时候,设计者并不希望将CIN的运行结果显示到面板上,而只是作为整个程序的一个中间运行结果传递下去。这时可以在流程图上,用鼠标右击该控件对应的终端,从弹出的快捷菜单中选择HideControl项将该控件从前面板上隐藏掉。6.5CIN设计步骤6.5.1生成C源代码编辑格式文件(*.C文件)代码框架从CIN图标的快捷菜单中选择Create.CFile…项,会弹出一个文件存储对话框,键入文件名(本例中文件名设为add.c),则生成LabVIEW的C语言代码框架;然后用任意一种文本编辑器将它打开。该C文件的代码框架为/*CINsourcefile*/注释#includeextcode.hCINMgErrCINRun(float64*a,float64*b,float64*c);函数声明CINMgErrCINRun(float64*a,float64*b,float64*c) 函数体{/*ENTERYOURCODEHERE*/填入C语言源代码returnnoErr;}6.5.2添加C源代码在/*ENTERYOURCODEHERE*/处填入设计者所编写的C源代码。对于本例,填写后的C源代码文件为/**CINsourcefile*/#includeextcode.hCINMgErrCINRun(float64*a,float64*b,float64*c);CINMgErrCINRun(float64*a,float64*b,float64*c){*c=*a+*b;/*添加的代码*/returnnoErr;}注:在C源代码的编写过程中,除可直接调用C语言的基本库函数外,LabVIEW提供有专门支持CIN设计的库函数,如存储空间(Memory)的动态分配(后面的采样举例中会用到)、文件的操作等,供设计者使用,详细内容可查看LabVIEW的在线帮助(OnlineHelp)。6.5.3*.C文件源代码的编译*.C文件源代码的编译主要是在以C语言为主的开发系统中进行。编译完毕形成一个可以和CIN图标进行动态连接的工程文件*.lsb。下面介绍在VC++集成环境下编译*.C源代码的具体步骤。(1)新建一个DLL工程文件,命名为Add。打开VC++开发平台,执行FileNew操作。①进行选项:win32DynamicLinkLibrary。②添加工程文件名:Add。③location:填写工程文件的存放路径。也可以采用其默认路径D:\MicrosoftVisualStudio\MyProjects\。最后形成工程文件add.cpp。(2)向工程文件中添加cin.obj、labview.lib、lvsb.lib、lvsbmain.def四个文件。执行ProjectAddtoProjectFiles…操作,向工程文件添加上述四个文件。这四个文件在LabVIEW安装路径下的cintools文件夹下的win32子文件夹中。(3)向工程文件中添加上面的*.C源代码文件add.c。添加方法同(2)。(4)*.C源代码文件编译前的设置。由菜单项ProjectSetting…打开设置对话框,逐项设置。①Settingfor选项设置。AllConfiguration。②C/C++标签页设置。用鼠标左击C/C++标签页按钮,逐项设置。lCategory:由下拉菜单选择为Preprocessor。Additionalincludedirectories:添加LabVIEW的cintools文件夹的路径。假设LabVIEW安装路径为d:\LabVIEW,则在Additionalincludedirectories处添加路径d:\LabVIEW\cintools\。lCategory:由下拉菜单另选为CodeGeneration。Strictmemberalignment:设置为1Byte。Userun-timelibrary:设置为MultithreadedDLL。③CustomBuild标签页设置。用鼠标左击CustomBuild标签页,逐项设置。lCommands:输入命令行如下:d:\labview\cintools\win32\lvsbutil$(TargetName)–d“$(WkspDir)\$(OurDir)”(假设LabVIEW的安装路径为:d:\labview。)lOutputs:输入命令行如下:$(OutDir)$(TargetName).lsb(5)添加C源代码程序。可在Workspacewizard窗口中双击add.c,打开源文件添加C源代码。如果已经添加过,则继续下一步。(6)编译*.C源代码文件。在主菜单Build下选择Compileadd.c选项,则进行add.c程序的编译,如有语法等错误,则给出错误提示,按提示修改程序,重新编译。重复这一过程,直至没有错误。(7)生成可执行文件。在主菜单Build下选择BuildAdd.dll选项,即生成可执行文件Add.lsb,同时生成如Add.dll等所需的全部文件。图6–5CIN图标主菜单1.装载可执行文件到CIN图标回到LabVIEW流程图窗口,窗口中CIN图标的快捷菜单如图6–5所示。从中选择LoadCodeResource…项,即弹出一个Chooseacoderesourcefile对话框,如图6–6所示。按照Add.工程文件存入的路径寻找Debug目录下的Add.lsb文件,然后点击“打开”按钮,于是Add.lsb文件就装入CIN图标中。图6–6Chooseacoderesourcefile对话框2.可执行文件的重新装载及错误文件的清除如果在装载完可执行文件后,你对源代码又进行了修改,则必须重新编译,重新装载。在重新装载的时候,CIN图标在再次装载时,它的快捷菜单发生了相应的改变,如图6–7所示。利用其中的ReloadCodeResource(对同一可执行文件)或ReloadCodeResourceFrom…(如果是其它可执行文件)选项,可实现可执行文件的重新装载。图6–7ReloadCodeResource…菜单6.5.5运行程序至此,就完成了CIN的全部设计过程,可运行该程序,改变a、b的值,察看c的输出显示。关于数据采集卡的驱动程序,LabVIEW提供的开发方式有两个:①利用端口操作图标InPort.vi和OutPort.vi开发数据采集卡驱动程序。这种方法实现起来比较简单,适于采集精度要求不高的情况,但对
本文标题:第6章Advanced子模板及LabVIEW与C语言的接口方法
链接地址:https://www.777doc.com/doc-1230613 .html