3

バックグラウンド

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

質問

では、プロンプトに応答してデータを受信しないのはなぜですか? 何か下準備を忘れていませんか?データは私がチェックしていない場所に移動していますか? モジュールを間違って使用しただけですか?どんな助けでも大歓迎です!

4

1 に答える 1

3

これは、同じスコープを使用して機能します。

setblocking(True) を設定し、\n を *IDN? に追加します。指図。

import socket
import sys
import time

class Tek_scope(object):

    def __init__(self, IPaddress, PortNumber = 4000):
        self.s = socket.socket(socket.AF_INET , socket.SOCK_STREAM)
        self.s.connect((IPaddress, PortNumber))
        self.s.setblocking(True)
        print "Scope opened Successfully"

scope1 = Tek_scope("10.1.10.15") # Connects to the scope

scope1.s.send('*IDN?\n') # Sends the *IDN? command to the scope. 

print scope1.s.recv(1024) 
于 2014-01-15T15:03:19.220 に答える