MATLAB® GUI

Aus Technische Beeinflussbarkeit der Geschmacksache Kaffee
Zur Navigation springen Zur Suche springen

Breites Logoband.png

Patricia Viebke, 06.09.2023 - Finaler Stand GUI

Die GUI hat einige Updates bekommen, wodurch die Finalisierung durchgeführt werden konnte. Die Benutzeroberfläche lässt sich weiterhin in die drei Hauptbereiche "Prüfstandsüberwachung", "Pico Ausgabe" und die interaktive Nutzung für den User einteilen mit einer TabGroup.

Prüfstandsüberwachung

Die Prüfstandsüberwachung zeigt neben dem qualitativen Boilerfüllstand die physikalischen Messwerte des Prüfstands an, um die Parameter auf einen Blick kontrollieren zu können. Für die Überwachung des Drehmoments wurde beschlossen, dass dieser vorerst nicht benötigt wird. Der Sensor mit der zugehörigen Signalaufbereitung und Anzeige in der Prüfstandsüberwachung werden entfernt. Die Prüfstandsüberwachung wurde erweitert durch die Anzeige der aktuellen Stepperposition und der prozentualen Leistung des Heizelements.

Startseite

Die Startseite dient zum Verbinden der benötigten Geräte. Für die Aufnahme der Messwerte wird eine NI-Karte benötigt, während der Prüfstand über einen Raspberry Pico gesteuert wird. Für einen erhöhten Userkomfort wurden unter den jewiligen Connect-Buttons ein Label mit blauer Schrift hinzugefügt. Bei Betätigen des NI Connect-Buttons wird der Button erst bei erfolgreicher Verbindung deaktiviert. Um zu Erkennen, ob der Verbindungsaufbau angefangen hat oder nicht, wird in blauer Schrift "Verbindung wird hergestellt..." angezeigt. Wird der Button zweimal gedrückt, so erscheint eine Fehlermeldung, dass das NI-Objekt bereits vorhanden ist.

Bei der Verbindung mit dem Raspberry Pico ist wird im ersten Schritt der Serialport angelegt. Im nächsten Schritt wird die Initialisierung des Schrittmotors durchgeführt. Hierfür wird der Schrittmotor um 1000 Halbschritte geschlossen und anschließend um 560 Halbschritte geöffnet. Hierdurch ist der Ausgangspunkt für den Schrittmotor klar definiert und die angesteuerten Schritte können gezählt werden. Bei der Verbindung mit dem Pico ist aufgefallen, dass dieser nach dem Erstellen etwas Zeit benötigt (1 bis 2 Sekunden) um den Vorgang korrekt durchzuführen. Bei erfolgreicher Verbindung und Initialisierung erscheint in der Pico Ausgabe der Befehl 'connected'.

Übersicht GUI Tab für die Kalibrierung

Bedienung

Die Bedienung des Prüfstands wird unterteilt in automatisierte und manuelle Vorgänge. Bei den automatisierten Vorgängen werden lediglich die Magnetventile geschalten, die Pumpe wird vom Benutzer zusätzlich gestartet. Zu den bereits vorhanden Vorgängen "Befüllen", "Entleeren" und "Entlüften" wird die Funktion "Frischwasser zirkulieren" hinzugefügt. Bei dieser Funktion wird das System gleichzeitig mit frischem kalkfreiem Wasser befüllt, während das bestehende Wasser entleert wird. Die Funktion wurde entwickelt, um nach einer Temperaturkalibrierung das Wasser abzukühlen. Alle Funktionen müssen selbstständig über den RESET-Button deaktiviert werden. Hier werden die Magnetventile auf den Ausgangszustand geschalten. Lediglich die Funktion zur Boilerbefüllung schaltet die Pumpe bei Erreichen des Füllstands automatisch aus, um ein Überlaufen im Boiler zu verhindern.

