Чтение выходного буфера Agilent 4156C с использованием PyVisa
Я пытаюсь использовать PyVisa для управления Agilent 4156C с помощью набора команд FLEX. Кажется, связь работает нормально, так как я могу запросить прибор с помощью *IDN? и прочитайте байт состояния. Я также думаю, что сейчас я правильно настраиваю свой скачок напряжения, так как не вижу ошибок на экране 4156 при выполнении скрипта Python. Моя проблема в том, что когда я пытаюсь прочитать данные измерений, используя 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. Любая помощь будет принята с благодарностью. Я использую стандартную NI VISA, которая поставляется с LabView (я упоминаю об этом, потому что я наткнулся на этот пост).
0 ответов
Я столкнулся с той же проблемой и решил ее. Команда XE запускает выполнение измерений тока / напряжения с помощью Agilent 4156C: таким образом, невозможно отправить какие-либо дополнительные команды GPIB во время выполнения. Даже "СТБ?" не работает. Единственный способ, который я нашел для проверки байта состояния и завершения измерения, - это постоянная проверка параметра "inst.stb", который постоянно обновляется водителем Visa. Надеюсь, это поможет другим пользователям. Мой код:
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)