来自 R&S rto 示波器的流数据 - UnicodeDecodeError python3.6

Streaming data from the R&S rto oscilloscope - UnicodeDecodeError python3.6

我正在尝试获取 Rhode and 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(二进制)和 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)。