2. TestStand架构与配置存储
在TestStand中,一个测试序列能否稳定运行,往往不取决于某一步骤写得多么精巧,而取决于“数据放在哪里、由谁读写、何时生效”。TestStand把配置与数据分散在多个层次中,每个层次有不同的作用域、生命周期和持久化方式。理解这些层次的分工,是后续做限值管理和配置管理的前提。
可以把TestStand的存储体系理解为“从全局到局部、从静态到动态”的五个角色:StationGlobals、FileGlobals、SequenceFile、StationModel以及外部配置文件。它们并不是互相替代的关系,而是各自承担不同职责,通过引用和传递协同工作。
StationGlobals:整台测试站的全局变量
StationGlobals是站点级全局变量容器,作用域覆盖当前测试站上运行的所有序列文件。它适合存放“与具体产品无关、但整站共用”的数据,例如操作员信息、工位编号、仪器通信超时、日志目录、当前班次等。StationGlobals随测试站配置保存,通常持久化在StationGlobals.ini或对应的配置数据库中,重启TestStand后仍然存在。
使用StationGlobals时要注意:它属于“共享可变状态”。如果多个序列并行运行并同时写入同一个StationGlobals变量,就可能出现竞争。因此,StationGlobals更适合存放只读或低频更新的配置项,而不是每个被测件都变化的测量结果。典型做法是在StationGlobals中定义StationID、OperatorName、LogRootPath等字段,在序列开始时读取,而不是在每一步中反复修改。
FileGlobals:序列文件内的全局变量
FileGlobals是序列文件(SequenceFile)级别的全局变量,作用域限于当前序列文件内部,但对该文件中的所有序列(Sequence)可见。它适合存放“与这个测试项目相关、但不属于某个具体步骤”的数据,例如产品型号、测试规范版本、该文件专用的限值表、校准系数等。
FileGlobals与StationGlobals的关键区别在于作用域和持久化:FileGlobals随序列文件保存,换一台测试站打开同一个.seq文件,FileGlobals仍然存在;而StationGlobals属于站点,换机器后可能不同。因此,凡是“跟着测试项目走”的配置应放在FileGlobals,凡是“跟着测试站走”的配置应放在StationGlobals。
在实际工程中,常见的做法是把限值集中定义在FileGlobals中,例如:
FileGlobals.Limits.VoltageMin = 4.75
FileGlobals.Limits.VoltageMax = 5.25
FileGlobals.Limits.CurrentMax = 1.20
FileGlobals.Limits.TempMin = -40.0
FileGlobals.Limits.TempMax = 85.0
这样,当测试规范变更时,只需修改FileGlobals中的限值,而不必逐个步骤去改判断条件。这也是TestStand中实现“限值集中管理”的最基本手段。
SequenceFile:序列、步骤与局部数据的载体
SequenceFile(.seq)是TestStand中最核心的存储单元,它包含序列、步骤、步骤属性、局部变量、FileGlobals以及序列文件级的配置。一个SequenceFile可以包含多个Sequence,每个Sequence又包含若干Step。SequenceFile既可以在TestStand Sequence Editor中编辑,也可以被TestStand Engine加载执行。
SequenceFile中的局部变量(Locals)作用域最小,只在当前Sequence内有效,生命周期通常从Sequence开始到结束。它适合存放中间计算结果、临时测量值、循环索引等。与FileGlobals相比,Locals不会跨Sequence共享,也不会持久化到文件中,因此更适合“用完即弃”的数据。
理解SequenceFile的关键在于:它既是“程序”的载体,也是“数据”的载体。步骤逻辑、限值、局部变量、FileGlobals都封装在同一个文件中,便于版本管理和迁移。但这也意味着,如果多个SequenceFile需要共享同一套限值,就需要通过StationGlobals或外部配置文件来统一,而不是在每个文件中重复定义。
StationModel:测试站的行为框架
StationModel(Station Model)是TestStand中定义测试站运行行为的核心模型文件,通常为StationModel.seq。它规定了测试站启动时做什么、操作员登录如何处理、序列执行前后有哪些回调、报告如何生成、错误如何上报等。StationModel不是“数据存储”,而是“行为框架”,但它会读写StationGlobals和配置文件,从而间接影响数据流。
StationModel中常见的回调包括ProcessSetup、ProcessCleanup、PreUUT、PostUUT、PreStep、PostStep等。这些回调在序列执行的不同阶段被调用,适合插入日志记录、仪器初始化、操作员提示、结果判定等逻辑。例如,可以在PreUUT中从StationGlobals读取当前操作员和工位信息,写入测试记录;在PostUUT中根据测试结果决定是否弹出提示或触发报警。
StationModel与StationGlobals的关系是“行为读配置”:StationModel定义流程,StationGlobals提供流程中需要的站点级参数。修改StationModel会影响整站行为,因此通常由测试架构师统一维护,而不是每个测试工程师随意改动。
配置文件:外部持久化与部署差异
除了TestStand内部变量,实际项目还经常使用外部配置文件,如INI、XML、JSON、CSV或数据库。它们的作用是把“可能因产线、机型、客户而不同的参数”从序列文件中剥离出来,便于现场修改而不必重新部署.seq文件。例如,不同产线的仪器地址、不同客户的限值版本、不同班次的校准系数,都可以放在外部配置文件中。
在TestStand中读取外部配置的常见方式包括:使用FileGlobals加载INI/CSV,使用Property Loader步骤读取XML/JSON,或通过数据库步骤查询配置表。读取后通常写入FileGlobals或Locals,供后续步骤使用。这样做的优点是:配置变更不需要修改序列逻辑,只需替换配置文件;缺点是增加了“配置加载”这一环节,如果加载失败或字段缺失,可能导致后续判断异常。
因此,外部配置文件的使用应遵循“先加载、后校验、再使用”的原则。加载后应检查关键字段是否存在、类型是否正确、范围是否合理,必要时给出明确错误信息,而不是让错误在后续步骤中以奇怪的方式暴露。
五个角色的协同关系
把上述五个角色放在一起看,可以形成一条清晰的数据流:StationModel定义测试站的行为框架,在启动和序列执行过程中读取StationGlobals和外部配置文件;SequenceFile承载具体的测试逻辑和FileGlobals;FileGlobals中的限值被步骤引用,用于判断测量结果;Locals存放步骤执行过程中的临时数据;外部配置文件则为StationGlobals和FileGlobals提供可替换的初始值。
一个常见的工程实践是:在StationModel的ProcessSetup回调中,从外部配置文件读取当前产线的仪器地址和限值版本,写入StationGlobals;在SequenceFile的FileGlobals中定义限值结构,并在序列开始时从StationGlobals或外部配置加载具体数值;步骤中引用FileGlobals的限值进行判断;测量结果和中间值存入Locals,最终写入测试报告。这样,站点级配置、项目级限值和现场级差异各归其位,修改时影响范围清晰可控。
掌握这五个角色的分工,是后续做限值集中管理和配置版本控制的基础。下一阶段的实际操作中,无论选择哪种限值存储方式,都需要先明确它属于哪个层次、由谁读写、何时生效,才能保证测试序列在不同站点、不同产线、不同批次之间稳定复现。