INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

LabView und Python via UDP



Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!

12.09.2011, 07:36
Beitrag #1

bluesaturn Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 145
Registriert seit: Jan 2010

2009
2010
en

-
United Kingdom
LabView und Python via UDP
Guten Morgen, Labviewforum.

Ich versuche gerade, LabView und Python miteinander reden zu lassen via UDP und localhost als Testumgebung. Ich würde das auch an für sich so beibehalten :-)

Bei LabView gibt es ja die UDP Sender und UPD Receiver.vi zum Testen.
Mit meinem Code habe ich es schon einmal geschafft, LabView einen String zu senden, aber gleichzeitig Empfangen von Strings von LabView in Python klappt nicht.
Entweder das geht nicht oder ich mache etwas in Python falsch. Habe ich beide vi's laufen + Python, gibt es eine Fehlermeldung in LabView, daß die Adresse schon gerade benutzt wird.
Muß man Senden und Empfangen über verschiedene Ports laufen lassen?
Oder kann es sein, daß die Sender.vi einen UDP port öffnet und mein Python-code macht das aus, und es deswegen Probleme gibt?

Da ich die Example vi's aus LabView für Sender und Receiver benutze, stelle ich mal den Python-Code hier rein. Vielleicht könnte ihr ihn einmal anschauen. Könnte ihn sich vielleicht jemand bitte anschauen?
Er sollte einfach mit der Sender und Receiver.vi aus Labview laufen.
Vielen Dank fürs Anschauen.
Gruß
blue

Python-Code:

Code:
#---- cut here

# To change this template, choose Tools | Templates
# and open the template in the editor.

__author__="User"
__date__ ="$11.09.2011 19:34:03$"

if __name__ == "__main__":
    print "Das ist ein Test"

import socket
import time

#Define global variables for UDP_IP and UDP_Port, needs to be changed for PETRA-3
global UDP_IP
UDP_IP="127.0.0.1"
print "UDP_IP is", UDP_IP

global UDP_PORT
UDP_PORT=21311
print "UDP_PORT is", UDP_PORT


def openUDPSocket(UDP_IP,UDP_PORT):
    #UDP_IP="127.0.0.1"
    #UDP_PORT=21311
    sock=socket.socket( socket.AF_INET, # Internet
                        socket.SOCK_DGRAM ) # UDP
    return sock

def fastPump(sock):
    # Start pumping and return
    MESSAGE="pumpfast"

   # print "UDP target IP:", UDP_IP
   # print "UDP target port:", UDP_PORT
   # print "message:", MESSAGE

    sock.sendto( MESSAGE, (UDP_IP, UDP_PORT) )

def slowPump(sock):
    MESSAGE="pumpslow"
    sock.sendto( MESSAGE, (UDP_IP, UDP_PORT) )


#def receiveUDPpump(sock):



pumpsocketUDP=openUDPSocket(UDP_IP,UDP_PORT)
pumpsocketUDP.bind((UDP_IP,UDP_PORT)) #bind to UDP IP

data,addr = pumpsocketUDP.recvfrom(1024)
print data



counter_while_loop=0

while counter_while_loop < 3:
    fastPump(pumpsocketUDP)
    time.sleep(5)
    slowPump(pumpsocketUDP)
    time.sleep(3)

    counter_while_loop=counter_while_loop+1
    print "Counter_while_loop", counter_while_loop
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
13.09.2011, 14:15
Beitrag #2

jochen_k Offline
LVF-Neueinsteiger


Beiträge: 9
Registriert seit: Mar 2007

8.0 - Aktuell
2006
kA

42579
Deutschland
RE: LabView und Python via UDP
... Python kann ich nicht aber ja die portnummer müssen verschiedene sein, sprich wenn ein Programm
einen port belegt dann ist der eben belegt. Also z.B. LabVIEW senden-port auto.(0) auf port 8002, empfang-port 8001
... Python senden port auto.(0), auf port 8001, empfang-port 8002
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
13.09.2011, 14:18
Beitrag #3

GerdW Offline
______________
LVF-Team

Beiträge: 17.465
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: LabView und Python via UDP
Hallo blue,

hast du dir mal die Beispiel-VIs zum UDP-Port angeschaut?

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
17.09.2011, 09:24 (Dieser Beitrag wurde zuletzt bearbeitet: 17.09.2011 09:25 von Falk.)
Beitrag #4

Falk Offline
ja, das bin ich...
***


Beiträge: 343
Registriert seit: Jan 2006

8.0 :: 201x ::202x
2006
DE_EN


Deutschland
RE: LabView und Python via UDP
Hallo Blue!

Bist du mit deiner Fragestellung schon weiter gekommen? Falls nicht angehängt mal ein ganz einfaches Beispiel wie man es in Python machen kann. Ich möchte aber betonen, dass ich mit Python auch noch in den Kinderschuhen stecke. Die beschriebene Lösung ist demnach nicht die Beste. Auch wirst du schnell sehen, welche großen Nachteil mein "Entwurf" hat. Das Lesen auf dem UDP Stream erfolgt nämlich nur dann, wenn du auch Daten versendest. Da du aber statt auf TCP auf UDP setzt, willst du sicherlich dass das Lesen unabhängig und parallel in einem eigenen Prozess läuft, oder?
Aber vielleicht hilft es dir ja trotzdem irgendwie weiter.

Schöne Grüße und ein schönes Wochenende
Falk

Code:
import time
import socket

global UDP_IP, UDP_PORT_REMOTE, UDP_PORT_LOCAL

UDP_IP = "127.0.0.1"
UDP_PORT_REMOTE = 61557
UDP_PORT_LOCAL = 61555

class UDPSender(object):

    def __init__(self):
        self.sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

    def send(self, msg):
        self.sock.sendto(msg, (UDP_IP, UDP_PORT_REMOTE))

    def close(self):
        self.sock.close()

class UDPListener(object):

    def __init__(self):
        self.sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        self.sock.settimeout(0.5)
        self.sock.bind((UDP_IP, UDP_PORT_LOCAL))

    def read(self):
        msg, remote = self.sock.recvfrom(548)
        return msg

    def close(self):
        self.sock.close()
  
if __name__ == "__main__":
  
    listener = UDPListener()
    sender = UDPSender()

    for i in range(0, 100):
        try:
            print listener.read()
        except:
            print "timed out"
        msg = "Hallo Welt"
        print msg

        sender.send(msg)

    listener.close()
    sender.close()
[/code]

Currently: zzzZZZZZZZZ
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Labview 16 aufruf von Python Skript bachatero18 2 3.533 21.12.2022 11:00
Letzter Beitrag: bachatero18
  Kommunikation mit laufendem Python-Script Lime 2 3.300 29.04.2021 16:32
Letzter Beitrag: jg
  Python Code in LabVIEW nutzen n4f3ts 7 12.334 17.03.2016 09:23
Letzter Beitrag: n4f3ts
  Aufruf von Python Mictlantecutli 3 6.808 17.12.2009 11:35
Letzter Beitrag: RoLe
  Python smolle 2 4.751 17.04.2008 14:40
Letzter Beitrag: smolle
  VIs mit Python ausführen tobey 0 3.428 01.08.2006 10:36
Letzter Beitrag: tobey

Gehe zu: