PyVISA не может писать шестнадцатеричные символы выше 7F

Я хочу использовать PyVISA для связи через RS232 с водяной баней Neslab RTE-111. Я могу найти инструмент, но не могу связаться с ним, потому что команда pyvisa "write" выдает ошибку, когда я пытаюсь отправить любой шестнадцатеричный символ, который больше, чем "7F". К сожалению, водяная баня требует отправки таких команд, как "CA 00 01 F0 02 01 2C DF".

Код ниже.

import pyvisa
rm = pyvisa.ResourceManager()
inst = rm.open_resource('ASRL::INSTR')
inst.write('\xca\x00\x01\x20\x00\xde')

Это дает ошибку:

Traceback (most recent call last): File "<stdin>", line 1, in <module> File "C:\Users\Owner\AppData\Local\Programs\Python\Python36-32\lib\site-packages\pyvisa\resources\messagebased.py", line 223, in write count = self.write_raw(message.encode(enco)) UnicodeEncodeError: 'ascii' codec can't encode character '\xca' in position 0: ordinal not in range(128)

Кажется, что команда write отлично работает для шестнадцатеричных значений ниже \x7f. Любые идеи о том, как отправить, скажем, '\xca'?

1 ответ

Благодаря людям на странице Pyvisa GitHub, я понял это. Прибор с водяной баней ожидает связи через прямые байты, поэтому команды по умолчанию от pyvisa не работают. Необходимо использовать команды, которые пишут байты напрямую, без каких-либо дополнительных символов завершения или чего-либо подобного.

Для записи на инструмент:

inst.write_raw(b'\xca\x00\x01\x20\x00\xde')

Чтобы прочитать инструмент:

inst.read_bytes(#bytes)
Другие вопросы по тегам