问题标签 [labwindows]

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 投票
0 回答
289 浏览

c - 3D 网格数据的插值

我在 3D 图中有六个点。例如:

在 matlab 中我可以使用 griddata 函数和结果:

3D 绘图结果:

现在我需要在 LabWINdows 中用 C 语言做同样的插值。我在互联网上搜索,但在 C 中找不到源代码或示例如何在 3D 网格图中进行线性插值。有人可以帮助解决这个话题吗?在 LabWindows 中,我也可以使用 OpenGL。

0 投票
1 回答
212 浏览

multithreading - DiscardAsyncTimer 在计时器回调完成之前返回

我正在尝试使用异步计时器在 LabWindows/CVI 2017 中编写程序,但遇到了 DiscardAsyncTimer() 函数的问题。从 DiscardAsyncTimer() 的文档中:

在所有未完成的异步回调返回之前,创建或丢弃异步计时器的调用不会完成(将阻塞)。

但是,我遇到了一些内存问题,我在调用 DiscardAsyncTimer() 后释放了异步计时器线程中使用的内存。我希望内存不再使用,但显然情况并非如此?我在下面有一个示例程序,它重现了我的问题。运行时,由于尝试访问已释放的内存,该程序会生成“一般保护错误”。但是,如果我对文档和文档本身的理解是正确的,那么这应该是不可能的,因为 DiscardAsyncTimer() 应该阻塞,直到所有回调返回。

我的问题:

  1. 我是否正确理解文档?
  2. 我在这个例子中做了一些愚蠢的事情吗?
  3. 在释放内存之前,我应该如何验证我的异步计时器线程是否已完成运行?

示例程序:

一周前我还在 LabWindows/CVI 论坛上问了这个问题,没有任何回应:https ://forums.ni.com/t5/LabWindows-CVI/DiscardAsyncTimer-returning-before-timer-callback-is-complete/td- p/3943460

0 投票
0 回答
70 浏览

c++ - 在 C++ 中将 16 bpp 图像转换为 8 bpp 灰度

我有以 16 bpp 生成图像的图像源。我在 unsigned char * 缓冲区中有此信息。我需要显示图像,我不能直接在 16 位中使用 Labwindows。它不支持16位。如何使用 NEWBITMAP() 将 16bpp 转换为 8 bpp 以显示它 Labwindows;

我是这种转换的新手。请帮我用c ++编写转换

0 投票
1 回答
83 浏览

fonts - 如何在 LabWindows CVI 中查找系统上是否安装了字体?

在来自用户界面资源文件的面板中,很少有带有特殊字体的文本消息控件(这是一个旧项目,其中 UIR 已经设计并在生产中使用,因此无法更改)。在设计时 LabWindows 检测字体是否安装在当前系统中,如果没有,它会在 Edit Text Attributes 对话框中显示,并带有(未找到)后缀,如图所示 Font Not Found

但是在运行时,如果字体仍然不可用,可执行文件将选择另一种可能不适合设计控件大小的字体。

是否可以在启动时检测字体是否可用,如果不警告用户安装它?系统详细信息:Windows-10 64 位上的旧 LabWindows-8.5。确实尝试搜索 Google 和 National Instruments 但没有找到答案。也尝试过这段代码:

但无论字体是否安装在测试计算机上,它总是返回 xx=9 和 buff="Digital-7" 。

这是在设计时 LabWindows 检测到字体已安装:找到字体

0 投票
1 回答
36 浏览

cvi - 从串口读取的标准方法是什么

我有一个测试用例,我需要读取串行总线 (RS-232) 上的文本。此文本实际上是嵌入式 PC 启动时输出的文本。然后我需要为某些标记解析该文本输出。我正在尝试开发一种解决此问题的通用方法。这是我的方法:

配置 COM 端口 打开/创建文件以将文本写入 将从端口读取的字节写入文件 此处有任何指针可以帮助我,或者您认为缺少什么?对于函数 ComToFile,我不确定参数“终止字节”使用什么,因为我还不知道文本的整体外观。是否有一个默认值可以输入该函数以不使用该方法?

注意:不需要 UI,这是用于自动化测试。另外,我正在争论是否应该将启动文本写入文件,然后像我所做的那样解析该文件中的令牌,或者最好将其存储在程序内的一个大缓冲区中并解析该缓冲区?

0 投票
2 回答
169 浏览

c - flatcc 未定义符号aligned_free/aligned_malloc

解决

我目前正在研究 LabWindows/CVI,这是一个 C。唯一支持的 C 版本是 c99。我正在尝试将 Google Flatbuffers(c 版本flatcc)集成到我当前的项目中。当我尝试链接我的解决方案时,我遇到了链接错误: 链接错误

第一个问题:我该如何解决这个错误?

根据供应商的说法,LabWindows/CVI 使用CLANG 作为编译器。如果我看一下符号aligned_free /algined_malloc 出现的文件,我可以读到:

第二个问题:根据上面的文字,我应该有aligned_free/aligned_malloc的定义,但由于某种原因,我没有它。为什么 ?我错过了什么?

附加信息: LabWindows/CVI 只接受 .lib 作为 lib(没有 .a),所以我必须使用 Cmake 和 MSVS19 编译 flatcc。我尝试了几种配置,但无事可做,我总是遇到同样的错误。

最良好的问候

编辑:我通过执行以下 cmake 命令修复了一个未定义的符号“__allmul”:

cmake -G "MinGW Makefiles" -DCMAKE_C_COMPILER=x86_64-w64-mingw32-c99 -DFLATCC_PORTABLE=true -DFLATCC_ALLOW_WERROR=false -DBUILD_TESTING=false -DFLATCC_CXX_TEST=false -DFLATCC_REFLECTION=false -B .

