You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现LabWindows/CVI的UIR与TestStand .seq文件的连接及数据读取显示?

LabWindows/CVI 与 TestStand 对接:UIR读取.seq数据并显示方案

当然可以实现LabWindows/CVI与TestStand的对接,核心是通过TestStand的COM API来读取.seq文件中的数据,再将数据绑定到UIR界面控件上。以下是具体实现步骤和示例:

一、环境配置

  1. 在LabWindows/CVI中生成TestStand API绑定:
    • 打开CVI,依次点击 Tools -> Create ActiveX Controller
    • 在弹出的窗口中选择对应版本的「NI TestStand API」类型库,生成对应的头文件(如tsapilib.h)和库文件,将它们添加到你的项目中。

二、核心实现步骤

1. 初始化TestStand Engine并打开序列文件

通过COM API实例化TestStand Engine对象,然后调用OpenSequenceFile方法打开目标.seq文件。

2. 读取.seq中的数据

根据需求读取不同层级的数据:

  • 序列级全局变量
  • 步骤参数/本地变量
  • 测试结果数据

3. 数据显示到UIR

使用CVI的UI控件操作函数(如SetCtrlVal),将读取到的数据赋值给对应的UIR控件(数值框、字符串框等)。

三、代码示例

#include <userint.h>
#include <tsapilib.h> // 生成的TestStand API头文件

static int panelHandle;
static Engine *tsEngine;
static SequenceFile *seqFile;

int main (int argc, char *argv[])
{
    if (InitCVIRTE (0, argv, 0) == 0)
        return -1;
    if ((panelHandle = LoadPanel (0, "TestPanel.uir", PANEL)) < 0)
        return -1;
    
    // 初始化TestStand Engine
    if (Engine_New(&tsEngine) != 0) {
        MessagePopup("Error", "Failed to initialize TestStand Engine");
        return -1;
    }
    
    // 打开目标.seq文件
    if (Engine_OpenSequenceFile(tsEngine, "D:\\TestProjects\\DemoTest.seq", 0, &seqFile) != 0) {
        MessagePopup("Error", "Failed to open sequence file");
        Engine_Discard(tsEngine);
        return -1;
    }
    
    // 读取序列变量:MainSequence下的"TotalTestCases"数值变量
    Sequence *mainSeq;
    Variable *totalCasesVar;
    long totalCases;
    if (SequenceFile_GetSequence(seqFile, "MainSequence", 0, &mainSeq) == 0) {
        Sequence_GetVariable(mainSeq, "TotalTestCases", 0, &totalCasesVar);
        Variable_GetValueLong(totalCasesVar, &totalCases);
        // 显示到UIR数值控件
        SetCtrlVal(panelHandle, PANEL_NUM_TOTALCASES, totalCases);
    }
    
    // 读取字符串变量:序列根级的"TestBatchID"
    Variable *batchIdVar;
    char batchId[128] = {0};
    SequenceFile_GetVariable(seqFile, "TestBatchID", 0, &batchIdVar);
    Variable_GetValueString(batchIdVar, batchId, sizeof(batchId));
    // 显示到UIR字符串控件
    SetCtrlVal(panelHandle, PANEL_STR_BATCHID, batchId);

cleanup:
    // 释放TestStand资源,避免内存泄漏
    if (seqFile) SequenceFile_Close(seqFile, 0);
    if (tsEngine) Engine_Discard(tsEngine);
    
    DisplayPanel (panelHandle);
    RunUserInterface ();
    DiscardPanel (panelHandle);
    return 0;
}

四、关键注意事项

  • 版本兼容:确保LabWindows/CVI与TestStand版本匹配(如TestStand 2021建议搭配CVI 2021及以上)。
  • 错误处理:所有TestStand API调用都要检查返回值,及时释放资源。
  • 实时数据读取:如果需要读取TestStand运行中的动态数据,可结合TestStand的回调机制或定时轮询实现。
  • 权限问题:确保程序拥有.seq文件的读取权限,且TestStand Engine允许外部进程访问。

内容的提问来源于stack exchange,提问作者Tyler Worley

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 08:33:25