3. 站点配置管理基础

在 TestStand 的部署体系中,“站点(Station)”并不是一台具体的电脑,而是一个逻辑上的管理单元。它代表一组共享同一套配置、回调与权限策略的测试资源。理解站点、工作站与配置文件三者的层次关系,是后续做权限隔离、多产品线并行测试以及集中化配置管理的前提。

可以把整个结构理解为三层:最上层是站点,它是一个管理边界;中间层是工作站,即实际运行 TestStand 引擎的计算机或测试机;最下层是配置文件,包括 StationGlobal、StationOptions、StationCallbacks 等,它们以文件形式承载站点的具体行为定义。一个站点可以包含多台工作站,而每台工作站都会加载同一站点下的配置文件集合,从而保证行为一致。

站点 Station(逻辑管理单元) 共享同一套配置、回调与权限策略的测试资源集合 站点标识:StationName = "LineA_Functional" | 配置根目录:C:\ProgramData\NI\TestStand\Station 工作站 Workstation(物理/虚拟测试机) WS-01 192.168.10.11 WS-02 192.168.10.12 WS-03 192.168.10.13 核心配置文件(站点级共享) StationGlobal 全局变量容器 跨序列共享数据 StationGlobals.ini StationOptions 引擎运行参数 超时/断点/日志策略 StationOptions.ini StationCallbacks 站点级回调序列 启动/登录/退出钩子 StationCallbacks.seq 包含 加载

三个核心配置文件的分工

StationGlobal 是站点级的全局变量容器。它保存的是需要在多个序列文件、多个测试工位之间共享的数据,例如产品型号、操作员信息、累计计数、校准偏移量等。StationGlobal 的变量在 TestStand 引擎启动时被读入内存,任何序列都可以通过 StationGlobals.变量名 访问。它的持久化文件通常是 StationGlobals.ini,位于站点配置目录下。需要注意的是,StationGlobal 中的变量是“站点级”的,不是“序列文件级”的,因此修改它会影响该站点下所有工作站。

StationOptions 控制的是引擎的运行行为,而不是测试数据。它包含的典型参数有:序列执行超时时间、断点行为、是否允许在运行时修改序列、日志记录级别、报告生成路径、以及用户权限相关的开关。例如,可以设置 BreakOnStepFailure 为 True,让引擎在步骤失败时自动进入断点;也可以设置 AllowUserToModifySequence 为 False,防止操作员在运行时改动测试逻辑。StationOptions 的修改通常需要重启引擎或重新加载站点才能完全生效。

StationCallbacks 是站点级的回调序列集合。TestStand 在引擎启动、用户登录、序列开始/结束、程序退出等关键时刻会调用这些回调。常见的回调包括 StationStartup、StationShutdown、LoginLogout、UserChange 等。通过 StationCallbacks,可以在不修改具体测试序列的前提下,统一插入权限校验、操作日志记录、环境初始化等逻辑。例如,在 LoginLogout 回调中判断当前用户是否属于“工程师”组,若不是则禁止访问某些序列。

加载顺序与依赖关系

TestStand 引擎启动时,配置文件的加载顺序是有明确约定的。理解这个顺序,才能判断某个配置在运行时是否已经生效,以及当多个配置发生冲突时以谁为准。

典型的加载顺序如下:

  1. StationOptions 最先被读取。因为引擎需要先知道超时、断点、日志等基础运行参数,才能决定后续如何加载其他资源。
  2. StationGlobal 随后加载。引擎在获得运行参数后,将全局变量读入内存,供后续回调与序列使用。
  3. StationCallbacks 在引擎初始化阶段被注册。此时回调序列被绑定到对应的事件上,但实际执行要等到事件触发。
  4. 最后,具体的序列文件(.seq) 被加载。序列文件可以引用 StationGlobal 中的变量,也可以触发 StationCallbacks 中定义的回调。

这个顺序意味着:如果 StationOptions 中设置了“禁止修改序列”,那么即使 StationGlobal 或序列文件中有相关操作,也会被拦截。反过来,如果 StationCallbacks 中的登录回调依赖 StationGlobal 中的某个变量,那么该变量必须在回调执行前已经加载完毕——这正是 StationGlobal 先于 StationCallbacks 加载的原因。

在实际部署中,建议把站点级配置集中存放在一个受版本控制的目录中,例如 C:\ProgramData\NI\TestStand\Station,并通过部署脚本同步到各工作站。这样既能保证一致性,也便于回滚和审计。

一个可参考的站点配置清单

下面给出一份站点配置的检查清单,用于在新建站点或迁移站点时逐项确认。字段和取值均为示例,实际使用时请根据项目情况调整。

配置项 所属文件 示例值 作用说明
StationName StationOptions LineA_Functional 站点标识,用于日志与权限区分
BreakOnStepFailure StationOptions True 步骤失败时进入断点,便于调试
AllowUserToModifySequence StationOptions False 禁止操作员运行时修改序列
StationGlobals.ProductModel StationGlobal "X200" 当前测试产品型号,供序列读取
StationGlobals.OperatorID StationGlobal "OP001" 操作员标识,登录后写入
LoginLogout 回调 StationCallbacks 校验用户组 登录时判断权限,拒绝非法用户
StationStartup 回调 StationCallbacks 初始化环境 引擎启动时执行一次,准备测试环境

在配置过程中,一个常见的误区是把所有变量都塞进 StationGlobal。实际上,只有真正需要跨序列、跨工位共享的数据才应该放在 StationGlobal 中;序列内部的临时变量应使用局部变量或序列文件级变量。这样既能减少站点级配置的耦合,也能避免不同产品线之间的数据污染。

另一个需要留意的点是权限与站点配置的配合。StationOptions 中的权限开关、StationCallbacks 中的登录校验,以及 TestStand 用户管理器中的用户组定义,三者需要协同工作。例如,若在 StationOptions 中关闭了“允许修改序列”,但在用户管理器中给操作员分配了“工程师”权限,那么操作员仍然可能通过其他入口修改序列。因此,站点配置管理不是单一文件的修改,而是多个配置文件的联合约束。

掌握站点、工作站与配置文件的层次关系后,就可以进一步理解:为什么同一站点下的工作站行为一致,为什么修改 StationOptions 会影响所有工位,以及为什么 StationCallbacks 是插入统一权限逻辑的最佳位置。这些正是后续做多站点部署和权限精细化控制的基础。