LabVIEW2015生成exe时发生如下错误要怎么解决

LabVIEW2015生成exe时发生如下错误要怎么解决,第1张

要想在没有安装LabVIEW的电脑上运行LabVIEW生成的exe文件是不行的,要想exe能够运行,需要电脑上不但安装有对应版本的LabVIEW runtime engine,还有需要对应版本的工具包。

我举个例子,比如说你封装了一个EXE,LabVIEW的开发环境是LabVIEW2009,exe所包含的VI里还有DAQ923和VISA51两个工具包里的一些函数,那么你要运行的机器上还要安装有LabVIEW2009 的runtime engine和DAQ923还有VISA51两个工具包,少一样或者有版本号不同,exe都是没法运行的。

一般处理的办法是在生成了exe之后,在打包生成一个installer(安装包),在生成安装包的过程中可以把所需要的runtime engine和其他的工具包包含进去,那这个安装包安装到其他机器上就可以正常运行了。若机器上安装过installer,那么开发环境不改变的话,只是程序更新,把exe覆盖过去就可以更新,不需要再重新安装installer。

用LabVIEW和Matlab混合编程技术可以实现,具体有以下几种方法

一、基于动态数据交换(DDE)技术

动态数据交换是Windows *** 作系统中一种基于消息的协议,用于在Windows平台上的两个正在运行的应用程序之间动态交换数据,其中提供数据服务的程序称为服务器程序(DDE Server),请求数据和服务的程序称为客户程序(DDE Client)LabVIEW提供了DDE通信VI,利用这些VI可以创建DDE Server或DDE Client,完成接收/发送数据、请求/提供服务等功能。LabVIEW调用Matlab功能时,需将服务名(service name)指定为”Matlab”,主题名(Topic Name)指定为”Engine”,同时在运行VI之前先启动Matlab或者Matlab计算引擎(在内存中均为Matlabexe),否则无法通信。DDE VIs可在<LabVIEW>\vilib\platform\ddellb下找到。

二、基于动态链接库(DLL)技术

动态连接库是基于Windows程序设计的一个重要组成部分,它由一系列封装好的可执行代码组成,其内部函数能被其他程序所共享。LabVIEW通过CLF(Call Library Function Node)实现对DLL的调用。另一方面,Matlab编译器能将函数文件编译C/C++代码,这些代码又能被C/C++编译器(如Microsoft Visual C++ 60)编译成DLL文件,只要接口(输入输出参数)安排正确,就可以将Matlab编写的算法集成到LabVIEW应用程序中,且脱离了Matlab运行环境,执行效率高。另外,Math works公司为Microsoft Visual C++ 60提供了一个插件,可以轻松完成上述工作,当然接口还需开发人员自己安排。CLF在函数面板的“Advanced”子模板下。

三. 基于组件对象模型(COM)技术

组件对象模型的核心就是二进制接口规范,此规范独立于编程语言和 *** 作系统。从65版本开始,Matlab提供了COM生成器。COM生成器提供了实现Matlab独立应用的一种新途径。它能把Matlab开发的算法做成组件,这些组件作为独立的COM对象,可直接被Visual Basic,Visual C++或其他支持COM的语言所引用[1]。LabVIEW50及以上版本支持COM。它通过自动化标识(automation refnum)获取一个已安装在系统中的COM组件的引用,然后借助ActiveX功能子模板中的VI完成对组件的控制和调用工作。利用COM技术的LabVIEW和Matlab无缝集成的应用程序运行效率高,占有系统资源少,而且非常利于用户应用软件的发布。[2]

四. 基于ActiveX自动化技术

ActiveX的自动化(automation)是ActiveX最重要的功能之一,是一个程序借助其方法和属性控制另一程序的能力,它包括自动化服务器和自动化控制器。Matlab支持ActiveX自动化技术。Matlab自动化服务器提供一系列方法和属性,借此可以实现在其他应用程序中执行Matlab命令和控制Matlab。LabVIEW50及以后的版本提供对ActiveX自动化的支持。在LabVIEW中基于ActiveX实现和Matlab混合编程的方法又有两种,第一种使用Matlab脚本节点,第二种使用ActiveX函数模板。两种方法的基本过程都相同――先打开Matlab自动化服务器,然后执行Matlab命令,最后关闭自动化服务器。LabVIEW中与ActiveX有关函数模板在函数面板中“communication”子面板下的”ActiveX”面板中。