Bei Benutzung der Funktionen ist die PIco Ausgabe zu überprüfen. Es müssen immer 5 Ventile angezeigt werden. Beim RESET-Button werden die Magnetventile über ein Python Skript auf dem Raspberry Pico zurückgesetzt und das Codewort 'reseted' erscheint.

Kalibrierung

Der dritte Tab der GUI umfasst die Interaktion des Benutzers für die Kalibrierung von Druck- und Temperatursensoren. Hier ist über eine ButtonGrouop auszuwählen, um welche Art von Kalibrierung es sich handelt. Es gibt Beschränkungen, um Schäden an den Komponenten zu vermeiden. Liegt die Temperatur über 30 °C, so kann keine Druckkalibrierung durchgeführt werden. Weiter muss für eine Temperaturkalibrierung der Druck unter 1 bar liegen.

Temperaturregelung von Raumtemperatur bis 55 °C

Bevor die Kalibrierung gestartet werden kann, muss ein Zielwert und die Anzahl der Kontrollpunkte angegeben werden. Für Drucksensoren beträgt das Maximum 12 bar, bei Temperatursensoren betägt das Maximum 105 °C. Die Anzahl der Kontrollpunkte muss sinnvoll gewählt werden.

Um nicht zwischen Tabs hin- und herspringen zu müssen, wird hier über den Button die Pumpe eingeschalten. Hier muss der Benutzer über das Drehrad am 24V-Leistungsnetzteil die gewünschte Drehzahl einstellen. Anschließend kann der Kalibriervorgang gestartet werden. Nachdem die entsprechende Funktion das erste Mal durchgelaufen ist (druckregelung oder temp_regelung), werden die Kontrollpunkte und der nächste zu erreichende Kontrollwert angezeigt. Ein Counterlabel und der Error werden angezeigt, um den Prozess zu überwachen. Ein stabiler Messpunkt ist erreicht, wenn eine Meldung erscheint. Hier kann z.B. mit einem externen Messsystem Messwerte aufgezeichnet werden. Zusätzlich bietet die GUI eine Möglichkeit die Messwerte des Kalibriervorgangs zu speichern. Hier werden zur Überprüfungszwecke bei der Temperaturregeleung die Heizleistung und die Kontrolltemperatur in Variablen in den MATLAB Workspace importiert. Von dort aus kann der Kalibrierprozess graphisch dargestellt werden.

Patricia Viebke, 27.04.2023

Startseite der GUI

Es wird eine neue Benutzeroberfläche in MATLAB® für die Bedienung und Überwachung des Pumpenprüfstands programmiert.

Die GUI wird in drei Bereiche unterteilt. Der obere Bereich stellt die Prüfstandsüberwachung dar. Hier werden nach erfolgreicher Verbindung mit der NI-Messkarte 9220 die Messwerte der verwendeten Sensoren angezeigt. Da nur eine qualitative Anzeige des Füllstandes im Boiler möglich ist, wird diese mit einer LED in der GUI realisiert. Bei grünen Aufleuchten der LED ist ausreichend Wasser im Boiler vorhanden. Weiter wird die Durchfussrate, die Kontrolltemperatur und der Kontrolldruck des Prüfstandes überwacht. Die Welle, welche die Pumpe antreibt, wird ebenfalls durch zwei Sensoren überwacht. Für die Welle ist die Überwachung der Drehzahl und des Drehmoments geplant. Da der Drehmomentsensor defekt ist, kann hier aktuell kein Messwert angezeigt werden.

Im zweiten Bereich ist eine Tab-Group vorzufinden, über welche der Benutzer den Prüfstand bedienen kann. In der nebenstehenden Abbildung ist der Tab Startseite ausgewählt, wo der Benutzer die Verbindung mit den Geräten herstellen kann. Für die vollständige Benutzung der GUI muss sowohl die Verbindung mit der NI-Messkarte, als auch die Verbindung mit dem Raspberry Pico hergestellt werden.

