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 等,用于处理用户登录、消息提示等交互。定制时若需要改变界面行为,应优先查找前端回调,而不是修改模型主流程。
五、定制时的入口选择策略
面对这么多入口,定制时应该按“最小改动”原则选择。如果只是想在测试开始前加载一份配置文件,改 ProcessSetup 即可;如果要在每个 UUT 测试后写入数据库,优先改数据库插件的 PostUUT,而不是在主模型里硬编码。若需要改变报告格式,应修改报告插件的对应入口,而不是重写整个模型。判断入口是否合适,可以问三个问题:这个入口的触发时机是否匹配需求?触发频率是否可接受?改动是否会影响其他插件或升级兼容性?
六、一个可参考的入口对照表
| 入口名称 | 所在文件 | 触发条件 | 典型用途 |
|---|---|---|---|
| ProcessSetup | SequentialModel.seq | 测试过程开始前 | 加载全局配置、初始化仪器 |
| PreUUT | SequentialModel.seq | 每个 UUT 测试前 | UUT 信息录入、条码扫描 |
| PreStep | SequentialModel.seq | 每个步骤执行前 | 步骤级数据采集、条件判断 |
| PostStep | SequentialModel.seq | 每个步骤执行后 | 步骤结果记录、截图保存 |
| PostUUT | SequentialModel.seq | 每个 UUT 测试后 | 结果写入数据库、生成报告 |
| ProcessCleanup | SequentialModel.seq | 测试过程结束后 | 释放资源、关闭连接 |
| EngineNewExecution | FrontEndCallbacks.seq | 新执行创建时 | 初始化执行上下文 |
| LoginLogout | FrontEndCallbacks.seq | 用户登录/登出时 | 权限校验、操作日志 |
这张表不是要你死记,而是作为定制时的速查依据。实际项目中,入口的触发条件可能因模型版本或自定义插件而略有差异,最可靠的方式是在 Sequence Editor 中打开对应文件,查看 Callback 的“Sequence Properties”中的触发设置。掌握文件结构与入口触发条件后,后续的插件开发、回调编写和模型调试就有了明确的落点。