当前位置: 首页 > news >正文

LabVIEW应用程序(EXE)无法正确动态调用插件

LabVIEW应用程序(EXE)无法正确动态调用插件

正在构建一个应用程序并使用插件架构,以便可以动态调用将来创建的VI(插件)。应用程序在LabVIEW开发环境中可以正常运行,但不能作为可执行程序运行。

运行可执行文件时,将发生以下情况之一:

应用程序似乎什么也没做,好像从未调用过插件

收到错误1003,指示VI不可执行

收到一个对话框,要求查找“丢失”的子VI

解决方案

下面概述了几种可用于解决此问题的方法:

方法1:将子VI包含在与插件相同的目录中

将插件使用的子VI保存在与插件相同的位置。还可以将这些子VI包含在与插件位于同一目录中的文件夹中。这是有效的,因为可执行文件的默认VI搜索路径包括可执行文件及其子目录的路径。注意:必须包括VI的所有依赖项,包括子VI等。

方法2:将插件另存为LLB

通过选择文件»使用选项保存»应用程序分发,将的插件另存为LLB。这会自动将所有子VI(包括引用的VI)保存到一个LLB文件中。有关创建LLB的更多信息,请参阅如何创建自动包含所有子VI的LabVIEWVI库vi.lib

方法3:将插件创建为单个顶级VI,并将子VI另存为LLB

这是方法1和2的组合。首先像往常一样保存的顶级VI(即MyVI.vi)。然后按照方法2(即MyVI.llb)中指定的方式保存的VI。这实际上将创建一个子目录(MyVI.llb),其中包括必要的子VI。注意:LLB还包括的顶级VI的另一个副本(即MyVI.vi)。这不会造成任何伤害,但是可以通过转到“工具»编辑VI库”从llb中删除副本。

方法4:明确指定子VI的目录(即vi.lib目录)作为可执行文件的VI搜索路径的一部分

如果在包含插件子VI的机器上运行可执行文件,则可以指定子VI的目录(即)作为可执行文件的VI搜索路径的一部分。为此,请将以下行添加到可执行文件的ini文件中:有关更改可执行文件的VI搜索路径的更多信息,请参阅如何更改或设置LabVIEW可执行文件的VI搜索路径?vi.lib

viSearchPath="C:\Program Files\National Instruments\LabVIEW \vi.lib ; C:\AnotherDirectory ; etc."

方法5:构建源分发

为插件VI创建源分发,确保取消选中以下选项以包含插件的所有依赖项。

附加信息

当动态调用插件VI,但由于主级可执行文件无法找到插件的依赖项而无法运行时,可能会导致此行为。例如,如果的插件使用VI(例如简单错误处理程序VI),则需要以某种方式告诉顶级可执行文件如何找到这些VI。在LabVIEW开发环境中运行顶级应用程序时不会发生此行为,因为该目录被指定为VI搜索路径的一部分(在工具»选项»路径»VI搜索路径中),但默认情况下不包含在可执行文件中。vi.libvi.lib

IssueDetails

I ambuilding an application and using a plug-in architecture so I can dynamicallycall VIs (plug-ins) that I create in the future. My application works correctlyin the LabVIEW development environment, but not as an executable.

Whenrunning the executable one of the following occurs:

Myapplication seems to do nothing, as if the plug-in was never called

I receiveError 1003 indicating that the VI is not executable

I receivea dialog asking me to find the "missing" subVIs

Solution

There aseveral method outlined below that may be used to resolve this issue:

Method 1: Include the subVIs in the samedirectory as the plug-in

Save thesubVIs that your plug-in uses in the same location as the plug-in. You can alsoinclude these subVIs in a folder that is located in the same directory as theplug-in. This works because the default VI Search Path for an executableincludes the path of the executable and its sub-directories. Note: you mustinclude all of the VI's dependencies, including sub-subVIs, etc.

Method 2: Save your plug-in as an LLB

