簡體   English   中英

UDP套接字無法接收數據

[英]UDP socket fails to receive data

我有一個問題:我創建了一個小的Python腳本來從LAN上的Omron PLC存儲器讀取數據。 Delphi程序運行的批處理文件會定期(每6秒一次)運行Python腳本。

該腳本可在2台Win 7 PC和1台Win XP PC上運行。

我的問題是:Win XP PC和PLC之間沒有隨機的時間段(大約1分鍾,有時更長)之間的數據傳輸,但是Win 7 PC與相同的PLC通信沒有問題。

我使用UDP協議。

def main():
    udpSock = util_socket.utilSocket()
    command = udpSock.read_from_file("udpCommand")
    command = int(command)
    messaggio = mex()
    if command==1:
        msg = messaggio.get_messaggio_lettura()
        udpSock.send_command(msg)
        ricevi_risposta(udpSock)
    if command==2:
        msg = messaggio.get_messaggio_azzeramento()
        udpSock.send_command(msg)
        msg = messaggio.get_messaggio_lettura()
        udpSock.send_command(msg)
        ricevi_risposta(udpSock)
    if command<1 or command>2:
        udpSock.write_to_file("ERROR !!!", "numPezzi")

def ricevi_risposta(udpSock):        
    data, addr = udpSock.recv_socket()
    contaPezzi = udpSock.get_dato_pulito(data)
    udpSock.write_to_file(contaPezzi, "numPezzi")
    stringa = str(datetime.datetime.now().strftime( "%d/%m/%Y %H:%M" )) + " - dato ricevuto: " + str(data) + " // dato convertito: " + str(contaPezzi) + "\n" 
    udpSock.append_to_file(stringa, "numPezzi_Log_" + str(datetime.datetime.now().strftime( "%d/%m/%Y")) )

def recv_socket(self):

    # the public network interface
    #HOST = socket.gethostbyname(socket.gethostname())

    # create a raw socket and bind it to the public interface
    s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_IP)
    self.get_parametri()
    s.bind((self.ipAddressPc, 0))
    # Include IP headers
    s.setsockopt(socket.IPPROTO_IP, socket.IP_HDRINCL, 1)
    data, addr = s.recvfrom(65536)

    return data, addr

def send_command(self, msg):
    self.get_parametri()
    udp_ip = self.ipAddressPlc
    udp_port=9600 #5575

    #print "UDP target IP:", udp_ip
    #print "UDP target port:", udp_port
    #print "message:", msg

    sock = socket.socket( socket.AF_INET, # Internet
                          socket.SOCK_DGRAM ) # UDP
    sock.sendto( msg, (udp_ip, udp_port) )

局域網似乎“入睡”。 這是日志文件:(08:41:13-> 08:42:30。Expectation 08:41:13-> 08:41:19,08:41:25,08:41:31,...)

27/03/2013 08:41:13 - dato ricevuto (dati non riportabili) dato convertito: 252
27/03/2013 08:42:30 - dato ricevuto (dati non riportabili) dato convertito: 260
27/03/2013 08:42:30 - dato ricevuto (dati non riportabili) dato convertito: 260
27/03/2013 08:42:30 - dato ricevuto (dati non riportabili) dato convertito: 260
27/03/2013 08:42:30 - dato ricevuto (dati non riportabili) dato convertito: 260
27/03/2013 08:42:30 - dato ricevuto (dati non riportabili) dato convertito: 260
27/03/2013 08:42:30 - dato ricevuto (dati non riportabili) dato convertito: 260
27/03/2013 08:42:30 - dato ricevuto (dati non riportabili) dato convertito: 260
27/03/2013 08:42:30 - dato ricevuto (dati non riportabili) dato convertito: 260
27/03/2013 08:42:30 - dato ricevuto (dati non riportabili) dato convertito: 260
27/03/2013 08:42:30 - dato ricevuto (dati non riportabili) dato convertito: 260
27/03/2013 08:42:30 - dato ricevuto (dati non riportabili) dato convertito: 260
27/03/2013 08:42:30 - dato ricevuto (dati non riportabili) dato convertito: 260
27/03/2013 08:42:36 - dato ricevuto (dati non riportabili) dato convertito: 261

可能是什么問題呢?

這可能是由於LAN中的網絡擁塞所致。 如果只是發生一分鍾左右。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM