用LABVIEW调用C语言的方法

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

右击 CIN 节点选择创建.c 文件,在弹出的对话框中保存文件,这里文件名命 名为 add.c。 打开该文件可以看到 LabVIEW 已经自动添加了一些代码用于包含库 以及函数声明等,内容如下: /* CIN source file */ #i nclude "extcode.h" MgErr CINRun(float64 *a, float64 *b, float64 *c); MgErr CINRun(float64 *a, float64 *b, float64 *c) { /* Insert code here */ return noErr; } 用户可以在“/*Insert code here*/”处添加函数所需的 C 代码。头文件“ext code.h” 是 LabVIEW 自带的一个头文件, 位于... \LabVIEW 8.2\cintools 目录下。 它定义了 CIN 和外部程序所用到的基本数据类型和许多函数等。其中定义的某 些常量和数据类型可能会与系统头文件相冲突, 因此在使用系统头文件并进行系 统调用时,需要将 cintools 目录下的 hosttype.h 文件也包含进来。#i nclude “ho sttype.h”必须紧跟着#i nclude “extcode.h”语句, 然后才能用#i nclude 语句包含 系统头文件。 当 CIN 节点执行时,LabVIEW 将调用 CINRun 函数。CINRun 函数将 CIN 节点的输入输出作为参数看待。此外,还可以添加一些其它的后台例行程序(R outines):CINLoad,CINSave,CINUnload,CINAbort,CINInit,CINDispo se 和 CINProperties。它们分别在不同的时刻执行。例如 CINLoad 在第一次载入 VI 时执行。缺省情况下是不执行任何内容的,如果你需要在 VI 载入时执行某段 程序,则可以把该段程序添加在 CINLoad 例程中。编写 CINLoad 例程的代码如 下: CIN MgErr CINLoad(RsrcFile reserved) { Unused (reserved); /* ENTER YOUR CODE HERE */ return noErr; } 通常情况下,我们只需要编写 CINRun 函数。本例中,只需要将.c 源文件中 的 CINRun 函数改写如下: MgErr CINRun(float64 *a, float64 *b, float64 *c) { *c=*a+*b; return noErr; }
ห้องสมุดไป่ตู้
中通过调用这些函数可以方便的实现非常强大的功能。限于篇幅,这里就不详细 介绍了,有兴趣的读者可以参考 NI 公司的 Using External Code in LabVIEW. pdf 文档。在...\LabVIEW 8.2\examples\cins 目录下也可以看到 LabVIEW 提供的 不少 CIN 节点实例。
图 18.10 VC 中创建新 DLL Project 对话框
2.将前面创建的 add.c 源文件与...\LabVIEW 8.2\cintools 目录下的 cin.obj, labview.lib, lvsb.lib, lvsbmain.def 添加到工程中。添加方法是在 VC++ 主菜单中选择工程->添加到工程->文件...。 3. 选择工程->设置...,在弹出对话框的设置栏中选择所以配置,然后选择 C/C ++ 页, 选择分类栏为预处理器,将...\LabVIEW 8.2\cintools 目录添加到附加包 含路径中; 4. 仍然在上面的对话框中选择分类为 Code Generation,设置 Struct me mber alignment 为 1 byte。设置 Use run-time library 为 Multithreade d DLL。 5. 选择自定义组件页,在命令栏中输入:”cintools 所在目录\lvsbutil” $(TargetNa me) –d “$(WkspDir)\$(OutDir)” ” (注意这里是用半角输入法) , 在输出栏中输入: $(OutDir)$(TargetName).lsb”,如图 18.12 所示。这一步就是利用 LabVIEW 的 C INTools 工具包中的 lvsbutil 工具将 VC++生成的 DLL 文件转换为 CIN 节点能够 使用的.lsb 文件。 6. 点击 OK 按钮完成配置后,点击 VC++工具栏中的组件按钮,全部组件。 编译过程中,VC++首先创建一个 DLL 文件,然后调用 lvsbutil 工具将这 个 DLL 文件转换为.lsb 文件。编译完成后,打开工程目录下的 Debug 文 件夹,我们可以看到新生成的.lsb 文件:add.lsb。下面就可以将该文件加 载到 CIN 节点中了。 第五步:加载.lsb 文件到 CIN 节点 回到 LabVIEW 程序中,右击第二步中创建的 CIN 节点,选择加载代码资源,在 弹出的文件选择对话框中双击选择刚才创建好的 add.lsb 文件,这就完成了.lsb 文件的加载过程。这时候 VI 窗口工具栏中的 Run 按钮也变为可执行状态 运行 VI 可以得到预期结果; 到此为止,我们就完成了一个 CIN 节点的创建过程。其实 LabVIEW 提供了 大量的外部函数供 CIN 节点调用,这些函数涵盖了从底层字节操作到数据排序、 内存管理等各个方面。这些函数都在一个称为 Managers 的库中管理。在 C 代码 。
用 labview 调用 c 语言其实是一件挺简单的是, 下面我们通过一个求两个数的相 加来一步步的介绍怎样来调用 C 语言, 只要大家按照步骤一步一步的来一定会功 的,加油! LabVIEW 中使用 CIN 节点调用 C 语言 CIN (Code Interface Node) 节点是 LabVIEW 中用来调用 C/C++代码的功 能节点。它与动态链接库的不同之处在于,它能够将代码集成在 VI 中作为单独 的一个 VI 发布,而不需要多余的文件。另外,它提供了函数入口,它可以根据 用户提供的输入输出自动生成函数入口代码, 从而使用户专心关注代码功能而不 用为函数声明、定义等语句费心。因此 CIN 节点与 DLL 在不同的场合有不同的 优势,但是 CIN 节点的使用比调用 DLL 要复杂得多。 由于 LabVIEW 中数据的存储格式遵循了 C 语言中数据的存储格式,并且二 者完全相同,所以用户可以向 CIN 传递任意复合的数据结构。另外,CIN 比图 形化语言可获得更高的执行效率。 注意:对于完全相同的代码,CIN 和 DLL 的执行效率是完全一样的。 如果要使用 CIN 节点,你必须安装了 C 编译器。在 Windows 下,CIN 支持 以下编译器: Microsoft Visual C++ Symantec C CIN 节点必须调用.lsb 文件。.lsb 文件是通过外部编译器与 CINTools 工具结 合将 C 代码编译生成的。 下面我们通过一个两数相加的实例来看如何在 LabVIEW 中实现 CIN 节点调 用,本例所用外部编译器为 Microsoft Visual C++ 6.0。 例 18.6 利用 CIN 节点实现加法运算 第一步:在程序框图放置一个空 CIN 节点; CIN 节点位于程序框图的互连接口->库与可执行程序->代码借口节点。 第二步:创建 CIN 节点的输入输出端口; 初始情况下,CIN 只有一对端口:一个输入端口和一个输出端口。向下拉大 节点边框或右击节点端口选择增加参数,可以为节点增加输入输出端口。CIN 节 点的端口都是成对出现的,因为 CIN 节点端口传递的是指针,所以该参数既可 以作为输入又可以作为输出。 如果不需要输入, 则可以右击该输入端口选择仅可 输出,这时候该对端口的左侧端口变为灰色,表明这对端口仅用作输出。 本例实现的功能为 c=a+b,因此需要两个输入端口:a,b;一个输出端口 c。 设置好端口后,在前面板窗口创建两个数值输入控件(分别命名为 a 和 b) 和一个数值显示控件(命名为 c)。分别将 a,b 与输入端口连接,c 与输出端口 连接,如图 18.9 所示。可以看到,端口会自动根据输入参量的类型与之匹配。 虽然控件与端口已经连接,但是此时的 CIN 节点并不具备任何功能,因为它 还没有装载.lsb 文件。因此此时 VI 是不可运行的,即运行按钮处于断开状态。 下面的任务就是创建.c 源文件,并编译为.lsb 文件,最后加载到节点上。 第三步:创建.c 源文件
改写后保存该文件就完成了.c 源文件的编写,下面我们通过 Visual C++ 6.0 集成开发环境来编译该源文件。 第四步:编译.c 源文件为.lsb 文件 1. 打开 VC++ 6.0,在主窗口菜单中选择文件->新建,在弹出的对话框选 择 Win32 Dynamic-Link Library,设置工程名称为 add,并在位置栏设 置该工程所在路径,如图 18.10 所示。点击 OK 按钮后,在接下来的对话 框中选择完成按钮, 在接着弹出的信息提示对话框中点击 OK, 就成功创 建了一个空的 DLL Project。
相关文档
最新文档