第4章:GPIB/USB通信基础

各位同学,今天我们来聊聊仪器通信里最基础、也最绕不开的两个东西——GPIB和USB。说实话,我刚入行那会儿,光配GPIB地址就折腾了一下午。后来才发现,很多坑其实是可以提前避开的。

4.1 GPIB地址配置:别小看这个旋钮

GPIB,全称是通用接口总线。老一点的仪器基本都带这个口。它最大的特点就是——可以并联。你想想看,一台电脑通过一根GPIB线,最多能连15台仪器。每台仪器必须有一个唯一的地址,范围是0到30。

地址怎么设? 大部分仪器后面板有个小旋钮,或者按键菜单。我习惯把地址设成跟仪器类型相关。比如万用表设16,电源设17,这样好记。

⚠️ 注意: 地址不能重复。我曾经在实验室里遇到过两台仪器都设成16,结果数据全乱了。排查了半小时才发现是地址冲突。

还有一种情况——有些老仪器地址设好后要重启才生效。嗯,这个也容易忘。

4.2 USB识别:即插即用?不一定

现在的仪器很多都支持USB接口。插上电脑,理论上应该自动识别。但现实往往没那么美好。

我遇到过最典型的问题:插上USB线,设备管理器里显示“未知设备”。为什么?

  • 驱动没装。很多仪器需要安装VISA驱动或者厂商专用驱动。
  • USB线质量差。别笑,我吃过这个亏。换根线就好了。
  • 供电不足。有些便携仪器靠USB供电,电脑USB口电流不够就识别不了。

识别成功后,你会在设备管理器里看到一个“USB Test and Measurement Device”之类的设备。这时候,它就有了一个VISA资源名称,比如 USB0::0x1234::0x5678::INSTR。这个字符串后面会用到。

4.3 PyVISA库的基本使用

PyVISA是Python里操作仪器最常用的库。说白了,它就是帮我们跟仪器“说话”的翻译官。

安装很简单:

pip install pyvisa pyvisa-py

然后我们来看看怎么用。先列出所有可用的仪器:

import pyvisa
rm = pyvisa.ResourceManager()
print(rm.list_resources())

你会看到类似这样的输出:

('USB0::0x1234::0x5678::INSTR', 'GPIB0::16::INSTR')

有了资源名,就可以连接仪器了:

inst = rm.open_resource('GPIB0::16::INSTR')
print(inst.query('*IDN?'))  # 查询仪器身份

*IDN? 是SCPI标准命令,几乎所有仪器都支持。它会返回仪器的制造商、型号、序列号等信息。我每次拿到新仪器,第一件事就是发这个命令,确认通信正常。

💡 小技巧: 如果不知道仪器支持哪些命令,可以查它的编程手册。或者试试 *CLS(清除状态)、*RST(复位)这些通用命令。

4.4 与模拟仪器通信:先练练手

没有真实仪器怎么办?别急,PyVISA支持模拟仪器。我们可以用 pyvisa-sim 这个库来模拟。

安装:

pip install pyvisa-sim

然后写一个简单的模拟仪器配置文件(比如 sim.yaml):

resources:
  - name: GPIB0::16::INSTR
    type: GPIB
    address: 16
    commands:
      - command: "*IDN?"
        response: "模拟万用表,SN12345"
      - command: "MEAS:VOLT:DC?"
        response: "5.123"

启动模拟器:

pyvisa-sim sim.yaml

然后你的Python代码就可以像操作真实仪器一样操作它了:

import pyvisa
rm = pyvisa.ResourceManager('@sim')
inst = rm.open_resource('GPIB0::16::INSTR')
print(inst.query('*IDN?'))  # 输出:模拟万用表,SN12345
print(inst.query('MEAS:VOLT:DC?'))  # 输出:5.123

这个模拟器特别适合调试代码。我经常在开发阶段先用模拟器跑通逻辑,再连真实仪器。省去了反复插拔线缆的麻烦。

4.5 避坑指南

最后,分享几个我踩过的坑:

  • 超时问题: 仪器没响应时,PyVISA默认会等很久。建议设置超时:inst.timeout = 5000(5秒)。
  • 编码问题: 有些老仪器返回的数据带换行符,记得用 .strip() 清理。
  • 资源释放: 用完仪器记得 inst.close(),否则下次可能连不上。

好了,这一章的内容就到这里。下一章我们会真正开始采集数据,到时候这些基础就派上用场了。