ja1yaz’s diary

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

Raspberrypi3で、Keysight EDUX1052Gの制御 「*OPC?」がなぜ動かない?

でUSBTMC機器の呼び出しはできた。

しかし、まだ謎が解明していないのは、*OPC?が効かないのだ。

Tektronixのオシロスコープだと、

ACQUIRE:StopAFTER SEQUENCE 

AQUIRE:STATE ON

*OPC? で1が返るのを待つ

という流れだが、Keysightのオシロスコープでは、これが通用しない。

マニュアルには、*OPC?が1を返すと書いてあるが、マニュアルがまだ見足りないのだろう。マニュアルの中のサンプルプログラムを見ると、*OPC?を送りつつ、Operation Status Event RegisterのBIT3を参照してループを作っている。

どう見てもこれで判断してるでしょう。

サンプルを書き換えて下記の様にしてみた。

 

import usbtmc
from time import sleep
#print(usbtmc.list_resources())
instr = usbtmc.Instrument(10893,923)
instr.timeout=10000
print(instr.ask("*IDN?"))
instr.write ("*RST")
instr.write(":RECall:SETup 2")
#sleep (1)
instr.write("WGEN:FREQuency 0.2")  #内蔵の信号発生器の周波数設定 0.2Hz
#instr.ask("*OPC?")

instr.write(":TRIGger:SWEep Normal")
for i in range(5):

    instr.ask("*OPC?")
    
    instr.write("single")
    i=8
    while i==8:
        k=instr.ask("OPERegister:CONDition?")

        l=int(k) & 8    #Bit3=1 then running   Wait for Bi3=0
    #print(l);
    #sleep(0.1)
    i==+1
    print(i+1)
   

信号発生器の周波数を0.2Hzにして波形を観測すると、きちんとトリガを待っているのが確認できた。

 

そこで、*OPC?の問い合わせの行を消してみたが、動作は変わらなかった。

*OPC?いらないじゃん。

今度、メーカーの人に聞いてみよう。

 

これに以前書いた画像取り込みの部分を加えてみよう。

しかし、USBTMCを使用しているため、微妙に予約されたコマンドが異なるようだ。

 

import time
from datetime import datetime
import usbtmc
from time import sleep
#print(usbtmc.list_resources())
instr = usbtmc.Instrument(10893,923)
instr.timeout=10000
print(instr.ask("*IDN?"))
instr.write ("*RST")
instr.write(":RECall:SETup 2")
#sleep (1)
instr.write("WGEN:FREQuency 0.2")
#instr.ask("*OPC?")

instr.write(":TRIGger:SWEep Normal")
for i in range(5):

    #instr.ask("*OPC?")
    
    instr.write("single")
    l=8
    while l==8:
        k=instr.ask("OPERegister:CONDition?")

        l=int(k) & 8    #Bit3=1 then running   Wait for Bi3=0
    #print(l);
    #sleep(0.1)
    i==+1
    print(i+1)
    instr.write("SAVE:IMAGE:FORMAT PNG")
    dt=datetime.now()
    filename = dt.strftime("/home/pi/WAVECH1_%Y%m%d_%H%M%S%f.png")
    instr.write("DISPlay:DATA? PNG, color")

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

 

これで、トリガがかかるごとに画像を取り込むことができるようになった。

取り込みにはやはり、約2秒かかっている。