Seite 1 von 1

USB-µPIO mit Python auslesen

Verfasst: Mittwoch 14. Februar 2024, 00:28
von janihani
Guten Abend,
ich habe einen USB-µPIO Temp 12, und bisher lese ich diesen per Powershell zuverlässig aus und speichere die Daten in einer Sqlite Datenbank.

Code: Alles auswählen

    $COMPORT='COM9'
    $BAUDRATE=57600
    $Parity=[System.IO.Ports.Parity]::None     # System.IO.Ports.Parity
    $DataBits=8
    $StopBits=[System.IO.Ports.StopBits]::one  # System.IO.Ports.StopBits

    #Sicherstellen, dass $ComData leer ist (wenn das Script erneut ausgeführt wird)
    $ComData=""

    $port= new-Object System.IO.Ports.SerialPort $COMPORT,$BAUDRATE,$Parity,$DataBits,$StopBits
    $port.open()

    #Zwingend notwendig, erst einen Befehl zu senden, damit eine Antwort vom µPIO gesendet wird
    $port.WriteLine("Bxxxxxxxxxxxx--------")    

    #Daten vom Comport lesen
    $ComData=$port.ReadLine() 

    #Com Port schliessen
    $port.Close()

    $VLHK = $Daten[1].ToString().Trim()
    $RLHK = $Daten[3].ToString().Trim()
    $Speicher = $Daten[5].ToString().Trim()
    $WW = $Daten[7].ToString().Trim()
    $Zirku = $Daten[9].ToString().Trim()

    $Brenner = $Daten[13].ToString().Trim()
    $UP = $Daten[15].ToString().Trim()
    $Fehler = $Daten[17].ToString().Trim()
    $ZP = $Daten[19].ToString().Trim()

    $SQL = "Insert into 'Temperaturen' (Datum, Zeit, VLHK, RLHK, Speicher, WW, Zirku, Brenner, UP, Error, ZP) 
                Values ('$Datum','$Zeit','$VLHK','$RLHK','$Speicher','$WW','$Zirku','$Brenner','$Up','$Fehler', '$ZP');"

    #Insert into ausführen
    invoke-SqliteQuery -DataSource $DataSource -Query $SQL -QueryTimeout 3
    Write-Host "Daten in Tabelle Temperaturen eingefügt." -ForegroundColor Yellow
Aufgrund einer Systemumstellung möchte ich nun den Temp 12 mit Python auslesen und scheitere daran, dass mir keine Daten geliefert werden.

Code: Alles auswählen

  import serial
  serPort = serial.Serial(port='Com9', baudrate=57600, bytesize=8, timeout=3, parity='N', stopbits=1) 
  command = b'Bxxxxxxxxxxxx--------'
  #print('Sende Befehl ' + str(command) + ' zum Abacom, Länge' + str(len(command)))
  serPort.writelines(command)
  data = serPort.readline()
  print('Data read', str(data))
  serPort.close()
Als Ergebnis wird folgendes geliefert:

Code: Alles auswählen

Data read b''
Anmerkung:
Der String 'Bxxxxxxxxxxxx--------' muss als Bytes (b'Bxxxxxxxxxxxx--------') an die serielle Schnittstelle geliefert werden, da ansonsten ein Laufzeitfehler auftritt.
Fehlermeldung  µUSB.png
Fehlermeldung µUSB.png (326.42 KiB) 17040 mal betrachtet

Hat jemand eine Idee, wie das Problem gelöst werden kann?

Re: USB-µPIO mit Python auslesen

Verfasst: Donnerstag 22. Februar 2024, 12:01
von abacom
Vielleicht hilft dieses weiter...
https://stackoverflow.com/questions/140 ... ding-again
Everything you receive is encoded, so you do input_string.decode('encoding') to convert it to unicode.
Everything you need to output is unicode but needs to be encoded, so you do output_string.encode('encoding').
The most common encodings are cp-1252 on Windows (on US or EU systems), and utf-8 on Linux.

Re: USB-µPIO mit Python auslesen

Verfasst: Donnerstag 22. Februar 2024, 23:49
von janihani
Einen kleinen Erfolg konnte ich erzielen. Nach dem ich eine Zeitverzögerung von einer Sekunde nach dem Öffnen der seriellen Schnittstelle eingefügt habe, werden mir Daten geliefert.

Code: Alles auswählen

import serial
import time as t

# Serial Port Parameter 
COMPORT='Com9'
BAUDRATE = 57600
Parity=serial.PARITY_NONE
StopBits=serial.STOPBITS_ONE
DataBits=serial.EIGHTBITS
TimeOut=1

SerialPort = serial.Serial(port=COMPORT, baudrate=BAUDRATE, bytesize=DataBits, timeout=TimeOut, parity=Parity, stopbits=StopBits) 
t.sleep(1) 

command = b'Bxxxxxxxxxxxx--------'
SerialPort.writelines(command)

data = SerialPort.readline() # kein Fehler, aber leere Rückgabe
#data = data.decode('ascii')
print('Data read', str(data))

SerialPort.close()
Aber, anstelle der korrekten Temperaturen wird 0.0 geliefert.

Code: Alles auswählen

Daten mit Python-Script:
Data read b' VLHK ;  0.0\x02; RLHK ;  0.0\x02; WWSP ;  0.0\x02; WWVL ;  0.0\x02; ZIRKU;  0.0\x02;  --  ;  --  ;BURNER;  AUS ;  UP  ;  AUS ; ERROR;  AUS ;  ZP  ;  AUS ;  --  ;  --  ;  --  ;  --  ; C0-C1;  AUS ; C0-C2;  AUS ; C0-C3;  AUS ;  --  ;  --  ;\r\n'
Ein Fehler bezüglich der Dallas Temperatursensoren kann ich ausschließen, denn wenn ich mein Powershell-Script (ein paar Sekunden später) laufen lasse, werden mir korrekte Temperaturen geliefert.

Code: Alles auswählen

Daten mit Powershell-Script:
VLHK ; 24.1; RLHK ; 23.8; WWSP ; 46.3; WWVL ; 40.5; ZIRKU; 29.6;    ;    ;BURNER;  AUS ;  UP  ;  AUS ; ERROR;  AUS ;  ZP  ;  AUS ;    ;    ;    ;    ; C0C1;  AUS ; C0C2;  AUS ; C0C3;  AUS ;    ;    ;
Bezüglich Encodings hab ich in Python verschiedene ausprobiert, jedoch bleibt das Problem, dass weiterhin falsche Temperaturwerte geliefert werden.

Re: USB-µPIO mit Python auslesen

Verfasst: Dienstag 27. Februar 2024, 09:10
von abacom
Versuchen Sie das Lesen bitte einmal als Schleife. Evtl. ist nur der erste Datensatz nach dem Öffnen (=Device Reset) noch ungültig.