背景
我需要和一个来自python的Tektronix MSO 4104通信。使用VXI11以太网协议和Python的套接字库在局域网上进行通信。
形势
现在它工作得很好;我可以连接到作用域,并且可以发送任何我想要的命令(例如:<socket object>.send('*IDN?')
)。但是,当命令应该发送响应时(比如*IDN?我试图使用<socket object>.recv(1024)
,但总是收到错误“[Errno 11]资源暂时不可用”
我知道这个连接很好,因为我可以接收到同一个'IDN'的信息通过内置的HTTP接口进行提示。
代码
下面是scope.py中的一个片段,它创建了与scope的socket接口。
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
问题
那么为什么我没有收到任何响应我的提示的数据呢?我忘了准备什么了吗?数据是不是去了我不检查的地方?我用错模块了吗?任何帮助都将不胜感激!
最佳答案
这对我来说同样适用。
设置setblocking(True)并将a\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)