socket - Datenformat ankommend
Verfasst: Sonntag 22. Juni 2014, 12:22
Hallo zusammen.
Bin Neuling bez. Python und versuche, ein eigenes Skript aus AutoIt auf Linux zu portieren. Das Skript nimmt Daten eines Gerätes entgegen, welche im LAN über ein Siena Nemo10 RS232-Ethernet-Modul verschickt werden. Die Daten kommen in Python auch an, doch habe ich Probleme bei der Umwandlung.
Verschickt werden die Hex-Daten
06 3B 04 9B 06 9C 04 D6 05 05 00 00 0D BA 02 00 D4 F7
und empfangen kann ich
Received '\x06"\x04\x9b\x06\x9c\x04\xd6\x05\x05\x00\x00\r\xba\x02\x00\xd5\x10'
Man erkennt die Umwandlung von 3B zu " und 0D zu \r . Die restlichen Daten müsste ich mit binascii.unhexlify umwandeln können, nicht?
Wie komme ich an die korrekten Daten? Gefragt ist schlussendlich der Dezimalwert von immer vier Hex-Ziffern, also 063B wird 1595, danach führt eine Teilung durch 64 zum vom Gerät gemessenen Temperaturwerte (hier 24.9°), mit Ausnahme der letzten 4 Hex-Ziffern, das sind Statuscodes und eine Prüfziffer.
Mit folgendem Beispielprogramm empfange ich die Daten:
Irgendein Tipp? Wo muss ich suchen?
Den Beitrag http://www.python-forum.de/viewtopic.php?f=3&t=33921 habe ich gesehen, aber dort ist (noch) keine Lösung erkennbar.
Danke.
Felix
Bin Neuling bez. Python und versuche, ein eigenes Skript aus AutoIt auf Linux zu portieren. Das Skript nimmt Daten eines Gerätes entgegen, welche im LAN über ein Siena Nemo10 RS232-Ethernet-Modul verschickt werden. Die Daten kommen in Python auch an, doch habe ich Probleme bei der Umwandlung.
Verschickt werden die Hex-Daten
06 3B 04 9B 06 9C 04 D6 05 05 00 00 0D BA 02 00 D4 F7
und empfangen kann ich
Received '\x06"\x04\x9b\x06\x9c\x04\xd6\x05\x05\x00\x00\r\xba\x02\x00\xd5\x10'
Man erkennt die Umwandlung von 3B zu " und 0D zu \r . Die restlichen Daten müsste ich mit binascii.unhexlify umwandeln können, nicht?
Wie komme ich an die korrekten Daten? Gefragt ist schlussendlich der Dezimalwert von immer vier Hex-Ziffern, also 063B wird 1595, danach führt eine Teilung durch 64 zum vom Gerät gemessenen Temperaturwerte (hier 24.9°), mit Ausnahme der letzten 4 Hex-Ziffern, das sind Statuscodes und eine Prüfziffer.
Mit folgendem Beispielprogramm empfange ich die Daten:
Code: Alles auswählen
# Echo client program
import socket
import sys
HOST = '192.168.20.103' # The remote host
PORT = 6001 # The same port as used by the server
s = None
for res in socket.getaddrinfo(HOST, PORT, socket.AF_UNSPEC, socket.SOCK_STREAM):
af, socktype, proto, canonname, sa = res
try:
s = socket.socket(af, socktype, proto)
except socket.error as msg:
s = None
continue
try:
s.connect(sa)
except socket.error as msg:
s.close()
s = None
continue
break
if s is None:
print 'could not open socket'
sys.exit(1)
data = s.recv(1024)
s.close()
print 'Received', repr(data)
Den Beitrag http://www.python-forum.de/viewtopic.php?f=3&t=33921 habe ich gesehen, aber dort ist (noch) keine Lösung erkennbar.
Danke.
Felix