バックグラウンド
Python から Tektronix MSO 4104 と通信する必要があります。通信は、vxi11 イーサネット プロトコルと python のソケット ライブラリを使用して、LAN 経由で行われます。
状況
これでかなりうまくいきます。スコープに接続して、必要なコマンドを送信できます (例: <socket object>.send('*IDN?')
)。ただし、コマンドが応答を送信することになっている場合はいつでも (*IDN? が行うことになっているように)、使用しようとします<socket object>.recv(1024)
が、常に「[Errno 11] リソースが一時的に利用できません」というエラーが表示されます。
同じ '*IDN?' に情報を受信できるので、接続が良好であることがわかります。組み込みの HTTP インターフェイスを介してプロンプトを表示します。
コード
以下は、スコープとのソケット インターフェイスを作成する scope.py のスニペットです。
import socket
import sys
import time
class Tek_scope(object):
'''
Open up socket connection for a Tektronix scope given an IP address
'''
def __init__(self, IPaddress, PortNumber = 4000):
self.s = socket.socket(socket.AF_INET , socket.SOCK_STREAM)
self.s.connect((IPaddress, PortNumber))
self.s.setblocking(False)
print "Scope opened Successfully"
エラーを取得するために、次を実行します。
import scope # Imports the above (and other utility functions)
scope1 = scope.Tek_scope("10.1.10.15") #Connects to the scope
scope1.s.send('*IDN?') #Sends the *IDN? command to the scope.
# I have verified these signals are always recieved as I can
# see them reading out on the display
scope1.s.recv(1024)
# This should receive the response... but it always gives the error
システム
- フェドラ16
- パイソン 2.7
- テクトロニクス MSO4104
質問
では、プロンプトに応答してデータを受信しないのはなぜですか? 何か下準備を忘れていませんか?データは私がチェックしていない場所に移動していますか? モジュールを間違って使用しただけですか?どんな助けでも大歓迎です!