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)