五. 其他方法

还有一种将DLL和Matlab计算引擎(基于COM技术)结合起来的方法。这种方法把调用Matlab计算引擎的C代码编译成DLL供LabVIEW调用。Matlab计算引擎采用了客户机/服务器的模式,在windows上通过ActiveX通道与Matlab进行连接,因此这种方法与基于ActiveX自动化技术的方法有些类似。在进行混合编程时,先打开Matlab计算引擎,然后执行Matlab命令,最后关闭Matlab计算引擎。所不同的是使用ActiveX自动化技术传递数据均为变体,数据类型由应用程序和Matlab服务器自动匹配,而通过DLL调用Matlab计算引擎的方法即可传递变体类型数据也可传递标准C类型数据,数据类型之间的转换在DLL中完成,因此需开发人员额外编程。除了上述混合编程方法外,NI公司和Math works公司合作推出一个工具包――SIT(Simulation Interface Toolkit),用来实现LabVIEW和Simulink交互式编程。有了这一工具包,设计工程师们可以建立自定义的用户界面,以便交互式地验证Simulink模型,并轻松地将这些模型配置到实时硬件进行控制原型设计和硬件在环(hardware-in-the-loop)测试,最终节省产品上市时间。但如其名,它仅用于和Simulink通信,且为附加软件需额外购买。

1 “编程”——“应用程序控制”——“通过引用调用”

2 看图吧,这不是“通过引用调用”是通过“引用”“调用”和设置“属性”,这样可能更符合你的要求。

3 你的子VI“属性”(Ctrl+i)——“窗口外观”里面没设置“调用时显示前面板”和“如则关闭”吧

点开放大后如果被浏览器又缩小了,可以点右键菜单的类似“查看”的菜单项(不同浏览器叫法不同)。或者直接另存为。

机器视觉系统中常需要从各类仪表的显示屏图像中提取其读数。这些仪表的显示屏可以分为模拟指针显示屏、LCD显示屏和LED显示屏等。

观察模拟仪表可以发现,它们的刻度被标记在一个由初始值和满量程值限定的圆弧范围内,仪表的指针基于圆弧的圆心旋转以指示当前值。由此不难想到先使用两条标记初始值和满量程值的线段,加上一个标记圆心位置的点来校准仪表,然后就可以检测指针的位置,并通过该位置占满量程的比例来确定当前读数。三点法是另一种校准此类仪表的方法。它在仪表初始值、满量程值位置上分别选择一点,再选择指针旋转的圆心,这样圆心点即可与其他两点分别构成线段来实现仪表校准。

指针型显示屏常用于速度表、流量表、电压和电流表等,如下所示:

仪表读取功能还能从具有LCD/LED显示屏的仪表中检测包含单个或多个七段数码管类型数字的区域,并读取包括小数点等分隔符的数值。

LCD/LED显示屏则常采用7段数码管来显示数据,如下所示:

Nl Vision提供了读取上述几种仪表显示的函数,它们对复杂的算法进行了封装,位于LabVIEW的视觉与运动→Machine Vision→Instrument Readers函数选板中,如下图所示:

其中IMAQ Get Meter、IMAQ Get Meter 2和IMAQ ReadMeter用于读取模拟仪表的读数,IMAQ Get LCD ROI、IMAQ Read LCD和IMAQRead Single Digit用于读取使用7段数码管类型的LCD/LED仪表的读数。

函数说明及使用可参见帮助手册:

基于NI Vision的仪表读取函数可快速构建需要读取仪表值的机器视觉系统。通过一个仪表读取函数读取油表显示值的实例,了解模拟仪表识别的应用。

整个过程可分为学习和读数两个阶段。在学习阶段,程序先使用两个IMAQ Convert Line to ROI函数指定了仪表的初始值和满量程值位置。随后IMAQ Group ROI对两个线段ROI进行组合,作为仪表学习函数IMAQ Get Meter的输入。学习过程完成后,会输出仪表指针的旋转中心位置和一个数组。其中数组元素代表仪表初始值和满量程值之间一条沿着刻度的弧线上各点的位置,这些点将用于在读数阶段计算仪表的读数。

