Keithley 2410 и PyVISA — VI_ERROR_TMO: время ожидания истекло до завершения операции

Я пытаюсь управлять Keithley 2410 через python на Linux-машине x86_64 (CentOS 7). Я использую Python 2.7.5, NI-VISA 16 и PyVISA 1.8. Keithley подключается к компьютеру через кабель RS232-to-USB и настроен для связи RS232 (с параметрами: скорость 57600, бит 8, четность нет, терминатор, поток-управление нет). Когда я пытаюсь запросить Keithley, я получаю сообщение об ошибке тайм-аута, как показано ниже:

>>> import visa
>>> rm = visa.ResourceManager()
>>> print(rm.list_resources())
(u'ASRL1::INSTR', u'ASRL2::INSTR')
>>> keithley = rm.open_resource("ASRL2::INSTR")
>>> print(keithley.query('*IDN?'))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/site-packages/pyvisa/resources/messagebased.py", line 407, in query
return self.read()
File "/usr/lib/python2.7/site-packages/pyvisa/resources/messagebased.py", line 332, in read
message = self.read_raw().decode(enco)
File "/usr/lib/python2.7/site-packages/pyvisa/resources/messagebased.py", line 306, in read_raw
chunk, status = self.visalib.read(self.session, size)
File "/usr/lib/python2.7/site-packages/pyvisa/ctwrapper/functions.py", line 1582, in read
ret = library.viRead(session, buffer, count, byref(return_count))
File "/usr/lib/python2.7/site-packages/pyvisa/ctwrapper/highlevel.py", line 188, in _return_handler
raise errors.VisaIOError(ret_value)
pyvisa.errors.VisaIOError: VI_ERROR_TMO (-1073807339): Timeout expired before operation completed.

person d9e3fe01    schedule 06.04.2017    source источник


Ответы (2)


PyVISA 1.8 по умолчанию должна использовать завершение строки '\ r' для последовательного порта, поэтому ваш 2410 может не получать '\ n', необходимый для запуска синтаксического анализа команды. Попробуйте

keithley.write_termination = '\n'
keithley.read_termination = '\n'

сразу после вашего open_resource() звонка.

person Merlin    schedule 14.04.2017

Спасибо за предложение, но кажется, что мне нужно было явно установить скорость передачи данных.

rm = visa.ResourceManager()
smu = rm.open_resource("ASRL2::INSTR")
smu.baud_rate = 57600
person d9e3fe01    schedule 03.05.2017