我尝试使用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)。
答案 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)