用LABVIEW调用C语言的方法

合集下载

基于LabVIEW直接读取C语言数据文件的研究

基于LabVIEW直接读取C语言数据文件的研究

[05,= ・ , + .】 1 2‘因此符号位 Ms [】; 。 =02
阶码 E [ 1 1 2 ] = 1 2 ] , = - + 0 3, [0 2, 表示成二进制即 。 。
件 。 对 于 大 多 数 工 程 师 来 说 , 写 动 态链 接 库 程序 也 并 不 是 一 但 编 件 轻 松 的 工 作 。因 此 , 文 通 过 对 C 语 言 文 件 以及 L b lW 文 本 a VE 件 存 储 格 式 的 分 析 ,提 出 了 一 种 直 接 采用 L b IW 读 取 C 语 a VE 言 文 件 的 方 法 , 不 需 要 编 写 动 态 链 接 库 , 便 地 解 决 了 L b 而 方 a— VE 对 以前 C 语 言 数 据 的读 取 。 IW
0 0 H。 0 0
当 前 , 有 已 知 的 C/ + 编 译 器 都 是 按 照 IE 国 际 电 子 所 C + E E(
电器 工 程 师 协 会 ) 制 定 的 IE E E浮 点 数 表 示 法 来 进 行 运 算 的 。
IE E E标 准 7 4规 定 了 三种 浮 点 数 格 式 : 精 度 、 精 度 、 展 精 5 单 双 扩 度 。前 两者 分 别 对 应 C 语 言 的 F a 、 o be精 度 类 型 , 是 大 l tD u l o 也
关键词 : C语 言 , 点数 , a VE 读 写 文件 浮 L b IW,
Ab ta s rct
hs I t i pap , ne n er a w e e t m e h d o e biar l t f ci ve t o t rad n yf oa i ng—poit i fr n fe o med l by C ln a gua i pu f wa d ge s t or r ac or n c dig t te ompa ion et en t ig or o h c rs b we sor f mato C l gu n f an age an La d bVl . m pa e wi r t alm e h d ln EW Co rd t tadion t o ofcal g dy a i h i i nm c

LabVIEW 调用 C-C++ Dll 详解

LabVIEW 调用 C-C++ Dll 详解

LabVIEW 调用C/C++ Dll 详解LabVIEW 在配上NI 的采集卡或者别的第三方的硬件,约等于神器(虽然有时候贵了点)。

这样你可以比较集中精力的专注于数据处理了,就不用学习麻烦的Win32 的GUI 编程, 也不用关注和你自己搞的采集板之间的通信了。

对于每一个测控行业的程序来说,基本上都是:初始化-->数据采集-->数据处理-->数据显示-->数据保存-->结束的一个过程。

当然如果是实时的,那么采集,处理,显示就是在一个loop 里面。

当然为了保证实时性,数据处理和数据采集不一定在一个线程里,因为处理的时候把采集给block 住也挺傻的。

LabVIEW 很容易帮你搞定:初始化-->数据采集-->数据处理-->数据显示-->数据保存-->结束但是数据处理部分,是和你的学科紧密相关的,有时候算法会诡异到你很难用VI来实现,那么你就要有C++”target=“_blank”>C++code来搞了。

那么C/C++ 是如何与LabVIEW 交互的呢,本文来较详细的阐述一下,因为准备采用总分总的写作手法...所以先来个概括...1. 把C/C++ code 编译成Dll。

2. 用LabVIEW 的call library node 来调用。

难点在于:如何把LabVIEW 的数据类型和C/C++ 的来对应。

控件x 相当与一个double,当然其类型也是可以选择的(如右图所示)。

boolean 按理说应该是一个bool, 但是传入call library node 的时候,一般要转成unsigned int 型。

cluster 其实就是个struct ,左图的cluster 是:struct tCluster{ double x11; // 类型都可以向右图那样自己配置double x2; int x3;};对于string,这里要着重讲一下,labview 的string 类型里面是包含长度信息的,它不是一个简单的char *它是个LStrHandle 类型:定义咋extcode.h 里面(可以在labview 目录下搜到)typedef struct {int32 cnt;uChar str[1];} LStr, *LStrPtr, **LStrHandle;cnt 就是含有多少个字符,str 这个指针所指的就是数据区的第一个字符。

北信科测控技术与仪器系虚拟仪器期末考试考点总结范文

北信科测控技术与仪器系虚拟仪器期末考试考点总结范文

北信科测控技术与仪器系虚拟仪器期末考试考点总结范文简答:1.虚拟仪器程序调试方法主要有哪些答:1、设置执行程序为高亮方式,程序执行前点击高亮按钮,则运行过程会以高亮形式显示数据流。

2、单步执行方式:如果要使框图程序一个节点一个节点则按下单步单步按行钮就会闪烁,指示它将被执行,再次点击单步按钮,程序将会变成连续运行。

3、探针,从工具模板中选择探针工具,将探针工具置于某根连线上可以用来查看运行过程中数据流在该连线时的数据4、断点使用断点工具可以在程序的某一点中止程序执行,用探针或单步方式查看数据。

2、简要叙述局部变量和全局变量的使用特点和区别。

答:通过局部变量或全局变量,可以实现在程序框图中的多个地方读写同一个控件。

局部变量只能在同一程序内部使用,每个局部变量都对应前面板上的一个控件,一个控件可以创建多个局部变量。

读写局部变量等同于读写相应控件。

通过全局变量可以在不同的VI之间进行数据交换,一个全局变量的VI文件中可以包含多个不同数据类型的全局变量。

LabVIEW中的全局变量是以独立的VI文件形式存在的,这个VI文件只有前面板,没有程序框图不能进行编程。

3、简要介绍For循环和While循环的自动索引功能。

答:For循环和While循环可以自动地在数组的上下限范围内编索引和进行累计。

这些功能称为自动索引。

在启动自动索引功能以后,当把某个外部节点的任何一维元素连接到循环边框的某个输入通道时,该数组的各个元素就将按顺序一个一个地输入到循环中。

循环会对一维数组中的标量元素,或者二维数组中的一维数组等编制索引。

在输出通道也要执行同样的工作――数组元素按顺序进入一维数组,一维数组进入二维数组,依此类推。

4、For循环和While循环的区别是什么?使用中它们各自适用于什么场合答:For循环规定了循环次数,其条件选择是根据计数器计数次数是否达到循环次数而决定结束循环的条件;而While循环不规定循环次数,其条件选择是根据选择器端子的条件是否得以满足而决定结束循环的条件。

Labview调用C语言、Matlab脚本节点以及库函数节点的方法

Labview调用C语言、Matlab脚本节点以及库函数节点的方法

Labview调用C语言、Matlab脚本节点以及库函数节点的方法Labview调用C语言的方法CIN(Code InterfaceNode)节点是LabVIEW中用来调用C/C++代码的功能节点。

它与动态链接库的不同之处在于,它能够将代码集成在VI中作为单独的一个VI发布,而不需要多余的文件。

另外,它提供了函数入口,它可以根据用户提供的输入输出自动生成函数入口代码,从而使用户专心关注代码功能而不用为函数声明、定义等语句费心。

因此CIN节点与DLL在不同的场合有不同的优势,但是CIN节点的使用比调用DLL要复杂得多。

由于LabVIEW中数据的存储格式遵循了C语言中数据的存储格式,并且二者完全相同,所以用户可以向CIN传递任意复合的数据结构。

另外,CIN比图形化语言可获得更高的执行效率。

注意:对于完全相同的代码,CIN和DLL的执行效率是完全一样的。

如果要使用CIN节点,你必须安装了C编译器。

在Windows下,CIN支持以下编译器:Microsoft Visual C++Symantec CCIN节点必须调用.lsb文件。

.lsb文件是通过外部编译器与CINTools工具结合将C代码编译生成的。

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

第一步:在程序框图放置一个空CIN节点;CIN节点位于FunctionsPalette的Connectivity->Libraries& Executables->Code InterfaceNode。

第二步:创建CIN节点的输入输出端口;初始情况下,CIN只有一对端口:一个输入端口和一个输出端口。

向下拉大节点边框或右击节点端口选择AddParameter,可以为节点增加输入输出端口。

CIN 节点的端口都是成对出现的,因为CIN节点端口传递的是指针,所以该参数既可以作为输入又可以作为输出。

在LabVIEW中调用VC++生成的动态链接库文件DLL

在LabVIEW中调用VC++生成的动态链接库文件DLL

LabVIEW中调用VC++生成的DLL1.// 新建一个空的Win32 Dll 工程,加入新的cpp,写入下面代码_declspec(dllexport) int sum(int a, int b){return a+b;}//Build出一个dll:sum.dll2.// 新建一个新的Win32 Console程序//选择Simple Console Application,修改main函数所在的cpp#include "stdafx.h"#include <iostream>using namespace std;// for base type and LoadLibrary#include <WINDOWS.H>// define function pointer which will point to sum(a, b)typedef int(*Func)(int,int);int main(int argc, char* argv[]){HMODULE dll = ::LoadLibrary("sum.dll");// 加载刚才那个dll,路经要对if(dll){Func f = (Func)GetProcAddress(dll, ?sum@@YAHHH@Z);// 加载那个sum函数if(f)cout<<f(3, 4); // 等价于调用sum(3, 4)elsecout<<"function call error";}elsecout<<"lodad error";}//Build & Execute3.上面一个不便的地方就是GetProcAddress,第二个参数是个很复杂的字符串,需要事先用dumpbin sum.dll /exports得到sum函数的实际名称所以,一般会在最上面写dll时,导出函数前面不仅加上已有的红字表示导出,还要加上extern "C" ,表示以C方式编译,因为C方式编译时,函数名在库中和在程序代码中会保持一致,不像C++生成新的编码后的函数名。

VC调用labview生成的DLL

VC调用labview生成的DLL

VC调用LabVIEW生成的DLL文件刚才介绍了LabVIEW调用DLL文件的方法,使用VC调用LabVIEW生成的DLL 文件也很简单。

还是以之前生成Scale 的DLL文件为例,不同的是采集电压程序使用的是C语言的例程,但和LavVIEW实现的功能相同。

首先将先前生成Scale DLL文件时,路径下所有的文件全部复制粘帖到C语言例程的文件夹下。

打开连续采集程序,点击状态栏的Project——Settings,在Project Settings对话框中加载入Scale.lib的静态链接库。

在程序中键入#include "Scale.h",以便引入该DLL函数。

下面是C程序的代码,功能是有限点采集电压,通过Scale.dll文件实现采样值放大10倍的功能。

加粗部分是因为调用DLL文件所做的改动。

#include <stdio.h>#include "NIDAQmx.h"#include "Scale.h"#define DAQmxErrChk(functionCall)if( DAQmxFailed(error=(functionCall)) ) goto Error; elseint main(void){int32 error=0;TaskHandle taskHandle=0;int32 read;float64 data[1000];char errBuff[2048]={'\0'};int i=0;double x10=0;/*********************************************/// DAQmx Configure Code/*********************************************/DAQmxErrChk (DAQmxCreateTask("",&taskHandle));DAQmxErrChk(DAQmxCreateAIVoltageChan(taskHandle,"Dev1/ai0"/*Config correct device*/,"",DAQmx_Val_Cfg_Default,-10.0,10.0,DAQmx_Val_Volts,NULL));/ /DAQmxErrChk(DAQmxCfgSampClkTiming(taskHandle,"",10000.0,DAQmx_Val_Rising,DAQmx_V al_FiniteSamps,1000));/*********************************************/// DAQmx Start Code/*********************************************/DAQmxErrChk (DAQmxStartTask(taskHandle));/*********************************************/// DAQmx Read Code/*********************************************/DAQmxErrChk(DAQmxReadAnalogF64(taskHandle,1000,10.0,DAQmx_Val_GroupByChannel,dat a,1000,&read,NULL));printf("Acquired %d points\n",read);for(i=0;i<1000;i++){Scale(data[i], &x10);printf("the %d Value is : %f \n",i,x10);}Error:if( DAQmxFailed(error) )DAQmxGetExtendedErrorInfo(errBuff,2048);if( taskHandle!=0 ) {/*********************************************/// DAQmx Stop Code/*********************************************/DAQmxStopTask(taskHandle);DAQmxClearTask(taskHandle);}if( DAQmxFailed(error) )printf("DAQmx Error: %s\n",errBuff);printf("End of program, press Enter key to quit\n");getchar();return 0;}所以,使用LabVIEW不仅可以方便地调用各种编译软件生成的DLL文件,自己也能生成DLL文件供其他编译软件调用。

如何将LabVIEW的VI转换为C语言代码

如何将LabVIEW的VI转换为C语言代码

如何将LabVIEW的VI转换为C语言代码方法一:利用LabVIEW的C Generator工具包下载安装LabVIEW 2012软件,下载LabVIEW工具包2012CGenerator.exe。

下载地址/download/labview-c-generator-2012/3143/en/安装好工具包的LabVIEW开始界面变为这样,有个转换的小标志。

新建一个工程文件,并在文件中添加需要转换成C语言的vi文件。

楼主要转换的是源代码转换.vi。

就添加进工程就好。

在程序生成规范右键-----新建------C Code Generation。

生成一个C文件。

将出现这个框,点击左侧Source Files将需转换的vi选中并点击上面的导出vi弹出对话框,点击ok 导出vi,点击生成完成了C文件的转换。

在转换的过程中会出现转换失败的情况,是因为LabVIEW中有些模块不能转换成C语言。

生成的C语言也不一定能运行,还要看各位追求的精度有多高。

方法二:利用NI的微处理器SDK模块步骤1、下载并安装代码转换工具包对于代码转换这个问题,其实NI有多个工具包可用。

这些工具包虽然都是针对嵌入式开发用的,但是其中代码转换功能不妨借来一用。

这里推荐NI的微处理器SDK模块。

这个模块的具体功能这里就不罗嗦了,详细介绍可参看其介绍页面。

这里给出下载页面。

可根据需要选择下载。

也可以。

步骤2、下载并安装完后就可以进行代码转换了。

如果你只是使用这个工具包的代码转换功能并且不是经常使用,就没必要购买授权了,试用版就可以。

安装完成后,在启动LabVIEW时会看到会看到微处理器SDK的工具包图标,图1中的红圈部分图1步骤3:新建一个空的项目。

这里将项目保存为Convert code。

由于NI的这个工具包是针对微处理器开发的,所以我们要使用其中的功能就要新建一个特定的终端。

如图2所示。

图2 这个工具包提供的功能还是蛮多的,别的就不管了,我们这里只是想转换代码,选择Code Generation下的Code Generation Only就可以了。

LabVIEW调用库函数节点技术

LabVIEW调用库函数节点技术

LabVIEW调用库函数节点技术LabVIEW提供了调用库函数节点(Call Library Function node,简称CLF),利用CLF,可以在LabVIEW中实现DLL和API函数的调用。

在LabVIEW中使用CLF 需要了解动态链接库里被调用的函数名称、功能及其输入输出参数等,下面将详细介绍在LabVIEW 8.6下利用CLF调用6050运动控制卡基于C语言编写的驱动程序[41]。

首先在框图程序中创建一个空的CLF,CLF位于“函数模板→互连接口→库与可执行程序子模板”,如图1-1所示,下面给出其详细的配置过程:图1-1 CLF节点图标(1)双击CLF图标弹出配置对话框,如图1-2所示,首先要指定6050控制卡动态链接库的库名或路径。

点击其右边的文件夹图标,打开一个文件对话框,找到6050运动控制卡的动态链接库文件“dfjzh6050dll.dll”所在位置。

(2) LabVIEW装载了DLL文件后会自动检测其所包含的函数,但不能检测函数中的参数及其数据类型,因此接下来的要参照DLL说明文件“dfjzh6050dll.h”及控制卡使用手册选择所要配置的函数名,设置函数参数。

(3)在调用规范中有“stdcall(WINAPI)”和“C”两个选项,它们的区别是,若调用函数为Windows标准共享库函数则选择“stdcall(WINAPI)”选项,若调用函数为VC环境下编译的库函数则选择“C”选项,本文选择“C”选项。

(4)在“线程”选项中选择“在UI线程中运行”。

至此,完成了所有配置选项,在CLF配置图最下方可以看到函数原型。

下面阐述配置CLF过程中需注意的两个问题:图1-2 CLF节点配置图Figure1-2 CLF Node Setting Chart(1) LabVIEW线程调用方式节点配置中,有两种线程调用方式,“在UI线程中运行”和“在任意线程中运行”。

“在UI线程中运行”表示在用户接口线程中调用,DLL的执行期将等到用户接口线程(在此即LabVIEW环境下的VI应用程序)执行DLL的导出函数调用时才开始;“在任意线程中运行”表示允许多个线程同时调用这个DLL。

Labview调用VC

Labview调用VC

Labview调用VC对初学者来说来个比较详细的包含步骤例子是难得的,我来个简单的小例子,希望对您有用,呵呵!!!1。

建立动态连接库的C 代码调用1.1 建立函数原形1)后面框图程序中,调用CLF 节点;2)配置一个函数原形,设置调用规程为C,其它不变,确定,退出;3)右键CLF 节点,create C file,保存名字为code.cpp,以供VC++编译使用;1.2 编辑源代码文件1)将所需要的labview 头文件复制到code.cpp 所在目录中,包括:extcode.h platdefines.h fundtype.h;2) 打开code.cpp,添加关键词extern c 、_declspec(dllexport)并包装;然后输入函数的功能代码,如果1 个dll 里面需要多个函数,则需要声明多个函数的原形。

