2. TestStand体系结构总览

TestStand 并不是一个“点一下就能跑测试”的单体软件,而是一套由四个职责明确、彼此解耦的组件构成的测试执行平台。理解这四者的分工与接口,是后续编写序列、调试执行流、部署到产线的前提。这四个组件分别是:序列编辑器(Sequence Editor)、测试引擎(TestStand Engine)、用户界面(User Interface)和部署工具(Deployment Utility)。

很多初学者会把 TestStand 等同于序列编辑器,认为“打开编辑器、写几步、点运行”就是全部。实际上,序列编辑器只是开发期的编辑与调试外壳,真正决定“谁先执行、数据放哪、失败怎么办”的是运行在后台的测试引擎。用户界面负责与操作员交互,部署工具负责把开发成果搬到产线机器。四者关系可以用下面这张结构图概括。

TestStand 四大组件协同关系 序列编辑器 Sequence Editor 开发期:编写/调试序列 配置步骤、变量、类型 测试引擎 TestStand Engine 运行期:调度执行流 管理数据流与线程 用户界面 User Interface 操作员交互:启动/停止 显示结果、报警、报表 部署工具 Deployment Utility 打包序列、驱动、依赖 生成部署镜像到产线 加载序列 执行状态 命令/参数 序列文件 部署后加载 核心分工: 编辑器负责“写”,引擎负责“跑”,界面负责“看与控”,部署工具负责“搬”。 引擎是唯一真正执行序列的组件,其余三者都通过引擎提供的接口与之通信。

序列编辑器:开发期的“驾驶舱”

序列编辑器是工程师最常接触的组件。它的核心职责是创建和编辑序列文件(.seq),包括步骤(Step)、序列(Sequence)、序列文件(Sequence File)三级结构。一个典型的测试序列可能包含:Setup 序列做初始化、Main 序列执行测试步骤、Cleanup 序列做资源释放。

在编辑器中,每个步骤都有明确的类型,例如 Numeric Limit Test(数值限值测试)、String Value Test(字符串值测试)、Pass/Fail Test(通过/失败测试)、Sequence Call(序列调用)、Message Popup(消息弹窗)等。步骤类型决定了引擎在执行时调用哪个内置逻辑或适配器。编辑器还提供变量与类型管理,例如在 FileGlobals 中定义全局变量 g_TestVoltage,在 StationGlobals 中定义工位级变量 s_SerialNumber。

编辑器的调试能力同样关键:可以设置断点、单步执行、查看变量当前值、观察步骤执行时间。这些能力让工程师在开发阶段就能验证执行流是否符合预期,而不是等到产线才发现问题。

测试引擎:真正的执行核心

测试引擎是 TestStand 的“心脏”。它不提供可视化界面,而是以进程内或进程外的方式运行,负责解释序列文件、调度步骤执行、管理线程与执行流、维护变量作用域、处理错误与回调。

引擎的核心概念是执行流(Execution Flow)。默认情况下,步骤按顺序执行,但引擎支持多种流向控制:Pre-Step、Post-Step、Pre-Sequence、Post-Sequence 等回调,以及 Goto、If、While、Select 等流程控制步骤。当某个步骤失败时,引擎会根据步骤的 Run Mode(如 Normal、Skip、Force Pass、Force Fail)和序列的 On Fail 策略决定后续行为。

数据流方面,引擎维护多个作用域:Locals(序列局部)、FileGlobals(文件全局)、StationGlobals(工位全局)、Parameters(序列参数)。步骤之间通过变量传递数据,例如前一步测量得到的 Locals.MeasuredValue 可以作为下一步限值判断的输入。引擎还负责与外部代码(LabVIEW、C/C++、.NET、Python)的适配器通信,把测量结果写回 TestStand 变量。

用户界面:操作员与引擎之间的桥梁

TestStand 自带多种用户界面,如 Full-Featured UI、Simple UI、Parallel UI 等,也支持用 LabVIEW、C#、VB.NET 自定义。用户界面的职责不是执行测试,而是向引擎发送命令、接收引擎事件、展示执行状态。

典型交互包括:操作员点击“Start”按钮,界面调用引擎的 Execution 对象启动序列;引擎在步骤执行时触发 UIMessage 事件,界面据此更新进度条、显示当前步骤名、弹出测试结果;测试结束后,界面读取 RunState 中的结果并生成报表。界面还可以提供“Stop”、“Pause”、“Resume”、“Terminate”等控制按钮,这些命令最终都转化为对引擎执行对象的操作。

部署工具:从开发机到产线的搬运工

开发完成后,序列文件不能直接复制到产线机器就完事。产线机器可能没有安装 LabVIEW 运行引擎、缺少驱动、路径不同、依赖库版本不一致。部署工具(Deployment Utility)就是解决这些问题的组件。

它的工作流程是:在开发机上创建一个部署镜像,把序列文件、依赖的代码模块、驱动、配置文件、用户界面可执行文件等打包到一个目录中;然后在目标机器上运行部署,把镜像展开到指定路径,并注册必要的组件。部署工具还会生成一个 .tsd 部署文件,记录所有依赖关系。这样,产线机器不需要完整的开发环境,只需要 TestStand 运行引擎和部署后的镜像即可执行测试。

四者协同的典型场景

假设一个电源模块测试站:工程师在序列编辑器中编写 PowerSupplyTest.seq,定义 Main 序列,包含“设置电压→测量输出→判断限值→记录结果”四个步骤。编辑器把序列保存为文件。部署工具把该文件、LabVIEW 测量 VI、VISA 驱动打包成镜像,部署到产线电脑。产线操作员打开用户界面,点击“Start”,界面调用测试引擎加载序列。引擎按顺序执行步骤,调用 LabVIEW VI 完成测量,把结果写入 Locals,再执行限值判断。每一步的状态通过事件回传给界面,界面显示“测试中… 步骤 3/4”。测试结束后,界面显示“PASS”或“FAIL”,并生成报表。

理解要点:序列编辑器是“写代码的地方”,测试引擎是“跑代码的地方”,用户界面是“看和控的地方”,部署工具是“搬代码的地方”。四者通过引擎的 API 和事件机制解耦,这也是 TestStand 能同时支持多种语言、多种界面、多种部署方式的原因。

掌握这四大组件的边界与接口,后续学习序列编写、执行流控制、数据传递、部署配置时,就能清楚每一步操作发生在哪个组件、影响哪个环节,而不是把整个平台当成一个黑盒。