ja1yaz’s diary

感動したいおやじの備忘録的ブログ 

Raspberrypi3でKeysightEDUX1052Gの制御ー画像取り込み

KeysightのEDUX1052Gのプログラママニュアルには、Pythonの例文が掲載されているので、ある程度参考にはなるのだが、Pyvisaではないようなのでそのまま走らせるわけにはいかないようだ。

他にも参考になりそうなサイトをググってみると、USBメモリにSAVEしたファイルを転送するものはあったが、そのまま読み込む例文は、なかなかみつからなかった。

下記のテクトロのユーザーフォーラムの中に例文があった、

https://forum.tek.com/viewtopic.php?f=580&t=138613

下記の様な記述がありシンプルなので、これをパクらせてもらった。

scope.write("HARDCopy STARt")

imgData = scope.read_raw()

      # Generate a filename based on the current Date & Time

dt = datetime.now()

fileName = dt.strftime("%Y%m%d_%H%M%S.png")

imgFile = open(fileSaveLocation + fileName, "wb")

imgFile.write(imgData)

imgFile.close()

 

テクトロ用なので、ハードコピーのコマンドを変えればOKだ。

また、ファイル名の時間は、Secだけでは足りないので、us単位までファイル名にすることにした。秒以下の記述もググってみたがなかなか見つからなかった。

%f:usオーダーをつけたいときに使用する。

%Y%m%d_%H%M%S%f このように書かなくてはいけないようだ。

 

テクトロのサンプルをまねても、どうしてもPNGとして読み込めないので、バイナリEDTORで見てみると、#800xxxxxの10Byteのデータが先頭に、#8から始まるByte数を表すデータがついてきてしまうようなのだ。仕方がないので、

Len_sDisplay = inst.read_bytes(10)

こいつを前に挿入して、先に10Byte読み込ませてから、PNGのデータを読ませることにした。

100Mを超えることはないので、特にByte数を認識させる仕組みにはしなかった。

こうすることで、PNGファイルとして読み込めるようになった。

 

しかし、問題はほかにもある。

PNGとして認識するのはよいのだが、SAVEしたファイルは、上部に例外なくRemote Operation Completedの表示がついてしまう。

f:id:ja1yaz:20210711180205p:plain

Remote Operation Completed

マニュアルを見た限りでは、これを消す手法はなさそうだ。

SINGLEコマンドを送って、*OPC?で同期をとっているつもりだったが、*OPC?で1が返ってきてからSLEEP(4)を入れて、なんとか、Remote Operation Completedの表示の入らない画像を得ることができるようになった。

インターフェース経由でも、画像取得には、約2.1秒かかることが分かった。

オシロスコープ本体にUSBメモリを差して、USBメモリにSAVEしても、あまりSAVEにかかる時間は変わらないようだ。逆にちょっと高速で1.9秒間隔でSAVEできた。

しかし、USBにSAVEするのでも、やはりRemote Operation Completedの表示が入ってしまうことが分かった。

この辺の癖はメーカに聞かないとわからないそうだ。

しかし、Python素人の自分が、とりあえず画像取得もできるようになったので、今後の生かせそうだ。下記は、Raspberrypiのプログラムだ。

 

import pyvisa as visa
import time
from datetime import datetime
from time import sleep
#SAVE interval=2.1ec in this instrument EDUX1052G

rm = visa.ResourceManager('@py')
address="TCPIP::192.168.1.1::inst0::INSTR"
inst = rm.open_resource(address)

print(inst.query("*idn?"))

inst.write("SAVE:IMAGE:FORMAT PNG")

i=0

for i in range(10):   #10 times loop
   inst.write("single")
   print(inst.query("*OPC?"))
   sleep(4) #escapw for display "remote operation cmplete" at least 4sec sleep time
   dt=datetime.now()
   filename = dt.strftime("/home/pi/WAVECH1_%Y%m%d_%H%M%S%f.png")
   inst.write("DISPlay:DATA? PNG, color")

   Len_sDisplay = inst.read_bytes(10) #Read preamble 10Bytes "#800xxxxxx" first
   sDisplay=inst.read_raw()
   f = open(filename,"wb")
   f.write(sDisplay)
   print(inst.query("*OPC?"))
   f.close()#8から始まるByte数を表すデータがついてきてしまうようなのだ。
   print("Screen image written to "+filename)

inst.close()
rm.close()

 

 そして、こちらが、USBメモリにSAVEするプログラム。

こちらの肝は、ファイル名の指定を'SAVE:IMAGE:START の後に指定しないと、定型のファイル名の上書きになってしまうことだ。

また、指定しなくても定型のファイル名で、サフィックスの数字がカウントアップされず、同じファイル名のままになってしまうので、リモート制御の場合は、必ずファイル名を指定しなければいけないようだ。

これに気付くにもけっこう時間をとられた。

 

import pyvisa as visa
import time
from datetime import datetime
from time import sleep
#SAVE interval=2.3Sec in this instrument EDUX1052G

rm = visa.ResourceManager('@py')
address="TCPIP::192.168.1.1::inst0::INSTR"
inst = rm.open_resource(address)

print(inst.query("*idn?"))

 

#inst.write("recall:setup 2")
#inst.write(":WGEN:FREQuency 1000")
inst.write("SAVE:IMAGE:FORMAT PNG")

i=0

for i in range(10):
   inst.write("single")

   print(inst.query("*OPC?"))

   dt=datetime.now()
   filename = dt.strftime('"WAVECH1_%Y%m%d_%H%M%S%f.png"')
   cmd='SAVE:IMAGE:START '+filename
   print(cmd)
   inst.write(cmd)
   print(inst.query("*OPC?"))

inst.close()
rm.close()