1

我想使用 PyVISA 通过 RS232 与 Neslab RTE-111 水浴器进行通信。我可以找到该仪器,但我无法与它通信,因为当我尝试发送任何大于“7F”的十六进制字符时,pyvisa“写入”命令会出错。不幸的是,水浴需要发送诸如“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”的任何想法?

4

1 回答 1

0

感谢 pyvisa github 页面上的人们,我想通了。水浴仪器希望通过直接字节进行通信,因此来自 pyvisa 的默认命令不起作用。有必要使用直接写入字节的命令,而不需要任何额外的终止字符或任何类似的东西。

写入仪器:

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

要读取仪器:

inst.read_bytes(#bytes)
于 2018-03-19T23:08:39.267 回答