2。

VC++中编译产生dll1)建立project ,file&agrave;new-> win32 Dyna,mic Link Library,输入工程名,选择an empty dll project;2)添加code.cpp 到source file,添加extcode.h platdefines.h fundtype.h 到head files 里面;3)设置dll 参数project&agrave;settings&agrave;c/C++中设置参数:category: code generation ;根据函数要求可以选择1Byte4 Byte 8Byte,采用默认就可以;multithread;其余默认可以;自己也可以微调;4)Build&agrave;Build code.dll;5)Ok。

LabVIEW中调用C语言研究与实现

LabVIEW中调用C语言研究与实现
Ab t a t s r c Gr p a g a e L b I a h l n u g a V EW s mo t p l d s f a e d s n o i u li sr me tt n W h n L b E i o a y c mp ee i s y a pi ot r e i fv r a n t l e w g t u n ai . o e a VI W s n te s o l td
S TUDY AND REALI ZATI oN oF CALL I La C N bVI EW
Kua i iRU
( h nh intueo cn l yS a g a 0 2 3 C ia Sa g a stt fT hoo ,h n h i 0 3 , hn ) I i e g 2
并且 通 常 情 况 下 , 用 CN 可 获 得 较 高 的程 序 效 率 , 为 使 I 因 a VE L b IW中数据 的存储格式 遵循 了 c语 言中数据 的存储 格式 , 二者 完全 相 同。CN源 代 码对 编 译 I
器有严 格 的 限 制 , 因 L b IW 用 且 aV E 于不 同 的操 作 系统 平 台 而异 。L b a- V E 支 持 Widw9 , n o s T IW n o s5 Widw N , H .X等多种操作系统平 台。 PU Lb IW 中通过 与 C语言 的接 a VE 口图标来调用 C Lb IW 与 C语 言 , aV E 的接 口图标是 CN节点 。其 调用 路 I
构 。使用 CN技术 , I 用户 可 向 CN传 递任 意复合 的数据结 构 , I
I 5l 昌 J
L b I W 是美 国 N ( ai a Is m n o p n ) 司推 a VE I N t n nt e t m ay 公 ol u r C 出的一 种基 于 G语言 ( rp i a gae 的虚拟仪器 软件开发 Gahc L n g ) s u 工具 。是 目前应 用最广 、 发展最快 、 功能最强的图形化软件开发

