Forum: Mikrocontroller und Digitale Elektronik Datenübertragung von STM32F7 und Darstellung mit Dash


von Marco D. (Gast)


Lesenswert?

Guten Tag,

ich will eine Leistungsanalyse an einem Elektromotor mittels STM32F7 
vornehmen. Hierzu ist der Mikrocontroller auch schon programmiert. 
Dieser sendet die Messdaten, Strom und Spannung, per USB an meinen 
Rechner. Hier lese ich die Daten mit Python aus.
Da ich auf diesem Gebiet jedoch keine Erfahrung habe, bin ich auf ein 
paar Probleme gestoßen.
Ich lese den USB-Port in einer while-Schleife mit ser.read() aus.
Wie bekomme ich die Daten aus der while-Schleife um weitere Berechnungen 
vornehmen zu können?
Momentan hänge ich die Daten an ein Feld an. Bei while 1 wird das Feld 
aber unendlich lang und das Programm hängt dauerhaft in der 
while-Schleife.

Das nächste Problem ist, dass die übertragenen Daten immer in folgendem 
Format übertragen werden -> b'Daten' (Daten = Bsp. 1.54327)
So kann ich die Daten mit Dash nicht visualisieren...
Beim Versuch den String zu kürzen hatte ich keinen Erfolg. Ergebnis -> 
b'te'
anstatt -> Daten.

Für ein paar Tipps wäre ich sehr dankbar.
Vielen Dank im Voraus

Viele Grüße

Marco D.


Entschuldigung, dass der Code nicht in einer extra Datei ist. Hat nicht 
geklappt..
1
# -*- coding: utf-8 -*-
2
import serial
3
import dash
4
import dash_core_components as dcc
5
import dash_html_components as html
6
import plotly.graph_objs as go
7
from dash.dependencies import Input, Output
8
9
Strom = ['0']
10
Spannung = ['0']
11
12
#einlesen serieller port
13
def returnvalues(Strom, Spannung):
14
    ser = serial.Serial(port = 'COM11', baudrate = 9600, bytesize = serial.EIGHTBITS, parity = serial.PARITY_NONE, timeout = 1)
15
    try:
16
        ser.isOpen()
17
        print('USB ist offen')
18
    except:
19
            print('FEHLER!! Programmierfehler bei USB öffnen')
20
            exit()
21
    if(ser.isOpen()):
22
        try:
23
            i = 0
24
            while i < 5:
25
                a = ser.read(30)
26
                
27
                x = a.splitlines()[1]
28
                y = a.splitlines()[2]
29
30
# Unterscheidet Strom und Spannung
31
                if x[:1] == b'U':
32
                    Spannung.append(x[1:])
33
                    Strom.append(y[1:])
34
35
                elif x[:1] == b'S':
36
                    Spannung.append(y[1:])
37
                    Strom.append(x[1:])
38
39
                else:
40
                    print('FEHLER!! Spannung & Strom konnten nicht unterschieden werden')
41
                i = i + 1                
42
                                    
43
        except Exception:
44
            print('FEHLER!! Programmierfehler bei Datenzuweisung')
45
    else:
46
        print('FEHLER!! USB kann nicht öffnen')
47
# Ende einlesen
48
49
#Einlesen aufrufen
50
returnvalues(Strom, Spannung)
51
52
print('Strom=', Strom) 
53
print('Spannung=', Spannung)
54
55
#DASH
56
external_stylesheets = ['https://codepen.io/chriddyp/pen/bWLwgP.css']
57
58
app = dash.Dash(__name__, external_stylesheets=external_stylesheets)
59
60
app.layout = html.Div(children=[
61
    
62
    html.H1(
63
        'Power Analyzer',
64
    ),
65
66
        dcc.Graph(id='example-graph', 
67
            figure={
68
                'data': [
69
                    {'x': [0.1, 0.2, 0.3], 'y': [1,2,3], 'type': 'line', 'name': 'Strommessung'},
70
                    {'x': [1, 2, 3], 'y': [4.34567, 5, 6], 'type': 'line', 'name': 'Spannungsmessung'},
71
                ],
72
                'layout': {
73
                     'title': 'Messungen'
74
                }
75
            }
76
        ),
77
        
78
])
79
80
if __name__ == '__main__':
81
    app.run_server(debug=True)
82
#ENDE DASH

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.