问题描述
我正在尝试在Rhode和Schwarz RTO示波器上获取特定通道的信号数据。我正在使用vxi11 python(3.6)库与示波器通信。
在我的第一次尝试中,我能够提取正在查询的作用域通道的所有数据而没有任何错误(使用此查询命令CHAN1:WAV1:DATA?
),但是在我开始收到此错误消息后不久。
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc7 in position 10: invalid continuation byte
奇怪的是,我仍然能够毫无问题地掌握数据的头。只有当我要求发送整个数据时,我才会看到此错误。
我试图在REAL(binary)和ASCii之间更改数据格式,但无济于事。
另一个奇怪的事情是,当我将接收到的数据的编码转换为“ latin-1”时,它可以正常工作(给我一个奇怪的字符串,我假设这是我想要的数据-只是另一种格式)然后崩溃。
整个输出如下:
****IDN : Rohde&Schwarz,RTO,1329.7002k04/100938,4.20.1.0
FORM[:DATA]ASCii : None
CHAN1:WAV1:DATA:HEAD? : -0.2008,0.1992,10000000,1
'utf-8' codec can't decode byte 0xc7 in position 10: invalid continuation byte
'utf-8' codec can't decode byte 0xc7 in position 10: invalid continuation byte
Traceback (most recent call last):
File "testing_rtodto.py",line 21,in ask_query
logger.debug(print(query+" :",str(conn._ask(query))))
File "../lib_maxiv_rtodto/client.py",line 187,in _ask
response = self.instrument.ask(data)#,encoding="latin-1")
File "/usr/lib/python3.6/site-packages/vxi11/vxi11.py",line 743,in ask
return self.read(num,encoding)
File "/usr/lib/python3.6/site-packages/vxi11/vxi11.py",line 731,in read
return self.read_raw(num).decode(encoding).rstrip('\r\n')
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc7 in position 10: invalid continuation byte
解决方法
好的,我找到了解决方法。多亏了此线程https://github.com/pyvisa/pyvisa/issues/306
尽管我没有使用相同的通信库,但问题似乎出在我查询数据的方式而不是库如何读取数据。 事实证明,您必须非常非常严格地遵循R&S的仪器说明(尽管它们的文档非常混乱并且很难找到-更不用说缺少重要查询功能的示例查询字符串了)
基本上,有效的查询命令为FORM ASC;:CHAN1:DATA?
。在将数据返回到通信库之前,它将显式转换为ASCii格式。
我还发现了R&S提供的一些示例python脚本(https://cdn.rohde-schwarz.com/pws/service_support/driver_pagedq/files_1/directscpi/DirectSCPI_PyCharm_Python_Examples.zip)。