Für die korrekte Implementierung des Raspberry Picos wird der dritte Bereich in der GUI erstellt. Dieser Bereich zeigt die Ausgaben der MicroPython Skripte, die auf dem Microcontroller ausgeführt werden. Die erstellte Anzeige dient dem Nachvollziehen der Kommunikation des Microcontrollers. Die ausgeführten Befehle sind für den Benutzer sichtbar und bei unerwarteten Meldungen lassen sich schnell Fehler identifizieren lassen.

Bedienung des Pumpenprüfstands

Mit dem zweiten Tab ist die Bedienung des Prüfstands auszuführen. Hier wird unterteilt in die Ausführung von den definierten Basisfunktionen und die manuelle Ansteuerung der einzelnen Komponenten.

Die Basisfunktionen umfassen die Boilerbefüllung, Boilerentleerung die Entlüftung für den Druckabbau. Die Basisfunktionen werden bei jeweiliger Betätigung des Buttons vorbereitet durch das Schalten der entsprechenden Magnetventile. Geschaltete Magnetventile sind an den gelben LEDs auf der linken Seite zu erkennen. Die Pumpe wird aus Sicherheitsgründen nicht selbstständig gestartet bei Betätigen einer Basisfunktionen. Diese muss manuell über den den Button 'Pumpe ON/OFF' eingeschaltet werden. Bei erneutem Betätigen der Buttons wird der Prüfstand auf den Ausgangszustand zurückgesetzt. Das heißt, alle Magnetventile sind ungeschalten.

Für die Überprüfung der einzelnen Komponenten wird ein zusätzlicher Abschnitt mit manueller Bedienung erstellt. Hier können die einzelnen Komponenten im Prüfstand angesteuert werden. Mit einem Schieberegler ist das Heizelement bedienbar. Die Zahlen auf dem Schieberegler sind prozentuelle Angaben der Heizleistung des Heizelements. In dem Ausgabefeld darunter wird der ganzzahlige Wert ausgegeben. Hier ist zu beachten, dass der Boiler ausreichend gefüllt sein muss, bevor das Heizelement betätigt wird.

Die Bedienelement in der Mitte des manuellen Panels, dienen der Ansteuerung des elektrischen Dosierventils. Mit dem Dosierventil wird der Druckaufbau im Prüfstand realisiert. Hier muss ein Wert eingetippt werden in das Feld. Mit dem Spinner kann der Wert erhöht oder verringert werden. Erst bei Betätigen des entsprechenden Buttons 'Stepper auf' oder 'Stepper zu' wird die Schrittzahl ausgeführt. Mit 'Stepper auf' wird der Druck im Prüfstand reduziert, während mit 'Stepper zu' der Druckaufbau stattfindet.

Die letzte Gruppe von Buttons dient der Überprüfung der einzelnen Magnetventile. Im Prüfstand sind fünf Magnetventile verbaut, die über die GUI geschalten werden können. Die Magnetventile können im manuellen Modus in beliebiger Konstellation geschalten werden. Die Sinnhaftigkeit der aktiven Magnetventile ist zu beachten, bevor die Pumpe gestartet wird.

Bei jedem Betätigen eines Buttons wird mindestens eine Ausgabe in den weißen Zeilen der GUI erscheinen. Da der Prüfstand durch den Raspberry Pico gesteuert wird, werden bei Betätigen der Buttons die Zeilen in der Ausgabe erscheinen.

Kalibrierung von Sensoren


Der letzte Tab ist für die Kalibrierung von Sensoren geplant. Dieser ist noch in Entwicklung und daher nicht vollständig funktionsfähig. Mit dem Prüfstand ist die Kalibrierung von Druck- und Temperatursensoren geplant. Da die Temperatursensoren nicht in Betrieb genommen werden können, aufgrund fehlender Messumformer, entfällt die weiter Entwicklung für den Kalibrierprozess dieser vorerst.

Für die Kalibrierung von Drucksensoren muss die Parametrierung des Prüfstands funktionsfähig sein. Ziel ist, über die Eingabe des Enddrucks und die Anzahl der Kontrollschritte den Druck im Prüfstand einzustellen. Hierfür bedarf es eine Druckregelung, die im Programmcode mit einem PID Regler umgesetzt wird.

