Я использую Python 3.5.1 с pyvisa 1.8 в PyCharm Community Edition 2016.1.4.
Результат "информации о визе python -m" приведен ниже.
I 'У меня странная проблема, когда я пытаюсь провести измерение с помощью нановольтметра Keysight 34420A.
Я связываюсь с 34420A с помощью кабеля National Instruments GPIB-US-HS +.34420A - это адрес GPIB 22, который я проверил с передней панели.
Я получаю ошибку: pyvisa.errors.VisaIOError: VI_ERROR_TMO (-1073807339): истекло время ожидания до завершения операции.
Считывая регистр внутренних ошибок 34420, я нахожу: ERR 1: 550 ERR 2: -420
Это только две сохраненные ошибки.
СогласноРуководство 34420A:
Ошибка 550: «Команда не разрешена в локальном режиме. Счетчик получил команду READ? В локальном режиме для работы по RS-232. Перед отправкой других команд всегда следует выполнять команду SYSTem: REMote.the interface. "
Ошибка -420 is" Запрос UNTERMINATED Счетчик был адресован для разговора (т. е. для передачи данных через интерфейс), но не была получена команда, которая отправляет данные в выходной буфер. Например,возможно, вы выполнили команду CONFigure (которая не генерирует данные), а затем попытались выполнить инструкцию ENTER для чтения данных из удаленного интерфейса "
РЕДАКТИРОВАТЬ: Когда я пытаюсь отправить команду SYSTem: REMote, упомянутую в сообщении ERROR 550, я получаю: ERROR 514 "Команда разрешена только для RS-232: есть три команды, которые разрешены только для интерфейса RS-232: SYSTem: LOCal, SYSTem: REMote и SYSTem: RWLock "Как уже упоминалось в заголовке, я использую GPIB.Кроме того, как упоминалось далее в этом посте, когда я запрашиваю тип интерфейса, он возвращает строку «HPIB», которая является исходным именем для GPIB.Я не знаю, почему я получаю то, что кажется ошибкой RS-232, когда я использую GPIB, но если бы я должен был догадаться, это было бы, что сообщение об ошибке датируется, когда RS-232 был единственным средствомпосле введения HPIB / GPIB сообщение об ошибке никогда не обновлялось.
Основная причина ошибок ERROR 550 и ERROR -420 заключается в том, что 34420A должен находиться в ДИСТАНЦИОННОМ режиме, чтобы выполнить измерение.,Моя проблема в том, что я не могу понять, как программно перевести 34420A в ДИСТАНЦИОННЫЙ режим.
Из моего прочтения документации PyVISA я думаю, что мне нужно использовать метод control_ren (), но я не могу понятькак это сделать.
РЕДАКТИРОВАТЬ: Я прочитал пост переполнения стека pyVISA: Программный возврат инструмента в локальный режим .Это был мой оригинальный указатель на control_ren ().Однако, как я уже упоминал, я не могу понять, как заставить его работать.
Мой текущий обходной путь, который я обнаружил более или менее случайно, - запустить NI-MAX, выберите34420A, и откройте тестовую панель VISA.Когда я делаю это, включается индикатор REMOTE на 34420A, и я могу проводить измерения.Обратите внимание, что мне не нужно отправлять команду на 34420A.Мне просто нужно открыть тестовую панель VISA NI-MAX.
Вот результат "информации о визе python -m":
Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation. All rights reserved.
H:\>python -m visa info
Machine Details:
Platform ID: Windows-7-6.1.7601-SP1
Processor: AMD64 Family 21 Model 48 Stepping 1, AuthenticAMD
Python:
Implementation: CPython
Executable: C:\Anaconda3\python.exe
Version: 3.5.1
Compiler: MSC v.1900 64 bit (AMD64)
Bits: 64bit
Build: Feb 16 2016 09:49:46 (#default)
Unicode: UCS4
PyVISA Version: 1.8
Backends:
ni:
Version: 1.8 (bundled with PyVISA)
#1: C:\Windows\system32\visa32.dll:
found by: auto
bitness: 64
Vendor: Agilent Technologies
Impl. Version: 1345598497
Spec. Version: 5243136
#2: C:\Windows\system32\visa32.dll:
found by: auto
bitness: 64
Vendor: Agilent Technologies
Impl. Version: 1345598497
Spec. Version: 5243136
Для чего стоит, результат "информации о визе python -m" не меняется после того, какЯ открываю тестовую панель VISA.
Вот пример программы, демонстрирующей проблему, которую я адаптировал из демонстрационной программы на веб-сайте Keysight.Обратите внимание, что я могу общаться с 34420A.Помимо прочего, я могу прочитать строку идентификатора 34420A и определить тип интерфейса (это HPIB, BTW - HPIB было оригинальным названием для GPIB);Я просто не могу перевести инструмент в ДИСТАНЦИОННЫЙ режим.
# -*- coding: utf-8 -*-
# Python for Test and Measurement
# Example programs avaialable at 'ftp://ftp.keysight.com/callpub6/callpub6/MISC/Keysight_Python'
#
# Requires VISA installed on Control PC
# 'http://www.agilent.com/find/visa'
# Requires PyVISA to use VISA in Python
# 'http://pyvisa.sourceforge.net/pyvisa/'
# Keysight IO Libraries 17.1.19xxx
# Anaconda Python 2.7.7 32 bit
# pyvisa 1.6.3
##"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
## Copyright © 2015 Agilent Technologies Inc. All rights reserved.
##
## You have a royalty-free right to use, modify, reproduce and distribute this
## example files (and/or any modified version) in any way you find useful, provided
## that you agree that Agilent has no warranty, obligations or liability for any
## Sample Application Files.
##
##"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
# Example Description:
# Basic Example which connects to instrument and queries instrument ID.
# Required Instrument Setup to Execute Example:
# Any instrument connected via GPIB/USB/LAN
# Additional Information:
# import python modules
import visa
import pyvisa
import pyvisa.resources
import pyvisa.constants
try:
# Open Connection
# Try two different ways of opening a resource manager, to see if either works.
# rm = visa.ResourceManager('C:\\Program Files (x86)\\IVI Foundation\\VISA\\WinNT\\agvisa\\agbin\\visa32.dll')
rm = pyvisa.ResourceManager()
# Connect to VISA Address
# LAN - VXI-11 Connection: 'TCPIP0::xxx.xxx.xxx.xxx::inst0::INSTR'
# LAN - HiSLIP Connection: 'TCPIP0::xxx.xxx.xxx.xxx::hislip0::INSTR'
# USB Connection: 'USB0::xxxxxx::xxxxxx::xxxxxxxxxx::0::INSTR'
# GPIB Connection: 'GPIP0::xx::INSTR'
# myinst = rm.open_resource("TCPIP0::K-E4990A-00892::inst0::INSTR")
myinst = rm.open_resource("GPIB0::22::INSTR") # Keysight 34420A Nanovoltmeter
# Set Timeout - 5 seconds
myinst.timeout = 5000
# *IDN? - Query Instrumnet ID
myinst.write("*CLS")
myinst.write("*IDN?")
print(myinst.read())
myinst.write("SYStem:INTerface?")
print(myinst.read())
# myinst.write("SYStem:REMote") # This is an RS232-only command
# From: https://pyvisa.readthedocs.io/en/stable/_modules/pyvisa/constants.html
gpib_ren_assert = pyvisa.constants.VI_GPIB_REN_ASSERT
gpib_ren_assert_address = pyvisa.constants.VI_GPIB_REN_ASSERT_ADDRESS
gpib_ren_assert_llo = pyvisa.constants.VI_GPIB_REN_ASSERT_LLO
gpib_ren_assert_address_llo = pyvisa.constants.VI_GPIB_REN_ASSERT_ADDRESS_LLO
# Per https://pyvisa.readthedocs.io/en/stable/api/resources.html#pyvisa.resources.GPIBInstrument.control_ren
# "Controls the state of the GPIB Remote Enable (REN) interface line, and optionally the remote/local state
# of the device."
control_ren_return = myinst.control_ren(gpib_ren_assert_address)
print("The value returned from myinst.control_ren(gpib_ren_assert_address) is: %s" % control_ren_return)
control_ren_return = myinst.control_ren(gpib_ren_assert_address_llo)
print("The value returned from myinst.control_ren(gpib_ren_assert_address_llo) is: %s" % control_ren_return)
control_ren_return = myinst.control_ren(gpib_ren_assert)
print("The value returned from myinst.control_ren(gpib_ren_assert) is: %s" % control_ren_return)
control_ren_return = myinst.control_ren(gpib_ren_assert_llo)
print("The value returned from myinst.control_ren(gpib_ren_assert_llo) is: %s" % control_ren_return)
# https://pyvisa.readthedocs.io/en/latest/api/resources.html#pyvisa.resources.GPIBInstrument says:
# "Do not instantiate directly, use pyvisa.highlevel.ResourceManager.open_resource()."
# gpib_control_ren_return = pyvisa.resources.GPIBInstrument.control_ren(1)
# print("The value returned from pyvisa.resources.GPIBInstrument.control_ren(1) is %s" % gpib_control_ren_return)
# =======================================================================================================
# Uncommenting the next line causes the error:
# pyvisa.errors.VisaIOError: VI_ERROR_TMO (-1073807339): Timeout expired before operation completed.
# apparently because the instrument is not in REMOTE mode first.
# =======================================================================================================
# myinst.write("MEAS:VOLT:DC?")
# print(myinst.read())
# Close Connection
myinst.close()
print('close instrument connection')
except Exception as err:
print('Exception: ' + str(err.message))
finally:
# perform clean up operations
print('complete')
Как я уже говорил, я думаю, что мне нужно использовать метод "control_ren ()", но я не могу понять, как.
РЕДАКТИРОВАТЬ: если мой прибор GPIB находится в режиме REMOTE (с помощью моего теста NI-MAX / VISA Test Panel), то я могу отправить «control_ren (2)» или «control_ren (6)», чтобы перевести прибор в локальное состояние. Режим. Так почему я не могу использовать control_ren (), чтобы перевести инструмент в режим REMOTE?
- Основная идея использования «control_ren (6)» для перевода прибора в локальный режим появилась из pyVISA: программный возврат прибора в локальный режим
- Значение 2 соответствует pyvisa.constants.VI_GPIB_REN_DEASSERT_GTL
- Значение 6 соответствует pyvisa.constants.VI_GPIB_REN_ADDRESS_GTL
- GTL = Go To Local