Save yourplug-in as an LLB by selecting File»Save with Options»Application Distribution.This automatically saves all of the subVIs (including referenced vi.lib VIs)into one LLB file. For more information on creating LLBs, see How Do I Create aLabVIEW VI Library that Automatically Includes All SubVIs?

Method 3: Create your plug-in as a singletop-level VI and save your subVIs as an LLB

This is acombination of Methods 1 & 2. First save your top-level VI as usual (i.e.MyVI.vi.). Then save your VI as specified in Method 2 (i.e. MyVI.llb). Thiswill in effect create a sub-directory (MyVI.llb), which includes the necessarysubVIs. Note: the llb also includes another copy of your top-level VI (i.e. MyVI.vi.).This does not hurt anything, but you can delete the copy from the llb by goingto Tools»Edit VI Library.

Method 4: Explicitly specify the directory ofyour subVIs (i.e. vi.lib directory) as part of the VI Search Path for yourexecutable

If you arerunning the executable on a machine which includes the plug-in's subVIs, youcan specify the directory of the subVIs (i.e. vi.lib) as part of the VI SearchPath for the executable. To do so, add the following line to the executable'sini file:

viSearchPath="C:\ProgramFiles\National Instruments\LabVIEW \vi.lib ; C:\AnotherDirectory ; etc."

For moreinformation on changing the VI Search Path of an executable, please referenceHow Can I Change or Set the VI Search Path for LabVIEW Executables?

Method 5: Build a Source Distribution

Create asource distribution for the Plug-in VI, make sure to uncheck the followingoptions to include all dependencies for the plug-in.

AdditionalInformation

Thisbehavior can be caused when a plug-in VI is called dynamically, but is unableto run because the main-level executable cannot locate the plug-in'sdependencies. For instance, if your plug-in uses vi.lib VIs (such as the SimpleError Handler VI) you will need to somehow tell the top-level executable how tofind these VIs. This behavior does not occur when running the top-levelapplication in the LabVIEW development environment because the vi.lib directoryis specified as part of the VI Search Path (in Tools»Options»Paths»VI SearchPath), but is not included by default in executables.

需要说明的是,上述的例程和文档,都是可以下载的,双击即可打开,其中压缩文件是可以采用粘贴复制的方式,拷贝到硬盘上。这不是图片,各位小伙伴看到后尝试一下,这个问题就不用加微信咨询了。有关LabVIEW编程、LabVIEW开发等相关项目,可联系们。附件中的资料这里无法上传,可去公司网站搜索下载。

相关文章:

LabVIEW应用程序(EXE)无法正确动态调用插件

LabVIEW应用程序(EXE)无法正确动态调用插件正在构建一个应用程序并使用插件架构,以便可以动态调用将来创建的VI(插件)。应用程序在LabVIEW开发环境中可以正常运行,但不能作为可执行程序运行。运行可执行文件…...

到了35岁,软件测试职业发展之困惑如何解?

35岁,从工作时间看,工作超过10年,过了7年之痒,多数IT人都已经跳槽几次。 35岁,发展比较好的软件测试人,已经在管理岗位(测试经理甚至测试总监)或已经成为测试专家或测试架构师。发展…...

Google Guice 3:Bindings(1)

1. 序言 上一篇博客,《Google Guice 2:Mental Model》,讲述了Guice的建模思路:Guice is a map Guice官网认为:binding是一个对象,它对应Guice map中的一个entry,通过创建binding就可以向Guice …...

学习国家颁布的三部信息安全领域法律,理解当前工作中的信息安全合规要求

目录三部信息安全领域的法律文件三部法律的角色定位与联系三部法律的适用范围三部法律的主要履职部门三部法律条文章节结构中的共性三部法律中的一些次重点章节网络安全法的重点章节数据安全法的重点章节个人信息保护法的重点章节关于工业和信息化部行政执法项目清单三部信息安…...

LeetCode_Python_二分查找算法

二分查找算法要求二分查找过程如何更新左右边界实例type1:常规记录中间元素type2:取跳出循环后的左或右边界算法要求 顺序存储结构元素大小有序 二分查找过程 将元素排序;将中间位置记录的这个元素与目标元素比较; 2.1 如果相同&a…...