Die Parametrierung des Prüfstandes funktioniert, jedoch ist diese aktuell nicht sehr präzise. Hier besteht Optimierungsbedarf bei der Präzision der PID-Regler.

Patricia Viebke, 26.11.2022

Aufgrund unstrukturierter Vorarbeit bei der Programmierung einer MATLAB GUI, wurde beschlossen diese von Anfang an neu zu programmieren. Hierfür wurde eine GUI erstellt mit dem Namen "GUI_Pumpenpruefstand". Die GUI ist für die Bedienung des Pumpenprüstandes vorgesehen. Sie wird in vorerst 5 Tabs unterteilt.

Startseite der GUI für den Pumpenprüfstand

Bevor die GUI gestartet wird, muss der Raspberry Pico einmal abgesteckt und erneut an den PC gesteckt werden, um erkannt zu werden. Beim Starten der GUI erscheint die Startseite. Auf der Startseite wird nach dem Namen des Prüfers gefragt. Anschließend wird über zwei Buttons die Verbindung zum Pico und zur NI-Messkarte hergestellt. Der Panel im unteren Teil der GUI soll später die Prüfstandsparameter nach erfolgreicher Verbindung der NI-Messkarte anzeigen. Der rechte Panel "Pico Ausgabe" dient zur Überwachung der Ausgabe des Microcontrollers. Hiermit wird überprüft, ob die Skripte richtig ausgeführt werden. Mit dem Button "clear commands" werden die Zeilen gelöscht.

Beim Betätigen des "Connect" Buttons für das Raspberry Pico wird folgender Code ausgeführt.
writeline(app.pico, 'import connect');
writeline(app.pico, 'connect.skript()');

korrekte Ausgabe bei Connect Pico

Mit den beiden Zeilen wird ein erst ein Skript importiert und anschließend ausgeführt. Beim Ausführen der Funktion "skript" der Datei "connect.py" wird ein print('connected') ausgegeben. Dieser Ablauf muss beim Betätigen des Connect Buttons in den weißen Zeilen des rechten Panels angezeigt werden. Für eine erfolgreiche Verbindung müssen folgende Zeilen erscheinen.

Hier ist der Verlauf sichtbar. Mit dem ersten Befehl wurde das Skript importiert und mit dem zweiten wurde es ausgeführt. Die dritte Zeile stellt die Ausgabe aus dem Python Skript dar. Die Vorgehensweise wird auch für andere Buttons analog angewendet, daher wird darauf nicht erneut eingegangen. Die Zeilen dienen erstmal nur der Überprüfung. Ob der Panel "Pico Ausgabe" beibehalten wird, wird im Laufe des Projektes entschieden.

Tab Basisfunktionen der GUI Pumpenprüfstand

Hier ist der zweite Tab "BASISFUNKTIONEN" abgebildet. Hier werden die einzelnen Magnetventile entsprechend geschalten. Die Basisfunktionen Befüllen, Entleeren und Entlüften sind hier vorprogrammiert und die Ventile werden entsprechend geschalten. Hierzu wurden auf dem Pico die Skripte "belueften.py", "entleeren.py" und "entlueften.py" geschrieben. Die Ausgabe erfolgt analog zum Connect Button.

Im manuellen Modus können die Ventile individuell zum Überprüfen geschalten werden. Die Lampen zeigen die jeweils geschalteten Ventile an. Diese leuchten auf, wenn ein Ventil geschalten ist. Bleibt es ungeschalten, so leuchtet die Lampe nicht. Es wurde entschieden die Pumpe nicht bei den Basisfunktionen direkt mitstarten zu lassen. Aus Gründen der Sicherheit ist es vorteilhafter die Pumpe immer manuell zu schalten.

Sowohl die Pumpe, als auch die Magnetventile werden über die SSR-Insel mit dem Pico verbunden.

