PyVISA - Не удается заставить инструмент GPIB перейти в режим REMOTE программно - PullRequest
1 голос
/ 11 июня 2019

Я использую 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?

1 Ответ

0 голосов
/ 03 июля 2019

Может быть несколько плохой ответ на мой собственный вопрос, но я хотел опубликовать решение, которое нашел, если кто-нибудь еще наткнется на этот вопрос, пытаясь решить собственную подобную проблему.

Короче говоря, основной причиной, по-видимому, является проблема соединения с кабелем National Instruments GPIB-USB-HS +. В 34420A отсутствовал винтовой адаптер на одной стороне интерфейса GPIB, поэтому с другой стороны мы могли только плотно закрутить разъем GPIB. Когда я каннибализировал винтовой адаптер из другого инструмента и вставил его в 34420A, поэтому мы МОГЛИ плотно закрутить разъем GPIB с обеих сторон, проблема исчезла.

Мы подумали, что плотно прижать разъем GPIB и прикрутить с одной стороны достаточно. Очевидно, мы были не правы.

...