2. TestStand序列与步骤类型基础

在开始把 LabVIEW 或 C# 代码接入 TestStand 之前,必须先弄清楚 TestStand 到底用什么方式组织测试逻辑。TestStand 的核心不是“写代码”,而是“编排步骤”。一个测试站里真正被执行的,是序列文件中的序列,序列里按顺序排列着若干步骤,每个步骤又通过某种适配器去调用具体的代码模块。理解这条链路,是后续 LabVIEW 与 C# 步骤调用的前提。

序列文件:测试逻辑的容器

TestStand 中保存测试逻辑的基本单位是序列文件(Sequence File),常见扩展名为 .seq。一个序列文件可以包含多个序列,每个序列又由若干步骤组成。序列文件本身还带有文件级属性,例如文件全局变量、文件级回调、类型定义等。可以把序列文件理解为一个“测试项目文件”,它把一组相关的测试序列、变量和配置打包在一起。

序列文件内部最常用的几个序列有:MainSequence(主序列,测试流程的入口)、Setup(初始化)、Cleanup(清理)。TestStand 在执行一个序列文件时,默认会先执行 Setup,再执行 MainSequence,最后执行 Cleanup。这个执行顺序是 TestStand 内置的,不需要手动调用。理解这一点很重要,因为后续 LabVIEW 或 C# 步骤如果依赖某些初始化条件,就应该放在 Setup 中完成。

步骤类型:TestStand 的“指令集”

序列中的每一个步骤都有一个步骤类型(Step Type)。步骤类型决定了这个步骤能做什么、需要配置哪些参数。TestStand 自带的常用步骤类型包括:

  • Sequence Call:调用另一个序列,实现序列复用和模块化。
  • Numeric Limit Test:数值限值测试,把测量值与上下限比较,自动判定 Pass/Fail。
  • String Value Test:字符串值测试,用于比较字符串结果。
  • Pass/Fail Test:直接根据布尔条件判定通过或失败。
  • Message Popup:弹出提示框,常用于人工确认或操作提示。
  • Call Executable:调用外部可执行程序。
  • Property Loader:从文件加载属性值,常用于参数化测试。
  • Goto、Label、If、While 等流程控制步骤。

这些步骤类型中,Numeric Limit Test 和 Pass/Fail Test 是测试判定最常用的。它们把“测量”和“判定”分开:测量值由代码模块产生,判定规则由步骤配置决定。这种分离让测试逻辑更清晰,也便于后续维护。

模块适配器步骤:连接 TestStand 与代码

真正让 TestStand 调用 LabVIEW 或 C# 代码的,是模块适配器步骤。模块适配器是 TestStand 与外部编程环境之间的桥梁。TestStand 支持多种适配器,常见的有:

  • LabVIEW Adapter:调用 LabVIEW VI。
  • .NET Adapter:调用 .NET 程序集,C# 代码通常通过这种方式接入。
  • C/C++ DLL Adapter:调用 DLL 导出函数。
  • ActiveX/COM Adapter:调用 COM 组件。

配置一个模块适配器步骤,通常需要指定三件事:模块路径(VI 文件、程序集或 DLL 的位置)、入口点(具体调用哪个函数或方法)、参数映射(TestStand 变量如何传给代码,代码返回值如何传回 TestStand)。这三件事配置正确,步骤才能正常执行。

以 LabVIEW Adapter 为例,配置时需要选择 VI 路径,然后指定 VI 的输入输出端子与 TestStand 变量之间的对应关系。TestStand 会自动读取 VI 的连线板信息,列出可用的输入输出参数。对于 .NET Adapter,则需要选择程序集、类和方法,再配置方法参数与 TestStand 变量的映射。参数映射是模块适配器步骤最容易出错的地方,后续章节会专门展开。

步骤属性与执行流程

每个步骤除了类型和适配器配置外,还有一组通用属性,例如:步骤名称、前置条件(Preconditions)、循环配置(Loop)、后置动作(Post Actions)、结果记录(Result Recording)等。前置条件决定步骤是否执行,循环配置决定步骤重复次数,后置动作决定步骤执行后是继续、跳转还是退出。这些属性共同决定了序列的实际执行路径。

下面这张图展示了 TestStand 序列文件、序列、步骤、步骤类型与模块适配器之间的层级与调用关系。图中同时标出了 LabVIEW 与 C# 两条适配器路径,便于理解后续章节的接入方式。

序列文件 (.seq) 文件全局变量 · 类型定义 · 文件级回调 · 多个序列 序列 (Sequence) Setup → MainSequence → Cleanup · 序列局部变量 · 步骤列表 步骤 (Step) 步骤名称 · 前置条件 · 循环配置 · 后置动作 · 结果记录 步骤类型 (Step Type) Numeric Limit Test · Pass/Fail Test Sequence Call · Message Popup · Goto/If/While 模块适配器 (Module Adapter) LabVIEW Adapter · .NET Adapter C/C++ DLL Adapter · ActiveX/COM Adapter LabVIEW VI 输入端子 ← TestStand 变量 · 输出端子 → 测量值 C# .NET 程序集 方法参数 ← TestStand 变量 · 返回值 → 测量值 包含 包含 类型 适配器 调用 调用 参数映射:TestStand 变量 ↔ 代码输入/输出

一个最小可运行的序列示例

假设我们要测试一个电源模块的输出电压,期望值 5.0 V,允许范围 4.9 V 到 5.1 V。在 TestStand 中,可以这样组织:

  1. 在 Setup 序列中,用 Property Loader 从配置文件读取期望值和上下限。
  2. 在 MainSequence 中,插入一个 LabVIEW Adapter 步骤,调用测量 VI,把测量结果写入 Locals.MeasuredVoltage。
  3. 紧接着插入一个 Numeric Limit Test 步骤,数据源选择 Locals.MeasuredVoltage,下限 4.9,上限 5.1。
  4. 在 Cleanup 序列中,关闭电源或释放资源。

执行后,TestStand 会在报告中记录每一步的结果。Numeric Limit Test 步骤会根据测量值自动判定 Pass 或 Fail,并在报告中显示测量值、上下限和判定结果。这个例子虽然简单,但已经包含了序列文件结构、步骤类型和模块适配器三个核心概念。

提示:在配置模块适配器步骤时,建议先单独在 LabVIEW 或 Visual Studio 中确认代码模块能正常运行,再接入 TestStand。这样可以避免把代码本身的错误误判为 TestStand 配置问题。

步骤配置中的常见参数

模块适配器步骤的参数映射通常分为三类:输入参数(TestStand 传给代码)、输出参数(代码返回给 TestStand)、返回值(函数或 VI 的返回结果)。在 LabVIEW Adapter 中,输入输出端子会直接列出;在 .NET Adapter 中,方法参数按顺序映射。配置时要注意数据类型匹配,例如 TestStand 的 Number 对应 LabVIEW 的 DBL,对应 C# 的 double。类型不匹配会导致步骤执行报错。

另外,步骤的前置条件可以用表达式控制。例如,只有当 Locals.TestEnabled == True 时才执行某个测量步骤。前置条件为假时,步骤会被跳过,报告中显示为 Skipped。这个机制在条件测试中非常实用。

为后续章节打基础