Die Funktionen wurden auf einem Pico getestet, jedoch noch nicht in Verbindung mit den Magnetventilen. Dies muss im nächsten Schritt passieren.

Armin Rohnen, 03.10.2022

Nachdem die Basisplatine einsatzbereit ist, müssen auf dem Raspberry Pico Python Skripte programmiert werden. Mithilfe dieser Skripte wird das Ansprechen von Elementen gewährleistet. In der bereits vorhanden MATLAB GUI müssen die Python Skripte entsprechend implementiert werden, damit die GUI voranschreitende Funktionalität erlangt und somit der Prüfstand über die GUI gesteuert wird. Ziel ist es, den Prüfstand über die MATLAB GUI bedienen zu können. Mit dem Einsatz von MATLAB und dem Raspberry Pico muss weiter eine zuverlässige Datenverarbeitung programmiert werden. Die aufgenommenen Zeilen des Raspberry Picos werden an MATLAB übergeben und müssen anschließend aufbereitet und in einem Buffer abgespeichert werden.

Ist die Programmierung vollständig, muss das System in der Lage sein, die Werte des Prüfstandes aufzunehmen und die aufgenommenen Daten weiterzuverarbeiten, um eine zuverlässige Überwachung zu bieten.

Armin Rohnen, 22.02.2022

Benötigt wird die Funktionalität, wie von Semih Kum am 15.12.2021 beschreiben. Diese ist jedoch noch einmal zu überprüfen ggf. zu ergänzen. Für die MATLAB® GUI ist zu beachten:

1.) Über die NI-Messkarte müssen die Messwerte kontinuierlich mit einer hohen Abtastrate erfasst werden. Nur so ist die Drehzahl und der Durchfluss ermittelbar und nur in dieser Art der Programmierung ist eine kontinuierliche Überwachung des Pumpenprüfstands möglich. Über einen Interrupt-Service-Request (ISR), der auf den gefüllten Messdatenpuffer reagiert, wird die Funktion "datenverarbeitung" aufgerufen. In dieser erfolgt die Übernahme der Messwerte in die GUI und die gesamte Datenverarbeitung der Messdaten von der NI-Messkarte.

2.) Die MATLAB® / MCU Schnittstelle ist in [41] beschrieben. Die MCU wird mit MicroPython betrieben, dies bedient die USB-Schnittstelle des MCU-Boards mit einer "read eval print loop" (REPL). Physikalisch ist dies eine Serielle-Schnittstelle welche Daten vom PC über eine Sendeleitung an die Empfangsleitung der MCU sendet und umgekehrt. Jede Datenzeile von der MCU wird mit dem Zeichen "CR/LF" beendet, welches als Indikator für einen ISR verwendet wird. Jede komplettierte Datenzeile im Dateneingangspuffer der USB-Schnittselle löst einen ISR aus, welcher eine Datenverarbeitungs-Funktion aufruft. In der MCU-Datenverarbeitungsfunktion erfolgt die Übernahme der Daten von der MCU (das Auslesen des Dateneingangspuffers) und die gesamte Datenverarbeitung der MCU-Daten.

Mit einem anderen Datenverarbeitungskonzept ist der betrieb des Pumpenprüfstands nicht möglich.

Semih Kum, 31.01.2022

6.) Füllstandanzeige im Wasserwechsel-Panel
Geplant war den Füllstand über eine Timerfunktion alle 0,5 s abzulesen und im jeweiligen Textfeld im Wasserwechsel-Panel anzuzeigen. Dafür wurde der Programmcode in der Funktion stm32_get hinterlegt. Doch nach mehreren Versuchen konnte dies nicht realisiert werden. Beobachtet wurde, das im MATLAB-Skript die Timerfunktion Fehler ausgibt, die auch nach erneuter Programmierung nicht beseitigt werden konnte.

Semih Kum, 22.12.2021

