Tektronix MSO/DPO 4000 Series を Python で動かす
古い機種ばっか使っていて知らなかったのですが、LAN port を備えた最近のオシロは、めちゃくちゃ簡単に使えるんですね。Baud rate とかも気にする必要なく、telnet 接続するだけで動きます。PySerial よりもずっと簡単。しかも新たに何も install しなくて良い。
Tektronix MSO/DPO 4000 Series の場合、次の Python code で一発です。XX.XX.XX.XX の箇所は実際の IP address (DHCP もしくは固定)、4000 は port 番号でこれが default の設定です。
>>> import telnetlib >>> tel = telnetlib.Telnet('XX.XX.XX.XX', 4000) >>> tel.write('*idn?\n') >>> tel.read_until('\n\r') 'TEKTRONIX,MSO4054B,C010237,CF:91.1CT FV:v1.12 \n\r'
Python の標準 module である telnetlib を使えば、オシロの IP と port 番号を指定して command を送受信するだけです。telnetlib.Telnet.read_until() を使うことで、指定の delimiter が出現するまで読み出します。
こちらは socket module を使用する場合の例。
>>> import socket >>> soc = socket.socket(socket.AF_INET, socket.SOCK_STREAM) >>> soc.connect(('XX.XX.XX.XX', 4000)) >>> soc.send('*idn?\n') >>> soc.recv(100000) 'TEKTRONIX,MSO4054B,C010237,CF:91.1CT FV:v1.12 \n\r'
(2011/11/10 追記) どちらでやっても、波形の data 点数が 5690 以上だと 'CURVE?' が正常に動作しません。VXI-11 だと動くのですが。
(2011/11/11 追記) Tektronix の日本語電話サポートの情報によると、raw socket での通信に以前から bug があり、転送がうまくいかないとのこと。Protocol を terminal mode にした場合は動作し (ただし binary 転送はうまくいかない)、None にした場合は一切応答しないはずとのこと。しかし、自分とこの環境では部分的には動作しているので、この情報と整合しない。