读数阶段基于学习阶段的输出来完成,IMAQ Read Meter可以通过检测仪表指针的位置来确定当前读数所在位置占满量程的百分比。而基于该百分比和满量程值,就可以计算仪表的真实读数。

程序设计如下所示:

程序运行结果中,除了显示读数值,还在图像中显示了ROI、学习过程所返回数组中的各点以及指针指向的位置,效果如下所示:

IMAQ Get LCDROI、IMAQ Read LCD可检测包含多个七段数码管类型数字的区域,并读取包括小数点等分隔符在内的数值。IMAQ Read Single Digit则用于读取单个七段数码管类型的数值。与读取模拟仪表数值的过程类似,读取LCD仪表数值的过程也包括学习和读数两个阶段。

学习阶段需要基于所有数字的七段数码管全部打开时的图像(全部为数字8)来定位各个数字所在的矩形范围。读数阶段则通过分析7段数码管数字各段的线灰度分布以确定读数结果。

下图显示了仪表读取函数基于线灰度分布识别LCD/LED数码管显示的原理,其中数字为各段数码管的索引。

上图(a)显示了背景为白色且七段数码管全部打开时的情况,其中数字为各段数码管的索引。假定已在学习阶段从图像中确定了各个数字所在的矩形位置,就可以在水平和竖直方向上设置与各段数码管交叉的线段型ROI,用于后续分析。

由于数码管关闭时,其图像灰度与背景灰度接近,因此线ROI灰度曲线上的像素值分布较为集中。而数码管打开时,因数码段图像灰度与背景反差较大,线ROI灰度曲线上的像素值分布较为分散,如上图(b)所示。

标准差可用来衡量一组数据的分散程度,因此通过计算线ROI上像素灰度的标准差,并为其设置阈值即可判断数码管的开闭。综合考虑7个数码管的各种开闭组合,就能得到其显示的数值。而重复该过程就能读取LCD显示屏中的多个数字。

由于LCD/LED仪表读取函数基于线灰度分布来判断数码管的开闭,因此图像的亮度漂移(Light Drift)、对比度、噪声和分辨率将直接影响其读数的准确性。

通过一个读取LCD仪表显示值的实例,了解LCD/LED显示屏识别的应用方法,程序设计思路如下所示:

程序总体上可分为使用IMAQ Get LCDROI的学习和使用IMAQ Read LCD的读数两大部分。

程序开始先读入仪表所有数字均为8时的图像LCD0jpg,并调用IMAQ Get LCD ROI,从指定的矩形ROI中搜索各个7段数码管数字所在的矩形位置;

一旦获得各个数字位置所在的范围,程序就读取待测图像LCD1jpg,调用IMAQ Read LCD分析各个数字所在的范围内7个数码管的显示情况,以判断最终读数;

仪表学习和读取过程均使用线灰度分布的标准差阈值Threshold来判断数码管的开闭,而且IMAQ Read LCD还支持数字的+/-符号和小数点的读取;

IMAQ Read LCD以浮点数、字符串以及元素为图形的数组返回所读取到的值,其中字符串中的每个字符用小数点进行分割。

程序实现如下所示:

程序运行效果如下所示:

仪表和条码读取是机器视觉系统的常用功能。常见的各类仪表可按显示方式分为模拟指针显示屏、LCD显示屏和LED显示屏等几大类。

机器视觉系统可以使用双线法或三点法,对模拟显示屏类型的仪表进行校准和读取。对七段数码管类型显示数字的LCD/LED仪表的读取,可以通过分析数字所在区域的线灰度分布来实现。数码管关闭时,灰度曲线上的像素值分布较为集中,反之则分布较为分散。在读取仪表过程中,应考虑图像的亮度漂移、对比度、噪声和分辨率对读数准确性的影响。

LabVIEW老版本(86之前),有一个CIN节点,可以直接调用C代码,但是后来NI发现这个节点使用不当的话会造成LabVIEW不稳定,后来取消了这个节点,也就是说现在的LabVIEW都不支持CIN了

