PyVISA不能写入超过7F的十六进制字符

2024-09-23 16:24:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我想用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)

write命令对于低于\x7f的十六进制值似乎可以正常工作。有什么关于如何发送的想法,例如,“\xca”?在


Tags: rmin命令liners232encodefilewrite
1条回答
网友
1楼 · 发布于 2024-09-23 16:24:41

多亏了pyvisa github页面上的人,我终于明白了。水浴设备希望通过直接字节进行通信,因此pyvisa的默认命令不起作用。有必要使用直接写入字节的命令,而不需要任何额外的终止字符或类似的字符。在

向仪器写入:

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

阅读仪器:

^{pr2}$

相关问题 更多 >