功能测试三年,是时候做出改变了

前言 测试行业3年多经验,学历大专自考本科,主要测试方向web,PC端,wap站,小程序公众号都测试过,app也测过一些,C端B端都有,除功能外,接口性能也有涉猎,但是不…...

图扑孪生工厂流水线组态图可视化

前言 2018 年,世界经济论坛(WEF)携手麦肯锡公司共同倡议并正式启动了全球“灯塔工厂网络项目”(Lighthouse Network),共同遴选率先应用工业革命 4.0 技术实现企业盈利和持续发展的创新者与示范者。这就使得工厂系统需要对各流水线及生产运行成本方面进行…...

车机开发—【CarService启动流程】

汽车架构:车载HAL是汽车与车辆网络服务之间的接口定义(同时保护传入的数据): 车载HAL与Android Automotive架构: Car App:包括OEM和第三方开发的AppCar API:内有包含CarSensorManager在内的AP…...

webpack中require.context的运用

1. 作用: 利用require创建context (上下文),来告知在编译时具体需要导入哪些模块(即:批量处理待导入模块进行导入); webpack会在构建的时候解析代码中的require.context() (实际上是webpack的方法,vue一般基于webpack…...

2023“Java基础-中级-高级”面试集结,已奉上我的膝盖

Java基础(对象线程字符接口变量异常方法) 面向对象和面向过程的区别? Java 语言有哪些特点? 关于 JVM JDK 和 JRE 最详细通俗的解答 Oracle JDK 和 OpenJDK 的对比 Java 和 C的区别? 什么是 Java 程序的主类&…...

RabbitMQ之发布确认

发布确认 1 发布确认原理 生产者将信道设置成 confirm 模式,一旦信道进入 confirm 模式,所有在该信道上面发布的消息都将会被指派一个唯一的 ID(从 1 开始),一旦消息被投递到所有匹配的队列之后,broker就会发送一个确认给生产者(包含消息的唯一 ID),这就使得生产者知道消…...

一文读懂函数编程及其工作原理

微软MVP实验室研究员 马洪喜-微软 MVP 19年研发经验 云计算咨询顾问专家 容器云及基础架构云技术专家 DevOps 及微服务咨询专家 什么是函数编程 我先用通俗的大白话给大家解释一下函数(Functions, Function as a Service, FaaS)的几个要点,这样看后面示例时才不…...

WSO2 apim Subscribe to an API

WSO2 apim Application Subscribe to an API1. Published an Api2. Subscribe to an API using Key Generation Wizard3. Subscribe to an existing application4. AwakeningWSO2安装使用的全过程详解: https://blog.csdn.net/weixin_43916074/article/details/127987099. Offi…...

聚类(性能度量)

文章目录聚类(性能度量)外部指标例1内部指标例2聚类(性能度量) 对数据集 D{x1,x2,...,xm}D\{x_1,x_2,...,x_m\}D{x1​,x2​,...,xm​} ,假定通过聚类给出的簇划分为 C{C1,C2,...,Ck}C\{C_1,C_2,...,C_k\}C{C1​,C2​,…...

GPT-4——比GPT-3强100倍

GPT-4——比GPT-3强100倍 当前世界上最强大的人工智能系统当属ChatGPT。推出2个月用户数就突破1亿。ChatGPT是当下最炙手可热的话题,科技圈几乎人人都在讨论。这边ChatGPT的热度还在不断攀升,另一边来自《纽约时报》的最新报道称ChatGPT即将被自家超越&…...

echart中x轴数据过多时展示不全

项目中遇到需要展示一些柱状图,之前做相关功能时,横坐标x轴一直用的是时间,所以没有注意到这个问题。 如下图所示: 当x轴显示的是”人名“这种类型的值的时候,这种显示情况就有问题了,这样就不会知道&…...

关于GIS原理的实际分析应用题的一些解法

话不多说,看题.01 公园选址问题1题目请写出利用GIS技术进行公园选址的空间操作步骤。其中公园选址条件:1)为了安静舒适,要求该园区离主要公路1公里以外,且交通方便,离主要公路3公里以内。2)公园最好依附在大…...