如何将LabVIEW的VI转换为C语言代码

如何将LabVIEW的VI转换为C语言代码

如何将LabVIEW的VI转换为C语言代码方法一:利用LabVIEW的C Generator工具包下载安装LabVIEW 2012软件,下载LabVIEW工具包2012CGenerator.exe。

下载地址/download/labview-c-generator-2012/3143/en/安装好工具包的LabVIEW开始界面变为这样,有个转换的小标志。

新建一个工程文件,并在文件中添加需要转换成C语言的vi文件。

楼主要转换的是源代码转换.vi。

就添加进工程就好。

在程序生成规范右键-----新建------C Code Generation。

生成一个C文件。

将出现这个框,点击左侧Source Files将需转换的vi选中并点击上面的导出vi弹出对话框,点击ok 导出vi,点击生成完成了C文件的转换。

在转换的过程中会出现转换失败的情况,是因为LabVIEW中有些模块不能转换成C语言。

生成的C语言也不一定能运行,还要看各位追求的精度有多高。

方法二:利用NI的微处理器SDK模块步骤1、下载并安装代码转换工具包对于代码转换这个问题,其实NI有多个工具包可用。

这些工具包虽然都是针对嵌入式开发用的,但是其中代码转换功能不妨借来一用。

这里推荐NI的微处理器SDK模块。

