Seite 1 von 1

binäre Daten loggen mit Raspberry Pi

Verfasst: Dienstag 13. März 2018, 10:00
von Somnus
Hallo,
ich versuche binäre Daten von einem Messinstrument mit einem Pi 3 zu loggen. Dazu habe ich schon folgendes Script gefunden, welches den ASCII-Header perfekt in eine Datei schreibt, die binären Messdaten allerdings nicht. Wie muss ich das Script umschreiben, um auch die binären Daten zu bekommen?

Danke schonmal

#!/usr/bin/env python
# Log data from serial port

# Author: Diego Herranz

import argparse
import serial
import datetime
import time
import os

parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter)
parser.add_argument("-d", "--device", help="device to read from", default="/dev/ttyUSB0")
parser.add_argument("-s", "--speed", help="speed in bps", default=9600, type=int)
args = parser.parse_args()

outputFilePath = os.path.join(os.path.dirname(__file__),
datetime.datetime.now().strftime("%Y-%m-%dT%H.%M.%S") + ".bin")

with serial.Serial(args.device, args.speed) as ser, open(outputFilePath, mode='wb') as outputFile:
print("Logging started. Ctrl-C to stop.")
try:
while True:
time.sleep(1)
outputFile.write((ser.read(ser.inWaiting())))
outputFile.flush()
except KeyboardInterrupt:
print("Logging stopped")

Re: binäre Daten loggen mit Raspberry Pi

Verfasst: Dienstag 13. März 2018, 10:18
von __deets__
Bitte benutze die Code Tags zur Formatierung deines Codes. Sonst ist der nicht zu entziffern, da die in Python wichtigen Einrückungen verloren gehen.

Und das Skript schreibt binäre Daten. Denn es schreibt ALLE Daten. Wenn da etwas fehlt, hat das mit was anderem zu tun. Zb das man das Gerät erst in einen Modus zur Produktion der Daten bringen muss. Oder das du die binären Daten nicht angezeigt bekommst, weil die nicht druckbare Zeichen sind.

Re: binäre Daten loggen mit Raspberry Pi

Verfasst: Dienstag 13. März 2018, 10:30
von Somnus
Danke dir. Ich hab den Code mal in eine Codebox getan, hoffe jetzt ist er besser verständlich. Gut, dann werde ich mal weitersuchen.
Gibt es für mich eine Möglichkeit, Stopbits und Parität einzustellen, so wie das bei der Baudrate schon passiert ist?

Code: Alles auswählen

#!/usr/bin/env python
# Log data from serial port

# Author: Diego Herranz

import argparse
import serial
import datetime
import time
import os

parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter)
parser.add_argument("-d", "--device", help="device to read from", default="/dev/ttyUSB0")
parser.add_argument("-s", "--speed", help="speed in bps", default=9600, type=int)
args = parser.parse_args()

outputFilePath = os.path.join(os.path.dirname(__file__),
                         datetime.datetime.now().strftime("%Y-%m-%dT%H.%M.%S") + ".bin")

with serial.Serial(args.device, args.speed) as ser, open(outputFilePath, mode='wb') as outputFile:
      print("Logging started. Ctrl-C to stop.")
      try:
           while True:
                         time.sleep(1)
                         outputFile.write((ser.read(ser.inWaiting())))
                         outputFile.flush()
      except KeyboardInterrupt:
             print("Logging stopped")

Re: binäre Daten loggen mit Raspberry Pi

Verfasst: Dienstag 13. März 2018, 10:44
von __deets__
Natürlich. Steht alles in der serial Dokumentation. Mir persönlich ist außer 8N1 niemals was anderes begegnet. Und das ist der default. Außerdem würdest du auch keine lesbaren ASCII Daten bekommen, wenn das nicht stimmt.

Re: binäre Daten loggen mit Raspberry Pi

Verfasst: Dienstag 13. März 2018, 10:50
von Somnus
Danke, ja das passt. Ich bekomme auch ein File, das mit der Zeit größer wird. Werde mir das mal in einem Hex-Editor anschauen.