2. 测量仪器与自动化接口基础
在ADI实验室中,电源、万用表、示波器、信号源和电子负载是最常见的五类台式仪器。它们各自承担不同的测量角色,但自动化系统对它们的要求是一致的:上位机能够通过标准接口发送命令、读取数据,并把结果稳定地纳入测试流程。理解这些仪器的程控接口类型、SCPI命令结构、VISA层的作用以及通信协议的选择,是搭建自动化测量平台的第一步。
常见仪器的程控接口类型
ADI实验室仪器通常提供以下几种物理接口:
- USB(USBTMC):现代台式仪器最普遍的接口,即插即用,支持高速数据传输。例如Keysight E36312A电源、Keysight 34461A万用表均标配USB-TMC接口。上位机通过USB连接后,仪器在系统中表现为一个USBTMC设备,VISA层可直接识别。
- LAN(LXI):基于以太网的仪器扩展标准,支持VXI-11、HiSLIP或原始Socket通信。LAN接口适合多台仪器组网、远程访问和长时间无人值守测试。例如Keysight InfiniiVision 3000T示波器、Keithley 2281S电源均支持LXI。
- GPIB(IEEE-488):传统但依然可靠的并行总线接口,在老旧仪器和需要高确定性的场景中仍在使用。GPIB需要专用控制器卡或USB-GPIB转换器,如National Instruments GPIB-USB-HS。
- RS-232/串口:部分电子负载和信号源仍保留串口接口,适合低速、点对点控制。例如Chroma 63200A电子负载可选配RS-232。
选择接口时,优先考虑仪器实际配备的接口、测试对吞吐量的要求以及实验室现有基础设施。USB适合单台快速接入,LAN适合多设备并行和远程控制,GPIB适合兼容旧设备,串口则用于低速辅助设备。
SCPI命令:统一的仪器语言
SCPI(Standard Commands for Programmable Instruments)是建立在IEEE-488.2基础上的命令集标准,它用树状结构组织命令,使不同厂商、不同型号的仪器具有相似的编程方式。SCPI命令分为两类:设置命令(无问号)和查询命令(带问号)。
以Keysight 34461A万用表为例,典型命令如下:
CONF:VOLT:DC 10 // 配置直流电压测量,量程10V
SENS:VOLT:DC:NPLC 10 // 设置积分时间10个电源周期
TRIG:SOUR BUS // 触发源设为总线触发
INIT // 启动测量
FETC? // 读取最近一次测量结果
再以Keysight E36312A电源为例:
VOLT 5.0 // 设置输出电压5V
CURR 1.0 // 设置限流1A
OUTP ON // 打开输出
MEAS:VOLT? // 查询实际输出电压
MEAS:CURR? // 查询实际输出电流
SCPI命令的树状结构意味着命令可以缩写,例如MEASure:VOLTage:DC?可缩写为MEAS:VOLT:DC?。但缩写必须遵循规则:大写字母为必需部分,小写字母可省略。实际编程中建议使用完整形式或厂商文档中明确给出的缩写,避免因缩写歧义导致命令无法识别。
VISA层:上位机与仪器的桥梁
VISA(Virtual Instrument Software Architecture)是上位机与仪器之间的软件中间层。它屏蔽了底层物理接口的差异,为USB、LAN、GPIB、串口提供统一的API。无论仪器通过哪种接口连接,上位机都可以用相似的函数打开资源、写入命令、读取响应。
VISA资源地址的格式决定了通信路径。常见格式如下:
- USB:
USB0::0x2A8D::0x1301::MY59001234::INSTR - LAN:
TCPIP0::192.168.1.100::inst0::INSTR - GPIB:
GPIB0::22::INSTR - 串口:
ASRL3::INSTR
在Python中,常用PyVISA库操作VISA资源。以下示例展示如何连接万用表并读取一次直流电压:
import pyvisa
rm = pyvisa.ResourceManager()
dmm = rm.open_resource('USB0::0x2A8D::0x1301::MY59001234::INSTR')
dmm.timeout = 5000
dmm.write('CONF:VOLT:DC 10')
dmm.write('TRIG:SOUR BUS')
dmm.write('INIT')
dmm.write('*TRG')
print(dmm.query('FETC?'))
dmm.close()
这段代码中,write用于发送不返回数据的命令,query用于发送查询并读取响应。超时设置timeout非常关键,默认值可能过短,导致长积分时间测量时读取失败。
通信协议选择与信号链关系
从命令到物理传输,整个通信链路可以概括为:上位机程序 → VISA库 → 物理接口驱动 → 仪器通信端口 → SCPI解析器 → 仪器功能模块。每一层都有对应的配置参数和潜在故障点。
选择通信协议时,需要权衡以下因素:
- 吞吐量:示波器波形数据量大,优先选LAN或USB;电源和万用表命令简单,USB或GPIB均可。
- 延迟确定性:GPIB在触发同步场景中延迟更稳定;LAN受网络交换机影响,可能引入抖动。
- 多设备扩展:LAN天然支持多设备并行,GPIB总线挂载设备数量有限(通常最多15台)。
- 线缆长度:GPIB建议不超过20米,USB不超过5米,LAN可通过交换机扩展。
下图展示了ADI实验室中典型仪器的接口类型、SCPI命令流向以及VISA层在系统中的位置关系。
实际配置中的关键判断
在搭建自动化测试环境时,以下几个判断点直接影响系统稳定性:
超时设置:万用表在10 NPLC积分时间下,单次测量可能耗时200 ms以上。若VISA超时设为默认的2000 ms,通常足够;但若使用100 NPLC,则需将超时提高到5000 ms以上。示波器读取深存储波形时,数据传输可能持续数秒,超时需相应放大。
终止符与读取方式:SCPI响应通常以换行符\n结尾。使用query()时,PyVISA会自动处理终止符;若使用read_raw(),则需要手动解析。对于二进制波形数据,应使用query_binary_values()而非文本读取,否则会因编码问题导致数据损坏。
命令同步:部分仪器在执行INIT后立即返回,实际测量尚未完成。此时应使用*OPC?查询或*WAI等待,确保测量完成后再读取结果。例如:
dmm.write('INIT')
dmm.query('*OPC?') # 阻塞直到操作完成
print(dmm.query('FETC?'))
接口选择与仪器匹配:并非所有仪器都支持全部接口。例如Keysight 34461A支持USB和LAN,但不支持GPIB;而较老的Agilent 34401A则主要依赖GPIB和RS-232。在编写自动化脚本前,应先确认仪器实际配备的接口,并选择对应的VISA资源地址。
掌握以上接口类型、SCPI命令结构、VISA层作用和协议选择原则后,就可以开始为具体仪器编写可复用的控制函数。下一阶段的工作是将这些函数组织成测试序列,并加入数据记录与报告生成环节。