source: click here

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代码编译生成的。

下面我们通过一个Step by Step的实例来看如何在LabVIEW中实现CIN节点调用,本例所用外部编译器为Microsoft Visual C++ 6.0。

例18.6 利用CIN节点实现加法运算

第一步:在程序框图放置一个空CIN节点;

CIN节点位于Functions PaletteConnectivity->Libraries & Executables->Code Interface Node

第二步:创建CIN节点的输入输出端口;

初始情况下,CIN只有一对端口:一个输入端口和一个输出端口。向下拉大节点边框或右击节点端口选择Add Parameter,可以为节点增加输入输出端口。CIN节点的端口都是成对出现的,因为CIN节点端口传递的是指针,所以该参数既可以作为输入又可以作为输出。如果不需要输入,则可以右击该输入端口选择Output Only,这时候该对端口的左侧端口变为灰色,表明这对端口仅用作输出。

本例实现的功能为c=a+b,因此需要两个输入端口:a,b;一个输出端口c。如图18.8所示。

设置好端口后,在前面板窗口创建两个Numeric Control(分别命名为a和b)和一个Numeric Indicator(命名为c)。分别将a,b与输入端口连接,c与输出端口连接,如图18.9所示。可以看到,端口会自动根据输入参量的类型与之匹配。
 

                                   

18.8  设置CIN节点端口                   18.9  CIN节点端口与控件连接

虽然控件与端口已经连接,但是此时的CIN节点并不具备任何功能,因为它还没有装载.lsb文件。因此此时VI是不可运行的,即Run按钮处于Broken状态 。下面的任务就是创建.c源文件,并编译为.lsb文件,最后加载到节点上。

第三步:创建.c源文件

右击CIN节点选择Create .c File...,在弹出的对话框中保存文件,这里文件名命名为CINExample_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代码。头文件“extcode.h”是LabVIEW自带的一个头文件,位于... /LabVIEW 8.2/cintools目录下。它定义了CIN和外部程序所用到的基本数据类型和许多函数等。其中定义的某些常量和数据类型可能会与系统头文件相冲突,因此在使用系统头文件并进行系统调用时,需要将cintools目录下的hosttype.h文件也包含进来。#i nclude “hosttype.h”必须紧跟着#i nclude “extcode.h”语句,然后才能用#i nclude语句包含系统头文件。

当CIN节点执行时,LabVIEW将调用CINRun函数。CINRun函数将CIN节点的输入输出作为参数看待。此外,还可以添加一些其它的后台例行程序(Routines):CINLoad,CINSave,CINUnload,CINAbort,CINInit,CINDisposeCINProperties。它们分别在不同的时刻执行。例如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;

}

改写后保存该文件就完成了.c源文件的编写,下面我们通过Visual C++ 6.0集成开发环境来编译该源文件。

第四步:编译.c源文件为.lsb文件

1.  打开VC++ 6.0,在主窗口菜单中选择File->New...,在弹出的对话框选择Win32 Dynamic-Link Library,设置Project NameCINExample_add,并在Location栏设置该Project所在路径,如图18.10所示。点击OK按钮后,在接下来的对话框中选择Finish按钮,在接着弹出的信息提示对话框中点击OK,就成功创建了一个空的DLL Project。

18.10  VC中创建新DLL Project对话框

2.  将前面创建的CINExample_add.c源文件与.../LabVIEW 8.2/cintools目录下的cin.obj, labview.lib, lvsb.lib, lvsbmain.def添加到Project中。添加方法是在VC++主菜单中选择Project->Add To Project->Files...

3.  选择Project->Settings...,在弹出对话框的Settings for栏中选择All Configurations,然后选择C/C++ tab页,选择Category栏为Preprocessor,将.../LabVIEW 8.2/cintools 目录添加到Additional include directories中,如图18.11所示。

18.11  cintools目录添加到搜索目录中

4.  仍然在上面的对话框中选择CategoryCode Generation,设置Struct member alignment1 byte。设置Use run-time libraryMultithreaded DLL

5.  选择Custom Build tab页,在Commands栏中输入:”cintools所在目录/lvsbutil” $(TargetName) –d “$(WkspDir)/$(OutDir)”,在Outputs栏中输入:” $(OutDir)$(TargetName).lsb”,如图18.12所示。这一步就是利用LabVIEW的CINTools工具包中的lvsbutil工具将VC++生成的DLL文件转换为CIN节点能够使用的.lsb文件。
 

18.12  设置Custom Buildlvsbutil

6.  点击OK按钮完成配置后,点击VC++工具栏中的Build按钮 ,编译工程。编译过程中,VC++首先创建一个DLL文件,然后调用lvsbutil工具将这个DLL文件转换为.lsb文件。编译完成后,打开工程目录下的Debug文件夹,我们可以看到新生成的.lsb文件:CINExample_add.lsb。下面就可以将该文件加载到CIN节点中了。

 

第五步:加载.lsb文件到CIN节点

回到LabVIEW程序中,右击第二步中创建的CIN节点,选择Load Code Resource...,在弹出的文件选择对话框中双击选择刚才创建好的CINExample_add.lsb文件,这就完成了.lsb文件的加载过程。这时候VI窗口工具栏中的Run按钮也变为可执行状态 。运行VI可以得到预期结果,如图18.13所示。

   

18.13  利用CIN节点进行加法运算

