2016-04-17 3 views
1

Я до сих пор не знаком с управлением python и инструментами, и мне приходится сталкиваться с некоторыми проблемами, на которые я еще не мог найти ответы. Я использую PyVisa для управления монохроматором (Spectral Products dk240) через rs232. (Python 3.5, PyVisa 1.8)Тайм-аут тайм-аута PyVisa

Я могу написать команды и прочитать ответ, установив правильный символ окончания. Проблема в том, что иногда ответ прибора представляет собой один байт без прерывания, а затем я получаю тайм-аут (хотя я вижу ответ, который я хочу на мониторе порта).

Я попытался использовать read_raw, чтобы получить один байт, но он не работает. Вот простой вариант моего кода:

import pyvisa 
rm = pyvisa.ResourceManager() 
instrument = rm.open_resource('ASRL1::INSTR') 
instrument.baud_rate= 9600 
instrument.data_bits=8 
instrument.stop_bits = pyvisa.constants.StopBits.one 
instrument.parity = pyvisa.constants.Parity.none 
instrument.read_termination = chr(24) #specified in the manual 

instrument.write(chr(33)) # command to get the serial number 
instrument.read()   # this works! 

instrument.write(chr(27)) # echo command 
          # instrument replies one byte echo (seen on port monitor) 
instrument.read_raw(1)  # I get a timeout here 

и ошибка:

raise errors.VisaIOError(ret_value) 
pyvisa.errors.VisaIOError: VI_ERROR_TMO (-1073807339): Timeout expired before operation completed. 

Я также попытался установить символ завершения, чтобы «ни один», поэтому виза не будет ждать его, но все-таки получить таймаут. Кроме того, я попытался прочитать серийный номер с помощью read_raw (1), но вместо одного байта я получу полный ответ от инструмента, почему?

любая помощь будет принята с благодарностью !!!

ответ

1

Возможно, это немного поздно для этого, но я помог себе, пока у меня возникла эта проблема с собственной функцией, которая зависит от атрибута bytes_in_buffer.

def read_all(devicehandle): 

    with devicehandle.ignore_warning(constants.VI_SUCCESS_DEV_NPRESENT, constants.VI_SUCCESS_MAX_CNT): 

     try: 
      data , status = devicehandle.visalib.read(devicehandle.session, devicehandle.bytes_in_buffer) 
     except: 
      pass 
    return data 

Замечание: оно не работает с сетевыми соединениями. Атрибута нет.

Смежные вопросы