第四章:仪器控制基础
好,咱们进入第四章。这一章,说白了就是让你学会怎么跟仪器“说话”。
做声学测试,你不可能全靠耳朵听。你得用APx、万用表、电源这些家伙。怎么让它们听你的?就是通过PyVISA和SCPI命令。
我个人习惯,先把基础打牢。别急着写大段代码,先搞懂怎么连上一台仪器。
4.1 PyVISA库安装
PyVISA,就是Python和仪器之间的翻译官。没有它,你的电脑和APx就是两个世界的人。
安装很简单,但我建议你用虚拟环境。为什么?因为不同项目可能依赖不同版本的PyVISA,混在一起容易出问题。我在项目中遇到过,一个同事直接在系统Python里装了一堆库,结果版本冲突,折腾了半天。
打开终端,敲下面这行:
pip install pyvisa pyvisa-py
这里我装了两个包:pyvisa是核心库,pyvisa-py是后端驱动。你想想看,没有后端驱动,就像你买了手机没插SIM卡,能打电话吗?
装完之后,验证一下:
python -c "import pyvisa; print(pyvisa.__version__)"
如果没报错,恭喜你,第一步走通了。
4.2 SCPI命令入门
SCPI,全称是Standard Commands for Programmable Instruments。说白了,就是一套标准化的“咒语”。
你对着仪器念一句“*IDN?”,它就会告诉你“我是谁”。你念一句“MEAS:VOLT?”,它就会报出当前电压值。
SCPI命令的结构其实很清晰:
- 子系统:比如MEASure、SOURce、SYSTem
- 命令:比如VOLTage、CURRent、FREQuency
- 参数:比如数值、单位、通道号
举个例子:
*IDN?
MEAS:VOLT:DC? # 测量直流电压
SOUR:VOLT:LEV 5 # 设置输出电压为5V
嗯,这里要注意,SCPI命令不区分大小写,但为了可读性,我习惯大写子系统,小写具体命令。
我个人经验,刚开始学SCPI,别死记硬背。打开仪器的编程手册,找到你要用的命令,复制粘贴就行。用多了自然就记住了。
4.3 APx仪器控制
APx是声学测试的标配。控制它,其实就两步:连接、发命令。
先看连接代码:
import pyvisa
rm = pyvisa.ResourceManager()
# 列出所有可用仪器
print(rm.list_resources())
# 假设APx的资源地址是 'TCPIP0::192.168.1.100::inst0::INSTR'
apx = rm.open_resource('TCPIP0::192.168.1.100::inst0::INSTR')
print(apx.query('*IDN?'))
看到没?query就是“问一句,等回答”。如果你只想发命令,不想等回复,用write。
接下来,咱们让它做个简单的声压级测量:
# 设置测量参数
apx.write('SENS:SPL:WEIG A') # A计权
apx.write('SENS:SPL:TIME 1') # 1秒积分时间
# 触发测量
apx.write('INIT')
# 读取结果
result = apx.query('FETC:SPL?')
print(f"声压级: {result} dB")
我在项目中遇到过,有些APx型号的INIT命令执行后,需要等一会儿才能读取结果。所以,我习惯在INIT后面加个time.sleep(0.5),确保测量完成。
4.4 万用表/电源控制
万用表和电源,是产测里的“老黄牛”。它们不像APx那么复杂,但控制逻辑是一样的。
先看万用表。假设你用的是Keysight 34461A:
dmm = rm.open_resource('TCPIP0::192.168.1.101::inst0::INSTR')
# 配置为测量直流电压
dmm.write('CONF:VOLT:DC 10')
# 读取测量值
voltage = dmm.query('READ?')
print(f"电压: {voltage} V")
再看电源。假设是ITECH IT6720:
psu = rm.open_resource('TCPIP0::192.168.1.102::inst0::INSTR')
# 设置输出电压和电流
psu.write('VOLT 12')
psu.write('CURR 3')
# 打开输出
psu.write('OUTP ON')
# 读取实际输出
actual_voltage = psu.query('MEAS:VOLT?')
print(f"实际电压: {actual_voltage} V")
你想想看,产测里经常需要先给Soundbar上电,再用万用表测待机功耗。这时候,电源和万用表就得配合起来。
我曾经犯过一个错:电源输出还没稳定,就去读万用表。结果读到的电压是跳变的。后来我加了个延时,等电源稳定了再读,问题就解决了。
好了,这一章的内容就这些。总结一下:
- PyVISA是桥梁,装好它才能跟仪器通信
- SCPI是语言,学会基本命令就能控制大多数仪器
- APx、万用表、电源,控制逻辑都一样:连接、配置、触发、读取
下一章,咱们会把这些基础串起来,做一个完整的产测流程。到时候,你会发现,原来自动化测试就这么回事。