MATLAB® GUI

Aus Technische Beeinflussbarkeit der Geschmacksache Kaffee
Version vom 20. April 2023, 13:46 Uhr von Armin Rohnen (Diskussion | Beiträge) (Die Seite wurde neu angelegt: „<htmltag tagname="img" src="http://vg04.met.vgwort.de/na/7a91dbe2b4e840fabc25efcd34e627d6" width="1" height="1" alt=""></htmltag> mini|zentriert|hochkant=2.5<br> = 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 Bedi…“)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springen Zur Suche springen

Breites Logoband.png


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