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
|