混合精度训练,FP16加速训练,降低内存消耗

计算机中的浮点数表示,按照IEEE754可以分为三种,分别是半精度浮点数、单精度浮点数和双精度浮点数。三种格式的浮点数因占用的存储位数不同,能够表示的数据精度也不同。 Signed bit用于控制浮点数的正负,0表示正数,1表…...

每天五分钟机器学习:新的大规模的机器学习机制——在线学习机制

本文重点 本节课程我们将学习一种新的大规模的机器学习机制--在线学习机制。在线学习机制让我们可以模型化问题。在线学习算法指的是对数据流进行学习而非离线的静态数据集的学习。许多在线网站都有持续不断的用户流,对于每一个用户,网站希望能在不将数据存储到数据库中便顺…...

计算机组成原理错题

静态RAM(SRAM)和动态RAM(DRAM)的基本电路图不同,因此可以通过观察存储器的基本电路图来判断它属于哪一类。 静态RAM的基本电路图包括一个存储单元和一个数据选择器。每个存储单元由一个触发器(flip-flop&a…...

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…...

基于ASP.NET+ SQL Server实现(Web)医院信息管理系统

医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上&#xff0c;开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识&#xff0c;在 vs 2017 平台上&#xff0c;进行 ASP.NET 应用程序和简易网站的开发&#xff1b;初步熟悉开发一…...

论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)

笔记整理&#xff1a;刘治强&#xff0c;浙江大学硕士生&#xff0c;研究方向为知识图谱表示学习&#xff0c;大语言模型 论文链接&#xff1a;http://arxiv.org/abs/2407.16127 发表会议&#xff1a;ISWC 2024 1. 动机 传统的知识图谱补全&#xff08;KGC&#xff09;模型通过…...

什么是Ansible Jinja2

理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具&#xff0c;可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板&#xff0c;允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板&#xff0c;并通…...

AI书签管理工具开发全记录(十九):嵌入资源处理

1.前言 &#x1f4dd; 在上一篇文章中&#xff0c;我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源&#xff0c;方便后续将资源打包到一个可执行文件中。 2.embed介绍 &#x1f3af; Go 1.16 引入了革命性的 embed 包&#xff0c;彻底改变了静态资源管理的…...

rnn判断string中第一次出现a的下标

# coding:utf8 import torch import torch.nn as nn import numpy as np import random import json""" 基于pytorch的网络编写 实现一个RNN网络完成多分类任务 判断字符 a 第一次出现在字符串中的位置 """class TorchModel(nn.Module):def __in…...

【VLNs篇】07:NavRL—在动态环境中学习安全飞行

项目内容论文标题NavRL: 在动态环境中学习安全飞行 (NavRL: Learning Safe Flight in Dynamic Environments)核心问题解决无人机在包含静态和动态障碍物的复杂环境中进行安全、高效自主导航的挑战&#xff0c;克服传统方法和现有强化学习方法的局限性。核心算法基于近端策略优化…...

【C++特殊工具与技术】优化内存分配(一):C++中的内存分配

目录 一、C 内存的基本概念​ 1.1 内存的物理与逻辑结构​ 1.2 C 程序的内存区域划分​ 二、栈内存分配​ 2.1 栈内存的特点​ 2.2 栈内存分配示例​ 三、堆内存分配​ 3.1 new和delete操作符​ 4.2 内存泄漏与悬空指针问题​ 4.3 new和delete的重载​ 四、智能指针…...

日常一水C

多态 言简意赅&#xff1a;就是一个对象面对同一事件时做出的不同反应 而之前的继承中说过&#xff0c;当子类和父类的函数名相同时&#xff0c;会隐藏父类的同名函数转而调用子类的同名函数&#xff0c;如果要调用父类的同名函数&#xff0c;那么就需要对父类进行引用&#…...