PyVISA: невозможно подключиться через VICP к области LeCroy
Я пытаюсь подключиться к серии LeCroy Wavesurfer 400 через паспорт VICP VISA (TCP/IP) с PyVISA 1.7 под Windows7/32bit и NI-VISA 5.4.1:
import visa
rm = visa.ResourceManager()
scope = rm.open_resource("VICP::169.254.201.2::INSTR")
print(scope.query("*IDN?"))
Я получаю следующую ошибку:
Предупреждение (из модуля предупреждений): файл "C:\Python27\lib\site-packages\pyvisa\ctwrapper\functions.py", строка 1378 alias_if_exists)
VisaIOWarning: VI_WARN_EXT_FUNC_NIMPL (1073676457): операция выполнена успешно, но драйвер более низкого уровня не реализовал расширенную функциональность.
Traceback (последний вызов был последним): файл "C:\path\scopeTest.py", строка 4, в scope = rm.open_resource("VICP::169.254.201.2::INSTR")
Файл "C:\Python27\lib\site-packages\pyvisa\highlevel.py", строка 1614, в>open_resource info = self.resource_info(resource_name)
Файл "C:\Python27\lib\site-packages\pyvisa\highlevel.py", строка 1584, в>resource_info
поднять ValueError('Не удалось разобрать ресурс: %s (код ошибки%s)' % >(имя_ресурса, ret))
ValueError: Не удалось проанализировать ресурс: VICP::169.254.201.2::INSTR (код ошибки None)
Под LabVIEW работает подключение к устройству и связь с ним по этому адресу VICP. Также при использовании TCPIP::
вместо VICP::
в open_resource()
соединение установлено без предупреждений и ошибок и print(scope.ask("*IDN?"))
работает, но другие команды устройства как scope.write("C1:VDIV .02")
не работай
print(scope.query("C1:VDIV .02"))
WARNING : CURRENT REMOTE CONTROL INTERFACE IS TCPI
заключив, что для правильного управления устройством должен использоваться паспорт VICP. При использовании PyVISA 1.5, но в другой конфигурации и при попытке подключения через:
scope = visa.instrument("VICP::169.254.201.2::INSTR")
дает:
Предупреждение (из модуля предупреждений): файл "C:\Python27\lib\site-packages\pyvisa-1.5-py2.7.egg\pyvisa\ctwrapper\functions.py", строка 1208 alias_if_exists)
VisaIOWarning: VI_WARN_EXT_FUNC_NIMPL (1073676457): операция выполнена успешно, но драйвер более низкого уровня не реализовал расширенную функциональность.
Предупреждение (из модуля предупреждений):
Файл "C:\Python27\lib\site-packages\pyvisa-1.5-py2.7.egg\pyvisa\highlevel.py", строка 315, инструмент возврата (имя_ресурса, resource_manager = self, ** kwargs)UserWarning: данный ресурс не был INSTR, но неизвестен
Для более ранних версий PyVISA это обсуждалось для возврата пустой строки инструмента:
http://osdir.com/ml/python.pyvisa.devel/2007-07/msg00003.html
а также
http://sourceforge.net/p/pyvisa/bugs/5/
Я подозреваю, что проблема в том, что InterfaceType в C:\Python27\lib\site-packages\pyvisa\constants.py не существует для протокола соединения VICP в PyVISA. когда resource_info()
строка, которая выдает ошибку, в C: \ Python27 \ lib \ site-packages \ pyvisa \ highlevel.py называется
def resource_info(self, resource_name): """Get the extended information of a particular resource :param resource_name: Unique symbolic name of a resource. :rtype: :class:`pyvisa.highlevel.ResourceInfo` """ ret, err = self.visalib.parse_resource_extended(self.session, resource_name) if err == constants.StatusCode.success: return ret raise ValueError('Could not parse resource: %s (error code %s)' %(resource_name, ret))
кажется, что это приводит к несоответствию с interface_type, или это может быть проблема с resource_class и проблема возврата, как в более старых версиях PyVISA?
1 ответ
По-видимому, в конечном итоге ОП удалось решить эту проблему согласно https://github.com/hgrecco/pyvisa/issues/168. В этой теме hgrecco (Эрнан Греко) говорит: "Я реализовал способ заставить ресурсный класс Python использовать".
Решение, данное там, похоже, работает для меня:
import visa
from pyvisa.resources import MessageBasedResource
rm = visa.ResourceManager()
scope = rm.open_resource('VICP::192.168.1.109::INSTR', resource_pyclass=MessageBasedResource)