问题标签 [cvi]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
6 回答
1156 浏览

c - 如何在 ansi C90 中捕获运行时错误

我正在使用库 Function ConnectToTCPServer。当主机不可达时,该函数超时。在这种情况下,应用程序崩溃并出现以下错误:“NON-FATAL RUN-TIME ERROR: "MyClient.c", line 93, col 15, thread id 0x000017F0: Library function error (return value == -11 [0xfffffff5]) . 超时错误"

Errorcode 11 是一个超时错误,所以这可能在我的应用程序中经常发生 - 但是应用程序崩溃 - 我想捕捉这个错误而不是让我的应用程序崩溃。

如何在 Ansi C90 中捕获此运行时错误?

编辑:这是当前使用的代码片段:

回调函数永远不会被调用。我的服务器没有运行,所以 ConnectToTCPServer 将超时。我会怀疑回调被调用 - 但它从未被调用。

编辑2:实际上没有调用回调函数,ConnectToTCPServer的返回值包含相同的错误信息。我认为ConnectToTCPServer抛出此错误可能是一个错误。我只需要抓住它并将其放入 C90 中即可。有任何想法吗?

编辑 3:我测试了回调函数,在我的服务器在线的罕见情况下,实际调用了回调函数 - 这无济于事,因为发生错误时不会调用回调。

0 投票
1 回答
882 浏览

distribution - 如何使用 CVI/Labview 通过命令行创建分发套件

我有一个 NI CVI/Labview 项目,它通过在命令行上使用 compile.exe 命令进行编译。这会生成预期的可执行文件并在开发 PC 上运行良好。不过,我还想使用命令行命令为这个项目创建一个分发工具包。

CVI 允许我通过 IDE 生成分发工具包,我还偶然发现了允许我使用 ActiveX 接口打开项目和创建分发工具包的代码。但是,我正在专门寻找命令行选项。

如有必要,可以使用项目的相应 CDS 文件。

0 投票
2 回答
3106 浏览

c - 如何通过 C90 中的函数传递 va_list

我想将 va_list 传递给另一个函数。这是我正在尝试做的一个例子:

在我看来,我va_list ap是一个char指针,我怎样才能得到整个列表?我如何重写my_printf()以将整个或假的传递va_list给子函数?我不能修改我的子函数来接受va_list指针,所以我必须修改my_printf.

编辑:我意识到以下内容会起作用,但这不是我想要的。

0 投票
2 回答
1645 浏览

c - 在 CVI/Labwindows 中同步线程

我有两个(或更多线程)并行工作。它们的目的是测量硬件设备,它们依赖于外部硬件刺激。在执行过程中的某个时刻,它们触发硬件设备并等待刺激。但我只有一个刺激装置。

因此线程必须等待,直到每个线程都准备好接收刺激。现在另一个线程(可能是调度主线程)必须触发设备并且线程可以继续。

同步这个的最佳实践是什么?最好用动态数线程?

编辑: 我们使用 CVI/Labwindows。这提供了一些线程,但主要是通过不良记录的宏。我已经弄清楚了如何注册线程,启动它们并等待它们完成。

似乎也有创建线程安全变量和锁的工具。但是他们的语法让我望而却步,因此我想/需要自己构建某种互斥体/信号量。

0 投票
1 回答
611 浏览

visual-studio-2010 - 在 VS2010 中创建的静态库在 CVI 中不可链接

我用 VS2010 创建了一个简单的静态 Ansi-C90 库。我能够在 VS2010 中创建一个 C++ 项目,导入并全面测试 lib。

我打开了一个 LabWindows CVI 项目并尝试在那里导入 lib 文件。

不幸的是,没有太多事情要做 - 我得到的唯一消息是:“读取外部模块时遇到错误的标头:'Release\mylib.obj'”

有什么方法可以调查我的 lib 文件有什么问题吗?是否有一些 VS2010 不遵循的标准格式?


编辑#1:

我确定了问题的可能来源,但我目前无法检查。VS2010 不会编译为静态单线程库 - 该功能已被删除。CVI 可能无法处理静态多线程库。

我还在 NI 论坛上发布了这个问题。

编辑#2:

NI 论坛链接已损坏 - 我认为它的 NI 有问题并提供了一个Google 搜索链接来发帖。

0 投票
1 回答
213 浏览

c - MSXML 的内存处理问题

我有一个使用 dll 中的一些遗留代码测试制造产品的应用程序。可以为不同的产品设置应用程序。设置是通过 xml 文件完成的,并且可以(并且将)在运行时更改,即在批次结束时。xml 的处理由上述遗留 dll 完成。

运行较长时间(几天到几周)后,我注意到内存占用量增加了。对此进行调试,我可以追踪到 dll 的(可能的)泄漏。得到源之后,我可以进一步调查,直到我发现这样的东西:

在我看来,每次都会调用它,开始一个新的批次。正是这种doc结构,似乎存在于记忆中。我找不到任何释放它的地方。

毕竟,该 dll 有很多轻微的泄漏,全部来自未释放的对象(CVI 函数)。我修复了这些,但我不知道如何释放这个 MS-Objects。我遇到了这个:了解 MSXML 垃圾收集机制,但是在我拥有 ANSI-C 代码之后,我不确定如何处理 GC 以及它是否有效。

有没有办法手动释放 MSXML 对象?

0 投票
0 回答
67 浏览

filtering - 高速运行过滤器

我正在用 CVI 编写信号处理软件。我有一个信号,通过 USB 以非常高的速度(~50K)传输到计算机。我想在 RT 中过滤它。为了做到这一点,我在 Simulink 中创建了一个过滤器并将其转换为 C 代码,我在 CVI 中使用以下代码运行:

  • FuncName_initialize()
  • 函数名.in
  • FuncName_step()
  • 函数名输出

问题是一段时间后(大约 5-7 分钟),过滤器工作错误......意味着显示不准确的结果和伪影。我相信这是因为使用速度太快(因为我之前以较低的速度使用过它,这很好)。

关于可能是什么问题的任何建议?如何直接在 CVI 中实现 RT 过滤器(意思是在输入获得一个点并在输出中获得一个点,同时保持一些窗口)。

我知道以这种速度传输的数据很好,因为记录信号工作正常,并且在屏幕上显示原始数据也工作正常。

谢谢

0 投票
0 回答
992 浏览

c - 非常快的 COM 端口读取

我正在高速(3,686,400 b/秒)从 COM 端口读取数据。为了实现这一点,我必须读取 512 字节的块并显着增加我的超时时间(到 1000),这样即使我正在同步读取,我每次都会得到一个完整的块而不是它的一部分。

问题:经过几分钟的运行和绘制结果就好了,我得到了损坏的信息。这意味着我仍然没有按照我想要的速度获得信息,但是明显延迟了。

当我在软件上加载更多内容时尤其会发生这种情况,例如运行将数据写入文件的记录线程。生成的文件比预期的要短得多,即使没有损坏(就像我得到传输数据的开头而不是全部)。

我知道它不是发送设备,因为重新加载 PC 应用程序,而设备仍然发送数据重新初始化整个事情。

如果重要的话,我使用的是 Windows 7,英特尔酷睿 i3,64 位。在 CVI 中编写 C 代码。使用 Windows API 读取 COM 端口。

有什么建议么?

谢谢

0 投票
1 回答
1537 浏览

labwindows - 在构建过程中如何定位较旧的 CVI 版本?

我目前正在使用 LabWindows/CVI 2012 开发实验室自动化软件。我客户的实验室都安装了 CVI 9.0 运行时环境 (RTE)。客户强烈希望避免将他们的实验室站更新到最新的 CVI RTE。

我已经在我的机器上安装了旧版本的 LabWindows (9.0) 并成功构建了我的项目,所以我知道我的代码可以在两种环境下编译。

理想情况下,我想使用 LabWindows 2012 并告诉它以较旧的 CVI RTE 为目标。这可能吗?

0 投票
1 回答
336 浏览

labwindows - 如何在同一台机器上安装多个版本的 LabWindows 开发环境?

我在 LabWindows 中为多个客户开发软件。通常情况下,客户使用的是 CVI 运行时引擎 (RTE) 的后级版本。如果可能,会敦促客户升级到最新版本,但如果他们不能,我必须构建针对旧 RTE 的软件。LabWindows 不支持为以前版本的 RTE 进行编译,因此解决方法是安装多个版本的 LabWindows 开发环境,并使用与目标 RTE 匹配的任何版本进行编译。

如何在同一台机器上安装多个版本?