我想使用PyVISA通过RS232与Neslab RTE-111水浴进行通信。我可以找到该仪器,但我无法与它通信,因为当我尝试发送任何大于'7F'的十六进制字符时,pyvisa'write'命令会出错。不幸的是,水浴需要发送命令,例如“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)
写命令似乎适用于\ x7f以下的十六进制值。关于如何发送的任何想法,比如'\ xca'?
答案 0 :(得分:0)
感谢pyvisa github页面上的人们,我想通了。水浴仪器需要通过直接字节进行通信,因此来自pyvisa的默认命令不起作用。有必要使用直接写入字节的命令,没有任何额外的终止字符或任何类型的东西。
要写入乐器:
inst.write_raw(b'\xca\x00\x01\x20\x00\xde')
阅读本文:
inst.read_bytes(#bytes)