1.) Erstellung der Verbindungsfunktionen stm32_connect, stm32_disconnect, stm32_shutdown
Die Schnittstellenverbindung, die zuvor auf den Raspberry Pico konfiguriert war, wurde jetzt auf die neue Basisplatine wie unter [Grundfunktion der MCU] erklärt, abgestimmt. Dabei erfolgt die Verbindung mit der Funktion stm32_connect, die Entkopplung mit stm32_disconnect und die Speicherung des Ausschaltzustandes mit stm32_shutdown.

Anhand eines Verbindungs- und Entkopplungstests wurde die Funktion dieser Programmierung sowohl im Wasserwechselmodus, als auch im Manuellen Modus überprüft und bestätigt.

2.) Ventilsteuerung im Wasserwechselmodus
Die hinterlegten Callbacks auffuelen_ButtonPushed, ablassen_ButtonPushed, spuelen_ButtonPushed und STOPButtonPushed wurden jeweils mit den richtigen Codes zur Umschaltung der Ventile ergänzt. Hier ist zu erwähnen, dass alle zuvor genannten Vorgänge des Wasserwechselmodus mit 100% Pumpenleistung erfolgen. Außerdem ist auch zu beachten, dass in der aktuellen Steuerung der appoldt-PIN als Übertragung der Pumpenleistung verwendet wird. Dieser soll aber später für die Ansteuerung des Heizelements verwendet werden, wodurch die Codes wieder verändert werden müssen.

3.) Ventilsteuerung im Manuellen Modus
Die hinterlegten Callbacks BeEntlftungsventilButtonGroupSelectionChanged, AnsaugweicheButtonGroupSelectionChanged, EntleerweicheButtonGroupSelectionChanged und StrangauswahlButtonGroupSelectionChanged wurden wie unter Punkt 2.) mit den Steuercodes für die Magnetventile ergänzt. Das Druckstrangentlüftungsventil wurde dabei außen vor gelassen, da dieser nicht an das System angeschlossen ist.

4.) Überarbeitung der Lampenfunktion ventil_lamps_check
Nach einem Umschalttest der Magnetventile in der GUI ist sofort aufgefallen, dass die Lampenfunktion unter ventil_lamps_check falsch definiert war. Deshalb wurde der Programmcode angepasst und ihre Funktion erneut geprüft und bestätigt.

5.) Ansteuerung der Heizleistung, des Dosierventils und der Motorleistung
Zur Einstellung der oben genannten Kenngrößen sind im Manuellen Modus Spinner vorhanden, mit denen Werte zwischen 0...100% übertragen werden können. Diese Spinner wurden mit den jeweiligen Programmbefehlen und den Umrechnungsformeln ergänzt. Der Test dieser Übertragung ist noch ausstehend. Im Fall der Motorleistung ist wurde kein Callback erstellt, da die DC-Antriebe vorerst über eine separates Netzteil gespeist werden.

Semih Kum, 15.12.2021

Laut Aufgabenstellung / Leistungsvereinbarung sollen alle Steuerungsfunktion in Zukunft über die bereits existierende Bedienoberfläche [25] ablaufen. Im aktuellen Stand ist keine Funktionalität gegeben. Deshalb im Folgenden der Plan für die Implementierung der Programmcodes in MATLAB GUI:

1.) Erstellung der Verbindungsfunktionen stm32_connect , stm32_disconnect , stm32_shutdown
--> ggf. auch eine Funktion zur selbstständigen Findung des COM-Ports
2.) Ventilsteuerung im Wasserwechselmodus
3.) Ventilsteuerung im Manuellen Modus
4.) Überarbeitung der Lampenfunktion ventil_lamps_check(app)
5.) Ansteuerung der Heizleistung, des Dosierventils und der Motorleistung
6.) Füllstandsanzeige im Wasserwechsel-Panel
7.) Erstellung der Funktion ni_card_get zum kontinuierlichen Auslesen der Sensoren an der NI-Messkarte
8.) Erstellung einer Funktion stm32_get zum Auslesen der Sensoren an der Basisplatine
9.) Verbindung der einzelnen Auslesefunktionen mit den richtigen Diagrammen