到此为止,我们就完成了一个CIN节点的创建过程。其实LabVIEW提供了大量的外部函数供CIN节点调用,这些函数涵盖了从底层字节操作到数据排序、内存管理等各个方面。这些函数都在一个称为Managers的库中管理。在C代码中通过调用这些函数可以方便的实现非常强大的功能。限于篇幅,这里就不详细介绍了,有兴趣的读者可以参考NI公司的Using External Code in LabVIEW.pdf文档。在.../LabVIEW 8.2/examples/cins目录下也可以看到LabVIEW提供的不少CIN节点实例。

LabVIEW中使用CIN节点相关推荐

  1. Labview-浅谈Labview中VISA的设计

    VISA是新一代仪器I/O标准,作为通用标准,VISA具有与仪器硬件接口和具体计算机无关的特性,即VISA是面向器件功能,而不是面向接口总线的,控制RS232等仪器时不必考虑接口总线类型.在LabVI ...

  2. labview中的VISA

    VISA是新一代仪器I/O标准,作为通用标准,VISA具有与仪器硬件接口和具体计算机无关的特性,即VISA是面向器件功能,而不是面向接口总线的,控制RS232等仪器时不必考虑接口总线类型.在LabVI ...

  3. office 365和普通office对LabVIEW 中包含office 工具包调用节点代码的影响

    OS:win10 32/64; Labview: 2019 64/32 development enviroment or 2019 runtime engine 问题描述:开发电脑使用office ...

  4. 在Labview中调用M文件(Matlab文件)

    使用 NI LabVIEW,不论您是在开发算法.分析结果.处理信号,还是在探索 DSP 概念,您都可以自由选择用于工程计算的语法规则.您可以将直观的 LabVIEW 图形化数据流编程与 MathScr ...

  5. #串口通信超时处理_【学院推荐】划重点!LabVIEW中串口参数需注意的几点

    串口可以说是我们最容易见到,也最容易接触到的一种总线,台式机上一般都有二个,而现在很多下位机.仪器等很多都还是使用串口通信的. 1,串口扩展的问题 先说一下串口的扩展问题,一般的台式机或工控机上都至少 ...

  6. echarts中x轴文件消失_实测实例:labview中波形图X轴刻度任意刻度设置

    学习labview中,做了一个波形图,X轴为时间,Y轴为其他位移压力温度变量,X轴最大值是一个变量,可以手动输入,所以最早选择了--刻度间隔---均匀,起初做模拟,设置时间300小时(1080000秒 ...

  7. LabVIEW中VI的运行和调试

    高亮显示执行过程 LabVIEW语言的一大特点就是数据流驱动,程序中每一个节点(包括函数.子VI.各种结构等)只有在获得其全部输入数据后才能够被执行,而且只有当其功能完全时节点的输出才是有效的. 通过 ...

  8. labview中java联合编程_LabVIEW与MATLAB混合编程的实现

    本栏目责任编辑:谢媛媛系统软件与软件工程 ComputerKnowledgeand Technology 电脑知识与技术 第 6 卷第 15 期 (2010 年 5 月) LabVIEW 与 MATL ...

  9. LabVIEW中的数据通信方法

    LabVIEW中的数据通信方法 LabVIEW中包含多种数据通信方法,不同的方法适用于不同的场景.确保在应用程序中使用正确的数据通信方法. ​ 数据通信类型: 数据流元素 缓冲接口 变量接口 应用场景 ...

最新文章

  1. 深夜文献:2021腾讯科技WE大会硬核复习资料,看看如何烧脑?
  2. 全网最具深度的三次握手、四次挥手讲解,深夜思考
  3. pandas-数据分析
  4. xfce4开始菜单中的小老鼠图标不见了
  5. Mac OS系统版本与XCode版本的关系
  6. Windows Server 2012R2之重复数据删除实战
  7. 软件系统性能优化策略--SQL优化
  8. HDU - 6333 Harvest of Apples
  9. R for data science之purrr包(下)
  10. 罗马盘,大力盘,大圣盘等网盘资源搜索免费下载资源教程
  11. c语言简易计算器大作业报告,简易计算器 (C语言)作业
  12. [蓝桥杯] 青出于蓝胜于蓝
  13. 确定性知识表示法--规则(产生式)表示法
  14. 阿里双十一 11 年:购物狂欢背后的技术演进
  15. Fabric实战(10)链码(chaincode)开发-shim包API
  16. WPF UserControl响应PreviewKeyDown事件方法
  17. 康定游记-宝宝征服4300米海拔折多山
  18. 一键批量替换文本工具
  19. 响应式设计的三个步骤
  20. 测试emmc读写速度软件,真机闪存实测:闪存读取速度到底什么鬼差距有多大建议收藏...

热门文章

  1. keytool的用法
  2. 计算机错误代码0x8e5e0211,Windows Update的两个简易修复错误代码0x80072efe | MOS86
  3. vnc下载中文版,5款vnc下载中文版推荐
  4. 极致渲染—VRay 6.0 for 3dsmax呈现三维新世界
  5. 盛大文学发布电子书战略 建立“云中图书馆”
  6. 计算机辅助翻译概论王华树,计算机辅助翻译概论
  7. win7计算机无法右键,win7右键无法使用怎么办_解决win7点击鼠标右键没反应的方法...
  8. java拆分excel_Java 合并和拆分Word表格中的单元格
  9. java将excel文件下载到本地
  10. 非计算机专业软考高级评职称,信息系统项目管理师考过就是高级职称吗?