使用PyVisa读取Agilent 4156C的输出缓冲区

时间:2016-01-13 23:44:30

标签: python visa gpib

我尝试使用PyVisa使用其FLEX命令集控制Agilent 4156C。通信似乎工作正常,因为我可以用* IDN查询仪器?并读取状态字节。我也认为我现在正确设置电压扫描,因为当我执行Python脚本时,我在4156的屏幕上看不到任何错误。我的问题是,当我尝试使用RMD读取测量数据时?命令,仪器没有响应,以及由于超时导致的程序错误。这是我目前的计划:

import visa

rm = visa.ResourceManager()

inst = rm.open_resource('GPIB0::17::INSTR')
print(inst.query('*IDN?'))
inst.timeout = 6000

print(inst.write('US'))
print(inst.write('FMT 1,1'))

# Set short integration time
print(inst.write('SLI 1'))
# Enable SMU 3
print(inst.write('CN 3'))
# Set measurement mode to sweep (2) on SMU 3
print(inst.write('MM 2,3'))
# Setup voltage sweep on SMU 3
#print(inst.write('WV 3,3,0,0.01,0.1,0.01'))
print(inst.write('WV 3,3,0,-0.1,0.1,0.01,0.01,0.001,1'))
# Execute
print(inst.write('XE'))

# Query output buffer
print("********** Querying RMD **********")
print(inst.write('RMD? 0'))
print(inst.read())

print("********** Querying STB **********")
print(inst.query('*STB?'))

当我在写完RMD之后尝试阅读时,该程序总是挂起? 0',或者如果我查询该命令。我觉得我遗漏了一些简单的东西,但却无法在可用的Agilent或PyVisa文档中找到它。任何帮助将不胜感激。我使用LabView附带的标准NI VISA(我之所以提到,因为我遇到了这个post)。

1 个答案:

答案 0 :(得分:2)

我遇到了同样的问题并解决了。 Command XE使用Agilent 4156C启动电流/电压测量的执行:因此,在执行期间无法发送任何其他GPIB命令。甚至是“ STB”?不起作用。 我发现检查状态字节和测量完成的唯一方法是连续检查“ inst.stb”参数,该参数由签证司机连续更新。 希望这会对其他用户有所帮助。 我的代码:

class Agilent4156C:
    def __init__(self, address):
        try:
            rm = visa.ResourceManager(r'C:\\Windows\\system32\\visa32.dll')
            self.com=rm.open_resource(address)
            self.com.read_termination = '\n'
            self.com.query_delay = 0.0
            self.com.timeout=5000
        except:
            print("** error while connecting to B1500 **")
    def execution(self):
        self.com.write("XE")
        while self.com.stb != 17:
            time.sleep(0.5)