古いデジタルオシロの画像キャプチャー
今やオシロスコープといえばデジタルが標準となりました。それが普及しだしたころに導入した、岩通DS-8706を現用しています。このオシロには外部出力としてパラレルプリンタポートやRS-232Cが標準装備されていて、画像を簡単に印刷することができるようなっています。また、RS-232Cを経由してPCに取り込むためのソフトウェアも提供されていました。
しかし古い機種がサポート外になるのも世の常で、いつの間にかソフトウェアがダウンロードできなくなってしまっています。なければ作ってしまえと、pythonで簡易的に取り込むソフトウェアを書いてみました。
#
# IWATSU DS-8706 Hardcopy via RS-232C port
#
import serial
import serial.tools.list_ports
import time
import datetime
# detect COM ports
ports=serial.tools.list_ports.comports()
usbports=""
for p in ports:
# print(p.device)
if p.device != "COM1" :
usbports=p.device
if usbports != "" :
print("USB-Serial ports is found: " + usbports)
COM=usbports
else :
print("No USB-Serial ports is found. Using COM1.")
COM="COM1"
#COM="COM1"
#COM="COM4"
ser = serial.Serial(COM, 38400, timeout=10, rtscts=True)
#outfile="wave.bmp"
#ser.open()
#print(ser.cts)
print("DS-8706 Hardcopy. Waiting for ready.")
if ser.cts == True :
bftype=ser.read(2)
if bftype == b'BM' :
dt_now=datetime.datetime.now()
outfile = "wave"+ str(dt_now.year)+str(dt_now.month).zfill(2)+str(dt_now.day).zfill(2)+str(dt_now.hour).zfill(2)+str(dt_now.minute).zfill(2)+str(dt_now.second).zfill(2) + ".bmp"
print("BMP data found. Write to "+outfile)
bf=open(outfile,"wb")
bf.write(bftype)
bfsize=ser.read(4)
bf.write(bfsize)
res1=ser.read(2)
bf.write(res1)
res2=ser.read(2)
bf.write(res2)
offset=ser.read(4)
bf.write(offset)
bcsize=ser.read(4)
bf.write(bcsize)
bcwidth=ser.read(4)
bf.write(bcwidth)
bcheight=ser.read(4)
bf.write(bcheight)
bcplane=ser.read(2)
bf.write(bcplane)
bcbcnt=ser.read(2)
bf.write(bcbcnt)
bccomp=ser.read(4)
bf.write(bccomp)
bisize=ser.read(4)
bf.write(bisize)
bixpm=ser.read(4)
bf.write(bixpm)
biypm=ser.read(4)
bf.write(biypm)
biclr=ser.read(4)
bf.write(biclr)
bicir=ser.read(4)
bf.write(bicir)
xsize=int.from_bytes(bcwidth, byteorder="little")
ysize=int.from_bytes(bcheight, byteorder="little")
csize=int.from_bytes(biclr,byteorder="little")
print(xsize," x ", ysize, ":", csize, " colors\n")
if csize == 2 :
print ("B/W file format")
cplatte1=ser.read(4)
bf.write(cplatte1)
cplatte2=ser.read(4)
bf.write(cplatte2)
datalen=int(xsize*ysize/8)
print(datalen,"bytes will be read.")
for i in range(datalen) :
pix=ser.read(1)
bf.write(pix)
else :
print ("Unsupported format")
bf.close()
else :
print ("Timeout")
else:
print("Error: No hardware is found at "+COM)
#ser.close()
最近のPCだとシリアルポートが標準装備されていないので、USB-シリアルアダプタがあればそれを優先して使うようにしてあります。今回は秋月電子のFT-231Xと、MAX232で簡単に作ってみました。 ただし今回のプログラムでは、2つ以上あると動作は保証されません。なければCOM1を使うことにします。本体の設定は38400bps, 8bit, noparityで、WAVファイルを吐き出すようにしておきます。
使い方は単純で、このプログラムを立ち上げてから本体のCOPYボタンを押すだけです。キャプチャ例を示します。
de JM8SMO