2

我正在尝试将数据从 Keysight 示波器转换为.pngImage。当我在网上查看如何做到这一点时,我偶然发现了以下代码:

# Download the screen image.
# --------------------------------------------------------
sDisplay = do_query_ieee_block(":DISPlay:DATA? PNG")
# Save display data values to file.
f = open("screen_image.png", "wb")
f.write(sDisplay)
f.close()

上面代码的问题是我不确定是什么do_query_ieee_block。我以为它在下面,pyvisa但在那里找不到。在网上查看后,我了解到这query_binary_valuespyvisa假设数据在IEEE.

根据这些信息,我编写了以下代码:

import pyvisa
import struct

IDN="SomeScopeIDN" #something like 'USB0::0xhhhh::0xhhhh::MYdddddddd::0::INSTR' 
scope=pyvisa.ResourceManager().open_resource(IDN)
binImage=self.scope.query_binary_values(":DISPlay:DATA? PNG") #This gets a list of floats
byteImage=struct.pack('%sf' % len(binImage),*binImage) #Convert the list to bytes-like object
path=r"c:\Users\user\Desktop\Scope_Image.png"
with open (path,'wb') as f:
  f.write(byteImage)

这会创建一个图像,但结果很糟糕:

损坏的图像

并从截图工具:

损坏的图像

正如你所看到的,只有图像的上 10% 是好的,但其余的不是(需要提到的是,每次我从范围内检索新数据时,我都会得到一个损坏的不同区域,介于 50-90图片的 %。大多数情况下,损坏的区域在 80-90% 之间,如上图所示)。

所以基本上我的问题是:

  1. 难道是我没有从仪器中读取全部数据?如果是这样,如何克服这个问题?

  2. 会不会是因为包装方式不对?如果是这样,解决方案是什么?

4

1 回答 1

0

看到一个可能有用的例子:

  1. 添加datatype='B', container=bytearray为参数query_binary_values()

  2. ':DISP:DATA? ON,OFF,PNG'换位试试

import pyvisa

IDN="SomeScopeIDN" #something like 'USB0::0xhhhh::0xhhhh::MYdddddddd::0::INSTR' 
scope=pyvisa.ResourceManager().open_resource(IDN)
binImage=self.scope.query_binary_values(":DISPlay:DATA? PNG", datatype='B', container=bytearray)
path=r"c:\Users\user\Desktop\Scope_Image.png"
with open (path,'wb') as f:
  f.write(byteImage)
于 2020-08-27T09:31:24.400 回答