3. 站点配置管理基础
在 TestStand 的部署体系中,“站点(Station)”并不是一台具体的电脑,而是一个逻辑上的管理单元。它代表一组共享同一套配置、回调与权限策略的测试资源。理解站点、工作站与配置文件三者的层次关系,是后续做权限隔离、多产品线并行测试以及集中化配置管理的前提。
可以把整个结构理解为三层:最上层是站点,它是一个管理边界;中间层是工作站,即实际运行 TestStand 引擎的计算机或测试机;最下层是配置文件,包括 StationGlobal、StationOptions、StationCallbacks 等,它们以文件形式承载站点的具体行为定义。一个站点可以包含多台工作站,而每台工作站都会加载同一站点下的配置文件集合,从而保证行为一致。
三个核心配置文件的分工
StationGlobal 是站点级的全局变量容器。它保存的是需要在多个序列文件、多个测试工位之间共享的数据,例如产品型号、操作员信息、累计计数、校准偏移量等。StationGlobal 的变量在 TestStand 引擎启动时被读入内存,任何序列都可以通过 StationGlobals.变量名 访问。它的持久化文件通常是 StationGlobals.ini,位于站点配置目录下。需要注意的是,StationGlobal 中的变量是“站点级”的,不是“序列文件级”的,因此修改它会影响该站点下所有工作站。
StationOptions 控制的是引擎的运行行为,而不是测试数据。它包含的典型参数有:序列执行超时时间、断点行为、是否允许在运行时修改序列、日志记录级别、报告生成路径、以及用户权限相关的开关。例如,可以设置 BreakOnStepFailure 为 True,让引擎在步骤失败时自动进入断点;也可以设置 AllowUserToModifySequence 为 False,防止操作员在运行时改动测试逻辑。StationOptions 的修改通常需要重启引擎或重新加载站点才能完全生效。
StationCallbacks 是站点级的回调序列集合。TestStand 在引擎启动、用户登录、序列开始/结束、程序退出等关键时刻会调用这些回调。常见的回调包括 StationStartup、StationShutdown、LoginLogout、UserChange 等。通过 StationCallbacks,可以在不修改具体测试序列的前提下,统一插入权限校验、操作日志记录、环境初始化等逻辑。例如,在 LoginLogout 回调中判断当前用户是否属于“工程师”组,若不是则禁止访问某些序列。
加载顺序与依赖关系
TestStand 引擎启动时,配置文件的加载顺序是有明确约定的。理解这个顺序,才能判断某个配置在运行时是否已经生效,以及当多个配置发生冲突时以谁为准。
典型的加载顺序如下:
- StationOptions 最先被读取。因为引擎需要先知道超时、断点、日志等基础运行参数,才能决定后续如何加载其他资源。
- StationGlobal 随后加载。引擎在获得运行参数后,将全局变量读入内存,供后续回调与序列使用。
- StationCallbacks 在引擎初始化阶段被注册。此时回调序列被绑定到对应的事件上,但实际执行要等到事件触发。
- 最后,具体的序列文件(.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 是插入统一权限逻辑的最佳位置。这些正是后续做多站点部署和权限精细化控制的基础。