3. 测试设备与仪器资源分类建模

在 TestStand 工程中,仪器资源管理的第一步不是写序列,而是把“设备”抽象成可被序列稳定引用的“资源”。如果直接把 GPIB::22::INSTR 这类地址硬编码进步骤,一旦更换接口卡、调整机架位置或替换同型号仪器,序列就会大面积失效。因此本节围绕三个维度建立分类模型:接口类型决定通信通道与寻址方式,功能角色决定测量能力与可复用步骤,资源命名规范决定序列与设备之间的解耦程度。

一、按接口类型分类:先分清“怎么连”

接口类型描述的是仪器与控制器之间的物理与协议通道,它直接影响 TestStand 中调用的驱动层和地址格式。常见六类接口的建模要点如下:

  • GPIB:传统并行总线,地址形如 GPIB0::12::INSTR,其中 0 为板卡号、12 为仪器主地址。适合老式台式仪器,需注意总线速率与多设备串联时的地址冲突。
  • VISA:不是物理接口,而是统一 I/O 抽象层。它可封装 GPIB、串口、TCP/IP、USB 等,地址如 TCPIP0::192.168.1.50::inst0::INSTR。在 TestStand 中优先通过 VISA 别名访问,避免直接写物理地址。
  • PXI:模块化机箱总线,地址常表示为 PXI0::15::INSTR 或通过槽位号定位。适合高通道数、高同步性场景,如多路 DMM 与开关矩阵。
  • LXI:基于以太网的仪器标准,地址通常为 TCPIP0::192.168.1.60::INSTR,支持 Web 界面与 IEEE 1588 同步。适合分布式机架与远程测试。
  • 串口:RS-232/485,地址如 ASRL3::INSTR,需配置波特率、数据位、停止位与流控。常用于电源、温箱等低速设备。
  • TCP/IP:裸 Socket 通信,地址如 TCPIP0::192.168.1.70::5025::SOCKET,端口 5025 为 SCPI 常用端口。适合无 VISA 驱动或需自定义协议的设备。

建模时建议为每类接口建立独立的“接口层”配置项,记录板卡号、IP、端口、超时等参数,而不是散落在各步骤中。这样更换接口时只需改一处。

二、按功能角色建模:再分清“能做什么”

功能角色描述仪器在测试系统中的职责,它决定可复用的步骤模板与测量参数。典型角色包括:

  • DMM(数字万用表):测量电压、电流、电阻、通断。关键参数为量程、分辨率、NPLC、触发方式。建模时应封装“配置—测量—读取”三步,并暴露量程与 NPLC 作为输入。
  • 示波器:采集波形,关注时基、垂直档位、触发边沿、采样率。建模时需区分“单次采集”与“连续采集”,并定义波形数据落盘路径。
  • 电源:输出直流电压/电流,关注设定值、限流值、上电顺序与关断顺序。建模时应把“上电”和“下电”做成独立可复用序列,避免顺序错误损坏被测件。
  • 信号源:产生正弦、方波、任意波,关注频率、幅度、偏置、输出阻抗。建模时需记录波形类型与调制参数。
  • 开关:矩阵或多路复用,关注通道映射、闭合/断开状态、扫描顺序。建模时应把“通道号—物理引脚”映射表独立维护。

功能角色建模的核心是“角色接口”与“具体型号”分离。例如定义 DMM_MeasureVoltage 角色步骤,内部再根据实际型号调用对应驱动。这样替换同角色仪器时,序列无需重写。

三、资源命名规范设计:让序列与设备解耦

命名规范的目标是:序列中只出现逻辑名,物理地址集中在配置文件中。推荐采用“站点—角色—序号”三段式命名,例如:

ST01_DMM_01      → 站点1 第1台数字万用表
ST01_SCOPE_01    → 站点1 第1台示波器
ST01_PSU_01      → 站点1 第1台电源
ST01_SWITCH_01   → 站点1 第1台开关矩阵
ST01_SIGGEN_01   → 站点1 第1台信号源

逻辑名与物理地址的映射建议放在 TestStand 的 Station Globals 或外部 CSV/INI 中,例如:

ST01_DMM_01,GPIB0::12::INSTR,34401A
ST01_SCOPE_01,TCPIP0::192.168.1.60::INSTR,DSOX3024T
ST01_PSU_01,ASRL3::INSTR,DP832
ST01_SWITCH_01,PXI0::15::INSTR,PXI-2530
ST01_SIGGEN_01,GPIB0::18::INSTR,33500B

命名时需遵守:只用大写字母、数字和下划线;角色缩写统一(DMM、SCOPE、PSU、SWITCH、SIGGEN);序号从 01 开始补零;站点号与工位物理编号一致。这样在序列中写 StationGlobals.ST01_DMM_01.Address 即可,换设备只改映射表。

测试设备资源分类建模:接口层 → 角色层 → 逻辑名层 接口类型层(物理/协议通道) GPIB GPIB0::12::INSTR VISA 统一 I/O 抽象 PXI PXI0::15::INSTR LXI TCPIP0::…::INSTR 串口 ASRL3::INSTR TCP/IP …::5025::SOCKET 地址映射 功能角色层(测量能力与步骤模板) DMM 量程/NPLC/触发 示波器 时基/触发/采样 电源 电压/限流/时序 信号源 频率/幅度/波形 开关 通道映射/扫描 角色绑定 逻辑名层(序列中只引用逻辑名) ST01_DMM_01 → GPIB0::12::INSTR ST01_SCOPE_01 → TCPIP0::…::INSTR ST01_PSU_01 → ASRL3::INSTR ST01_SWITCH_01 → PXI0::15::INSTR ST01_SIGGEN_01 → GPIB0::18::INSTR 序列步骤示例:StationGlobals.ST01_DMM_01.Address → 读取映射表 → 调用 VISA 打开会话 → 执行 DMM_MeasureVoltage 更换设备时只改映射表,序列中的逻辑名保持不变,实现序列与物理设备解耦。

四、建模落地:从分类到可执行配置

把上述三层落到 TestStand 工程中,可按以下顺序操作。第一步,在 Station Globals 中建立 ResourceMap 容器,按逻辑名存放地址、型号、接口类型、超时四个字段。第二步,为每个功能角色建立通用序列文件,例如 DMM_MeasureVoltage.seq,其输入参数为逻辑名与测量配置,内部通过 ResourceMap 解析出地址后调用 VISA。第三步,在测试序列中只写逻辑名与角色步骤,不出现任何物理地址。

判断建模是否成功,可以看三个信号:更换一台同角色仪器时,是否只需修改映射表一行;新增一个工位时,是否只需复制命名前缀并追加序号;序列在离线编辑时,是否能在不连接仪器的情况下完成语法检查。若这三点都满足,说明接口、角色、命名三层已经解耦。

命名规范一旦确定,应写入团队编码约定并纳入版本管理。建议在 TestStand 启动时增加一段校验逻辑:遍历 ResourceMap,检查逻辑名是否符合正则 ^ST\d{2}_(DMM|SCOPE|PSU|SWITCH|SIGGEN)_\d{2}$,地址是否可被 VISA 解析,发现冲突立即报警。

最后需要强调:接口类型、功能角色、逻辑名三者不是并列的标签,而是从物理到逻辑的逐层抽象。接口层回答“怎么连”,角色层回答“能做什么”,命名层回答“序列怎么引用”。只有三层同时建立并保持映射一致,TestStand 的仪器资源管理才具备可维护性与可移植性。