现在的LabVIEW版本如果需要和C++接口,可以把C++功能封装成DLL,然后使用LabVIEW的调用库函数节点来间接实现。或者你的C++程序编译成exe文件,可以使用LabVIEW的执行系统命令节点来直接执行exe文件

另一个变通的方法是直接使用LabWIndows/cvi,它有很多跟LabVIEW类似的控件,也可以直接调用LabVIEW的控件,但是完全符合C/C++语法。

 实验室虚拟仪器工程平台(LabVIEW)是一种专门用于数据采集、分析及仪器控制的图形化软件,它所开发的虚拟仪器将计算机强大的数据处理能力与仪器的硬件测试控制能力很好地结合在一起。

LabVIEW 的图形化开发环境具有精确、高效、功能强大、开发简易、实时性强、界面友好等优点,为用户提供了强大功能和使用的灵活性, 非常适合用于进行仿真、实时检测和控制。目前,LabVIEW 已经成为测试领域应用最广泛和最有前途的软件开发平台之一,也是应用最广、发展最快、功能最强的图形化软件开发集成环境之一。

虚拟仪器可以利用高性能的模块化硬件, 结合高效灵活的软件来完成各种测试、测量和自动化应用,与传统的测量仪器相比,具有成本低、功能强大、集成度高、质量可靠、维护方便等优点,能很方便地组建测试系统,满足多种测量要求。因此,基于虚拟仪器技术, 利用LabVIEW 语言进行信号采集系统的研制具有重要意义。

LabVIEW 虚拟仪器主要包括前面板、框图和图标/ 接口部件三部分。

前面板是VI 的交互式用户界面, 即用户与程序代码发生联系的窗口。VI 前面板是控件和指示器的组合,控件仿真常规仪器上的输入输出设备类型,如旋钮和开关,并提供一种机制,将输入从前面板传送到基本框图。

信号采集与处理系统主要应用的是数据采集卡的A / D(模/ 数)转换功能,通过数据采集卡将采集端采集到的模拟电信号利用高速模数转换电路转换为数字信号,经过数据采集卡板载缓存,最后利用计算机中的程序不断从缓存中提取数据, 存入计算机中,并进行相关处理,提取有用数据进行硬盘存储。

利用LabVIEW 语言编写数据采集卡的驱动程序。

2 PCI-1714 数据采集卡

Advantech 公司的PCI-1714 是一款PCI 接口的高速4 通道同步数据采集卡, 可用于高速数据采集应用,性价比较高,适用于仪器测试、图像处理、视频数字化处理及声音与振动测试等领域。

PCI-1714 是高速、高分辨力、高容量的PCI 数据采集卡, 配备4 组模拟输入端, 具备同步采集功能。其特性可归纳为:a)内含4 个独立ADC(模数转换器),可使4 个信道同步取样,当4 组模拟输入同时使用时,采样频率理论最高可达30 MS/s。b)每路ADC 内建32 K FIFO 内存,使用者在高速采样时有足够缓冲区可供暂存, 以维持数据采集速度及完整性。c)提供多种输入范围,包含±5 V、±25 V、±1 V、±05 V 等, 使用者通过工具程序即可轻松完成设定。d) 高达6 种触发模式, 包含软件触发、Pacer、Post-Trigger、Pre-Trigger、Delay-Trigger 及About-Trigger 触发方式,方便客户按需求自行设定。

将需监测的现场信号经滤波器滤波后送入PCI-1714 板卡, 卡上A / D 转换器对信号进行高速模数转换。转换数据首先暂存在板卡的32 K 板载FIFO (先入先出) 中, 当FIFO 半满或全满时,向DMA(动态内存存取)控制器发送DMA 请求,使用直接内存存取方式,经PCI(外设组件互连)总线将数据从FIFO 输出到内部缓冲区中,PCI 总线传输带宽很宽, 可以满足4 通道高速同步采样时所带来的高速数据传输要求。

内部缓冲区作为高速数据采集系统的海量缓存,它与用户缓冲区一样,都是数据采集程序动态分配给驱动程序使用的两块内存区域, 区别在于内部缓冲区存放的是从FIFO 取来的原始值, 用户缓冲区存放的是经转换之后的电压值。

