3. Process Model文件结构与关键入口点

Process Model 在 TestStand 中并不是一个“黑盒”,它本质上是一组按约定组织起来的序列文件(.seq),再加上若干配置文件和插件。理解它的文件结构,等于拿到了定制 Process Model 的地图:知道哪些文件可以改、哪些入口会被引擎自动调用、每个入口在什么条件下触发。本节围绕 .seq 文件的组成、Model Plugins、Callback 序列和 Engine Callbacks 展开,帮助你在动手修改前先建立清晰的结构认知。

一、Process Model 的文件组成

TestStand 安装目录下的 <TestStand>\Components\Models\TestStandModels 是 Process Model 的核心位置。以默认的 Sequential Model 为例,主要文件包括:

  • SequentialModel.seq:模型主文件,包含 Model Plugins、Callback 序列、Model Options 等核心内容,是定制的重点对象。
  • NiTestStandModelPlugin.seq、Database.seq、Report.seq 等:以插件形式挂载的功能模块,分别负责数据库记录、报告生成等横切能力。
  • FrontEndCallbacks.seq:前端回调集合,供操作界面(如 TestStand 自带的 Full-Featured UI)调用。
  • ModelPanels.ini、StationGlobals.ini 等:模型面板与全局变量配置,影响运行时界面和参数。

需要区分两个概念:Model File 是模型主文件,Model Plugin 是被主模型加载的扩展文件。插件机制让报告、数据库等功能与主流程解耦,定制时通常优先改插件,而不是直接改主模型,以降低升级风险。

二、Model Plugins 的加载与作用

Model Plugins 在模型启动阶段被加载。每个插件在 SequentialModel.seq 的 Model Plugins 列表中登记,包含插件路径、启用状态和加载顺序。插件通过实现一组约定的入口序列(如 Initialize、Cleanup、PreUUT、PostUUT 等)参与主流程。加载顺序很重要:如果数据库插件依赖报告插件生成的路径,就必须保证报告插件先加载。定制时若新增插件,需要在 Model Plugins 列表中注册,并确保其入口序列名称与主模型调用约定一致,否则插件不会被执行。

三、Callback 序列与触发条件

Callback 是 Process Model 最关键的扩展点。它们不是被顺序执行的普通序列,而是由引擎在特定时机“回调”的入口。常见的 Callback 包括:

  • ProcessSetup:测试过程开始前触发,适合做全局初始化、加载配置。
  • PreUUT / PostUUT:每个 UUT 测试前后触发,适合做 UUT 级准备与清理。
  • PreStep / PostStep:每个测试步骤前后触发,适合做步骤级监控或数据采集。
  • ProcessCleanup:测试过程结束后触发,适合释放资源、关闭连接。
  • ModelOptions:不是回调,而是模型选项入口,控制是否启用报告、数据库、追踪等行为。

触发条件由引擎根据执行阶段自动判断。例如 PreUUT 在每个 UUT 开始测试前触发一次,而 PreStep 在每个步骤执行前触发。定制时若在 Callback 中写入了耗时操作,会直接影响整体测试节拍,因此需要评估触发频率。

四、Engine Callbacks 与前端回调

Engine Callbacks 是引擎级别的回调,通常位于 FrontEndCallbacks.seq 或模型主文件中,用于响应引擎事件,如 EngineNewExecution、EngineCloseExecution 等。它们与 Process Model Callback 的区别在于:前者面向引擎生命周期,后者面向测试过程生命周期。前端回调则面向操作界面,如 LoginLogout、UserMessage 等,用于处理用户登录、消息提示等交互。定制时若需要改变界面行为,应优先查找前端回调,而不是修改模型主流程。

Process Model 文件结构与关键入口点 SequentialModel.seq 模型主文件 Model Plugins 列表 Callback 序列 Model Options Model Plugins Database.seq Report.seq NiTestStandModelPlugin.seq 按加载顺序注册 FrontEndCallbacks.seq LoginLogout UserMessage EngineNewExecution 面向界面与引擎 加载 调用 测试执行阶段与 Callback 触发顺序 ProcessSetup 过程开始前 PreUUT 每个UUT前 PreStep 每个步骤前 PostStep 每个步骤后 PostUUT 每个UUT后 ProcessCleanup 过程结束后 触发频率与定制注意: • ProcessSetup / ProcessCleanup:每次执行触发一次,适合全局初始化与资源释放 • PreUUT / PostUUT:每个 UUT 触发一次,适合 UUT 级准备与清理 • PreStep / PostStep:每个步骤触发一次,频率最高,避免写入耗时操作

五、定制时的入口选择策略

面对这么多入口,定制时应该按“最小改动”原则选择。如果只是想在测试开始前加载一份配置文件,改 ProcessSetup 即可;如果要在每个 UUT 测试后写入数据库,优先改数据库插件的 PostUUT,而不是在主模型里硬编码。若需要改变报告格式,应修改报告插件的对应入口,而不是重写整个模型。判断入口是否合适,可以问三个问题:这个入口的触发时机是否匹配需求?触发频率是否可接受?改动是否会影响其他插件或升级兼容性?

在修改任何 Callback 之前,建议先复制一份原始 .seq 文件作为备份,并在 TestStand 的 Sequence Editor 中通过“Find”功能搜索入口名称,确认它被哪些地方调用。这样能避免误改导致模型无法启动。

六、一个可参考的入口对照表

入口名称所在文件触发条件典型用途
ProcessSetupSequentialModel.seq测试过程开始前加载全局配置、初始化仪器
PreUUTSequentialModel.seq每个 UUT 测试前UUT 信息录入、条码扫描
PreStepSequentialModel.seq每个步骤执行前步骤级数据采集、条件判断
PostStepSequentialModel.seq每个步骤执行后步骤结果记录、截图保存
PostUUTSequentialModel.seq每个 UUT 测试后结果写入数据库、生成报告
ProcessCleanupSequentialModel.seq测试过程结束后释放资源、关闭连接
EngineNewExecutionFrontEndCallbacks.seq新执行创建时初始化执行上下文
LoginLogoutFrontEndCallbacks.seq用户登录/登出时权限校验、操作日志

这张表不是要你死记,而是作为定制时的速查依据。实际项目中,入口的触发条件可能因模型版本或自定义插件而略有差异,最可靠的方式是在 Sequence Editor 中打开对应文件,查看 Callback 的“Sequence Properties”中的触发设置。掌握文件结构与入口触发条件后,后续的插件开发、回调编写和模型调试就有了明确的落点。