Hallo zusammen,
ich starte gerade in die Python Programmierung und habe direkt ein Problem, für das ich bis dato keine Lösung finden konnte.
Ich möchte mittels TCP/IP mit einem externen Gerät kommunizieren. Das Funktioniert mittels TeraTerm (Terminal Emulator) wunderbar. Dort muss ich als "Protocol" UNSPEC angeben. Dort bekomme ich dann vom externen Gerät saubere Antworten. Über welche Methode lässt sich das mittels Python realisieren? Mein Versuch war aus dem PythonWiki kopiert:
#!/usr/bin/env python
import socket
TCP_IP = '127.0.0.1'
TCP_PORT = 5005
BUFFER_SIZE = 1024
MESSAGE = "Hello, World!"
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((TCP_IP, TCP_PORT))
s.send(MESSAGE)
data = s.recv(BUFFER_SIZE)
s.close()
print "received data:", data
wobei ich die IP/Port natürlich ersetzt habe.
VIele Grüße,
Jannßr
Python Programmierung TCP/IP / UNSPEC
UNSPEC ist kein Protokoll, sondern steht fuer "unspezifiziert". Also nix. Was deinen Code angeht, enthaelt der die ueblichen zwei Fehler:
- send statt sendall zu benutzen, was nicht grarantiert, das alle Daten abgeliefert werden.
- recv zu benutzen mit einer Buffergroesse, das aber auch nicht garantiert, alle Daten zu bekommen. Da bietet sich socket.makefile an, um dann mittels "read(BUFFER_SIZE)" arbeiten zu koennen.
Und dann ist die Frage, was du hier erwartest. Wir kennen das Geraet ja nicht. Welches Protokoll spricht das denn? Denn auch wenn in TeraTerms keines angegeben ist, dann unterliegt dem eins. ZB fehlt bei dir wahrscheinlich ein Zeilenendezeichen. Und einlesen muss ggf. auch bis zum Zeilenende erfolgen. ZB via readline, wenn man das erwaenhte makefile benutzt hat.
- send statt sendall zu benutzen, was nicht grarantiert, das alle Daten abgeliefert werden.
- recv zu benutzen mit einer Buffergroesse, das aber auch nicht garantiert, alle Daten zu bekommen. Da bietet sich socket.makefile an, um dann mittels "read(BUFFER_SIZE)" arbeiten zu koennen.
Und dann ist die Frage, was du hier erwartest. Wir kennen das Geraet ja nicht. Welches Protokoll spricht das denn? Denn auch wenn in TeraTerms keines angegeben ist, dann unterliegt dem eins. ZB fehlt bei dir wahrscheinlich ein Zeilenendezeichen. Und einlesen muss ggf. auch bis zum Zeilenende erfolgen. ZB via readline, wenn man das erwaenhte makefile benutzt hat.
- __blackjack__
- User
- Beiträge: 13931
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@jann0r: EtherNet und IP sind *zwei* Protokolle. Und beides beantwortet nicht die Frage welches Protokoll das Gerät dann *über* diese Protokolle spricht. Das ist geschichtet. Ethernet ist das Protokoll das zwischen der Hardware (Ethernet-Port) gesprochen wird. Darüber läuft dann IP was die Betriebssysteme miteineinander sprechen. Und nun ist die Frage was die Anwendung(en) auf beiden Geräten miteinander für ein Protokoll über TCP/IP sprechen. In Tera Term hast Du ”unspezifiziert” ausgewählt, das heisst Tera Term macht da nichts weiter als das einfach an Dich als Person durchzureichen. Und da ist jetzt die Frage welches Protokoll *Du* mit der Software auf der anderen Seite der Verbindung sprichst.
“Java is a DSL to transform big Xml documents into long exception stack traces.”
— Scott Bellware
— Scott Bellware
Wenn Wikipedia nicht lügt, ist Ethernet/IP sehr wohl ein Protokoll: EtherNet/IP (EtherNet Industrial Protocol, oft auch nur EIP genannt) ist ein Echtzeit-Ethernet, welches hauptsächlich in der Automatisierungstechnik verwendet wird.
https://de.wikipedia.org/wiki/EtherNet/IP
https://de.wikipedia.org/wiki/EtherNet/IP
Niemand hat behauptet, das es keine Protokolle waeren. Es sind aber nicht die Protokolle, die hier relevant sind. Sondern was - aufsetzend auf TCP/IP - dein Gereaet fuer eines spricht. Der Frage sind wir kein Stueck naeher, aber schoen, dass du die Wikipedia zitierst hast, obwohl's da keinen Dissenz gab...
Ich denke das hier sollte es sein: https://www.keyence.de/download/downloa ... Type=de-DE
Allerdings mag ich mich nicht registrieren, nur um so ein PDF runterzuladen, das muesstest du machen.
Da aber laut deinem Auszug auch eine RS232-Schnittstelle angeboten wird, vermute ich mal stark, dass Befehle (und Antworten) eben mit einem Zeilenende-Zeichen versehen sein muessen, um akzeptiert zu werden. Also
Allerdings mag ich mich nicht registrieren, nur um so ein PDF runterzuladen, das muesstest du machen.
Da aber laut deinem Auszug auch eine RS232-Schnittstelle angeboten wird, vermute ich mal stark, dass Befehle (und Antworten) eben mit einem Zeilenende-Zeichen versehen sein muessen, um akzeptiert zu werden. Also
Code: Alles auswählen
"mein befehl\r\n" #(Windows-Style)
"mein befehl\n" # (UNIX-Style)
- __blackjack__
- User
- Beiträge: 13931
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@__deets__: Naja doch: Ich wusste nicht, dass das *ein* Protokoll ist was tatsächlich „EtherNet/IP“ heisst und nicht einfach IP über Ethernet meint. Und das ist ein Anwendungsschicht-Protokoll, das ist nicht mehr Transportschicht.
@jann0r: Ich frage mich aber ob das hier wirklich eingesetzt wird, denn ich sehe nicht wie *das* mit Tera Term und einem unspezifizierten Protokoll funktionieren soll.
Es bleibt also weiterhin die Frage was das da tatsächlich für ein Protokoll spricht.
@jann0r: Ich frage mich aber ob das hier wirklich eingesetzt wird, denn ich sehe nicht wie *das* mit Tera Term und einem unspezifizierten Protokoll funktionieren soll.
Es bleibt also weiterhin die Frage was das da tatsächlich für ein Protokoll spricht.
“Java is a DSL to transform big Xml documents into long exception stack traces.”
— Scott Bellware
— Scott Bellware
Das kläre ich, aber soweit ich mich erinnere nicht. Das mit dem TeraTerm habe ich selbst getestet. Es gibt ein "CR" als Prüfzeichen, aber das musste ich nicht senden.__deets__ hat geschrieben: ↑Dienstag 28. November 2023, 15:45 Ich denke das hier sollte es sein: https://www.keyence.de/download/downloa ... Type=de-DE
Allerdings mag ich mich nicht registrieren, nur um so ein PDF runterzuladen, das muesstest du machen.
Da aber laut deinem Auszug auch eine RS232-Schnittstelle angeboten wird, vermute ich mal stark, dass Befehle (und Antworten) eben mit einem Zeilenende-Zeichen versehen sein muessen, um akzeptiert zu werden. Also
Code: Alles auswählen
"mein befehl\r\n" #(Windows-Style) "mein befehl\n" # (UNIX-Style)
Ich versuche das nochmal über einen anderen Weg zu klären, würde euch aber teilhaben lassen

Vielen Dank schonmal!
- __blackjack__
- User
- Beiträge: 13931
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@jann0r: CR Prüfzeichen? Wenn das am Ende ist, dann ist das „carriage return“ und kein ”Prüfzeichen”. CR ist dafür die übliche Abkürzung aus dem ASCII-Standard und das fällt unter „Steuerzeichen“. Siehe auch https://de.wikipedia.org/wiki/American_ ... nterchange
“Java is a DSL to transform big Xml documents into long exception stack traces.”
— Scott Bellware
— Scott Bellware
Exakt, habe ich

Ja, völlig korrekt, Prüfzeichen ist natürlich quatsch.__blackjack__ hat geschrieben: ↑Dienstag 28. November 2023, 17:12 @jann0r: CR Prüfzeichen? Wenn das am Ende ist, dann ist das „carriage return“ und kein ”Prüfzeichen”. CR ist dafür die übliche Abkürzung aus dem ASCII-Standard und das fällt unter „Steuerzeichen“. Siehe auch https://de.wikipedia.org/wiki/American_ ... nterchange
Vielen Dank für euren Input