然后编辑flatcc\src\compiler\CMakeFiles\flatcc.dir\flags.makeflatcc\src\runtime\CMakeFiles\flatcc.dir\flags.make

看起来像这样:C_FLAGS = -m32 -DFLATCC_REFLECTION=0 -Wstrict-prototypes -Wsign-conversion -Wconversion -std=c99 -pedantic -Wall -Wextra -DFLATCC_PORTABLE -m32 是 32 位二进制和 -std=c99 而不是 -std=c11 (不能放 c89 因为 flatcc 包含一些内联关键字)

然后编辑flatcc\src\compiler\CMakeFiles\flatcc.dir\link.txtflatcc\src\runtime\CMakeFiles\flatcc.dir\link.txt看起来像这样:

然后运行Mingw32-make.exe

仍然存在 2 个错误: 剩余误差

0 投票
1 回答
130 浏览

c - 使用 UM245R USB 并行转换器通信 FPGA 和 PC 时出现问题

我想为我遇到的问题提供一些帮助。我正在尝试通过 FTDI(UM245R USB 并行转换器)将 FPGA(Altera De0 Nano 套件,VHDL 编程)与 PC(LabWindows CVI 软件,C 编程)进行通信。为此,我使用了大约 960 kbps 的异步 FIFO 通信。我一直在使用 FTDI 制造商推荐的库(https://ftdichip.com/wp-content/uploads/2020/08/D2XX_Programmers_GuideFT_000071.pdfhttps://www.ftdichip.com/Support/Documents/DataSheets/模块/DS_UM245R.pdf)。现在我试图在 FPGA 中读取从 PC 发送的数据。在这里我遇到了以下问题:当我想使用 Ft_Write 函数传输多个字节时,有时会发生所有都正确传输,而在其他时候传输被截断并且丢失了一些数据,后者经常发生。为了检查错误,我执行了以下操作:

  1. 根据 FTDI 数据表的建议,在 Modelsim 中模拟 VHDL 代码相对于输入和输出信号的行为,并且所有信号都正常工作。
  2. 我已经寻找了编写 FT_Write 过程的代码示例,并且我已经尝试过它们,获得了相同的结果。
  3. 用示波器分析 UM245R 中的 RXF 标志,表示缓冲区中有数据要被 FPGA 接收,并且它的行为与数据表或技术手册中指示的不同(它始终处于高电平),同样正如我在代码中所要求的那样,RD 信号不起作用,但数据是以我上面提到的方式传输的。我做错了什么?会不会是UM245R有硬件问题坏了?在这里,我将我的代码保留在 VHDL 中,将我的函数保留在 C 中。任何帮助都将不胜感激。

VHDL代码:

这是C代码():

0 投票
0 回答
83 浏览

c - 在 LabWindows/CVI 中作为客户端读取和存储 TCP 数据的最佳方法是什么?

注意:这是为了在 LabWindows/CVI 中使用他们的 TCP 库编写一个 DLL。

我正在编写一个 TCP 客户端 DLL,该 DLL 旨在使用我的 UUT(充当服务器)读取/写入数据。我正在使用 CVI TCP 库。根据库的示例,我将使用一个同步回调函数来处理我作为客户端接收到的消息。当数据可用时,此回调函数将执行 ClientTCPRead(),如下面的代码片段所示。如您所见,当数据准备好时,read 函数会将数据存储在 uint32_t 类型的全局 g_recieveBuf 数组中。

在此处输入图像描述

问题一:

当涉及到我收到的大消息时,由于其他 TCP 时间问题,我经常需要多次调用来读取所有数据。我相信回调会处理这种情况。TCP_DATAREADY 案例将继续执行,直到读取所有数据。我相信这是这个库提供的实用程序,是什么使它如此简单的过程。我的问题是如何跨多个调用正确地将数据连接到我的全局数组中?我不想每次执行 ClientTCPRead() 时都覆盖我的数组。例如,如果服务器正在发送一条大消息,并且多次执行回调函数以读取所有数据,我希望它在我的数组中作为一条连续消息正确捕获。我的一位同事建议使用 List 构造(程序员的工具箱库)。我不

问题2:

来自服务器的数据是二进制格式的。它是具有已知标头大小的专有消息结构。标头还包含一个字段,告诉我服务器消息的总字节数(标头和正文)。在正确读取数据方面知道这一点有什么好处吗?我认为这没关系,因为我使用的是内置回调函数,如果数据可用,它将始终读取数据。那么,如果回调函数确保所有字节都被读取并存储在我的全局数组(或其他构造,如列表,如果我使用该方法)中,我为什么还要关心即将到来的字节数。

先感谢您。

0 投票
1 回答
48 浏览

dllimport - Snap7 + Ni Labwindows/CVI

大家好,我正在做一个项目,我的客户想要使用 Siemens S7 1200 来控制一些气动工具和 labwindows Cvi 上的界面。我下载了 SP7 ( snap 7) 试图与我的 plc 进行通信,但我发现自己被阻止了,因为下载的文件只包含一个 DLL 文件和一个 lib 文件,其中包含 no.h 文件( 头文件) 谁能告诉我如何使用 snap 7 在labwindows上正确吗?

谢谢

0 投票
0 回答
47 浏览

c - 崩溃原因应用程序c

大家好,我有一个用 C 语言编写的大项目,有时(并非总是)在某些情况下崩溃。此应用程序从电子板上读取一些测量值并将其存储到硬盘中的日志文件中。(应用程序是用labwindows 编写的)。我创建了一个转储文件,这是我得到的,我不知道会发生什么