2. 开发环境与工程组织

在 TestStand 中写测试代码之前,必须先弄清一件事:TestStand 本身不是"写测试逻辑"的地方,它是测试执行引擎与序列管理框架。真正干活的代码(测量、判断、仪器通信)通常放在 LabVIEW、C/C++ DLL、.NET 程序集或 Python 脚本里,TestStand 负责按顺序调用它们、传递参数、记录结果、生成报告。因此,理解 TestStand 的工程组织,本质上是理解"文件层级 + 搜索路径 + 部署结构"这三件事如何共同决定一个序列能不能跑起来。

一、四个核心文件概念

TestStand 的工程组织由四个概念层层嵌套构成,从大到小依次是:

  • 工作空间(Workspace,.tsw):最外层的容器,本身不包含任何测试逻辑,只记录"这个项目里有哪些序列文件、哪些部署配置、哪些代码模块目录"。一个工作空间可以挂多个序列文件,适合按产品线或按测试站组织。
  • 工程(Project,.tsproj):工作空间内的一个逻辑分组,用于把同一测试任务相关的序列文件、部署定义、搜索路径配置聚合在一起。工程是"部署"和"搜索路径"的作用域单位。
  • 序列文件(Sequence File,.seq):真正存放序列的地方。一个 .seq 文件可以包含多个序列(Sequence),每个序列由若干步骤(Step)组成。序列文件还携带自己的类型定义、变量、回调(Callback)等。
  • 序列(Sequence):最小的可执行单元,例如 MainSequence、Setup、Cleanup。TestStand 默认在序列文件中生成 MainSequence、Setup、Cleanup 三个序列,执行顺序为 Setup → MainSequence → Cleanup。

需要特别注意的是:序列文件不是孤立存在的。当 MainSequence 中某个步骤要调用一个 LabVIEW VI 时,TestStand 必须能找到这个 VI 的路径。这个"找得到"的能力,就由搜索路径决定。

二、搜索路径:TestStand 如何定位代码模块

TestStand 的搜索路径(Search Paths)分为多个层级,优先级从高到低大致为:

  1. 步骤中直接指定的绝对路径:最直接,但换机器就失效,不推荐用于正式工程。
  2. 序列文件所在目录及相对路径:以 .seq 文件为基准的相对路径,可移植性较好。
  3. 工程级搜索路径:在 .tsproj 中配置的目录列表,适合把公共 VI 库、DLL 放在统一位置。
  4. TestStand 全局搜索路径:在 Station Options 或 Search Directories 中配置,影响本机所有工程。

实际工程中推荐的做法是:把被测代码模块放在工程目录下的固定子目录(如 CodeModules\),在工程级搜索路径中登记该目录,步骤里只写相对路径或文件名。这样整个工程目录拷贝到另一台装了 TestStand 的机器上,只要目录结构不变,序列就能直接运行。

搜索路径的解析顺序是"先具体后通用":如果步骤里写了绝对路径,TestStand 不会再去搜索路径里找;如果只写了文件名,才会按搜索路径顺序逐个目录查找。排查"找不到 VI"类错误时,第一步就是确认步骤里到底写的是绝对路径还是相对路径。

三、部署结构:从开发机到测试站

开发完成后,序列要部署到产线测试站。TestStand 的部署(Deployment)会把工程所需的序列文件、代码模块、配置文件打包成一个部署映像,安装到目标机的指定目录。部署结构通常包含:

  • 序列文件目录:.seq 文件及其依赖的类型定义。
  • 代码模块目录:VI、DLL、程序集等。
  • 配置文件:Station Options、搜索路径、报告模板等。
  • 用户与权限配置:操作员只能运行,工程师才能编辑。

部署时最容易出问题的地方是路径不一致:开发机上 VI 在 D:\Project\CodeModules\,目标机上却装到了 C:\TestStand\Deploy\。解决办法是在工程中统一使用相对路径,并让部署工具自动重写路径。

四、最小可运行测试序列的构建过程

下面以一个"电源输出电压测试"为例,构建一个最小可运行序列。假设被测对象是一个 5V 输出的电源模块,测试逻辑为:上电 → 读取输出电压 → 判断是否在 4.75V~5.25V 之间 → 记录结果。

操作步骤如下:

  1. 新建工作空间 PowerSupplyTest.tsw,在其中新建工程 PowerSupply.tsproj。
  2. 在工程下新建序列文件 PowerSupplyTest.seq,TestStand 自动生成 MainSequence、Setup、Cleanup。
  3. 在工程目录下创建 CodeModules\ 子目录,把测量用的 VI(如 ReadVoltage.vi)放进去。
  4. 在工程属性的搜索路径中登记 CodeModules\。
  5. 在 MainSequence 中添加步骤:
    ① Setup 序列中调用 PowerOn.vi 给电源上电;
    ② MainSequence 中调用 ReadVoltage.vi,输出参数 Voltage;
    ③ 添加 Numeric Limit Test 步骤,对 Voltage 判断 4.75 ≤ V ≤ 5.25;
    ④ Cleanup 中调用 PowerOff.vi 断电。
  6. 点击 Execute 运行,观察步骤状态:绿色 Pass、红色 Fail、灰色 Skipped。

运行后,如果 ReadVoltage 返回 5.02V,Numeric Limit Test 显示 Pass;如果返回 5.40V,则显示 Fail,并在报告中记录实测值与上下限。这就是一个最小闭环:有输入(上电)、有测量(读电压)、有判断(限值比较)、有结果(Pass/Fail 与报告)。

五、工程组织与执行流程的关系

把上面的文件层级、搜索路径与执行流程放在一张图里,可以更直观地看到"文件组织"如何支撑"序列执行":

文件层级(工程组织) 工作空间 .tsw 工程 .tsproj 序列文件 .seq 序列 MainSequence 步骤 Step 搜索路径解析 步骤中的路径 绝对路径 / 相对路径 工程级搜索路径 CodeModules\ 目录 全局搜索路径 Station Options 序列执行流程 Setup:PowerOn.vi 给电源上电 MainSequence:ReadVoltage.vi 读取输出电压 Voltage Numeric Limit Test 4.75 ≤ V ≤ 5.25 Cleanup:PowerOff.vi 断电并生成报告 结果判断 Pass(绿) / Fail(红) 步骤引用 定位代码模块 关键关系:文件层级决定"序列放在哪",搜索路径决定"代码模块能否被找到",执行流程决定"步骤按什么顺序跑"。 三者缺一不可:路径配错 → 找不到 VI;序列文件放错 → 工程加载失败;执行顺序错 → 上电前就读电压。

六、常见问题与排查思路

初学者在搭建最小序列时,最常遇到三类问题:

现象可能原因排查方法
执行时报"找不到 VI"步骤中用了绝对路径,或搜索路径未登记 CodeModules 目录查看步骤的 Module 属性,确认路径类型;检查工程搜索路径列表
序列文件打不开或工程加载失败.seq 文件被移动,或 .tsproj 中引用的路径失效用文本编辑器查看 .tsproj 中的文件引用,确认相对路径是否正确
Numeric Limit Test 一直 FailReadVoltage.vi 输出参数未正确映射到步骤的测量值,或限值单位不一致在步骤属性中检查 Measurement 与 Limits 的绑定关系,确认单位统一为 V
不要用绝对路径写步骤。开发机上能跑,部署到产线大概率失败。统一使用"工程目录 + 相对路径 + 搜索路径登记"的方式,是 TestStand 工程可移植的基本要求。