这个模块的具体功能这里就不罗嗦了,详细介绍可参看其介绍页面。

这里给出下载页面。

可根据需要选择下载。

也可以。

步骤2、下载并安装完后就可以进行代码转换了。

如果你只是使用这个工具包的代码转换功能并且不是经常使用,就没必要购买授权了,试用版就可以。

安装完成后,在启动LabVIEW时会看到会看到微处理器SDK的工具包图标,图1中的红圈部分图1步骤3:新建一个空的项目。

这里将项目保存为Convert code。

由于NI的这个工具包是针对微处理器开发的,所以我们要使用其中的功能就要新建一个特定的终端。

如图2所示。

图2 这个工具包提供的功能还是蛮多的,别的就不管了,我们这里只是想转换代码,选择Code Generation下的Code Generation Only就可以了。

Labview调用dll详解(C语言DLL

Labview调用dll详解(C语言DLL

Labview调用dll详解(C语言DLLLabview调用dll详解(C语言DLL)之一labview中提供了两个C接口,一个是CLF,一个是CIN。

本帖子讨论DLL的调用,也就是CLF。

由于C的强大功能,本帖子讨论C创建的DLL的调用。

首先简单解释一下DLL,也就是动态链接库。

DLL 的好处是屏蔽底层的细节,用户不用也不能打开DLL,便于资源代码数据共享,节省内存等。

一般情况下labview是不需要调用DLL的。

DLL分两类,一类是API,一类是自己创建的DLL。

这两者本质都一样,但是调用一般来说是有区别的。

R) {$ f0 x7 @3 B 要调用DLL必须要有DLL,也就是所谓的路径。

这个一般不会出错的,不用解释了。

其次是选择函数,这个也不难。

线程一般选择UI线程,任意线程的DLL和UI线程DLL有颜色上的区别,其次在源代码中也有区别(这个不是DLL调用失败的主因,不用过多纠缠)。

接下来是调用设置:Ccall和standcall。

一般来说,windows API采用的是standcall,自己创建的采用Ccall。

两种调用区别在于参数进入栈的顺序不同。

这里随便说一下,栈由系统自动分配内存,类似C语言的int a都是分配的栈内存;new分配的是堆内存。

栈内存由系统负责回收,堆内存一般程序员负责释放,所以要注意系统的内存泄漏。

labview的初始化数组也会分配内存,所以不宜频繁调用。

8 h. p8 V/ m, J- D4 X 接下来是最重要的参数配置,也是最复杂的参数配置。

首先要知道函数原型,C语言里面叫导出函数类。

一般在include文件下面的头文件里面。

下面是一个典型的函数原型:extern "C" ZLDS10X_DLL_API SENSOR_HANDLE ZLDS10X_DLL_stdcall ZLDS10X_Open(char * portnum , int baud , int timeout , int address); 值得注意的是,很多人会把函数原型看错。

labview-利用 Code Interface Node 将 C 语言创建的代码集成到 LabVIEW 项目中

labview-利用 Code Interface Node 将 C 语言创建的代码集成到 LabVIEW 项目中

6调用文本编程语言创建的代码6.1.概述本章主要叙述在LabVIEW中如何调用利用传统的基于文本的编程工具创建的代码.通过学习本章您将了解以下知识:z利用Code Interface Node将C语言创建的代码集成到LabVIEW项目中;z利用Call Library Function Node调用动态链接库。

在用LabVIEW开发大型的项目的过程中,尽管它能给开发者提供快速的解决方案,但是有时候传统的基于文本的开发工具在实现某些功能时相对可能容易些(如开发对运行时间要求很苛刻的程序),或者有些任务不能通过调用LabVIEW的函数来直接实现(如操作系统API的某些功能)。

这个时候就可以考虑使用Code Interface Node (CIN)或者Call Library Function Node来调用基于文本的开发工具开发的代码。

通常来说在大型的项目开发过程中这样做的目的主要有以下几个方面:z代码的复用。

对一个项目开发团队来说,整个团队使用的开发工具可能不只是一种。

从横向来看,团队中负责各子系统的开发人员可能使用的开发工具不尽相同,, 从纵向来看,整个团队多年来可能已经换过多种不同的开发工具。

为了能减少重复工作,共享代码或重复利用以前的代码,可以用CIN 将C代码或者用Call Library Function Node将其它工具创建的DLL集成到LabVIEW项目中来。

z项目的开发效率。

虽然用LabVIEW为项目提供解决方案,其效率相对于基于文本的传统开发工具大大提高,但是有些时候用传统的开发工具实现某些功能却比LabVIEW来的容易。

例如开发与底层硬件交互或者开发对运行时间要求很苛刻的程序时,VC可能就比LabVIEW来得方便。

或者开发者需要某种特殊的算法,而且这种算法用传统的开发工具实现要比LabVIEW开发容易些(如图像处理的一些算法等)。

这时开发者就可以用CIN或者Call Library Function Node把传统开发工具的长处和LabVIEW的长处结合在一起,共同为项目提供解决方案。

虚拟仪器技术(分析与设计)试题库

虚拟仪器技术(分析与设计)试题库

一、选择题:1、下面选项中,哪个是更新前面板显示控件的最好方法?[ B ](A) 使用局部变量;(B) 直接连线到显示控件的接线端;(C) 使用功能全局变量;(D) 使用"值"属性节点。

2、与局部变量相比,下面哪个描述表明了全局变量的优势?[ C ](A) 全局变量自身不需要标签就可执行;(B) 全局变量遵循数据流模式,因此不会引起竞争情况;(C) 全局变量可以在两个独立的同时运行的VI之间传递数据;(D) 只有全局变量能传递数组数据,而局部变量不能。

3、输入一个表示圆形的数据。

圆形数据包括一个x 坐标,一个y 坐标,以及半径值。

这三个数据都是双精度的。

用户今后可能需要保存圆的颜色,这个值用一个整型变量表示。

在前面板窗口中如何表示圆呢?[ D ](A) 分别需要三个输入控件,用于表示两个位置量和一个半径值;(B) 一个包含所有数据的簇;(C) 一个包含三个元素的数组;(D) 一个自定义类型包含一个簇。

4、如存储的数据将被其他工程师通过Microsoft Excel分析。

应使用哪种存储格式?[ B ](A) TDM;(B) 用制表符(T ab)分隔的ASCII;(C) 数据记录;(D) 自定义二进制格式。

5、下面的描述中哪个是错误的?[ D ](A) 子VI连线板定义了输入输出的连线地方;(B) 子VI连线板上的端子颜色与其相连的控件数据类型是一致的;(C) 必须有一个图表/连线板才能使用子VI;(D) 在函数面板中可以编辑子VI的图标。

6、创建一个数组的最高效方法是:[ A ](A) 使用一个带自动索引的While循环;(B) 初始化一个数组并在While循环中替换其元素;(C) 在While循环中放置一个创建数组函数;(D) 使用一个带自动索引的For循环。

7、开发只有一个输出的子VI。

在一个调用VI中需要使用该子VI。

下面选项中,哪个是使用数据流来控制子VI执行的最好方法?[ A ](A) 修改子VI,创建错误簇并在调用VI中使用;(B) 在一个顺序结构中使用子VI;(C) 修改子VI,创建虚设的输入端并在调用VI中使用;(D) 修改子VI,创建一个全局变量并在调用VI中使用。

如何使用LabVIEW调用C#编写的DLL

如何使用LabVIEW调用C#编写的DLL

如何使用LabVIEW调用C#编写的DLL如何使用LabVIEW调用c#编写的DLL最近在做一个项目时,需要在Labview中列出可用的磁盘驱动器,我们可以使用互连接口》库与可执行程序》执行系统命令vi,但是在程序运行时会弹出命令提示符窗口,对于计算机菜鸟用户而言,他们或许会以为那是在执行病毒程序,为了增加用户的好感度,本文采用调用DLL的方式来解决问题。

在调用DLL之前,我们先来创建一个DLL,打开VS2008,新建一个类库项目,如下图:点击确定后进入代码编写窗口。

编写好的代码如下图所示:选择VS2008的生成》配置管理器,打开配置管理器,如下图所示:在活动解决方案配置下拉框中选择Release,然后点击关闭。

选择生成》生成DrivesInfoDll,然后生成一个DLL文件。

在项目的的bin\Release目录下面可以找到生成的DLL文件,如下图所示:我们把它复制我要使用它的地方,如下图:现在,打开LabVIEW2012,新建一个VI,切换到程序框图,选择下图的构造器节点到程序框图:此时将自动打开选择.NET构造器:点击浏览按钮,选择要调用的DLL:点击确定后在对象中选择Class1:,如下图所示:点击确定按钮关闭对话框。

选择下图的调用节点到程序框图:将构造器节点的“新引用”输出端与调用节点的“引用”输入端连接起来,然后在调用节点的“方法”上点击,选择我们要使用的方法,这里选择GetDrivesInfo()。

选择下图的关闭引用到程序框图并连接调用节点的“引用输出”输出端到关闭引用的“引用”输入端。

然后创建一个字符串数组,显示GetDrivesInfo方法的执行结果。

完整的程序框图如下:运行后的前面板结果如下:这说明程序是执行成功了的。

labview复习重点总结

labview复习重点总结

Labview复习题一、填空1。

所有的LabVIEW 应用程序,即虚拟仪器(VI),它包括前面板、流程图以及图标/连结器三部分。

2。

LabView有三种操作模板,分别是控件模板、函数模板和工具模板。

3。

CIN节点需要调用*.lsb格式文件,这种文件可以通过Visual C++来生成.4。

虚拟仪器设计中连线为虚线时表示数据类型不匹配出错,当RUN按钮显示为折断的箭头时,表示程序有错误发生.5。

在LabView中局部变量主要用于程序内部传递数据,全局变量主要用于程序之间传递数据。

6。

程序框图由端口、节点和连线组成的可执行代码.7、数组是相同类型的数据元素的集合,数据元素的类型可以是任意的,可以创建数值数组、布尔数组、字符数组和簇数组.8、数据采集系统由被测参数→传感器→信号调理→数据采集卡→计算机组成。

9、Labview支持文本文件,二进制文件,数据记录文件,波形文件,测试数据文件等格式的文件输入和输出。

10、数据采集卡性能指标有输入通道数,输出通道数,采集位数,采集速度等。

11、循环边框上的数据出口为一个小方块,称为移位寄存器,具有存贮数据功能,对FOR循环而言第一次循环时布尔型数据出口值为false.12、虚拟仪器在使用数据采集卡之前必须运行专用软件MAX进行配置,如设置通道名,输入输出类型,测量类型等。

13、LabVIEW概念是一种用图标代替文本行创建应用程序的图形化编程语言。

14、传统文本编程语言根据语句和指令的先后顺序决定程序执行顺序,而LabVIEW则采用数据流编程方式,程序框图中节点之间的数据流向决定了程序的执行顺序.它用图标表示函数,用连线表示数据流向。

15、LabVIEW程序为称为VI,扩展名默认为.vi。

16、程序框图是图形化源代码的集合,这种图形化的编程语言也称为G语言.17、虚拟仪器系统是由计算机、应用软件和仪器硬件三大要素构成的。

计算机与仪器硬件又称为VI的通用仪器硬件平台。

用labview调用c语言的方法

用labview调用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 CCIN节点必须调用.lsb文件。

.lsb文件是通过外部编译器与CINTools工具结合将C代码编译生成的。

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

例18.6 利用CIN节点实现加法运算第一步:在程序框图放置一个空CIN节点;CIN节点位于程序框图的互连接口->库与可执行程序->代码借口节点。

第二步:创建CIN节点的输入输出端口;初始情况下,CIN只有一对端口:一个输入端口和一个输出端口。

向下拉大节点边框或右击节点端口选择增加参数,可以为节点增加输入输出端口。

CIN节点的端口都是成对出现的,因为CIN节点端口传递的是指针,所以该参数既可以作为输入又可以作为输出。

74.调用动态链接库 6 - LabVIEW 中对 C 语言指针的处理

74.调用动态链接库 6 - LabVIEW 中对 C 语言指针的处理

调用动态链接库6 - LabVIEW 中对 C 语言指针的处理C 语言函数常有指针类型的参数,有时候,在LabVIEW 中只能得到一个指向某个数据的指针。

比如,在第4节里的一个例子:#pragma pack (1)typedef struct { char a; char* str; int b} MyStct;MyStct* testStruct;long TestStructure(MyStct* tempStct);在LabVIEW CLN 节点中,就只能返回以整数类型表示的str 的指针。

在大多数情况下,并不需要在LabVIEW 中得到指针指向内存的具体数据,对这些数据的操作是在DLL的函数中完成的。

我们只需在LabVIEW中得到这个指针的地址,再把它传递到下一个CLN 节点就可以了。

但在某些情况下,我们仍然需要在LabVIEW 中得到指针指向的内容,这只能借助C 语言来完成。

在上面的例子,我们需要另外写一个 C 函数,把函数TestStructure 返回的tempStct 结构中的元素拆开成简单数据类型,作为新的函数的参数(新函数中的一个参数就是char* str,LabVIEW可以识别它)。

在LabVIEW 中调用这个新的函数,可以得到这些简单数据类型的数据。

有些函数需要在外部开辟的一块内存中写入数据,LabVIEW 中没有分配内存的操作,也需要再写一个 C 的函数分配好内存,给被调用的函数使用。

这种做法的缺点是针对每个需要得到内容的指针都要做个包装函数,相当麻烦。

一个减少C代码的方法是:编写一个C函数,负责把指针指向的内存中的数据以数组的形式读出,再在LabVIEW 中把它们从新组织成合理的数据类型。

这种方法其实更复杂,好在LabVIEW 8.5 中自带的一些VI 已经做了这个工作。

如果你需要,不需要再额外编写代码,直接用LabVIEW 提供的VI 就可以了。

[LabVIEW]\vi.lib\Utility\importsl\GetValueByPointer\GetValueByPointer.xnode 就是用来得到指针内容的一个VI。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
用 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。
图 18.10 VC 中创建新 DLL建的 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 代码 。
右击 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 节点实例。
相关文档
最新文档