【发布时间】:2019-07-01 22:08:05
【问题描述】:
我正在尝试从 PLC (AutomationDirect P2000) 检索数据。我已经使用他们的软件程序将 PLC 设置为服务器(我也可以通过以太网使用他们的软件连接到它,并使用 Wireshark 查看它实际上大约每 200 毫秒向我的机器发送 UDP 数据包)。我正在尝试设置一个非常简单的 Python 脚本来检索所述数据,而无需对其进行编码或对其进行任何操作,但我的程序挂在 socket.recv() 上。每当我尝试运行它时,都会打印“Got here”,但不会打印“Now here”。从我读到的事实来看,它挂起意味着没有数据可以接收,但根据我对在 Wireshark 上看到的内容的(有限)理解,情况并非如此。我对这一切都很陌生,如果有任何帮助,我将不胜感激。
我尝试过使用 socket.recvfrom(),它产生了相同的结果。我也尝试过使用 socket.bind() 而不是 socket.connect() 但我得到一个“请求的地址在其上下文中无效”异常。此外,我尝试过使用各种 IP 和端口。例如,我尝试使用 IP = '' 而不是实际 IP,并且尝试使用 Wireshark 的源/目标信息作为我尝试绑定或连接的信息,但到目前为止没有任何效果。
import socket
IP = '192.168.3.1'
PORT = 9999
BUFFER_SIZE = 4096
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.connect((IP, PORT))
while True:
print("Got here")
data = s.recv(BUFFER_SIZE)
print("Now here")
print(f"Received {data}")
我希望以字节格式打印出数据包,但程序却挂起。如果我尝试使用 socket.bind() 而不是 socket.connect() 我会收到一条错误消息,内容为“...第 8 行,在 s.bind((IP, PORT))
OSError: [WinError 10049] 请求的地址在其上下文中无效”
【问题讨论】:
标签: python networking plc