在进行长时间高速数据采集时,PCI-1714 多采用循环方式。在此方式下,启动一次采集过程能进行无数次的A / D 转换。此时内部缓冲区分成前后对等的两个半区使用,当前半区填满后,将此半区的数据向用户缓冲区传送, 同时将新转换的数据放在内部缓冲区的后半部分。当后半区填满后,此半区数据向用户缓冲区传送。同时自动将新转换的数据放到早已传输完毕的前半个缓冲区。可通过查询状态寄存器的状态来判断FIFO 缓冲区的状态, 分别判断空标志位(Empty flag)、半满标志位(Half full flag)以及全满标志位(Full flag)。

内部缓冲区和用户缓冲区的数据可以在程序控制下以文件的形式保存至计算机中, 实现采集数据永久性存储,便于后期数据分析处理。

3 基于LabVIEW 语言实现的PCI-1714采集卡数据采集程序实例

下面介绍用LabVIEW 语言编写的PCI-1714 采集卡数据采集驱动程序。该程序能够实现对传感系统外界信号的数据进行连续采集, 并能根据需要对有用数据进行存储。

从功能上分,该程序主要分为三部分:a)对采集卡进行初始化,完成采集卡重要工作参数的设置,如用户缓存、采样速率(scan rate)、输入限制等。b)进行数据采集和有用数据的存储, 就是将数据先放入采集卡的板载缓存FIFO 中, 再由计算机读取板载缓存中的数据, 写入由计算机的内存中分配出的用户缓存, 然后根据需要将有用数据从内存中存入计算机硬盘。具体存储格式可以为多种,该部分中包括的子VI 有读取数据模块、数据存储模块以及显示所采集信号的时域图形的模块。c)在采集结束后关闭采集卡。

为了使用PCI-1714 进行连续高速的数据采集,需要对采集速率、用户缓存大小等重要参数进行合理设置。如前所述,数据采集卡进行A / D 转换时是连续进行的, 也就是说采集卡往板载缓存中放入数据是连续进行的, 而计算机从板载缓存FIFO 中读取数据放入用户缓存时是在FIFO 半满或全满的状态下批量读取的,同时,如果要进行数据的存储,从用户缓存再向硬盘中写入数据时也是批量进行的。

由于用户缓存的大小受计算机内存空间大小的限制,不可能无限大,在使用过程中,只能尽量设得比较大,一般可以设为内存的十分之一左右。在保持一定的数据采样率并且用户缓存确定的情况下, 如果存储过程中,单批量写入硬盘的数据过少,会出现不能及时将数据从用户缓存中读出, 从而导致用户缓存溢出的错误。而当单批量写入硬盘的数据过多时,又会出现从用户缓存读取数据过快, 可能会读出空数据的错误,所以这几个参数必须互相配合设定才能使采集卡获得良好的采集和数据存储的性能。

4 基于LabVIEW 的数据调用与处理

利用上述程序完成信号采集的同时可以将有用信号存储,用于后续分析,下面举例说明如何将存储之后的波形数据重新调出并进行分析。

将以TXT 格式存储的数据从文件中调出并进行频谱分析的程序。在程序前面板中可以同时将一段数据表示的信号时域波形及利用“FFT 功率谱”VI分析获得功率谱波形显示出来。

利用LabVIEW 语言编写一个用于将存储数据调出并对信号波形特点进行分析的程序,该程序可以将一个具有多信道的监测信号从存储文件中调出,不同信道的监测信号各不相同,根据信号波形的特点,可以选用相关方法进行信号处理,分析各信号对应的监测环境的变化。利用LabVIEW 所提供的“调用库函数节点”模块,可以很方便地把C 语言编写的程序嵌入LabVIEW 程序中, 并且可以封装成子VI,供主程序调用。适用于一些LabVIEW 语言编程效率不高的应用场合,利用“调用库函数节点”模块编写的子VI 程序。

以上就是关于LabVIEW2015生成exe时发生如下错误要怎么解决全部的内容,包括:LabVIEW2015生成exe时发生如下错误要怎么解决、如何将Matlab的程序嵌入到Labview中去,也就是如何利用Matlab编程,用Labview开发界面、1.labview如何通过引用调用子程序;等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/zz/9841854.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-02
下一篇2023-05-02

发表评论

登录后才能评论

评论列表(0条)

    保存