Я пытаюсь преобразовать данные из осциллографа Keysight в .png
изображение. Когда я посмотрел, как это сделать в Интернете, я наткнулся на следующий код:
# 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_values
более или менее то же самое, что pyvisa
предполагает, что данные находятся в 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)
Это создает изображение, но результат плохой:
and from snipping tool:
Поврежденное изображение
Как видите, только верхние 10% изображения хороши, а остальные нет (будет упомянуто, что каждый раз, когда я извлекаю новые данные из осциллографа, я получаю другую область, которая поврежден, что составляет от 50 до 90% изображения. В большинстве случаев поврежденная область составляет от 80 до 90%, как показано на рисунке выше).
Итак, в основном мои вопросы:
Может быть, я не считываю все данные с прибора? и если да, то как решить эту проблему?
Может ли это произойти из-за неправильной упаковки? Если да, то какое решение?