ich bin gerade dabei ein GUI für ein Messsystem zu erstellen. Dabei werden CAN-Bus Signale vom Auto über eine CAN2USB Schnittstelle auf einen Raspberry 3 geladen, worauf das GUI auch laufen soll.
Meine Messdaten sollen ich Echtzeit in ein Label geladen werden, jeder neue Messwert soll in der Zeile darunter angezeigt werden, die Werte sollen "runterrattern". Funktioniert soweit auch alles.
Aber ich habe folgendes Problem: Bereits nach 1,2 Sekunde nimmt die Performance meines Programms stark ab und mit der Zeit wird es immer schlimmer. Messwerte verfallen nicht, aber werden mit einem steigendem Delay angezeigt.
Wäre genial, wenn mir jemand von Euch helfen könnte. Ich habe gehört, hier gibt es ganz helle Köpfchen
Bitte seid nicht zu hart mit mir, bin noch Anfänger. umgehe ich z.B. die globale Variable?
LG Benni
Code: Alles auswählen
import tkinter as tk
import can
import os
os.system('sudo ifconfig can0 down')
os.system('sudo ip link set can0 type can bitrate 500000')
os.system('sudo ifconfig can0 up')
# Funktionsdefinitionen
def get_new_data():
global can_data
message = can0.recv(timeout = None) # Diese Funktion liefert die Daten vom Bus
if message is not None:
ID = message.arbitration_id # Filter nach der ID
if ID == gesuchte_ID1:
can_data += f"{message}\n"
elif ID == gesuchte_ID2:
can_data += f"{message}\n"
can_label.config(text = can_data, bg = "white", fg = "black", relief = "solid")
can_label.after(1, get_new_data)
# Instanz
fenster = tk.Tk()
fenster.title("Drohnenmesssystem-GUI")
fenster.geometry('1280x600')
fenster.configure(bg='white')
# Variablen, Konstanten, Objekte
can_data = ""
can0 = can.interface.Bus(channel = 'can0', bustype = 'socketcan')
# IDs nach denen gefiltert wird: Klemmensteuerung: 0x3C0, Kessy: 0x1F1
gesuchte_ID1 = 0x3C0
gesuchte_ID2 = 0x1F1
#Labels
label_header = tk.Label(fenster, text = "Echtzeit-Diagnose MLBevo", font = ("Arial",20), bg = "white", fg = "black")
label_header.pack(padx = 100)
can_label = tk.Label(fenster, bg = "white", fg = "black",text = " Starten drücken um Messung zu beginnen")
can_label.pack(padx = 20, pady = 30)
# Funktionsaufrufe
get_new_data()
#os.system('sudo ifconfig can0 down')
fenster.mainloop()