4. TestStand开发环境与工程组织

在TestStand中,工程组织方式直接决定了多工位测试系统的可维护性、可扩展性和团队协作效率。一个设计良好的工程结构,能让新增工位、修改测试步骤、复用类型定义变得清晰可控;而组织混乱的工程,往往在工位数量增加后迅速演变为难以维护的“意大利面条”。本节围绕Workspace、Sequence File层级、Station Globals、类型定义与文件命名规范五个核心概念,说明如何构建一个结构清晰、可长期演进的多工位测试工程。

Workspace:工程的顶层容器

Workspace(工作区)是TestStand工程的顶层组织单元,对应磁盘上的.tsw文件。它本身不包含测试逻辑,而是以引用方式组织多个Sequence File、代码模块、配置文件和部署资源。在多工位系统中,Workspace的价值在于:把与同一被测产品相关的所有序列文件、类型定义和工位配置集中在一个可打开、可部署、可版本管理的边界内。

一个典型的多工位Workspace结构如下:

MultiStationTest.tsw
├── Station_A.seq
├── Station_B.seq
├── Station_C.seq
├── Common
│   ├── CommonTypes.ini
│   ├── GlobalConfig.seq
│   └── Utilities.seq
└── Deploy
    └── StationConfig.tsd

这里需要区分两个概念:Workspace文件只保存引用路径,不复制被引用文件的内容。因此当工程需要迁移到另一台机器时,必须保证引用路径有效,或使用相对路径组织目录结构。建议将Workspace文件放在工程根目录,所有被引用文件使用相对于Workspace的路径,这样整个工程目录可以整体拷贝或纳入版本控制。

Sequence File层级:从文件到步骤组

Sequence File(.seq)是TestStand中承载测试逻辑的基本文件,其内部层级为:Sequence File → Sequence → Step Group → Step。理解这个层级是组织测试逻辑的基础。

Sequence File可以包含多个Sequence,每个Sequence对应一个可独立执行的测试流程。在多工位系统中,常见的组织方式有两种:一是每个工位一个Sequence File,文件内包含该工位的全部Sequence;二是按功能划分Sequence File,例如PowerTest.seq、RFTest.seq,每个工位通过调用这些功能Sequence组合出自己的测试流程。前者适合工位差异大、独立部署的场景,后者适合工位共享大量测试逻辑的场景。

Sequence内部的Step Group分为Setup、Main、Cleanup三个固定组。Setup用于初始化仪器、加载配置;Main承载核心测试步骤;Cleanup负责资源释放和状态复位。这个分组不是可选的装饰,而是TestStand执行模型的组成部分:即使Main中某一步骤失败,Cleanup仍会执行,这对多工位系统中防止仪器资源泄漏至关重要。

TestStand多工位工程组织层级 Workspace (.tsw) 顶层容器,仅保存引用路径,不复制内容 Station_A.seq Sequence: MainTest Sequence: Calibration Sequence: SelfCheck Station_B.seq Sequence: MainTest Sequence: Calibration Sequence: SelfCheck Common/Utilities.seq Sequence: InitInstruments Sequence: LogResult Sequence: SafeShutdown Sequence内部Step Group结构(以Station_A.MainTest为例) Setup 初始化仪器 加载工位配置 建立通信链路 Main 调用功能Sequence 执行测试步骤 采集测量数据 Cleanup 释放仪器资源 复位工位状态 记录异常信息

Station Globals:工位级共享数据

Station Globals是TestStand中定义在Station级别的全局变量集合,所有Sequence File都可以访问。在多工位系统中,它承担着“工位配置中心”的角色。典型用途包括:仪器资源地址(如VISA::TCPIP::192.168.1.101::INSTR)、工位编号、测试阈值、操作员权限等级、日志文件路径等。

Station Globals的定义位于Station配置中,可以通过TestStand的Station Options对话框编辑,也可以导入.ini文件批量配置。在多工位部署时,一个常见做法是:为每个工位准备一份独立的Station Globals配置文件,部署时根据工位编号加载对应文件。例如:

[StationGlobals]
StationID = "A01"
DMM_Address = "TCPIP::192.168.1.101::INSTR"
PowerSupply_Address = "TCPIP::192.168.1.102::INSTR"
PassThreshold_V = 3.300
PassTolerance_mV = 50
LogPath = "D:\TestLogs\StationA"

需要特别注意的是,Station Globals是运行时变量,修改后不会自动写回配置文件。如果需要在运行时动态调整并持久化,应通过StationGlobals的WriteToFile方法显式保存,或在Cleanup中统一处理。

类型定义:自定义数据类型的组织

TestStand的类型定义(Type Definition)用于描述自定义数据结构,例如测试结果记录、工位配置结构、测量数据包等。类型定义可以保存在Sequence File内部,也可以独立为.ini文件供多个Sequence File共享。在多工位系统中,推荐将公共类型定义集中到CommonTypes.ini,各工位Sequence File通过引用方式使用。

一个典型的多工位测试结果类型定义示例:

Type: StationTestResult
  StationID        : String
  TestTime         : String
  SerialNumber     : String
  Measurements     : Container
    Voltage_V      : Number
    Current_mA     : Number
    Frequency_MHz  : Number
  PassFail         : Boolean
  ErrorCode        : Number
  ErrorMessage     : String

使用共享类型定义的好处是:当结果结构需要增加字段时,只需修改CommonTypes.ini一处,所有引用该类型的工位自动获得更新。这比在每个Sequence File中重复定义要可靠得多。

文件命名规范

多工位工程的文件命名应遵循一致、可预测的规则,便于在Workspace中快速定位和版本管理。建议采用以下约定:

  • Workspace文件:项目名.tsw,如MultiStationTest.tsw。
  • 工位Sequence File:Station_工位编号.seq,如Station_A01.seq。
  • 功能Sequence File:功能名.seq,如PowerTest.seq、RFTest.seq。
  • 类型定义文件:CommonTypes.ini或类型名.ini。
  • 工位配置文件:StationConfig_工位编号.ini。
  • 部署文件:Deploy_工位编号.tsd。

命名中避免使用空格和中文,使用下划线分隔单词。版本号可以放在文件名末尾,如Station_A01_v2.seq,但更推荐用版本控制工具管理,而不是在文件名中堆叠版本号。

实践建议:在工程初期就确定目录结构和命名规范,并写入团队开发约定。多工位系统一旦进入集成阶段,重命名文件和调整引用关系的成本会显著上升。建议在Workspace中按“工位文件 / 公共文件 / 部署文件”分目录组织,而不是把所有.seq平铺在根目录。

工程组织检查清单

在完成工程结构搭建后,可以用以下清单快速检查组织是否合理:

检查项合格标准
Workspace引用路径全部使用相对路径,工程目录可整体迁移
Sequence File划分工位差异与共享逻辑分离,无重复定义
Step Group使用Setup/Main/Cleanup职责明确,Cleanup必执行
Station Globals工位相关参数集中管理,无硬编码地址
类型定义公共类型集中定义,工位文件引用而非复制
文件命名统一前缀/后缀,无空格和中文,版本可控

以上五个概念——Workspace、Sequence File层级、Station Globals、类型定义、文件命名规范——共同构成了TestStand多工位工程的骨架。它们不是孤立的配置项,而是相互关联的组织决策:Workspace划定边界,Sequence File层级定义逻辑结构,Station Globals提供工位级参数,类型定义保证数据一致性,命名规范维持可读性。在实际项目中,建议先确定Workspace和目录结构,再定义公共类型和Station Globals,最后按工位编写Sequence File,这样能最大程度减少后期的返工和重构。