Python通过GPIB读取SR865A锁相放大器报GPIBInstrument无ask属性错误
问题修复方案
核心原因
这个报错由PyVISA版本的方法名变更导致:PyVISA v1.5及之后的版本已经正式移除了旧版的ask()方法,等价的替换方法为query(),两者功能完全一致,都是向仪器发送SCPI查询指令并同步等待返回结果。
修复代码
你只需要修改get_all方法内的方法名即可,完整可运行代码如下:
import pyvisa as visa import time,string import random class device: def __init__(self,visa_code='GPIB0::8::INSTR'): rm = visa.ResourceManager() self.device=rm.open_resource(visa_code) # 可选:设置5秒超时,避免仪器响应慢报错 self.device.timeout = 5000 #get data def get_all(self): # 把ask替换为query即可解决报错 return self.device.query('SNAP? 0,1,2,3') if (__name__ == '__main__'): # 可选:补全INSTR后缀符合VISA地址标准格式 add="GPIB0::14::INSTR" lockin=device(add) data=lockin.get_all() x=float(data.split(',')[0]) y=float(data.split(',')[1]) r=float(data.split(',')[2]) theta=float(data.split(',')[3])
额外注意事项
- 若你需要兼容新旧版本的PyVISA,也可以在类初始化后手动给实例绑定方法:
self.device.ask = self.device.query,无需修改后续业务代码。 - SR865A的SNAP指令返回的数值默认是科学计数法格式,直接用float转换不会出现格式问题。
内容的提问来源于stack exchange,提问作者rao han
相关产品推荐
相关产品推荐

