3458A 程控时遇到的问题
前言
3458A是KEYSIGHT的一款八位半台式数字万用表,目前工作中需要对其进行程控,遇到了一些问题,现将其梳理并附上参考代码。
一、使用*IDN?查询时dmm提示:103,"SYNTAX
3458A是一种旧仪器,不懂SCPI命令语言,因此GPIB程控时,需要查询manual的commands, 比如: *IDN?应替换为ID?
二、write is ok, but read will get read timeout
GPIB EOI(END or Identify)信号用于指示数据传输的结束或标识GPIB设备链中的最后一个设备。当一个设备 assert EOI信号时,它通知GPIB总线自己已经完成了数据传输,或者它是最后一个接收数据的设备。
END命令用来开启或关闭GPIB EOI (END or Identify)功能。
仪表重新上电后,被设置为END OFF
如果为高速模式指定了END ALWAYS,则在读取数据时,EOI模式自动变为ON。读取完成后,EOI模式返回到ALWAYS。
因此在第一次使用查询指令前,给dmm发以下指令
END ALWAYS
三、code
基础功能代码如下:
class HP3458A():
def __init__(self, address, model=''):
self.addr = address
self.model = model
self.rm = visa.ResourceManager()
self.dmm = self.rm.open_resource(self.addr)
self.dmm.write_termination = '\n'
self.dmm.timeout = TIMEOUT
self.dmm.write('END ALWAYS')
def IDN(self):
return self.dmm.query('ID?')
def Line(self):
'''
freq of power line
'''
return self.dmm.query('LINE?')
四、使用keysight GPIB卡,NI VISA识别不到HP3458A
打开Keysight Connection Expert,Settings -> Keysight 488 GPIB options -> 勾选Enable Keysight GPIB Cards for 488 Programs.
C++ ok, python open_resource报错, 后面有空再排查.