2. TestStand运行时架构

理解TestStand的运行时架构,是做好部署打包与产线发布的前提。很多工程师在开发机上把序列调通后,直接把整个开发环境拷到产线电脑,结果出现授权报错、界面弹不出、步骤找不到代码模块等问题。根源往往不是序列本身写错了,而是没有分清TestStand各组件在“开发态”和“运行态”中的角色差异。本节围绕引擎、序列编辑器、操作员界面、适配器四个核心对象,说明它们在部署时各自承担什么、哪些必须随包发布、哪些应当被剥离。

一、四个核心组件的职责边界

TestStand引擎(Engine)是真正执行序列的运行时内核。它负责加载序列文件、解析步骤、调度执行线程、管理变量作用域、处理回调与报告生成。引擎本身没有可视化界面,它以进程内组件或独立服务的形式存在。产线电脑上真正“跑测试”的是引擎,而不是序列编辑器。

序列编辑器(Sequence Editor)是开发与调试工具。它内嵌一个引擎实例,提供步骤编辑、断点、单步、变量监视、执行跟踪等能力。它面向的是开发者,不是操作员。部署到产线时,序列编辑器通常不应出现在操作员可接触的路径中,否则操作员误改序列会直接破坏产线一致性。

操作员界面(Operator Interface,OI)是面向产线人员的执行入口。NI提供多种现成OI(如Full-Featured、Simple、CVI、LabVIEW、.NET版本),也允许自定义。OI通过TestStand API连接引擎,启动指定序列文件、传入工位参数、显示测试进度与结果、控制“开始/停止/失败重测”等操作。OI是产线发布时必须随包交付的部分。

适配器(Adapter)决定步骤如何调用外部代码。常见适配器包括LabVIEW、C/C++ DLL、.NET、ActiveX/COM、Python、Sequence Adapter等。适配器在引擎执行到对应步骤时被激活,负责参数封送、类型转换、错误回传。部署时,序列中用到的适配器及其依赖的运行库必须一并安装,否则步骤会在运行时因“找不到适配器”而失败。

TestStand 开发态与运行态的角色划分 开发态(工程师工作站) 序列编辑器 Sequence Editor 步骤编辑 · 断点调试 · 变量监视 · 执行跟踪 引擎实例(进程内) 加载 .seq · 解析步骤 · 调度执行 适配器 Adapter LabVIEW · C/C++ DLL · .NET · Python 参数封送 · 类型转换 · 错误回传 代码模块源文件 .vi · .dll · .py · 测试资源 运行态(产线工位电脑) 操作员界面 OI 启动序列 · 工位参数 · 进度与结果 · 重测控制 引擎实例(运行时) 加载 .seq · 执行步骤 · 生成报告 适配器运行时 LabVIEW Run-Time · .NET Runtime DLL 依赖 · Python 解释器 已编译代码模块 .vi(已编译)· .dll · .py · 测试资源 部署 打包 开发态:编辑器 + 引擎 + 适配器 + 源码 运行态:OI + 引擎 + 适配器运行时 + 已编译模块

二、部署时“带什么、不带什么”

从上面的架构图可以看到,开发态与运行态共享引擎和适配器这两个执行要素,但入口和代码形态不同。部署打包的核心判断依据是:产线电脑上需要的是“能执行”的最小集合,而不是“能编辑”的完整环境。

必须随包发布的内容包括:

  • TestStand运行时授权:产线电脑需要有效的TestStand Runtime License或部署授权,否则引擎无法启动。开发授权不能替代运行时授权。
  • 引擎与运行时组件:通过TestStand Deployment Utility生成部署包时,引擎核心文件会自动包含。若手动拷贝,需确认TestStand\Bin下的运行时DLL完整。
  • 操作员界面:OI的可执行文件及其依赖的配置文件(如.ini、.xml)、图标资源、语言包。
  • 序列文件:.seq文件及其引用的.ini配置、.csv数据文件、报告模板.xsl等。
  • 适配器运行时:若序列使用LabVIEW步骤,需安装对应版本的LabVIEW Run-Time Engine;若使用.NET步骤,需确保目标框架版本匹配;若使用Python,需部署Python解释器及依赖包。
  • 代码模块:LabVIEW的.vi需已编译并随包发布,DLL需确认其依赖的VC++运行库已安装。

应当剥离或限制访问的内容包括:序列编辑器、开发用适配器配置、源码工程文件、调试断点配置、开发授权文件。产线电脑上保留序列编辑器会带来两个风险:一是操作员可能误改序列导致测试逻辑漂移;二是编辑器启动时会占用额外授权,可能与OI的引擎实例冲突。

三、适配器在部署中的关键检查点

适配器是部署中最容易出问题的环节。以下检查点建议在打包前逐项确认:

检查项 判断依据 常见故障现象
适配器类型与序列步骤匹配 序列中每个步骤的适配器类型在目标机已安装 步骤报“Adapter not found”
LabVIEW Run-Time版本 与开发时编译.vi的LabVIEW版本一致 步骤报“Version mismatch”或直接崩溃
.NET框架版本 目标机已安装序列引用的.NET版本 步骤报“Could not load assembly”
DLL依赖项 用Dependency Walker确认无缺失DLL 步骤报“找不到指定模块”
Python解释器路径 目标机Python路径与序列中配置一致 步骤报“Python not found”

四、引擎实例的两种运行模式

TestStand引擎在运行时有两种典型模式,部署时需要明确选择:

进程内引擎(In-Process):引擎作为OI进程的一部分加载。启动快、通信开销小,适合单工位、单序列的产线场景。此时OI崩溃会连带引擎一起退出,但产线通常可以接受重启。

独立服务引擎(Out-of-Process / Service):引擎作为独立进程或Windows服务运行,OI通过远程接口连接。适合多工位共享引擎、需要长时间稳定运行、或OI需要频繁重启的场景。代价是配置更复杂,需要确认远程连接权限和端口。

选择建议:单机单工位产线优先用进程内引擎,部署简单、故障恢复快;多工位集中控制或需要7×24小时连续运行的场景,考虑独立服务引擎,但需提前验证网络与权限配置。

五、部署包的最小验证流程

打包完成后,不要直接在产线电脑上“试跑”了事。建议在一台干净的、与产线同配置的电脑上执行以下验证:

  1. 安装部署包,确认安装过程无报错、无缺失依赖提示。
  2. 启动OI,确认界面正常加载,无授权弹窗或引擎连接失败提示。
  3. 加载目标.seq文件,确认序列树完整、步骤无“红色感叹号”缺失标记。
  4. 执行一次完整测试流程,确认所有适配器步骤正常调用,报告正常生成。
  5. 检查报告文件中的步骤耗时、结果数据是否与开发态一致。
  6. 重启电脑,再次启动OI并执行,确认无“首次运行正常、重启后失败”的授权或路径问题。

这套验证流程的核心目的,是确认“引擎能启动、适配器能调用、代码模块能加载、报告能生成”这四个运行态基本条件同时成立。任何一项不成立,都说明部署包缺少对应组件或配置不正确。

常见误区:在开发机上用序列编辑器直接打开产线序列并执行,一切正常,就认为部署包没问题。序列编辑器内嵌的引擎和适配器环境与产线OI的运行时环境并不完全等价,必须用OI在目标机上独立验证。