<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>http://www.institut-fuer-kaffeetechnologie.de/Wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Peter+Vogginger</id>
	<title>Technische Beeinflussbarkeit der Geschmacksache Kaffee - Benutzerbeiträge [de]</title>
	<link rel="self" type="application/atom+xml" href="http://www.institut-fuer-kaffeetechnologie.de/Wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Peter+Vogginger"/>
	<link rel="alternate" type="text/html" href="http://www.institut-fuer-kaffeetechnologie.de/Wiki/index.php?title=Spezial:Beitr%C3%A4ge/Peter_Vogginger"/>
	<updated>2026-06-19T08:19:19Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.39.2</generator>
	<entry>
		<id>http://www.institut-fuer-kaffeetechnologie.de/Wiki/index.php?title=Kommunikation_per_UART&amp;diff=4831</id>
		<title>Kommunikation per UART</title>
		<link rel="alternate" type="text/html" href="http://www.institut-fuer-kaffeetechnologie.de/Wiki/index.php?title=Kommunikation_per_UART&amp;diff=4831"/>
		<updated>2026-02-13T18:38:50Z</updated>

		<summary type="html">&lt;p&gt;Peter Vogginger: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Peter Vogginger, 18.12.2025&amp;lt;br&amp;gt; Setter und Getter für Bits und Bytes =&lt;br /&gt;
Beim Arbeiten mit binären Daten ist der Einsatz von Setter- und Getter-Funktionen sinnvoll, da &lt;br /&gt;
sie den Code übersichtlicher machen und Fehler durch direkte Bit- oder Bytemanipulation &lt;br /&gt;
vermeiden. Ein Setter verändert einen Wert in einem Bytearray, während ein Getter einen &lt;br /&gt;
bestehenden Wert ausliest. Der Setter wird bei Bits in Form von zwei Funktionen beschrieben, &lt;br /&gt;
einmal das Setzen eines Bits auf 1 und das Löschen eines Bits. Letzteres meint das Setzen eines &lt;br /&gt;
Bits auf 0. &lt;br /&gt;
=== set_bit ===&lt;br /&gt;
Zum Setzen einzelner Bits (siehe linke Grafik in der Abbildung 4) wird zunächst aus dem Bitindex &lt;br /&gt;
eine Bitmaske erzeugt, indem der Wert 1 entsprechend nach links verschoben wird (1 &amp;lt;&amp;lt; &lt;br /&gt;
bit_index). Durch eine OR-Verknüpfung des Bytes mit dieser Maske wird das betreffende Bit &lt;br /&gt;
zuverlässig auf den Wert 1 gesetzt.&lt;br /&gt;
=== clear_bit ===&lt;br /&gt;
Zum Löschen eines Bits (siehe zweite Grafik von links in der Abbildung 4) wird dieselbe Maske &lt;br /&gt;
invertiert und das Byte anschließend mit einer AND-Verknüpfung verarbeitet. Dadurch wird das &lt;br /&gt;
Zielbit sicher auf den Wert 0 gesetzt. Beide Operationen verändern ausschließlich das &lt;br /&gt;
gewünschte Bit, alle anderen Bits im Byte bleiben unverändert.&lt;br /&gt;
&lt;br /&gt;
=== get_bit ===&lt;br /&gt;
Das Auslesen eines Bits (siehe mittlere Grafik in der Abbildung 4) erfolgt, indem das &lt;br /&gt;
entsprechende Byte um den Bitindex nach rechts verschoben und anschließend mit 1 maskiert &lt;br /&gt;
wird. Auf diese Weise wird das Zielbit isoliert und als Wert 0 oder 1 zurückgegeben. &lt;br /&gt;
Für die Verarbeitung ganzer Messwerte, die aus ein oder zwei Bytes bestehen, werden ebenfalls &lt;br /&gt;
Setter und Getter verwendet.&lt;br /&gt;
&lt;br /&gt;
=== sync_bit ===&lt;br /&gt;
Das Synchronisieren eines Bits (siehe linke Grafik in Abbildung 5) erfolgt, indem zunächst das entsprechende Bit aus dem Token ausgelesen und mit dem gemessenen Zustand verglichen wird. Stimmen beide Werte nicht überein, wird das Bit im Token entsprechend dem gemessenen Zustand gesetzt oder gelöscht. Ist der Wert bereits identisch, erfolgt keine Änderung.&lt;br /&gt;
Auf diese Weise wird sichergestellt, dass der im Token gespeicherte Zustand jederzeit dem realen Messwert entspricht, ohne unnötige Schreibzugriffe durchzuführen.&lt;br /&gt;
&lt;br /&gt;
=== set_bytes ===&lt;br /&gt;
Beim Schreiben von Bytes in den Token (siehe vierte Grafik von links in der Abbildung 4) wird der Integerwert &lt;br /&gt;
im Big-Endian-Format in zwei Bytes umgewandelt und an der vorgesehenen Position im &lt;br /&gt;
Bytearray gespeichert.&lt;br /&gt;
&lt;br /&gt;
Big-Endian-Format bedeutet, dass bei mehrbyteigen Werten das höherwertige Byte (MSB) zuerst &lt;br /&gt;
gespeichert oder übertragen wird, gefolgt vom niederwertigen Byte (LSB). Im Gegensatz dazu &lt;br /&gt;
gibt es noch das Format Little-Endian. Hierbei ist die Reihenfolge genau umgekehrt, das &lt;br /&gt;
niederwertiges Byte wird zuerst übertragen. Entscheidend ist, dass Sender und Empfänger &lt;br /&gt;
dieselbe Endianess verwenden, sonst entstehen falsche Werte.&lt;br /&gt;
&lt;br /&gt;
=== get_bytes ===&lt;br /&gt;
Das Auslesen von Bytes (siehe rechte Grafik in der Abbildung 4) erfolgt durch Entnehmen von &lt;br /&gt;
einem (oder zwei Bytes) und deren Rückwandlung in einen Integer. Da beide Funktionen &lt;br /&gt;
dasselbe Format Big-Endian verwenden, wird der Messwert exakt so zurückgegeben, wie er &lt;br /&gt;
zuvor gespeichert wurde.&lt;br /&gt;
&lt;br /&gt;
=== get_signed_bytes ===&lt;br /&gt;
Das Auslesen eines vorzeichenbehafteten 16-Bit-Wertes (siehe mittlere Grafik in der Abbildung 5) erfolgt, indem zunächst zwei aufeinanderfolgende Bytes aus dem Token entnommen und zu einem 16-Bit-Ganzzahlwert zusammengesetzt werden. Hierzu wird das höherwertige Byte um acht Bit nach links verschoben und anschließend mit dem niederwertigen Byte logisch verknüpft.&lt;br /&gt;
&lt;br /&gt;
Anschließend wird geprüft, ob das höchstwertige Bit (Bit 15) gesetzt ist. Dieses Bit stellt im Zweierkomplement das Vorzeichenbit dar. Ist es gesetzt, wird vom berechneten Wert 2^16 (0x10000) subtrahiert, um die korrekte negative Ganzzahl zu erhalten.&lt;br /&gt;
Auf diese Weise wird ein im Token gespeicherter 16-Bit-Wert unabhängig von seiner internen Byte-Darstellung korrekt als signed Integer interpretiert. Dieser aufwendige Code ist nötig, da in MicroPython die Anweisung int.from_bytes(two_bytes, &#039;big&#039;) keinen zusätzlichen Parameter signed hat. Dies gilt auch für den folgenden Getter.&lt;br /&gt;
&lt;br /&gt;
===set_signed_bytes ===&lt;br /&gt;
Das Speichern eines vorzeichenbehafteten 16-Bit-Wertes (siehe rechte Grafik in der Abbildung 5) erfolgt durch Zerlegung des Integerwertes in zwei einzelne Bytes. Hierzu wird zunächst das höherwertige Byte ermittelt, indem der Wert um acht Bit nach rechts verschoben wird. Durch anschließendes Maskieren mit 0xFF werden ausschließlich die unteren acht Bit übernommen. Dieses Byte wird an der angegebenen Startposition im Token gespeichert.&lt;br /&gt;
Anschließend wird das niederwertige Byte bestimmt, indem der Wert direkt mit 0xFF maskiert wird. Auch hier werden nur die unteren acht Bit berücksichtigt. Dieses Byte wird an der darauffolgenden Position im Token abgelegt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die genannten fünf Funktionen werden in die Datei utils.py geschrieben. Diese Datei wird auf jeder Platine hinterlegt. &amp;lt;br /&amp;gt; &lt;br /&gt;
Beispielaufruf: utils.set_bytes(token, ort, wert)&lt;br /&gt;
&lt;br /&gt;
[[Datei:Setter Getter.png|thumb|1000px|gerahmt|zentriert|alternativtext=Abbildung 4: Funktionsablauf Setter und Getter Teil 1, (c) Peter Vogginger|Abbildung 4: Funktionsablauf Setter und Getter Teil 1, (c) Peter Vogginger]]&lt;br /&gt;
&lt;br /&gt;
[[Datei:20260213 Flussdiagramm Setter Getter 2.png|thumb|1000px|gerahmt|zentriert|alternativtext=Abbildung 5: Funktionsablauf Setter und Getter Teil 2, (c) Peter Vogginger|Abbildung 5: Funktionsablauf Setter und Getter Teil 2, (c) Peter Vogginger]]&lt;br /&gt;
&lt;br /&gt;
= Armin Rohnen, 13.12.2025&amp;lt;br&amp;gt;Espressomaschinen-Kommunikations-Ring Timing =&lt;br /&gt;
[[Datei:20251213 EKR-Timing.png|thumb|1000px|gerahmt|zentriert|alternativtext=EKR Timing Diagramm, (c) Armin Rohnen|EKR Timing Diagramm, (c) Armin Rohnen]]&lt;br /&gt;
Das Timing des Espressomaschinen-Kommunikations-Rings erfolgt durch die Taktung des ADCs der Messwertplatine. Dieser kann mit einer maximalen Abtastrate von 860 SPS (Samples per Second) betrieben werden. Da jeder 1. Messwert verworfen werden muss und insgesamt 8 Messkanäle berücksichtigt werden müssen, beträgt die effektive Abtastrate 53,75 Hz bzw. alle 18,6 ms steht damit ein neuer Messwertdatensatz zur Verfügung und es wird der Token an die Basisplatine (bas) gesendet. Nach aktuellem Stand (12. Dezember 2025) besteht der Token aus 74 Bytes, was 740 Transferbits ergibt und mit der definierten Transferrate von 230.400 Baud eine Übertragungszeit von 3,2 ms erfordert.&lt;br /&gt;
&lt;br /&gt;
Der Kommunikationsring ist mit der Abfolge - Messwertplatine -&amp;gt; Basisplatine -&amp;gt; SSR-Platine -&amp;gt; Displayplatine -&amp;gt; (Maschinensimulator) -&amp;gt; Messwertplatine definiert. Außer auf der Messwertplatine wird jeweils der Token empfangen, danach die erforderlichen Programmcodes ausgeführt und Änderungen am Token vorgenommen um ihn abschließend an die nächste Platine weiter zu senden. Bei Einstellvorgängen des Dosierventils auf der SSR-Platine wird dies so nicht funktionieren, da die Verstellung des Schrittmotors zu lange dauern wird.&lt;br /&gt;
&lt;br /&gt;
Wird die Kommunikation so wie beschrieben separat betrachtet, dann summiert sich die Transferzeit auf 12,8 ms (bzw. 16 ms mit eingebundenen Maschinensimulator) bis dass der dann mit Änderungen versehene Token wieder an der Messwertplatine angekommen ist. Alle 18,6 ms sendet bei höchster Abtastrate die Messwertplatine den Token erneut. Damit keine Informationen verloren gehen, bleiben insgesamt 5,8 ms Rechenzeit für alle im Ring befindlichen Platinen übrig. Die Messwertplatine fügt aus diesem Grund die Messwerte erst direkt vor dem Senden des Tokens darin ein.&lt;br /&gt;
&lt;br /&gt;
Da eine Summenrechenzeit von 5,8 ms sehr knapp ist, ist zu prüfen, ob der Betrieb in maximaler ADC-Abtastrat emöglich ist.&lt;br /&gt;
&lt;br /&gt;
Eine Reduzierung auf die Abtastrate 475 SPS würde den Token-Aktualisierungstakt auf 33,7 ms (29,7 Hz) erhöhen. Da die kummulierte Übertragungszeit mit 12,8 ms gleich bleibt, ergäbe sich dann eine Restrechenzeit von 20,9 ms. Da der aktualisierte Token, in dem die Messwertplatine wieder Änderungen einfügen darf, dann erst nach dem 3. Messwert eintrifft, ist weiterhin eine Zwischenspeicherung der erfassten Messdaten erforderlich.&lt;br /&gt;
&lt;br /&gt;
= Armin Rohnen, 30.11.2025&amp;lt;br&amp;gt; Kommunikationsstart und kontinuierliches Sendendes Token im ADC Takt der Messwertplatine =&lt;br /&gt;
Über die Messwertplatine wird der Kommunikationsstart realisiert. Damit dies nicht direkt beim Einschalten erfolgt ist der zugehörige Code in der Datei main_mwp.py abgelegt. Wird diese Datei ausgeführt, dann startet die Kommunikation zwischen den Platinen und im Weiteren erfolgt der Maschinenstart.&lt;br /&gt;
&lt;br /&gt;
Aktuell müssen die Variablen UART_TimeOut, token und uart global definiert werden. Werden diese zu einem späteren Zeitpunkt in main.py initialisiert, dann sind diese automatisch global.&lt;br /&gt;
&lt;br /&gt;
Es wird der Initialtoken mit 75-Bytes angelegt und in Byte[0] wird &amp;quot;0x0A&amp;quot; eingetragen. Sollte es sich ergeben, dass die Tokendefinition noch zu weiteren Bytes führt, dann ist dies an den entsprechenden Stellen der main.py auf den Platinen einzutragen. &lt;br /&gt;
&lt;br /&gt;
Im weiteren Ablauf wird die uart-Schnittstelle initialisiert. In der Datei uart_lib.py ist die Klassendefinition des UARTHandler hinterlegt. Diese konfiguriert die uart-Schnittstelle. Im Konstruktor der Klasse ist hinterlegt, dass per UART.IRQ_RXIDLE auf eingehende Daten an der uart-Schnittstelle ragiert wird. Es wird als erstes die Methode _uart_rx_handler aufgerufen, welche sich innerhalb der Klasse befindet. Darin werden lediglich die Daten eingelsen und auf die Methode on_receive weiterverwiesen. Die Methode on_receive ist in allen Realisierungen gleich und prüft auf empfangene Datenlänge und auf das gültige Startzeichen. Danach wird auf die Methode local_receive weitergeleitet.&lt;br /&gt;
&lt;br /&gt;
Die Methode uart.local_receive aus der Klassendefinition wird durch uart.local_receive = mwp_receive_handler mit der in main_mwp.py befindlichen Funktion ersetzt. Da der zu erwartende Token eingegangen ist, wird als erstes die UART-TimeOut-Funktion deaktiviert. Es wird geprüft, ob die Sicherheitsfunktion aufgerufen werden muss oder ob der Token abgearbeitet werden kann. Handelt es sich bei dem empfangenen Token um den ersten Token, werden aktuell das Default-Kaffeerezept und die Betriebsparameter in den Token eingetragen. Es wid eine Byte-Positionsliste erstellt, an die die Messwerte im Token eingetragen werden sollen und es wird der ADS1115 gestartet, welcher danach das Senden des Token takten wird.&lt;br /&gt;
&lt;br /&gt;
In der Datei mwp_messwerte.py ist die Klassendefinition des ADS1115MuxSampler angelegt. Das ist die Umsetzung als Klassendefinition der bisherigen Messdatenerfassung. Der Konstruktor benötigt den Token, eine Positionslsite für die Byte-Nr. der Messwerte im Token (token_pos_list), das UART-Schnittstellenobjekt, die PIN-Nr über den der ADC-IRQ (irq_pin_nr) eingeht und die Kennziffer für die Abtastrate (smple_rate) des ADCs.&amp;lt;br&amp;gt;&lt;br /&gt;
Wenn der ADC gestartet ist, wird nach jedem erfolgten Sampling der Messwert durch die Methode _sample abgeholt. Es wird lediglich jeder zweite Messwert verwendet, da sich in der Wandlung des ersten Messwerts die Umstellung des Multiplexers befindet und der Messwert damit nicht korrekt sein kann. Gültige Messwerte werden als 2 Bytes im Token an der zugehörigen Position abgelegt und danach wird der nächste Messkanal am Multiplexer eingestellt. Ist der achte Messwert erfasst, wird der Token gesendet und die Abarbeitung startet wieder neu.&lt;br /&gt;
&lt;br /&gt;
Damit der Token über die im Verbund befindlichen Platinen durchgereicht wird existiert ein allgemeingültiges main.py und eine allgemeingültige uart_lib.py. In main.py muss die jeweils gültige Länge des Tokens inkl. aller Sonderbyts wie Startzeichen und Checksumme hinterlegt sein, sonst erfolgt keine Weiterleitung des Token. In der uart_lib.py wird aktuell der Token um 0,1 Sekunde verzägert weiter gesendet. Das ist zum Testen über den ADC-TAkt zu löschen.&lt;br /&gt;
&lt;br /&gt;
= Armin Rohnen, 28.11.2025 - Grundkonzept des Programmcodes für die UART-Kommunikation =&lt;br /&gt;
Auf den jeweiligen Platinen werden durch die Bestromung die MCUs gestartet und es werden nacheinander die Dateien &amp;quot;boot.py&amp;quot; und &amp;quot;main.py&amp;quot; abgearbeitet. In &amp;quot;boot.py&amp;quot; befindet sich weiter kein Progammcode, dort werden höchstens Systemeinstellungen vorgenommen. In &amp;quot;main.py&amp;quot; befindet sich die Initialisierung der jeweiligen Platine. Dieses Prgramm muss beendet werden und darf keine Endlosschleife enthalten. Die Steuerung des Ablaufes erfolgt über Interrupt-Service-Routinen (ISR) welche auf definierte Interrupts reagieren und jeweils den zugehörigen Programmcode ausführen.&lt;br /&gt;
&lt;br /&gt;
[[Datei:20251128 Initialisierung MWP.png|thumb|1000px|gerahmt|zentriert|alternativtext=Abb. 1) Konzept zur Initialisierung der Messwertplatine, (c) Armin Rohnen|Abb. 1) Konzept zur Initialisierung der Messwertplatine, (c) Armin Rohnen]]&lt;br /&gt;
&lt;br /&gt;
Zur weiteren Funktionalität auf der Messwertplatine gehört mindestens die Erstellung des (Grund)Tokens und das erste Senden des Tokens. Wird ein Token empfangen bzw. werden Daten an der UART-Schnittstelle erkannt, erfolgt die Abarbeitung gemäß Abb. 2.&lt;br /&gt;
&lt;br /&gt;
[[Datei:20251128 Programmablauf UART IRQ.png|thumb|1000px|gerahmt|zentriert|alternativtext=Abb. 2) Programmablauf UART ISR, (c) Armin Rohnen|Abb. 2) Programmablauf UART ISR, (c) Armin Rohnen]]&lt;br /&gt;
&lt;br /&gt;
Die Abarbeitung des UART IRQ erfolgt auf allen Platinen gleich. Der UART.IRQ_RXIDLE ruft als ISR &amp;quot;_uart_rx_handler&amp;quot; auf. Darin wird lediglich geprüft ob wirklich Daten am UART-RX eingegangen sind. Wenn ja, dann werden die Daten aus dem UART-Eingangspuffer ausgelesen und es wird &amp;quot;on_receive&amp;quot; zur weiteren Überprüfung des Tokens aufgerufen.&amp;lt;br&amp;gt;&lt;br /&gt;
In &amp;quot;on_receive&amp;quot; wird geprüft ob es sich um den (richtigen) Token handelt und dieser Fehlerfrei übertragen wurde. Danach wird ein &amp;quot;local_receive&amp;quot; aufgerufen. Diese Methode der Klasse wird jeweils lokal mit der individuellen Token-Abarbeitung überschrieben. In der Token-Abarbeitung befindet sich üblich die Anweisung zum Senden des Tokens. Lediglich auf der Messwertplatine erfolgt das Senden des Tokens durch eine weitere ISR.&amp;lt;br&amp;gt;&lt;br /&gt;
Die Auslagerung der eigentlichen Verarbeitung des Tokens auf einen lokalen Programmcode entlastet den IRQ, so dass dieser sehr schnell wieder aufgerufen werden kann.&lt;br /&gt;
&lt;br /&gt;
Im &amp;quot;local_receive&amp;quot; der Messwertplatine ist die Überprüfung des ersten gesendeten Tokens enthalten. Ist dieser wieder auf der Messwertplatine eingetroffen, dann wird die Messwerterfassung gestartet und es wird mit der eingestellten Abtastrate des ADC die Alert IRS (Abb. 3) abgearbeitet, welche u.a. zu jedem vollen Messwertesatz einen neuen Token versendet.&lt;br /&gt;
&lt;br /&gt;
[[Datei:20251128 Programmablauf ADC IRQ MWP.png|thumb|1000px|gerahmt|zentriert|alternativtext=Abb. 3) Programmablauf der ADC ISR auf der Messwertplatine, (c) Armin Rohnen|Abb. 3) Programmablauf der ADC ISR auf der Messwertplatine, (c) Armin Rohnen]]&lt;br /&gt;
&lt;br /&gt;
Jeder eingehende Token am UART-RX der jeweiligen Platine lösst die Abarbeitung über die ISR aus. Solange Token im Umflauf sind, solange werden auf den einzelnen Platinen Funktionsabarbeitungen erfolgen. Getriggert wird das System durch die Abtastrate des ADCs auf der Messwertplatine. Endlosschleifen in &amp;quot;main.py&amp;quot; und/oder den ISR stören diesen Ablauf und dürfen daher nicht verwendet werden. Allerdings sind Endlosschleifen icht erforderlich, da dies über den im Umlauf befindlichen Token erfolgt.&lt;br /&gt;
&lt;br /&gt;
= Peter Vogginger, 10.11.2025 - Aufgabenanalyse =&lt;br /&gt;
Aktuell werden die Messwerte von jeder Platine eigenständig an die MATLAB®-GUI versendet. Diese visualisiert und verarbeitet die Messwerte. Die erforderlichen Stellgrößen werden wiederum auf den Platinen in Abhängigkeit der MATLAB®-GUI eingestellt. &lt;br /&gt;
&lt;br /&gt;
In Zukunft soll die Kommunikation unter den MCUs erfolgen. Die Steuerung soll über die Maschinensteuerung erfolgen. Es wird weiterhin eine MATLAB®-GUI (im folgenden MATLAB®-Wartungsapp genannt) geben, diese dient jedoch lediglich für Wartungs- und Versuchszwecke. Die Aufgabe besteht darin, eine robuste und schnelle Kommunikation aufzubauen und diese anschließend auf allen MCUs zu implementieren.&lt;br /&gt;
&lt;br /&gt;
In die Auflistung der miteinander kommunizierenden Steuergeräte ist ein Touch-Display und optional ein Maschinensimulator mit aufzunehmen. Dadurch ergeben sich fünf Platinen, die im ständigen Austausch miteinander stehen: Messwertplatine, SSR-Platine, Basisplatine, Display-Platine und Maschinensimulator.&lt;br /&gt;
&lt;br /&gt;
Zur Fehleranalyse und Erprobung sollen weiterhin alle Messwerte in der Kommunikation enthalten sein, um die MATLAB®-Wartungsapp an die Display-Platine anschließen zu können und mittels Logging alle Daten darauf zu visualisieren. Angelehnt an das 1984 von IBM eingeführte Token Ring Network soll eine „im Kreis laufende“ Kommunikation aufgebaut werden.&lt;br /&gt;
&lt;br /&gt;
== Hardware-Aufbau ==&lt;br /&gt;
Die Verbindungen werden hardwareseitig durch den UART der MCUs hergestellt. Die UART Sendeleitung Tx einer MCU wird mit der Empfangsleitung Rx der nächsten MCU verbunden. Dies wird von Platine zu Platine in der Reihenfolge: Messwertplatine -&amp;gt; Basisplatine -&amp;gt; SSR-Platine -&amp;gt; Display-Platine -&amp;gt; Messwertplatine durchgeführt. Damit ergibt sich ein geschlossener Ring. Optional kann nach der Displayplatine noch der Maschinensimulator eingeschleift werden.&lt;br /&gt;
&lt;br /&gt;
== Messwerte ==&lt;br /&gt;
Es gibt einen definierten Token. Jede Platine erneuert ihren Anteil des Tokens und entnimmt dem Token die benötigten Informationen (Messwerte). Was zuvor die MATLAB®-GUI durchgeführt hat, übernehmen nun die einzelnen Platinen. Dadurch ergibt sich unter den Platinen eine Aufgabenverteilung. Tabelle 1 zeigt eine Auflistung der Daten, die in den Datensatz des Tokens aufgenommen werden sollen. Jede nummerierte Position erhält einen Platz, je nach Bedarf an Größe. Der Token wird als Bytearray ausgeführt.&lt;br /&gt;
&lt;br /&gt;
== Token ==&lt;br /&gt;
=== Anzahl ===&lt;br /&gt;
Die Anzahl der im Kreis laufenden Tokens soll sich auf einen beschränken. Dieser wird erstmalig von der Messwertplatine erzeugt und anschließend „im Kreis“ gesendet, wobei jede MCU nur den für sie relevanten Teil liest bzw. auch umschreibt. Die Abtastrate des ADC (analog digital converter) gibt die Taktrate des Tokens vor. Durch die Wahl der ADC-Abtastrate wird daher die Kommunikationsgeschwindigkeit (Token/s) beeinflusst. Dieser ist der Flaschenhals und es ist eine langsame Steigerung der Taktrate vorzusehen, um mögliche Auswirkungen und Probleme in der Übertragung festzustellen.&lt;br /&gt;
&lt;br /&gt;
=== Struktur ===&lt;br /&gt;
Am Anfang befindet sich ein Startzeichen, um die Art des Tokens (Standard-, Start- oder Paniktoken; siehe unten), festzulegen. Anschließend folgt ein Datensatz und danach eine Prüfsumme. Der Datensatz ist so auszuführen, dass dieser einfach erweitert werden kann, um Erweiterungen zu ermöglichen (z.B. 2. Brühgruppeneinheit). Im Weiteren ist der Token möglichst kurz auszuführen. Der Token soll über eine einheitliche Länge verfügen. Der Token wird als bytearray angelegt und auch so empfangen. (dateneingang = bytearray(readIn(UART))) Datensatz: Jedem Messwert wird ein Bereich von 2 Byte als fester Platz im Token zugewiesen.&lt;br /&gt;
&lt;br /&gt;
=== Prüfsumme ===&lt;br /&gt;
Um die fehlerfreie Übertragung eines Tokens zu bestätigen, wird aus dem Datenblock des Tokens eine Prüfsumme gebildet und diese ans Ende des Tokens angehängt. Das verwendete Verfahren ist CRC-32.&lt;br /&gt;
&lt;br /&gt;
=== Standardtoken ===&lt;br /&gt;
Es ist erkennbar über das Startzeichen am Anfang und wird genutzt für den regelmäßigen Datenaustausch zwischen den MCUs. Starttoken: Es ist erkennbar über das Startzeichen am Anfang. Hierbei wird beim Einschalten der Espressomaschine die Betriebsbereitschaft der gesamten Kommunikation geprüft. Sowohl ob die Hardwareverbindung intakt ist als auch ob alle MCUs empfangen und senden können. Es gilt zu klären, welche MCU dies aussendet.&lt;br /&gt;
&lt;br /&gt;
=== Paniktoken ===&lt;br /&gt;
Es ist erkennbar über das Startzeichen am Anfang. Dies ist die Realisierung eines Not-Halts. Es sollen alle Prozesse augenblicklich gestoppt werden.&lt;br /&gt;
=== Fehlererkennung === &lt;br /&gt;
Wird das Token nicht innerhalb einer definierten Zeitspanne wieder am Empfang einer MCU erkannt, festgelegt über einen timer-Funktion, soll am Display eine Fehlermeldung ausgegeben werden. Erkennt eine Platine einen Fehler (aufgrund Timeout), werden Magnetventile geschlossen (stromlos geschaltet), die Heizungen und die Pumpen werden abgeschaltet, der Wert des Dosierventils Kaltwasser wird gespeichert. Es ist ein Fehlerspeicher im Grundkonzept vorgesehen.&lt;br /&gt;
&lt;br /&gt;
== Token Definition ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Tabelle 1: Tokeninhalt&lt;br /&gt;
|-&lt;br /&gt;
! Platine !! Byte-Nr !! Bits / Bit-Nr. !! Beschreibung !! Wertebereich !! Anmerkung&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|8 Bit&lt;br /&gt;
|Startzeichen&lt;br /&gt;
|&lt;br /&gt;
|0x0A - Standardtoken&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;15&amp;quot; | Messplatine || 1,2 || 16 Bit || Leitwert || 0,2 - 20 S/cm || rowspan=&amp;quot;15&amp;quot; | 16 Bit im Token&lt;br /&gt;
dort wo diese Messwerte verarbeitet werden, werden sie mittels Kennlinie umgerechnet.&lt;br /&gt;
&lt;br /&gt;
Die csv-Datei der Kennlinie befindet sich auf der jeweiligen Platine.&lt;br /&gt;
&lt;br /&gt;
Der Tassenwärmer existiert nur 1x je Machine&lt;br /&gt;
|-&lt;br /&gt;
| 3,4 || 16 Bit || Boilerdruck || 0,5 - 4,5 V / 0 - 4 bar &lt;br /&gt;
|-&lt;br /&gt;
| 5,6 || 16 Bit || Brühgruppendruck (1. BG) || 0,5 - 4,5 / 0 - 12 bar &lt;br /&gt;
|-&lt;br /&gt;
| 7,8 || 16 Bit || Brühgruppendruck (2. BG) || 0,5 - 4,5 / 0 - 12 bar &lt;br /&gt;
|-&lt;br /&gt;
| 9,10 || 16 Bit || Wassereingangstemperatur&lt;br /&gt;
(ersatzweise Leitungsdruck)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 11,12 || 16 Bit || Boiler-NTC (1. BG) || Kennlinie &lt;br /&gt;
|-&lt;br /&gt;
| 13,14 || 16 Bit || Boiler-NTC (2. BG) || Kennlinie &lt;br /&gt;
|-&lt;br /&gt;
| 15,16 || 16 Bit || Tassenwärmer-NTC || Kennlinie &lt;br /&gt;
|-&lt;br /&gt;
| 17,18 || 16 Bit || Mischtemperatur-NTC (1. BG) || Kennlinie &lt;br /&gt;
|-&lt;br /&gt;
| 19,20 || 16 Bit || Mischtemperatur-NTC (2. BG) || Kennlinie &lt;br /&gt;
|-&lt;br /&gt;
| 21,22 || 16 Bit || Brühgruppen-NTC (1. BG) || Kennlinie &lt;br /&gt;
|-&lt;br /&gt;
| 23,24 || 16 Bit || Brühgruppen-NTC (2. BG) || Kennlinie &lt;br /&gt;
|-&lt;br /&gt;
| 25,26 || 16 Bit || Boilerheizung (Soll, 1. BG) || 8 Hz PWM 0 - 100 % &lt;br /&gt;
|-&lt;br /&gt;
| 27,28 || 16 Bit || Boilerheizung (Soll, 2. BG) || 8 Hz PWM 0 - 100 % &lt;br /&gt;
|-&lt;br /&gt;
| 29,20 || 16 Bit || Tassenwärmerheizung (Soll) || 8 Hz PWM 0 - 100 % &lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | SSR-Platine || 31,32 || 16 Bit || Position Schrittmotor Dosierventil 1. BG || 0 - 550 ||&lt;br /&gt;
|-&lt;br /&gt;
| 33,34 || 16 Bit || Position Schrittmotor Dosierventil 2. BG || 0 - 550 ||&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;17&amp;quot; | Basisplatine || 35,36 || 16 Bit || Verstellwert Schrittmotor Dosierventil 1. BG || Integer mit Vorzeichen ||&lt;br /&gt;
|-&lt;br /&gt;
| 37,38 || 16 Bit || Verstellwert Schrittmotor Dosierventil 2. BG || Integer mit Vorzeichen ||&lt;br /&gt;
|-&lt;br /&gt;
|39,40&lt;br /&gt;
|16 Bit&lt;br /&gt;
|Pumpensollwert 1. BG&lt;br /&gt;
|0 - 4096&lt;br /&gt;
|entspricht 0 - 5000 mV bzw. 0 - 5000 U/min&lt;br /&gt;
|-&lt;br /&gt;
|41,42&lt;br /&gt;
|16 Bit&lt;br /&gt;
|Pumpensollwert 2. BG&lt;br /&gt;
|0 - 4096&lt;br /&gt;
|entspricht 0 - 5000 mV bzw. 0 - 5000 U/min&lt;br /&gt;
|-&lt;br /&gt;
|43&lt;br /&gt;
|8 Bit&lt;br /&gt;
|Durchflussrate 1. BG&lt;br /&gt;
|0 - 25 ml/s&lt;br /&gt;
|Integerwert in 1/10 ml/s, damit Wertebereich 0 - 250&lt;br /&gt;
|-&lt;br /&gt;
|44,45&lt;br /&gt;
|16 Bit&lt;br /&gt;
|Durchflusscounts 1. BG&lt;br /&gt;
|0 - 65535&lt;br /&gt;
|je Count 1/39,9 ml, Überlauf muss unterbunden werden&lt;br /&gt;
|-&lt;br /&gt;
|46&lt;br /&gt;
|8 Bit&lt;br /&gt;
|Durchflussrate 2. BG&lt;br /&gt;
|0 - 25 ml/s&lt;br /&gt;
|Integerwert in 1/10 ml/s, damit Wertebereich 0 - 250&lt;br /&gt;
|-&lt;br /&gt;
|47,48&lt;br /&gt;
|16 Bit&lt;br /&gt;
|Durchflusscounts 2. BG&lt;br /&gt;
|0 - 65535&lt;br /&gt;
|je Count 1/39,9 ml, Überlauf muss unterbunden werden&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;9&amp;quot; |49&lt;br /&gt;
|&lt;br /&gt;
|Füllstandsbyte&lt;br /&gt;
|&lt;br /&gt;
| rowspan=&amp;quot;9&amp;quot; |Füllstände werden von den Füllstandsreglern auf der Basisplatine verarbeitet&lt;br /&gt;
Füllstand Abtropfschale True verhindert Pumpenansteuerung&lt;br /&gt;
Füllstand Boiler False verhindert Pumpenansteuerung&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Füllstand Boiler 1. BG || 0/1 &lt;br /&gt;
|-&lt;br /&gt;
| 1 || Füllstand Boiler 2. BG || 0/1 &lt;br /&gt;
|-&lt;br /&gt;
| 2 || Füllstand Tank Minimum || 0/1 &lt;br /&gt;
|-&lt;br /&gt;
| 3 || Füllstand Tank Maximum || 0/1 &lt;br /&gt;
|-&lt;br /&gt;
| 4 || Füllstand Abtropfschale || 0/1 &lt;br /&gt;
|-&lt;br /&gt;
| 5 || || 0/1 &lt;br /&gt;
|-&lt;br /&gt;
| 6 || || 0/1 &lt;br /&gt;
|-&lt;br /&gt;
| 7 || || 0/1 &lt;br /&gt;
|-&lt;br /&gt;
| || rowspan=&amp;quot;9&amp;quot; | 50 || || Magnetventile Byte 1 || || rowspan=&amp;quot;9&amp;quot; | Magnetventile Y101 bis Y113 gehören zur 1. BG&lt;br /&gt;
Y113 ist der Dampfhahn&lt;br /&gt;
Y214 bis Y222 gehören zur 2. BG &lt;br /&gt;
|-&lt;br /&gt;
| || 0 || Y101 || 0/1 &lt;br /&gt;
|-&lt;br /&gt;
| || 1 || Y102 || 0/1 &lt;br /&gt;
|-&lt;br /&gt;
| || 2 || Y103 || 0/1 &lt;br /&gt;
|-&lt;br /&gt;
| || 3 || Y104 || 0/1 &lt;br /&gt;
|-&lt;br /&gt;
| || 4 || Y105 || 0/1 &lt;br /&gt;
|-&lt;br /&gt;
| || 5 || Y106 || 0/1 &lt;br /&gt;
|-&lt;br /&gt;
| || 6 || Y107 || 0/1 &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|7&lt;br /&gt;
|Y108&lt;br /&gt;
|0/1&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| rowspan=&amp;quot;9&amp;quot; |51&lt;br /&gt;
|&lt;br /&gt;
|Magnetventil Byte 2&lt;br /&gt;
|&lt;br /&gt;
| rowspan=&amp;quot;9&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|Y109&lt;br /&gt;
|0/1&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|Y110&lt;br /&gt;
|0/1&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|2&lt;br /&gt;
|Y111&lt;br /&gt;
|0/1&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|3&lt;br /&gt;
|Y112&lt;br /&gt;
|0/1&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|4&lt;br /&gt;
|Y113&lt;br /&gt;
|0/1&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|5&lt;br /&gt;
|Y214&lt;br /&gt;
|0/1&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|6&lt;br /&gt;
|Y215&lt;br /&gt;
|0/1&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|7&lt;br /&gt;
|Y216&lt;br /&gt;
|0/1&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| rowspan=&amp;quot;9&amp;quot; |52&lt;br /&gt;
|&lt;br /&gt;
|Magnetventil Byte 3&lt;br /&gt;
|&lt;br /&gt;
| rowspan=&amp;quot;9&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|Y217&lt;br /&gt;
|0/1&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|Y218&lt;br /&gt;
|0/1&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|2&lt;br /&gt;
|Y219&lt;br /&gt;
|0/1&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|3&lt;br /&gt;
|Y220&lt;br /&gt;
|0/1&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|4&lt;br /&gt;
|Y221&lt;br /&gt;
|0/1&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|5&lt;br /&gt;
|Y222&lt;br /&gt;
|0/1&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|6&lt;br /&gt;
|&lt;br /&gt;
|0/1&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|7&lt;br /&gt;
|&lt;br /&gt;
|0/1&lt;br /&gt;
|-&lt;br /&gt;
|Displayplatine&lt;br /&gt;
|53,54&lt;br /&gt;
|16&lt;br /&gt;
|Bezugswassertemperatur 1. BG&lt;br /&gt;
|30  - 98 °C&lt;br /&gt;
|Integerwert in 1/10 °C, damit Wertebereich 300 bis 980&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|55,56&lt;br /&gt;
|16&lt;br /&gt;
|Bezugswassertemperatur 2. BG&lt;br /&gt;
|30  - 98 °C&lt;br /&gt;
|Integerwert in 1/10 °C, damit Wertebereich 300 bis 980&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|57,58&lt;br /&gt;
|16&lt;br /&gt;
|Bezugsmenge 1. BG&lt;br /&gt;
|20 - 300 g bzw. ml&lt;br /&gt;
|Integerwert in 1/10 ml, damit Wertebereich 200 bis 3000&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|59,60&lt;br /&gt;
|16&lt;br /&gt;
|Bezugsmenge 2. BG&lt;br /&gt;
|20 - 300 g bzw. ml&lt;br /&gt;
|Integerwert in 1/10 ml, damit Wertebereich 200 bis 3000&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|61,62&lt;br /&gt;
|16&lt;br /&gt;
|Bezugszeit 1. BG&lt;br /&gt;
|0 - 120 Sekunden&lt;br /&gt;
|Integerwert in 1/10 Sekunde, damit Wertebereich 0 bis 1200&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|63,64&lt;br /&gt;
|16&lt;br /&gt;
|Bezugszeit 2. BG&lt;br /&gt;
|0 - 120 Sekunden&lt;br /&gt;
|Integerwert in 1/10 Sekunde, damit Wertebereich 0 bis 1200&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|65,66&lt;br /&gt;
|16&lt;br /&gt;
|Preinfusionszeit 1. BG&lt;br /&gt;
|0 - 120 Sekunden&lt;br /&gt;
|Integerwert in 1/10 Sekunde, damit Wertebereich 0 bis 1200&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|67,68&lt;br /&gt;
|16&lt;br /&gt;
|Preinfusionszeit 2. BG&lt;br /&gt;
|0 - 120 Sekunden&lt;br /&gt;
|Integerwert in 1/10 Sekunde, damit Wertebereich 0 bis 1200&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|69&lt;br /&gt;
|8&lt;br /&gt;
|Abschalttemperatur Entschichtung&lt;br /&gt;
|90 - 98 °C&lt;br /&gt;
|Integerwert in °C&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|70&lt;br /&gt;
|8&lt;br /&gt;
|Grenztemperatur&lt;br /&gt;
|135 - 150 °C&lt;br /&gt;
|Integerwert in °C&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|71&lt;br /&gt;
|8&lt;br /&gt;
|Sollwert Boilerdruck&lt;br /&gt;
|1100 - 1500 mbar&lt;br /&gt;
|Integerwert in 10 mbar, damit Wertebereich 110 bis 150&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|72&lt;br /&gt;
|8&lt;br /&gt;
|Stellung Vertikalhebel&lt;br /&gt;
|0 - 180 Grad&lt;br /&gt;
|Integerwert&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| rowspan=&amp;quot;9&amp;quot; |73&lt;br /&gt;
|&lt;br /&gt;
|Maschinenstatus Byte 1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|Mischerstatus 1. BG&lt;br /&gt;
|0/1&lt;br /&gt;
|True = Mischtemperatur erreicht&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|Mischerstatus 2. BG&lt;br /&gt;
|0/1&lt;br /&gt;
|True = Mischtemperatur erreicht&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|2&lt;br /&gt;
|Entschichtung&lt;br /&gt;
|0/1&lt;br /&gt;
|True = Entschichtung aktiv&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|3&lt;br /&gt;
|Handhebelmodus&lt;br /&gt;
|0/1&lt;br /&gt;
|True = aktiv&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|4&lt;br /&gt;
|Rezepteingabe&lt;br /&gt;
|0/1&lt;br /&gt;
|True = aktiv&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|5&lt;br /&gt;
|Wartungsmodus&lt;br /&gt;
|0/1&lt;br /&gt;
|True = aktiv&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|6&lt;br /&gt;
|Schrittmotor Dosierventil Flag&lt;br /&gt;
|0/1&lt;br /&gt;
|True = Schrittmotor für Dosierventil Kaltwasser hat ursprüngliche Position erreicht (Teil der Initialisierung)&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|7&lt;br /&gt;
|&lt;br /&gt;
|0/1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| rowspan=&amp;quot;9&amp;quot; |74&lt;br /&gt;
|&lt;br /&gt;
|Maschinenstatus Byte 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|Kaffeebezug 1. BG&lt;br /&gt;
|0/1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|Kaffeebezug 1. BG&lt;br /&gt;
|0/1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|2&lt;br /&gt;
|Teewasserbezug&lt;br /&gt;
|0/1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|3&lt;br /&gt;
|Dampfbezug&lt;br /&gt;
|0/1&lt;br /&gt;
|Bewirkt 200 mbar Reduzierung Sollwert Boilerdruck&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|4&lt;br /&gt;
|Boilerbefüllung (Befüllungsflag)&lt;br /&gt;
|0/1&lt;br /&gt;
|True = Boilerbefüllung aktiv&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|5&lt;br /&gt;
|Aufheizen&lt;br /&gt;
|0/1&lt;br /&gt;
|True = Aufheizphase, False = Betriebsbereit&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|6&lt;br /&gt;
|Systemstart&lt;br /&gt;
|0/1&lt;br /&gt;
|True = Systemstart&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|7&lt;br /&gt;
|Sicherheitsfunktion&lt;br /&gt;
|0/1&lt;br /&gt;
|True = Sicherheitsfunktion aktiv&lt;br /&gt;
|}&lt;br /&gt;
= Peter Vogginger,19.10.2025 - NUCLEO_H743ZI2 =&lt;br /&gt;
Kommunikation als Token-Ring oder in Stern-Topologie &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der Wechsel der Kommunikation von dem geplanten Token-Ring-Verfahren, hin zur Stern-Topologie erfordert 3 serielle Schnittstellen. Dies ist mit der aktuellen Konstellation, 4 MCUs (Basisplatine, SSR-Platine, Messplatine und Displayplatine) mit jeweils einem Raspberry Pi Pico RP2040, nicht möglich. An einem RP2040 stehen 2 serielle Schnittstellen zur Verfügung. &lt;br /&gt;
&lt;br /&gt;
Der Wechsel hin zu einem größeren Board, dem NUCLEO-H743ZI2 MCU-Board mit einer STM32H7 MCU. Der Wechsel würde Vorteile bieten:  &lt;br /&gt;
* weniger Elektronik in der Peripherie &lt;br /&gt;
* ADCs ausreichend am Board &lt;br /&gt;
* DACs ausreichend am Board &lt;br /&gt;
* 8 serielle Schnittstellen &lt;br /&gt;
* viel mehr nutzbare PINs &lt;br /&gt;
&lt;br /&gt;
Die Vielzahl an Anschlüssen bietet die Möglichkeit, von aktuell 3 Platinen (und 3 MCUs) auf 1 Platine mit einem MCU-Board zu reduzieren. &lt;br /&gt;
&lt;br /&gt;
Allerdings bietet diese Umstellung nicht nur Vorteile.  &lt;br /&gt;
&lt;br /&gt;
Nachteilig wäre, dass bei jedem MicroPython Update ein eigenes Derivat erstellt werden müsste, da default die ADC auf 12-Bit Auflösung in MicroPython definiert sind. Aktuell existiert ein Derivat mit 16-Bit ADC Konfiguration (NUCLEO_H743ZI2_v1-27-0_ADC_16BIT.hex), dies basiert auf der MicroPython Version v1-27-0. &lt;br /&gt;
&lt;br /&gt;
Allerdings ist die Verfügbarkeit von NUCLEO-Boards immer zeitweise nicht gegeben. Diesbezüglich wäre ein Platinenlayout inkl. den Bauelementen für MCU und der direkten Peripherie erforderlich. Was aber erst nach der Inbetriebnahme der beiden Prototypen-Maschinen sinnvoll erscheint. Die Kosten dieser externen Entwicklung werden auf 50 t€ bis 100 t€ geschätzt. &lt;br /&gt;
&lt;br /&gt;
Aufgrund der aktuellen Situation wird bis auf Weiteres die Verwendung von Raspberry Pi Pico verfolgt.&lt;br /&gt;
&lt;br /&gt;
= Armin Rohnen, 16.10.2025 =&lt;br /&gt;
Im Zuge der Analyse für die zweite Auflage von MATLAB® meets MicroPython ist das Thema der UART-Kommunikation tiefer betrachtet worden. &lt;br /&gt;
&lt;br /&gt;
Die Kommunikation ist mit Sorgfalt zu programmieren. Durch Lesen und Schreiben auf die UART-Schnittstelle kann die MCU blockiert und dauerhaft an der Ausführung anderer Programmteile gehindert werden. Die Problematik ist in Abschnitt 3.13 der 2. Auflage MATLAB® meets MicroPython beschrieben.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Armin Rohnen, 11.04.2024 =&lt;br /&gt;
[[Datei:20250322 Konzept.png|thumb|900px|gerahmt|zentriert|alternativtext=Armin Rohnen, Kommunikationskonzept mit Token|Armin Rohnen, Kommunikationskonzept mit Token]]&lt;br /&gt;
Seitens des Platinenlayouts für die Steuerungselektronik wurden die jeweiligen PINs der ersten UARTSchnittstelle für die spätere Inter-Kommunikation der Steuerung herausgelegt. Die Raspberry Pi Pico MCU verfügt über einen jeweils 32 Byte großen Eingangs- bzw. Ausgangspuffer für die UART-Schnittstelle. Dieser soll genutzt werden um die Kommunikation zu ermöglichen. Die jeweilige Kommunikation selbst wird dadurch auf diese 32 Byte begrenzt. Hardwareseitig ist es Denkbar, dass je MCU zwei weitere PINs für die Kommunikation verwendet werden. Lediglich auf der SSR-Platine ist dazu ein Eingriff ins Platinenlayout erforderlich. Dieser kann bei einem Prototypen handwerklich durchgeführt werden. Die zwei zusätzlichen PINs für die Kommunikation (GP04, GP05 auf der Basisplatine, GP03, GP04 auf der SSR-Platine, GP06, GP07 auf der Messplatine) fungieren als eingehender und ausgehender Interrupt, so dass die Kommunikation als ISR programmiert werden kann.&lt;br /&gt;
&lt;br /&gt;
Angelehnt an das 1984 von IBM eingeführte Token Ring Network soll eine „im Kreis laufende“ Kommunikation aufgebaut werden. Ausgehend von der Messplatine wird ein Token über die einzelnen Platinen durchgereicht (Abbildung). Unter Berücksichtigung der Kommunikationsregeln können so eine beliebige Anzahl an Steuerungsplatinen in den Kommunikationsring eingebunden werden. Allerdings sollte dabei die Reihenfolge beachtet werden.&lt;br /&gt;
&lt;br /&gt;
Die Messplatine sendet über UART am Ende jedes gültigen Messwertsatzes einen oder mehrere Token an die Basisplatine. In den Token befinden sich die aktuellen Messwerte und alle anderen „im Kreis laufende“ Daten. Beim ersten Senden werden hier u.u. 0-Werte verwendet, bis dass der erste Token wieder bei der Messplatine angekommen ist. Ggf. unterbricht die Messplatine auch das Senden des Token bzw. der ersten Token-Serie, bis zum ersten Eintreffen eines Tokens. Die Messplatine ist damit der Taktgeber der Kommunikation. Konkret erfolgt dies in Abhängigkeit der Abtastrate des AD-Wandlers.Wenn ein Token versendet ist, wechselt die Messplatine den Logikzustand des ausgehenden Interrupt-PINs. Bevor der nächste Token versendet wird, wird wieder der Ausgangslogikzustand des Interrupt-PINs hergestellt. Sobald die Messplatine auch einen Token empfangen hat wird auch der PWM-Stellwert für das Boilerheizelement (aus Regler Boilerdruck) und für den Tassenwärmer im Token übermittelt.&lt;br /&gt;
&lt;br /&gt;
Von der Messplatine erhält die Basisplatine den Token. Die UART-Schnittstelle wird ausgelesen, wenn am eingehenden Interrupt-PIN der Logikzustand wechselt. Die Basisplatine tauscht im Token die Daten für die eigenen Messwerte, die Schaltzustände der Tasten, die Schaltzustände der Magnetventile usw. aus und sendet den Token an die SSR-Platine weiter. Ist der Token versendet, wechselt die Basisplatine den Logikzustand des ausgehenden Interrupt-PINs und arbeitet in gleicher Logik weiter wie die Messplatine.&lt;br /&gt;
&lt;br /&gt;
Die SSR-Platine bekommt von der Basisplatine den Token durchgereicht. Die SSR-Platine wertet den Token lediglich aus, nimmt keine Veränderungen darin vor und reicht diesen dann weiter. Nach der SSR-Platine kann eine Display-Platine nachgeschaltet werden. Diese wertet die Informationen im Token aus und visualisiert diese bzw. stellt die Informationen über WLAN zur Verfügung. Im Falle eines Touch-Displays werden die Bytes für die Schaltzustände der Tasten ausgetauscht. Abschließend erhält die Messplatine wieder den Token und übernimmt die relevanten Informationen daraus in den neu zu sendenden Token.&lt;br /&gt;
&lt;br /&gt;
Anstelle des eingehenden und ausgehenden Interrupt-PINs kann u.u. auch die MicroPython-Funktionalität uart.irq verwendet werden. Diese ruft eine ISR auf, sobald Daten im EIngangspuffer der UART-Schnittstelle eingegangen sind.&lt;br /&gt;
&lt;br /&gt;
Das Konzept ist auszugestalten und der bzw. die Token sind exakt zu definieren. Dabei ist auch zu definieren (und zu erproben) wie die dann übergeordnete MATLAB®-GUI die Daten für die Visualisierung erhält. Der einzelne Token darf aufgrund der Limitierung durch den UART-Puffer des Raspberry Pi Picos 32 Byte nicht überschreiten. Als maximale Datenrate sind 115200 Baud möglich, was unter Berücksichtigung von START / STOP-Bits und Paritätsbit eine maximale Kommunikationsrate von 11520 Byte je Sekunde ergibt. Damit wären 360 jeweils 32 Byte lange Token in der Kommunikation möglich. Nach aktuellem Stand der Recherchen überschreitet die Datenmenge für die Kommunikation die 32 Byte Grenze, so dass mit mehreren Token gearbeitet werden muss. Jeder Token weist im ersten Byte eine Token-Nr auf, so dass der Token zweifelsfrei identifiziert werden kann. Alle Token müssen die gleiche Länge in Bytes aufweisen. Für zukünftige Erweiterungen sind Leer-Bytes in den Token vorhanden. Jeder der 4 Token muss die gleiche Länge in Bytes aufweisen.&lt;br /&gt;
&lt;br /&gt;
Getaktet wird die Kommunikation durch die Datenerfassung der Messplatine. Aufgrund der jeweils ungültigen ersten Wandlung eines Messkanals ist eine maximale Abtastrate von 430 Messwerten je Sekunde aufgeteilt auf acht Messkanäle, was ca. 53 Datensätze je Sekunde ergibt. Bei einer Abtastrate von 475 SPS ergeben sich 30 gültige Messdatensätze je Sekunde.Wird nach jedem zweiten gültigen Messkanal ein 27 Byte langer Token von der Messplatine gesendet, dann ergibt dies eine Inter-Kommunikation zwischen den MCUs von 120 Token bzw. 3240 Byte je Sekunde, was unter der als Maximum angesehenen Datenrate liegt. Selbst bei einer Verlängerung der Token auf 32 Byte würde lediglich 1/3 des theoretisch möglichen Datentransfers durchgeführt.&lt;/div&gt;</summary>
		<author><name>Peter Vogginger</name></author>
	</entry>
	<entry>
		<id>http://www.institut-fuer-kaffeetechnologie.de/Wiki/index.php?title=Datei:20260213_Flussdiagramm_Setter_Getter_2.png&amp;diff=4830</id>
		<title>Datei:20260213 Flussdiagramm Setter Getter 2.png</title>
		<link rel="alternate" type="text/html" href="http://www.institut-fuer-kaffeetechnologie.de/Wiki/index.php?title=Datei:20260213_Flussdiagramm_Setter_Getter_2.png&amp;diff=4830"/>
		<updated>2026-02-13T18:28:33Z</updated>

		<summary type="html">&lt;p&gt;Peter Vogginger: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Peter Vogginger</name></author>
	</entry>
	<entry>
		<id>http://www.institut-fuer-kaffeetechnologie.de/Wiki/index.php?title=Mehrkernnutzung_und/oder_Multitasking&amp;diff=4829</id>
		<title>Mehrkernnutzung und/oder Multitasking</title>
		<link rel="alternate" type="text/html" href="http://www.institut-fuer-kaffeetechnologie.de/Wiki/index.php?title=Mehrkernnutzung_und/oder_Multitasking&amp;diff=4829"/>
		<updated>2026-02-13T16:29:52Z</updated>

		<summary type="html">&lt;p&gt;Peter Vogginger: /* Peter Vogginger, 15.01.2025Versuch der Mehrkernnutzung */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Peter Vogginger, 15.01.2025&amp;lt;br&amp;gt;Versuch der Mehrkernnutzung =&lt;br /&gt;
Die Mehrkernnutzung wird versuchshalber mit einem zusätzlichen Schrittmotor und der bereits programmierten UART-Kommunikation getestet. Die Schrittmotorsteuerung wird auf den Hauptkern (Core 0) und die Kommunikation auf den 2. Kern (Core 1) verlagert. Diese Aufteilung wird gewählt, da es vermutlich zu einem besserem Motorlauf führt. Dies wird im weiteren Verlauf auch versucht, zu bestätigen.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Versuchsaufbau besteht aus zwei RP2040-Platinen, dem Schrittmotor, sowie dessen Ansteuerung/ Stromversorgung (realisiert auf einer zusätzlichen Platine). Die RP2040-Platinen sind miteinander verkabelt (siehe hierzu Seite [[Kommunikation_per_UART]]). Die Platine mit der Schrittmotorsteuerung ist als Relais in dem Kommunikationsring ausgeführt. Die zweite RP2040 beinhaltet den Code für den ersten Token (Messwert-Platine) und startet die Kommunikation.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Versuchsdurchführung sieht vor, dass der Schrittmotor permanent drehen soll und bei Beginn der Kommunikation die Drehbewegung des Motors beobachtet wird. Der Programmcode des Motors wurde in Teilen aus einer früheren Projektarbeit entnommen, sowie aus dem &lt;br /&gt;
offiziellen MicroPython-Wiki (siehe: https://docs.micropython.org/en/latest/library/rp2.html). Die Kommunikation über UART wird als reines Relais ausgeführt, das heißt der eingehende Token wird kontrolliert und weitergesendet. Dies wurde bereits erfolgreich angewendet. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Läuft sowohl die Kommunikation, ersichtlich über das Ausgabefenster in THONNY, und dreht der Motor ebenso, ist die Mehrkernnutzung erfolgreich getestet. Im weiteren Verlauf wird das Drehverhalten der Motorwelle mit und ohne parallele Kommunikation beurteilt und verfeinert.&lt;br /&gt;
Im ersten Versuch zeigt sich, dass sich die Welle des Motors ohne Mehrkernnutzung nahezu ruckfrei dreht, allerdings in paralleler Ausführung sich ein starkes Rucken einstellt. Um dies zu reduzieren, wird die Motor-Ansteuerung auf die spezialisierte Hardware-Einheit PIO des RP2040 verlegt. Sie ermöglicht es, Ein- und Ausgabesignale sehr präzise und unabhängig von der CPU zu steuern, indem eigene kleine Programme (ASM-Code) direkt in der PIO-Hardware ausgeführt werden. Diese ist fest auf dem RP2040 integriert, es wird nur der Programmcode der Schrittmotorsteuerung angepasst.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Daraufhin zeigt sich, dass sich mit dieser Art der Motorsteuerung ein weniger ruckeliges Verhalten während der parallel ablaufenden Kommunikation einstellt. Allerdings ist die Drehung der Motorwelle, ohne die Verwendung der Mehrkernnutzung, weniger flüssig. Dies ist hier allerdings nicht entscheidend.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ebenso zeigt sich, dass die Verlagerung der Kommunikation auf den Nebenkern nicht zu dem oben erwähnten besseren Motorlauf führt. Ganz im Gegenteil, eine Verlagerung der Motorsteuerung auf den Nebenkern (Core1), wobei zugleich die Kommunikation auf dem Hauptkern (Core0) ausgeführt wird, erweist sich als deutlich besser im Hinblick auf den sofortigen Kommunikationsaufbau, und die Motorbewegung ist weniger ruckelig.&amp;lt;br&amp;gt;&lt;br /&gt;
Link zum bisherigen Programmcode: [[Datei:20260108_Test_Dualcorenutzung.zip]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im weiteren Verlauf wird die Positionierung der Schrittmotorwelle mittels Datenwert im Token &lt;br /&gt;
übermittelt und dessen korrekte Anfahrung getestet. Der Schrittmotor hat hierzu die Position 0.  &lt;br /&gt;
&lt;br /&gt;
Die Ausarbeitung des Programmcodes ist aufwendig und wird im Folgenden anhand der drei &lt;br /&gt;
Ablaufdiagramme (Abb..) vorgestellt.  &lt;br /&gt;
[[Datei:20260210 Ablaufdiagramm Schrittmotorsteuerung ssr Teil1.png|thumb|300px|gerahmt|zentriert|alternativtext=Ablaufdiagramm der Funktion schrittmotor_steuerung, (c) Peter Vogginger|Ablaufdiagramm der Funktion schrittmotor_steuerung, (c) Peter Vogginger]]&lt;br /&gt;
&lt;br /&gt;
[[Datei:20260210 Ablaufdiagramm Schrittmotorsteuerung ssr Teil2.png|thumb|899px|gerahmt|zentriert|alternativtext=Ablaufdiagramme der Funktionn set_target_steps und motor_run, (c) Peter Vogginger|Ablaufdiagramme der Funktionen set_target_steps und motor_run, (c) Peter Vogginger]]&lt;br /&gt;
&lt;br /&gt;
=== schrittmotor_steuerung === &lt;br /&gt;
Die Funktion schrittmotor_steuerung ist Teil der main.py der SSR-Platine und wird bei jedem Aufruf der lokalen Funktion on_receive_ssr ausgeführt. Somit wird sie bei jedem Eintreffen eines neuen Tokens über die UART-Schnittstelle aufgerufen (http://www.institut-fuer-kaffeetechnologie.de/Wiki/index.php?title=Kommunikation_per_UART). &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Aufgaben dieser Funktion sind:   &amp;lt;br&amp;gt;&lt;br /&gt;
:• das Auslesen der Zielposition der Motorwelle aus dem Token,  &amp;lt;br&amp;gt;&lt;br /&gt;
:• das Schreiben der aktuellen Istposition des Motors in den Token,  &amp;lt;br&amp;gt;&lt;br /&gt;
:• sowie der Aufruf der Funktion set_target_steps, sofern erforderlich. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Schrittanzahl wird in Halbschritten angegeben und aus dem Token mithilfe eines Getters &lt;br /&gt;
ausgelesen. Hierbei ist zu beachten, dass es sich um einen Integerwert mit Vorzeichen handelt &lt;br /&gt;
und somit der Setter entsprechend set_signed_bytes() heißt  (http://www.institut-fuer-kaffeetechnologie.de/Wiki/index.php?title=Kommunikation_per_UART Setter und Getter für Bits und Bytes). &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Istposition ist die absolute Schrittanzahl vom Zustand 0 (beim Dosierventil ist das der &lt;br /&gt;
Zustand „geschlossen“). Die Istposition wird bei jedem Tokenempfang mithilfe eines Setters in &lt;br /&gt;
den Token geschrieben und somit fortlaufend aktualisiert. Der Wertebereich des Dosierventils &lt;br /&gt;
ist 0…550. Somit wird der Setter set_bytes() verwendet, da keine negativen Werte vorkommen &lt;br /&gt;
können. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zusätzlich überprüft die Funktion, ob der Motor im Moment dreht. Hierzu dient das Flag &lt;br /&gt;
motor_dreht. Dieses Flag wird in den Funktionen set_target_steps und motor_run gesetzt bzw. &lt;br /&gt;
zurückgesetzt. Dreht der Motor aktuell, wird kein neuer Positionierbefehl ausgelöst, um den &lt;br /&gt;
Bewegungsablauf nicht zu stören. Nur wenn der Motor steht und die Zielposition von der &lt;br /&gt;
Istposition abweicht, wird die Funktion set_target_steps erneut aufgerufen. &lt;br /&gt;
&lt;br /&gt;
=== set_target_steps ===&lt;br /&gt;
Die Funktion set_target_steps ist Teil der Klasse MOTORSTEUERUNG in der Datei &lt;br /&gt;
motorsteuerung.py auf der SSR-Platine. Die Aufgaben dieser Funktion sind: &amp;lt;br&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
:• der Vergleich der vorgegebenen Schrittanzahl mit der Minimal- und der Maximalposition &amp;lt;br&amp;gt;&lt;br /&gt;
:• die Festlegung der Drehrichtung des Motors, sowie &amp;lt;br&amp;gt;&lt;br /&gt;
:• das Setzen und Zurücksetzen des Status-Flags motor_dreht. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im ersten Schritt wird überprüft, ob die vorgegebene Schrittanzahl target_steps kleiner als die &lt;br /&gt;
minimal mögliche Position (0) ist. Falls dies zutrifft, wird die Schrittanzahl auf die &lt;br /&gt;
Minimalposition 0 gesetzt. Anschließend wird geprüft, ob die Schrittanzahl größer als die &lt;br /&gt;
Maximalposition des Dosierventils (550) ist. Ist dies der Fall, wird die Schrittanzahl auf die &lt;br /&gt;
Maximalposition gesetzt. Die Zielposition ist nun die Schrittanzahl. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Darauffolgend wird die Zielposition mit der aktuellen Istposition verglichen, um die Drehrichtung &lt;br /&gt;
des Motors festzulegen. Ist die Zielposition größer als die Istposition, wird der Motor in positiver &lt;br /&gt;
Drehrichtung (= rechtsdrehend bzw. schließend) betreiben, ist sie kleiner, erfolgt die Bewegung &lt;br /&gt;
in negativer Drehrichtung (= linksdrehend bzw. öffnend &amp;lt;br&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Abschließend wird das Flag motor_dreht gesetzt. Dieses dient dazu, dass während einer &lt;br /&gt;
laufenden Motorbewegung die Funktion set_target_steps nicht erneut aufgerufen wird. Dadurch &lt;br /&gt;
wird eine Störung der Motorbewegung und des Ablaufs verhindert. Die Funktion &lt;br /&gt;
motor_steuerung wird weiterhin bei jedem Eintreffen eines neuen Tokens aufgerufen.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== motor_run === &lt;br /&gt;
Die Funktion motor_run ist Teil der Klasse MOTORSTEUERUNG in der Datei motorsteuerung.py &lt;br /&gt;
auf der SSR-Platine.  &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Aufgabe dieser Funktion ist die kontinuierliche Ansteuerung des Schrittmotors auf dem &lt;br /&gt;
zweiten Prozessorkern (Core 1).&amp;lt;br&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Die Funktion wird mit dem Aufruf _thread.start_new_thread(motor.motor_run,()) gestartet und &lt;br /&gt;
läuft über eine Endlosschleife während der gesamten Einschaltdauer der Platine. Diese Struktur &lt;br /&gt;
ist notwendig, um die Mehrkernnutzung des RP2040 zu realisieren und eine gleichzeitige &lt;br /&gt;
Motorbewegung sicherzustellen. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zu Beginn wird der Index idx der Schrittsequenz auf null gesetzt. Dieser dient als Laufvariable zur &lt;br /&gt;
Auswahl des aktuellen Spulenzustandes. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anschließend wird innerhalb einer Schleife permanent überprüft, ob das Flag motor_dreht &lt;br /&gt;
gesetzt ist. Dieses Flag wird in der Funktion set_target_steps aktiviert, sobald eine neue &lt;br /&gt;
Zielposition angefordert wurde.  &lt;br /&gt;
Ist das Flag gesetzt, wird ein vorgegebenes Schrittmuster ausgegeben. Das Schrittmuster ist &lt;br /&gt;
motorabhängig und besteht bei dem verwendeten bipolaren zweiphasigen Schrittmotor aus &lt;br /&gt;
acht verschiedenen Spulenzuständen:  STEP_SEQ = (0b0100, 0b0101, 0b0001, 0b1001, 0b1000, &lt;br /&gt;
0b1010, 0b0010, 0b0110). Die Gesamtheit der Einträge ist die Schrittfrequenz. Hierbei handelt &lt;br /&gt;
es sich um die Halbschritt-Sequenz, welche für das Dosierventil vorgesehen ist. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Ausgabe des aktuellen Spulenzustands erfolgt über den Aufruf self.sm.put(self.STEP_SEQ[idx]). Jeder Eintrag der Schrittfrequenz entspricht genau einem &lt;br /&gt;
Halbschritt. &amp;lt;br&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Der Schrittindex wird anschließend durch den Aufruf idx = (idx + self.drehrichtung) % 8 &lt;br /&gt;
aktualisiert. Abhängig von der Drehrichtung ergibt sich dabei folgender Zusammenhang: &lt;br /&gt;
 &lt;br /&gt;
:• Ist die Drehrichtung +1, lautet die Abfolge 0 → 1 → 2 → 3 → 4 → 5 → 6 → 7 → 0 → … &amp;lt;br&amp;gt;&lt;br /&gt;
:• ist die Drehrichtung -1, lautet die Abfolge 0 → 7 → 6 → 5 → 4 → 3 → 2 → 1 → 0 → … &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Durch den Modulo-Operator wird sichergestellt, dass der Index stets im gültigen Bereich der &lt;br /&gt;
Schrittfrequenz bleibt. Bei jedem Schleifendurchlauf wird die Variable idx genau einmal &lt;br /&gt;
verändert, somit entspricht jeder Schleifendurchlauf exakt einem Motor-Halbschritt.&amp;lt;br&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Die aktuelle Position wird anschließend mit self.aktuelle_position += self.drehrichtung &lt;br /&gt;
aktualisiert.  &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ob die Zielposition erreicht wurde, wird durch den Vergleich self.aktuelle_position == &lt;br /&gt;
self.ziel_position überprüft. Ist dies der Fall, wird das Flag motor_dreht auf False gesetzt, &lt;br /&gt;
wodurch die Motorbewegung beendet wird. Die Schleife läuft weiterhin. &amp;lt;br&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Der Zugriff auf das Flag motor_dreht wird in der Funktion motor_run benötigt, da es die &lt;br /&gt;
Motorverstellung aus der Bewegung heraus stoppt. In der Funktion set_target_steps wird &lt;br /&gt;
dagegen entschieden, ob der Motor überhaupt drehen soll und das Flag wird entspechend &lt;br /&gt;
gesetzt.&lt;br /&gt;
&lt;br /&gt;
= Armin Rohnen, 11.04.2024 =&lt;br /&gt;
Grundsätzlich verfügt der ARM-Prozessor der Raspberry Pi Pcio MCU RP2040 über zwei Kerne, die im Gegensatz zu anderen MCUs gleichwertig sein sollen. Die Quellenlage hierzu lässt jedoch eine eindeutige Beurteilung dieser Annahme nicht zu. Eine ggf. verbessernde Quellenlage könnte hierzu neue Ansätze liefern. Für die Verlagerung der Regelkreise auf die MCUs ist zuvor eine Festlegung zu treffen in welcher Form eine Mehrkernnutzung und/oder ein Multitasking implementiert wird.&lt;br /&gt;
&lt;br /&gt;
Damit ist ein Framework für die Systemsteuerung zu definieren. Hierzu sind in der Linksammlung [119] unter Scheduling, Threading und Frameworks einige Libraries aufgelistet. &lt;br /&gt;
&lt;br /&gt;
MicroPython stellt hierzu die Module uasyncio und _thread zur Verfügung. Letzteres verwendet für die Programmausführung den zweiten Prozessorkern. _thread wird allerdings als sehr experimentell bezeichnet. Allerdings lassen sich keine Negativinformation recherchieren.&lt;/div&gt;</summary>
		<author><name>Peter Vogginger</name></author>
	</entry>
	<entry>
		<id>http://www.institut-fuer-kaffeetechnologie.de/Wiki/index.php?title=Datei:20260210_Ablaufdiagramm_Schrittmotorsteuerung_ssr_Teil2.png&amp;diff=4828</id>
		<title>Datei:20260210 Ablaufdiagramm Schrittmotorsteuerung ssr Teil2.png</title>
		<link rel="alternate" type="text/html" href="http://www.institut-fuer-kaffeetechnologie.de/Wiki/index.php?title=Datei:20260210_Ablaufdiagramm_Schrittmotorsteuerung_ssr_Teil2.png&amp;diff=4828"/>
		<updated>2026-02-13T16:00:25Z</updated>

		<summary type="html">&lt;p&gt;Peter Vogginger: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Peter Vogginger</name></author>
	</entry>
	<entry>
		<id>http://www.institut-fuer-kaffeetechnologie.de/Wiki/index.php?title=Datei:20260210_Ablaufdiagramm_Schrittmotorsteuerung_ssr_Teil1.png&amp;diff=4827</id>
		<title>Datei:20260210 Ablaufdiagramm Schrittmotorsteuerung ssr Teil1.png</title>
		<link rel="alternate" type="text/html" href="http://www.institut-fuer-kaffeetechnologie.de/Wiki/index.php?title=Datei:20260210_Ablaufdiagramm_Schrittmotorsteuerung_ssr_Teil1.png&amp;diff=4827"/>
		<updated>2026-02-13T15:54:46Z</updated>

		<summary type="html">&lt;p&gt;Peter Vogginger: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Peter Vogginger</name></author>
	</entry>
	<entry>
		<id>http://www.institut-fuer-kaffeetechnologie.de/Wiki/index.php?title=Mikrocontroller_Programmierung_in_MicroPython_WiSe_2025/26&amp;diff=4823</id>
		<title>Mikrocontroller Programmierung in MicroPython WiSe 2025/26</title>
		<link rel="alternate" type="text/html" href="http://www.institut-fuer-kaffeetechnologie.de/Wiki/index.php?title=Mikrocontroller_Programmierung_in_MicroPython_WiSe_2025/26&amp;diff=4823"/>
		<updated>2026-02-12T11:52:06Z</updated>

		<summary type="html">&lt;p&gt;Peter Vogginger: /* Besprechungsprotokolle */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;htmltag tagname=&amp;quot;img&amp;quot; src=&amp;quot;https://vg06.met.vgwort.de/na/c62555318b0346218dc23a5ada9f7726&amp;quot; width=&amp;quot;1&amp;quot; height=&amp;quot;1&amp;quot; alt=&amp;quot;&amp;quot;&amp;gt;&amp;lt;/htmltag&amp;gt;&lt;br /&gt;
[[Datei:Breites Logoband.png|mini|zentriert|hochkant=2.5]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Mikrocontroller Programmierung in MicroPython Wintersemetser 2025/26 =&lt;br /&gt;
Für das Projekt der labortechnischen und Glasboiler Espressomaschine soll die vorhandene Master (MATLAB®-App) Client (RPi RP2040 MCUs in MicroPython) Steuerung auf eine autarke Multi-MCU-Steuerung mit mehreren RPi RP2040 und/oder RPi RP2350 mit einer MATLAB®-App als Service-Tool umgestellt werden.&lt;br /&gt;
&lt;br /&gt;
Die Umstellung soll im ersten Schritt über Demonstratoren vorbereitet werden. Die erforderlichen Steuerungsplatinen sind in mehrfacher Ausfertigung vorhanden, so dass Teilaufgaben voneinander unabhängig abgearbeitet werden können.&lt;br /&gt;
&lt;br /&gt;
Die Programmcodes in MicroPython für die Realisierung der Grundfunktionen (Schalten, Messwerte erfassen, Display ansteuern, UART Kommunikation, MATLAB® Kommunikation) sind in MATLAB® meets MicroPython [40] vorhanden. Hierzu wird die zweite (noch nicht veröffentlichte) Ausgabe zur Verfügung gestellt.&lt;br /&gt;
&lt;br /&gt;
Diese Projektarbeit dient der Weiterentwicklung der modularisierten Systemsteuerung im Gesamtprojekt zur Entwicklung der Siebträger-Espressomaschinen.&lt;br /&gt;
&lt;br /&gt;
= Aufgabenanalyse =&lt;br /&gt;
== UART Kommunikation zwischen den einzelnen MCUs ==&lt;br /&gt;
Die bestehende Kommunikation über die MATLAB®-GUI soll durch ein robustes, ringförmiges UART-System ersetzt werden, bei dem fünf MCUs kontinuierlich einen gemeinsamen Token austauschen. Jede Platine ergänzt oder liest dabei spezifische Daten, während Start-, Standard- und Paniktoken sowie CRC-Prüfsummen für zuverlässigen Betrieb und Fehlererkennung sorgen.&lt;br /&gt;
&lt;br /&gt;
== Mehrkernnutzung und/oder Multitasking ==&lt;br /&gt;
Beim Raspberry Pi Pico soll der zweite Prozessorkern genutzt werden, um die MCU-Kommunikation auszulagern und dadurch den Hauptkern für bestehende Steuerungsaufgaben zu entlasten. Dabei sind die Einschränkungen von _thread() sowie Konflikte beim Zugriff auf gemeinsame Peripherie zu berücksichtigen, während uasyncio als alternative kooperative Multitasking-Lösung nur einen Kern nutzen kann.&lt;br /&gt;
&lt;br /&gt;
== Startprozedur ==&lt;br /&gt;
Diese wird initialisiert durch die Aktivierung aller vier MCUs und dient der Gewährleistung einer korrekten Kommunikationsstruktur sowie dem sequenziellen Start von Füllstands- und Boilerdruckregelung. Die Betriebsbereitschaft wird signalisiert, sobald der Boilerdruck-Sollwert erreicht wird.&lt;br /&gt;
&lt;br /&gt;
== Füllstandsregelung ==&lt;br /&gt;
Ziel ist die vollständige Übertragung der bisher in der MATLAB®-GUI realisierten Boiler-Füllstandsregelung auf die Basisplatine, um eine PC-unabhängige Regelung zu ermöglichen. Die Regelung erkennt den Füllstand über eine Kurzschlussdetektion; liegt kein Kurzschluss vor, wird dies als unzureichender Füllstand interpretiert und der Boilerdruckregler zur Vermeidung von Trockenheizen gesperrt. Bei Erreichen des Sollfüllstands erfolgt eine gezielte Überfüllung bei reduzierter Pumpenspannung, um ein periodisches An- und Abschalten der Regelung vorzubeugen.&lt;br /&gt;
&lt;br /&gt;
== Boilerdruckregelung ==&lt;br /&gt;
Dieser PID-Regler wird auf die SSR-Platine übertragen und aktiviert sich aus Sicherheitsgründen erst dann, wenn ein korrekter Wasserstand im Boiler erkannt wurde. Parallel zur Druckhaltung steuert die Regelung die Entschichtungsfunktion, welche aktiv bleibt, bis die Boilertemperatur einen einstellbaren Grenzwert erreicht.&lt;br /&gt;
&lt;br /&gt;
== Mischtemperaturregelung ==&lt;br /&gt;
Um die Wassertemperatur für Kaffee und Tee zu steuern, wird ein PID-Regler für das Mischventil auf der Basisplatine implementiert. Dabei wird eine Kaskadenstruktur verwendet, in der die Mischtemperaturregelung den äußeren Kreis bildet und direkt vom inneren Durchflussregelkreis abhängig ist.&lt;br /&gt;
&lt;br /&gt;
== Durchflussregelung ==&lt;br /&gt;
Der auf das Basisboard verlagerte PID-Regler sorgt durch Anpassung der Pumpenspannung für einen konstanten Volumenstrom. Als innerer Regelkreis liefert er kontinuierlich Durchflusswerte an den Mischtemperaturregler, um die Temperaturstabilisierung zu gewährleisten&lt;br /&gt;
&lt;br /&gt;
== Maschinensimulator - Hardware ==&lt;br /&gt;
Für die Steuerungselektronik besteht die Siebträger Espressomaschine aus Messwerten. Dies sind in der aktuellen Form&lt;br /&gt;
* 4 NTC Temperatursensoren mit 10 kOhm&lt;br /&gt;
* 2 Druckmesswerte im Spannungsbereich 0,5 bis 4,5 V&lt;br /&gt;
* Leitwert und Temperatur des zufließenden Wassers im Spannungsbereich 0 bis 5 V&lt;br /&gt;
* Flowmeter mit 39,9 Impulsen je ccm&lt;br /&gt;
* 4 Füllstandssensoren über Kurzschlussdetektion&lt;br /&gt;
&lt;br /&gt;
Realisiert werden diese Messwerte über ein digitales Potentiometer MCP4151 mit 10 kOhm, welches über eine SPI-Schnittstelle eingestellt werden kann. Damit werden die 4 NTC Temperatursensoren und über die Spannungsteilerfunktion des Bauelements werden die Druckmesswerte, der Leitwert und die Temperatur des zufließenden Wassers simuliert.&lt;br /&gt;
&lt;br /&gt;
Die Kurzschlusserzeugung der Füllstandssensoren werden mit einem digitalen Analogschalter (DG411) realisiert und das Flowmetersignal wird über eine Transistorfolgeschaltung erzeugt.&lt;br /&gt;
&lt;br /&gt;
Die Schaltung benötigt eine MCU mit mindestens 17 für Kommunikation und Elektronikansteuerung verfügbaren PINs. Hierzu ist eine Raspberry Pi Pico MCU vorgesehen. &lt;br /&gt;
&lt;br /&gt;
== Maschinensimulator - Hardware ==&lt;br /&gt;
Auf der MCU selbst ist zwingend die SPI-Kommunikation zu den digitalen Potentiometer mit insgesamt 8 verschiedenen Chipselect erforderlich. Die digitalen Analogschalter benötigen lediglich ein PIN mit Digoutfunktion während das Flowmetersignal als PWM-Signal mit variabler Frequenz realisiert wird. Für die variable Frequenz kann über die Anweisung PWM.freq([Frequenz]) eingestellt werden.&lt;br /&gt;
&lt;br /&gt;
Die Einstellwerte für das digitale Potentiometer sollten für die 4 NTC Temperatursensoren als Temperaturwerte eingegeben werden. Aus dem Eingabewert wird und über die Beachtung der nichtlinearen Kennlinie der NTCs sowie dem nichtlinearen Zusammenhang aus Einstellwert und Widerstandswert der Einstellwert des jeweiligen digitalen Potentiometers. Die normierten Kennlinien der NTCs liegen vor. Eventuell lassen sich darüber die erforderlichen Einstellwerte ermitteln.&lt;br /&gt;
&lt;br /&gt;
Auch die Einstellwerte für die Simulation der Druckmesswerte sollten in bar für den Brühgruppendruck bzw. in mbar für den Boilerdruck erfolgen. Auch hier muss die nichtlinearität des digitalen Potentiometers berücksichtigt werden.&lt;br /&gt;
&lt;br /&gt;
Es erscheint sinnvoll, dass der Maschinensimulator in den Kommunikationsring eingebunden wird. Aus dem Token kann der Sollwert für die Pumpensteuerung entnommen werden, welches wiederum für die Generierung des Flowmetersignals verwendet werden kann. Ebenso können aus dem Token die Heizleistungen entnommen werden, was für die Temperatursignale sowei Boilerdrucksignal verwendet werden könnte.&lt;br /&gt;
&lt;br /&gt;
Für die einfachere Bedienung und um die Anzahl der benötigten PCs zu minimieren ist eine MATLAB®-GUI nützlich. In dieser sollten die simulierten Signale per numerischer Eingabe, Schalter oder Slider einstellbar sein. ebenso sollten darin Umschaltungen möglich sein, so dass die simulierten Signale in Abhängigkeit der Pumpensteuerung und Heizleistung erzeugt werden. Auch denkbar wären die generierung von Messwerten über bekannte Messwertverläufe von gemessenen Kaffeebezügen.&lt;br /&gt;
&lt;br /&gt;
= Leistungsvereinbarung =&lt;br /&gt;
== Kommunikation ==&lt;br /&gt;
Es wird eine Kommunikation zwischen den MCUs (Platinen) der Maschinensteuerung aufgebaut. Dazu wird die auf den einzelnen Platinen herausgeführte UART-Schnittstelle so verbunden, dass ein Kommunikationsring entsteht. Über den Kommunikationsring wird ein als Token bezeichnetes Datenpaket mit allen für den Maschinenbetrieb erforderlichen Messdaten, Stellgrößen, Anforderungen, Einstellparametern und Logging-Informationen im Kreis durchgereicht. Der Token wird so gestaltet, dass dieser dynamisch an spätere Anforderungen (2. Brühgruppe) angepasst werden kann. Der Token wird für eine möglichst kleine Anzahl an Kommunikations-Bytes binär ausgeführt. Es wird eine Definitionstabelle des Tokens im öffentlichen Wiki erstellt. Das Verfahren wird als Espressomaschinen-Kommunikations-Ring (EKR) bezeichnet.&lt;br /&gt;
&lt;br /&gt;
== Mehrkernnutzung ==&lt;br /&gt;
Es wird versucht, über die MicroPython-Funktionalität „_thread“ die Kommunikation von den anderweitigen Prozessaufgaben auf allen MCUs zu trennen und auf den zweiten Prozessorkern zu verlagern.&lt;br /&gt;
&lt;br /&gt;
== Verlagerung der Regelkreise ==&lt;br /&gt;
Die aktuell über die MATLAB®-GUI ausgeführten Regelkreise, Füllstandsregelung (Boiler und Tanks), Boilerdruckregelung, Mischtemperaturregelung und Durchflussregelung werden auf die dafür prädestinierten MCUs verlagert. Die Reglercodes dazu sind im Prinzip in MATLAB® vorhanden, müssen aber an das MCU-Umfeld und die Programmiersprache MicroPython angepasst werden. Funktionstest der Regler an einer realen Hardware sind nicht möglich, da diese soweit noch nicht vorhanden ist. Ziel ist die vollständige Implementierung der Reglerlogik in MicroPython einschließlich Schnittstellenanpassung und Variablenmanagement. Die Funktionsprüfung erfolgt auf Codeebene sowie über simulierte Testfälle.&lt;br /&gt;
&lt;br /&gt;
Für den Ablauf zwischen Einschalten der Maschine und Betriebsbereitschaft zum Kaffeebezug, im Weiteren Betriebsbereitschaft zum Dampfbezug, wird eine Startprozedur definiert und soweit es die vorhandene Hardware zulässt getestet.&lt;br /&gt;
&lt;br /&gt;
== Maschinensimulator ==&lt;br /&gt;
Zur Überprüfung des MCU-Verbunds, der implementierten Reglerlogik sowie der Startprozedur ohne vorhandene reale Maschinenhardware wird ein Maschinensimulator eingesetzt.&lt;br /&gt;
&lt;br /&gt;
Die Hardware für den Maschinensimulator wird bereitgestellt. Der Maschinensimulator generiert die Widerstandswerte der NTC-Temperatursensoren sowie die Spannungswerte der analogen Sensoren im Bereich von 0,5 V bis 4,5 V. Die Füllstandssensoren werden über Kurzschlussschalter simuliert, der Durchflusssensor über eine getaktete Transistorfolgeschaltung mit PWM-Ansteuerung. Zur Nachbildung der Temperatursensoren, Drucksensoren, Füllstandssensoren, Leitwert- und Durchflusssignale werden geeignete bereits festgelegte elektronische Komponenten verwendet. Die Ansteuerung der einzelnen Signalerzeuger ist dabei offen zu gestalten und kann im Verlauf der Implementierung festgelegt werden.&lt;br /&gt;
&lt;br /&gt;
Der Maschinensimulator wird in den bestehenden Kommunikationsring integriert. Dadurch können Sollwerte und Systemparameter aus dem Token ausgelesen und zur Erzeugung der simulierten Sensorsignale genutzt werden.&lt;br /&gt;
&lt;br /&gt;
= Besprechungsprotokolle =&lt;br /&gt;
* [[Projektstart 09.10.2025]]&lt;br /&gt;
* [[Projektrücksprache 15.10.2025]]&lt;br /&gt;
* [[Projektrücksprache 23.10.2025]]&lt;br /&gt;
* [[Projektrücksprache 30.10.2025]]&lt;br /&gt;
* [[Projektrücksprache 06.11.2025]]&lt;br /&gt;
* [[Projektrücksprache 13.11.2025]]&lt;br /&gt;
* [[Projektrücksprache 20.11.2025]]&lt;br /&gt;
* [[Projektrücksprache 27.11.2025]]&lt;br /&gt;
* [[Projektrücksprache 04.12.2025]]&lt;br /&gt;
* [[Projektrücksprache 11.12.2025]]&lt;br /&gt;
* [[Projektrücksprache 18.12.2025]]&lt;br /&gt;
* [[Projektrücksprache 15.01.2026]]&lt;br /&gt;
* [[Projektrücksprache 05.02.2026]]&lt;br /&gt;
* [[Abschlusspräsentation 12.02.2026]]&lt;/div&gt;</summary>
		<author><name>Peter Vogginger</name></author>
	</entry>
	<entry>
		<id>http://www.institut-fuer-kaffeetechnologie.de/Wiki/index.php?title=Projektr%C3%BCcksprache_05.02.2026&amp;diff=4822</id>
		<title>Projektrücksprache 05.02.2026</title>
		<link rel="alternate" type="text/html" href="http://www.institut-fuer-kaffeetechnologie.de/Wiki/index.php?title=Projektr%C3%BCcksprache_05.02.2026&amp;diff=4822"/>
		<updated>2026-02-12T11:48:39Z</updated>

		<summary type="html">&lt;p&gt;Peter Vogginger: Die Seite wurde neu angelegt: „=Besprechungsprotokoll – Projektrücksprache 18.12.2025= Ort: Online via ZOOM  Datum: 05.02.2026   Teilnehmer: Philipp Schiebel, Peter Vogginger, LfbA Armin Rohnen   Moderator: Philipp Schiebel  Protokoll: Peter Vogginger  ==Top 1) Annahme des Protokolls==  Das Protokoll der letzten Besprechung wird von allen Teilnehmern angenommen.   ==Top 2) Status UART Kommunikation zwischen den einzelnen MCUs  ==  Dieser Punkt wird zusammen mit Top 3) besprochen.  =…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Besprechungsprotokoll – Projektrücksprache 18.12.2025=&lt;br /&gt;
Ort: Online via ZOOM&lt;br /&gt;
&lt;br /&gt;
Datum: 05.02.2026 &lt;br /&gt;
&lt;br /&gt;
Teilnehmer: Philipp Schiebel, Peter Vogginger, LfbA Armin Rohnen &lt;br /&gt;
&lt;br /&gt;
Moderator: Philipp Schiebel&lt;br /&gt;
&lt;br /&gt;
Protokoll: Peter Vogginger&lt;br /&gt;
&lt;br /&gt;
==Top 1) Annahme des Protokolls== &lt;br /&gt;
Das Protokoll der letzten Besprechung wird von allen Teilnehmern angenommen. &lt;br /&gt;
&lt;br /&gt;
==Top 2) Status UART Kommunikation zwischen den einzelnen MCUs  == &lt;br /&gt;
Dieser Punkt wird zusammen mit Top 3) besprochen.&lt;br /&gt;
&lt;br /&gt;
==Top 3) Status Mehrkernnutzung und/oder Multitasking == &lt;br /&gt;
Es ist nun möglich, von der Messwertplatine zur SSR-Platine, eine Position der Motorwelle in Grad vorzugeben (Sollwert), die der Motor dann anfährt. Dies geschieht &lt;br /&gt;
über die UART-Kommunikation (Token), unter Verwendung der Mehrkernnutzung. Die &lt;br /&gt;
Motorwelle dreht, entsprechend dem Sollwert im Vergleich zur aktuellen Position, &lt;br /&gt;
entweder gegen oder mit dem Uhrzeigersinn, je nachdem, welcher Weg kürzer ist. &amp;lt;br /&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Die nächste Projektgruppe befasst sich u.a. mit der Initialisierung des Dosierventils, für &lt;br /&gt;
das diese Programmierung die Grundlage bieten kann. Der Arbeitsaufwand hierzu ist noch hoch. &amp;lt;br /&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Die while-Schleife in der Funktion motor_run (Teil der Datei motorsteuerung.py der SSR-&lt;br /&gt;
Platine) wird dazu verwendet, den zweiten Kern am Laufen zu halten. Ohne diese &lt;br /&gt;
Schleife würde sich der Kern nach Durchlauf des Programmcodes abschalten. Somit &lt;br /&gt;
wird der Kern nicht blockiert, sondern gezielt beschäftigt gehalten. &lt;br /&gt;
Mögliche Lösungen, um auf dem zweiten Kern (Motorkern) noch andere Funktionalitäten, &lt;br /&gt;
wie die Ansteuerung von Ventilen, zu gewährleisten, ist die Verwendung des Moduls &lt;br /&gt;
uasyncio. Theoretisch möglich ist auch, mittels eines Interrupts, bei jedem Eintreffen &lt;br /&gt;
des Tokens, den Kern neu zu starten und der Motor dreht dann einen Schritt. Laut Herrn &lt;br /&gt;
Rohnen wird dies allerdings zu lange dauern. &amp;lt;br /&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Der bisherige Fortschritt bietet eine gute Grundlage für die weitere Entwicklung. &lt;br /&gt;
==Top 4) Status Verlagerung des Füllstandreglers auf das Basisboard== &lt;br /&gt;
Das Ablaufdiagramm wurde überarbeitet. Statt Yes/No, Ja/Nein verwenden. Das Ablaufdiagramm ist zu umfangreich. Es soll umfassen, welche Funktion die einzelnen &lt;br /&gt;
Kästchen haben, z.B. Ast Befüllungsflag: Abschalttemperatur wird gesetzt, &lt;br /&gt;
Pumpenspannung reduziert, Befüllungsflag wird zu Null gesetzt, Dampfhahn &lt;br /&gt;
geschlossen. Die genaue Vorgehensweise wird dann im Text erklärt. &amp;lt;br /&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Es ist zu klären, wodurch eine andere Aktivität beim Überfüllungsvorgang unterbunden &lt;br /&gt;
werden kann (z.B. Überfüllen), d.h. es darf währenddessen keine andere Funktion Zugriff &lt;br /&gt;
auf diesen Ablauf haben und diesen stören. Wenn der Füllstand zu niedrig ist, wird ein Bit &lt;br /&gt;
(Flag) gesetzt und alle anderen Regler reagieren darauf. Erst wenn die Befüllung abgeschlossen ist, dürfen Regler wieder eingreifen. Der Timer darf nur einmal gesetzt &lt;br /&gt;
werden. Wenn die 1,5 s abgelaufen sind, wird ein noch nicht genauer spezifiziertes Flag &lt;br /&gt;
wieder zurückgesetzt. Am einfachsten ist es, ein internes Flag im Basisboard zu setzen, &lt;br /&gt;
als globale Variable.&amp;lt;br /&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
Das weitere Vorgehen ist die Anpassung der besprochenen Änderungen und der Test des &lt;br /&gt;
Programmcodes. &amp;lt;br /&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Die Basisplatine wird nicht mehr fertig initialisiert, weil die Funktionalität des &lt;br /&gt;
Programmcodes des Flowmeters im Labor getestet werden muss und dafür die &lt;br /&gt;
verbleibende Zeit zu gering ist. In die Dokumentation wird aufgenommen, dass die &lt;br /&gt;
Basisplatine initialisiert ist, ohne das Flowmeter.&amp;lt;br /&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
Ohne das Flowmeter ist ein ausreichendes Testen des Füllstandreglers nicht möglich. &amp;lt;br /&amp;gt; &lt;br /&gt;
 &lt;br /&gt;
Statt der Pumpenspannung kann der Durchflussreglersollwert verwendet werden. Der &lt;br /&gt;
Füllstandsregler darf nicht während dem Kaffeebezug anspringen. Das Thema der &lt;br /&gt;
direkten Pumpenansteuerung muss somit nochmal diskutiert werden. Bisher erfolgte in &lt;br /&gt;
MATLAB® dies über ein Aktivitätsflag, ob die Pumpe, ausgehend vom Durchfluss- oder &lt;br /&gt;
Füllstandsregler, läuft. &lt;br /&gt;
&lt;br /&gt;
==Top 5) Status Verlagerung der Boilerdruckregelung auf die Messplatine ==&lt;br /&gt;
Das Ablaufdiagramm ist zu umfangreich.&amp;lt;br /&amp;gt;  &lt;br /&gt;
 &lt;br /&gt;
Die vorherige Abfrage einzelner Zustände (In welchem Zustand befindet sich System? &lt;br /&gt;
Dann reagieren) unterbindet ein Aufziehen des Reglers. Dass der Ist-Druck größer dem &lt;br /&gt;
Solldruck ist, ist möglich, wenn der Dampfhahn offen ist (Reglerüberschuss). Die Abfrage &lt;br /&gt;
der Zustände muss somit vorher erfolgen. Es ist wahrscheinlich ein programmierter PD-&lt;br /&gt;
Regler mit Zeitverzögerung verbaut. Der I-Anteil würde den Regler auch potenziell aufziehen. &amp;lt;br /&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
Es sind zwei zusätzliche Flowcharts zu erstellen, einmal wenn die Entschichtung &lt;br /&gt;
eingeschaltet wird und einmal, wenn diese ausgeschaltet wird. &amp;lt;br /&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Bis nächste Woche wird das angepasste Flowchart, die Dokumentation und der &lt;br /&gt;
Programmcode übergeben. &lt;br /&gt;
&lt;br /&gt;
==Top 6)  Status Maschinensimulator == &lt;br /&gt;
Das Schalten der Füllstände war erfolgreich. Somit ist der Simulator für die Verwendung &lt;br /&gt;
geeignet. Die simulierten Temperaturen (Spannung) werden gemessen und anschließend &lt;br /&gt;
mit dem Tabellenwert verglichen. &lt;br /&gt;
&lt;br /&gt;
==Top 7)  Projektabgabe und Abschlusspräsentation  == &lt;br /&gt;
Die Abschlusspräsentation wird online gehalten. Die Gestaltung muss so erfolgen, dass &lt;br /&gt;
das Projekt damit an einen Nachfolger übergeben werden kann. Dies kann auch über &lt;br /&gt;
Zwischenseiten erfolgen, die nicht präsentiert werden. Zusätzlich sind der &lt;br /&gt;
Programmcode und die Hardware abzugeben.&lt;/div&gt;</summary>
		<author><name>Peter Vogginger</name></author>
	</entry>
	<entry>
		<id>http://www.institut-fuer-kaffeetechnologie.de/Wiki/index.php?title=Systemsoftware&amp;diff=4818</id>
		<title>Systemsoftware</title>
		<link rel="alternate" type="text/html" href="http://www.institut-fuer-kaffeetechnologie.de/Wiki/index.php?title=Systemsoftware&amp;diff=4818"/>
		<updated>2026-02-03T17:08:27Z</updated>

		<summary type="html">&lt;p&gt;Peter Vogginger: /* ToDo-Liste: MCUs - Verlagerung der Regelkreise aus der MATLAB®-GUI auf die Mikrocontroller der Steuerungselektronik */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;htmltag tagname=&amp;quot;img&amp;quot; src=&amp;quot;http://vg04.met.vgwort.de/na/4531f1734b324b72b2d7e566cdf639f0&amp;quot;  width=&amp;quot;1&amp;quot; height=&amp;quot;1&amp;quot; alt=&amp;quot;&amp;quot;&amp;gt;&amp;lt;/htmltag&amp;gt;&lt;br /&gt;
[[Datei:Breites Logoband.png|mini|zentriert|hochkant=2.5]]&amp;lt;br&amp;gt;&lt;br /&gt;
Die Systemsoftware lässt sich nicht ohne die Beachtung der Systemelektronik erstellen.&lt;br /&gt;
&lt;br /&gt;
Für die Systemsoftware wurde ein mehrstufiger Entwicklungsprozess definiert:&lt;br /&gt;
# Nutzung einer MCU auf der MicroPython verwendet werden kann. Dies ist durch das STM32F411 nucleo Board der Basiselektronik bzw. durch den Raspberry Pi Pico der Multi-MCU-Elektronik gegeben.&lt;br /&gt;
# Auf der MCU werden lediglich die elementaren Grundfunktionen (GPIO schalten und erfassen, Messwert erfassen, PWM Ausgeben, Sollwert ausgeben, etc.) realisiert und über eine MicroPython zu MATLAB® Schnittstelle [41] wird die Funktionalität in einer MATLAB® GUI hergestellt.&lt;br /&gt;
# Die Softwareentwicklung startet mit der labortechnischen Espressomaschine und wird auf die weiteren Projekte schrittweise transportiert. Dazu ist die Maschinenelektronik gleich zu halten und es sind die gleichen Anschluss-Pins zu verwenden.&lt;br /&gt;
# Nach Abschluss der Testphase der MATLAB® Bedienung wird schrittweise die Betriebssoftware in MicroPython auf der MCU implementiert, so dass am Ende dieses Prozessschrittes die MATLAB®-Verbindung lediglich für weiterführende Datenerfassung und grafische Darstellungen verwendet wird, welche nicht mit dem Display der Maschine möglich ist oder dort nicht dargestellt werden soll.&lt;br /&gt;
# Ob eine Portierung des MicroPython-Codes nach Microcontroller C durchgeführt wird, ist derzeit nicht entschieden.&lt;br /&gt;
&lt;br /&gt;
Es wurden mehrere, die Softwareentwicklung vorbereitende FMEAs durchgeführt.  Die hierdurch entstandenen Dokumentation befinden sich in der Dokumentationsauflistung. Im weiteren wurde eine Projektarbeit zur Konzeptfindung für die Badienung durchgeführt. Auch die hierdurch entstandenen, teilweise auf die FMEA aufbauenden Dokumente befinden sich in der Dokumentationsliste.&lt;br /&gt;
&lt;br /&gt;
= Projektdokumentationen und Beschreibungen =&lt;br /&gt;
* [[:Datei:20210228 Konzept Systemelektronik.pdf|Konzeptbeschreibung Systemelektronik]]&lt;br /&gt;
* [[:Datei:20210605 Workflow Embedded Systems.pdf|Workflow Embedded Systems]]&lt;br /&gt;
* [[:Datei:20200521 Bericht1 NerminArbi.pdf|Funktionsanalyse Boilerbefüllung, Tassenwärmung, Milchschäumen]]&lt;br /&gt;
* [[:Datei:20200518 Bericht halbauto Entkalkung Egger Alexander.pdf|Funktionsanalyse zur halbautomatischen Entkalkung]]&lt;br /&gt;
* [[:Datei:20200518 V0 4 Bericht Funktionsanalyse Rückspulung-Spulung Sladoje.pdf|Funktionsanalyse Rückspülung und Spülung]]&lt;br /&gt;
* [[:Datei:20200521 Bericht Espresso-Teewasserbezug Urbin.pdf|Funktionsanalyse Espresso und Teewasserbezug]]&lt;br /&gt;
* [[:Datei:20200522 Bericht Funktionsanalyse Energieeffizienz Egger Alexander.pdf|Funktionsanalyse Energieeffizienz]]&lt;br /&gt;
* [[:Datei:20200521 V2 Bericht Funktionsanalyse Bedienung Sladoje.pdf|Funktionsanalyse Bedienung]]&lt;br /&gt;
* [[:Datei:20200525 Bericht Abbildung aller Maschinen Urbin V2.pdf|Funktionsanalyse Abbildung aller Maschinen]]&lt;br /&gt;
* [[:Datei:20200609 Bericht Fehleranalyse Entschichtung.pdf|Fehleranalyse Entschichtung]]&lt;br /&gt;
* [[:Datei:20200610 Fehleranalyse Dampf Brühgruppe Sladoje.pdf|Fehleranalyse Brühgruppe und Dampfbezug]]&lt;br /&gt;
* [[:Datei:20200613 Bericht Fehleranalyse Mischer;Magnetventile V2.pdf|Fehleranalyse Mischer und Magnetventile]]&lt;br /&gt;
* [[:Datei:20200611 Bericht3 NerminArbi.pdf|Fehleranalyse Boiler]]&lt;br /&gt;
* [[:Datei:20200705 Dichtheitsprüfung.pdf|Dichtheitsprüfung]]&lt;br /&gt;
* [[:Datei:20200704 Massnahmen Urbin.pdf|Prüfkonzepte Magnetventile und Mischer]]&lt;br /&gt;
* [[:Datei:20200701 Maßnahmenanalyse NerminArbi.pdf|Maßnahmen Boiler]]&lt;br /&gt;
* [[:Datei:20200628 Maßnahmen Entschichtung zweiter Stand.pdf|Maßnahmen Entschichtung]]&lt;br /&gt;
* [[:Datei:20200627 Maßnahmenkonzept Brühguppe Dampf Sladoje.pdf|Maßnahmen Brühgruppe und Dampf]]&lt;br /&gt;
* [[:Datei:20200707_FMEA.xlsx|FMEA Tabelle]]&lt;br /&gt;
* [[:Datei:20201207_Bedienkonzept.pptx|PPT Simulation des Bedienkonzeptes]]&lt;br /&gt;
* [[:Datei:20210207_Bedienkonzept_Funktionsliste.xlsx|Bedienkonzept Funktionsliste]]&lt;br /&gt;
* [[:Datei:20210219_Bedienkonzept_Projektdokumentation.pdf|Bedienkonzept Projektdokumentation]]&lt;br /&gt;
* [[:Datei:HMProjektBedienoberflaecheEspresso.zip|MATLAB® GUI]]&lt;br /&gt;
* [[Entwicklung Systemsoftware SoSe2022]]&lt;br /&gt;
* [[Entwicklung Systemsoftware SoSe2023]]&lt;br /&gt;
* [[Mikrocontroller Programmierung in MicroPython WiSe 2025/26]]&lt;br /&gt;
&lt;br /&gt;
= [http://www.institut-fuer-kaffeetechnologie.de/Intern/index.php?title=Programmcode Programmcode] =&lt;br /&gt;
Aktueller Programmcode und Änderungsdokumentation ab Jan 2023&lt;br /&gt;
&lt;br /&gt;
= [http://www.institut-fuer-kaffeetechnologie.de/Intern/index.php?title=Software-Bugs Software-Bugs] =&lt;br /&gt;
&lt;br /&gt;
= ToDo-Liste(n) Systemsoftware =&lt;br /&gt;
&lt;br /&gt;
== Prioritätsangabe ==&lt;br /&gt;
Prio 1 - Abarbeitung zeitnah erforderlich&amp;lt;br&amp;gt;&lt;br /&gt;
Prio 2 - Abarbeitung erforderlich&amp;lt;br&amp;gt;&lt;br /&gt;
Prio 3 - Abarbeitung kann warten&amp;lt;br&amp;gt;&lt;br /&gt;
Prio 99 - Abarbeitung erfordert Vorarbeiten&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Status ==&lt;br /&gt;
10 - Erfasst&amp;lt;br&amp;gt;&lt;br /&gt;
30 - in Bearbeitung&amp;lt;br&amp;gt;&lt;br /&gt;
50 - Lösung definiert&amp;lt;br&amp;gt;&lt;br /&gt;
70 - in Umsetzung&amp;lt;br&amp;gt;&lt;br /&gt;
90 - Umsetzung abgeschlossen&amp;lt;br&amp;gt;&lt;br /&gt;
99 - Abbruch per Beschluss (Dokumentation dazu erforderlich)&amp;lt;br&amp;gt;&lt;br /&gt;
100 - Maßnahme bestätigt&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ToDo-Liste: Mechatronische Inbetriebnahme Glasboilermaschine =&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Arbeitspaket !! Wer !! Prio !! Status !! WV&lt;br /&gt;
|-&lt;br /&gt;
| [[Fehlerbehebungen]] || || 1 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Startprozedure]] || ||  1 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Tankfüllstandsregelung]] || || 1 || 10 ||&lt;br /&gt;
|- &lt;br /&gt;
| [[Boilerfüllstandsregelung]] || || 1 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Boilerdruckregelung]] || || 1 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Mischwassertemperaturregelung]] || || 1 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Durchflussregelung]] || || 1 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Kaffeebezug]] || || 2 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Teebezug]] || || 1 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Temperatureinstellung über Vertikalhebel]] || || 1 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Simulation Handhebelmaschine]] || || 1 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Flush/Rückspülreinigung]] || || 1 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| || || || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= ToDo-Liste: MCUs - Verlagerung der Regelkreise aus der MATLAB®-GUI auf die Mikrocontroller der Steuerungselektronik =&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Arbeitspaket !! Wer !! Prio !! Status !! WV&lt;br /&gt;
|-&lt;br /&gt;
| [[Kommunikation per UART|UART Kommunikation zwischen den einzelnen MCUs]] || Peter Vogginger|| 1 || 30 || 05.02.2026&lt;br /&gt;
|-&lt;br /&gt;
| [[Mehrkernnutzung und/oder Multitasking]] || Peter Vogginger||  1 || 30 ||05.02.2026&lt;br /&gt;
|-&lt;br /&gt;
| [[Startprozedur]]&lt;br /&gt;
|Philipp Schiebel&lt;br /&gt;
|1&lt;br /&gt;
|30&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[Verlagerung des Füllstandsreglers auf das Basisboard]] || Philipp Schiebel|| 1 || 30 || 05.02.2026&lt;br /&gt;
|- &lt;br /&gt;
| [[Verlagerung der Boilerdruckregelung auf die Messplatine]] || Philipp Schiebel|| 1 || 30 ||  	 05.02.2026&lt;br /&gt;
|-&lt;br /&gt;
| [[Verlagerung des Mischtemperaturreglers auf das Basisboard]] || Philipp Schiebel|| 1 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Verlagerung des Durchflussreglers auf das Basisboard]] || Philipp Schiebel|| 1 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Erstellung der Funktionssteuerung - Preinfusion auf dem Basisboard]] || || 2 || 10 || &lt;br /&gt;
|-&lt;br /&gt;
| [[Erstellung der Funktionssteuerung - Kaffeebezug auf dem Basisboard]] || || 1 || 10 || &lt;br /&gt;
|-&lt;br /&gt;
| [[Erstellung der Funktionssteuerung - Wasserbezug auf dem Basisboard]] || || 1 || 10 || &lt;br /&gt;
|-&lt;br /&gt;
| [[Erstellung der Funktionssteuerung - Dampfbezug auf dem Basisboard]] || || 1 || 10 || 	 &lt;br /&gt;
|-&lt;br /&gt;
| [[Erstellung der Funktionssteuerung - Spülen auf dem Basisboard]] || || 1 || 10 ||  &lt;br /&gt;
|-&lt;br /&gt;
| [[Erstellung der Funktionssteuerung - Grundreinigung auf dem Basisboard]] || || 1 || 10 ||  &lt;br /&gt;
|-&lt;br /&gt;
| [[Integration eines Displays mit Touchfunktion]] || || 1 || 30 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Integration eines Vertikalhebels]] || || 1 || 30 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Visualisierung und Interaktion über die MATLAB®-GUI]] || || 1 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Visualisierung und Interaktion über eine WEB-Anwendung]] || || 1 || 10 ||  &lt;br /&gt;
|-&lt;br /&gt;
| [[Maschinensimulator]] || alle|| 1 || 30 ||05.02.2026&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= ToDo-Liste: Allgemeines =&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Arbeitspaket !! Wer !! Prio !! Status !! WV&lt;br /&gt;
|-&lt;br /&gt;
| [[Sicherheitsfunktionen]] || || 99 || 50 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[ Übersicht über verbaute Aktorik und Sensorik in Tabellenform]] || || 2 || 90 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Stromsparmodus]] || || 99 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| || || || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= ToDo-Liste: MCUs - Hardwarenahe Software =&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Arbeitspaket !! Wer !! Prio !! Status !! WV&lt;br /&gt;
|-&lt;br /&gt;
| [[Grundfunktionen der MCU und mehrere MCUs]] || || || 100 ||&lt;br /&gt;
|-	&lt;br /&gt;
| Basisboard: [[Schalten Magnetventile (Labor) STM32-Basisboard]] MATLAB®GUI || || || 100&lt;br /&gt;
|-&lt;br /&gt;
| Basisboard: [[Pumpenansteuerung Basisboard Multi-MCU]] || || || 100 ||&lt;br /&gt;
|- 	 &lt;br /&gt;
| Basisboard: [[Schrittmotorsteuerungen Basisboard Multi-MCU]] || || || 100 ||&lt;br /&gt;
|-&lt;br /&gt;
| Basisboard: [[Tastenerkennung Basisboard Multi-MCU]] || || 1 || 10 || &lt;br /&gt;
|- 	 &lt;br /&gt;
| Basisboard: [[Füllstandserkennung Basisboard Multi-MCU]] || || || 100 ||&lt;br /&gt;
|- 	 &lt;br /&gt;
| Basisboard: [[Durchflussmessung Basisnoard Multi-MCU]] || || || 100 ||&lt;br /&gt;
|- 	  	 	  	 &lt;br /&gt;
| SSR-Platine: [[Schalten Magnetventile SSR-Platine Multi-MCU]] || || || 100 ||&lt;br /&gt;
|- 	 &lt;br /&gt;
| SSR-Platine: [[Schrittmotorsteuerungen SSR-Platine Multi-MCU]] || || || 100 ||&lt;br /&gt;
|-&lt;br /&gt;
| Messplatine: [[Messdatenerfassung Multi-MCU]] || || || 100 ||&lt;br /&gt;
|-&lt;br /&gt;
| || || || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= ToDo-Liste der Grundlagenprogrammierung - MATLAB®-Funktionen und GUI =&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Arbeitspaket !! Wer !! Prio !! Status !! WV&lt;br /&gt;
|-&lt;br /&gt;
| [[MATLAB®-GUI Start der App]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[MATLAB®-GUI Initialisierung Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[MATLAB®-GUI Schalten Magnetventile]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[MATLAB®-GUI Datensicherung]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Messwerte erfassen Multi-MCU]] || || || ||&lt;br /&gt;
|- &lt;br /&gt;
| [[Pumpenansteuerung Multi-MCU]] || || || ||&lt;br /&gt;
|- &lt;br /&gt;
| [[Füllstandsregler Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Regler Boilerdruck Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Mischregler Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Durchflussregler Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Misch-Durchfluss Kaskadenregelung Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Preinfusion Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[einfacher Kaffeebezug Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Kaffeebezug Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Wasserbezug Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Dampfbezug Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Spülvorgänge Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Grundreinigung Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Tastenbedienung Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Display Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Glasboiler Abtropfwanne]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Schrittmotorensteuerung Bypass]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Schrittmotorensteuerung Mischer]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Schrittmotorensteuerung Brühgruppendrossel]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Adaption an Multi-MCU - Neuprogrammierung MATLAB® GUI]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| Dokumentation der Software mit STM32-Elektronik. &amp;lt;br&amp;gt;Ein Betrieb dieser wird nicht mehr weiter verfolgt. || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Messwerte erfassen (Labor)]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Pumpenansteuerung (Labor)]] || ||  || || &lt;br /&gt;
|-&lt;br /&gt;
| [[Füllstandsregler (Labor)]] || ||  || || &lt;br /&gt;
|-&lt;br /&gt;
| [[Regler Boilerdruck (Labor)]] || ||  || ||  &lt;br /&gt;
|-&lt;br /&gt;
| [[Mischregler (Labor)]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Durchflussregler (Labor)]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[einfacher Kaffeebezug (Labor)]] || ||  || ||  &lt;br /&gt;
|-&lt;br /&gt;
| [[Kaffeebezug (Labor)]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Wasserbezug (Labor)]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Dampfbezug]] || ||  || ||  &lt;br /&gt;
|-&lt;br /&gt;
| [[Spülvorgänge (Labor)]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Tastenbedienung (Labor)]] || || || ||  &lt;br /&gt;
|-&lt;br /&gt;
| [[Anpassungen für Schrittmotorensteuerung]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| || || || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= ToDo-Liste: APP =&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Arbeitspaket !! Wer !! Prio !! Status !! WV&lt;br /&gt;
|-&lt;br /&gt;
| [[APP - Konzept]] || || 2 || 10 || &lt;br /&gt;
|- 	 &lt;br /&gt;
| [[Messwerte erfassen APP]] || || 99 || 10 || &lt;br /&gt;
|-&lt;br /&gt;
| [[Preset / Profilverwaltung]] || || 99 || 10 || &lt;br /&gt;
|-&lt;br /&gt;
| || || || ||&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Peter Vogginger</name></author>
	</entry>
	<entry>
		<id>http://www.institut-fuer-kaffeetechnologie.de/Wiki/index.php?title=Systemsoftware&amp;diff=4813</id>
		<title>Systemsoftware</title>
		<link rel="alternate" type="text/html" href="http://www.institut-fuer-kaffeetechnologie.de/Wiki/index.php?title=Systemsoftware&amp;diff=4813"/>
		<updated>2026-01-27T13:05:53Z</updated>

		<summary type="html">&lt;p&gt;Peter Vogginger: /* ToDo-Liste: MCUs - Verlagerung der Regelkreise aus der MATLAB®-GUI auf die Mikrocontroller der Steuerungselektronik */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;htmltag tagname=&amp;quot;img&amp;quot; src=&amp;quot;http://vg04.met.vgwort.de/na/4531f1734b324b72b2d7e566cdf639f0&amp;quot;  width=&amp;quot;1&amp;quot; height=&amp;quot;1&amp;quot; alt=&amp;quot;&amp;quot;&amp;gt;&amp;lt;/htmltag&amp;gt;&lt;br /&gt;
[[Datei:Breites Logoband.png|mini|zentriert|hochkant=2.5]]&amp;lt;br&amp;gt;&lt;br /&gt;
Die Systemsoftware lässt sich nicht ohne die Beachtung der Systemelektronik erstellen.&lt;br /&gt;
&lt;br /&gt;
Für die Systemsoftware wurde ein mehrstufiger Entwicklungsprozess definiert:&lt;br /&gt;
# Nutzung einer MCU auf der MicroPython verwendet werden kann. Dies ist durch das STM32F411 nucleo Board der Basiselektronik bzw. durch den Raspberry Pi Pico der Multi-MCU-Elektronik gegeben.&lt;br /&gt;
# Auf der MCU werden lediglich die elementaren Grundfunktionen (GPIO schalten und erfassen, Messwert erfassen, PWM Ausgeben, Sollwert ausgeben, etc.) realisiert und über eine MicroPython zu MATLAB® Schnittstelle [41] wird die Funktionalität in einer MATLAB® GUI hergestellt.&lt;br /&gt;
# Die Softwareentwicklung startet mit der labortechnischen Espressomaschine und wird auf die weiteren Projekte schrittweise transportiert. Dazu ist die Maschinenelektronik gleich zu halten und es sind die gleichen Anschluss-Pins zu verwenden.&lt;br /&gt;
# Nach Abschluss der Testphase der MATLAB® Bedienung wird schrittweise die Betriebssoftware in MicroPython auf der MCU implementiert, so dass am Ende dieses Prozessschrittes die MATLAB®-Verbindung lediglich für weiterführende Datenerfassung und grafische Darstellungen verwendet wird, welche nicht mit dem Display der Maschine möglich ist oder dort nicht dargestellt werden soll.&lt;br /&gt;
# Ob eine Portierung des MicroPython-Codes nach Microcontroller C durchgeführt wird, ist derzeit nicht entschieden.&lt;br /&gt;
&lt;br /&gt;
Es wurden mehrere, die Softwareentwicklung vorbereitende FMEAs durchgeführt.  Die hierdurch entstandenen Dokumentation befinden sich in der Dokumentationsauflistung. Im weiteren wurde eine Projektarbeit zur Konzeptfindung für die Badienung durchgeführt. Auch die hierdurch entstandenen, teilweise auf die FMEA aufbauenden Dokumente befinden sich in der Dokumentationsliste.&lt;br /&gt;
&lt;br /&gt;
= Projektdokumentationen und Beschreibungen =&lt;br /&gt;
* [[:Datei:20210228 Konzept Systemelektronik.pdf|Konzeptbeschreibung Systemelektronik]]&lt;br /&gt;
* [[:Datei:20210605 Workflow Embedded Systems.pdf|Workflow Embedded Systems]]&lt;br /&gt;
* [[:Datei:20200521 Bericht1 NerminArbi.pdf|Funktionsanalyse Boilerbefüllung, Tassenwärmung, Milchschäumen]]&lt;br /&gt;
* [[:Datei:20200518 Bericht halbauto Entkalkung Egger Alexander.pdf|Funktionsanalyse zur halbautomatischen Entkalkung]]&lt;br /&gt;
* [[:Datei:20200518 V0 4 Bericht Funktionsanalyse Rückspulung-Spulung Sladoje.pdf|Funktionsanalyse Rückspülung und Spülung]]&lt;br /&gt;
* [[:Datei:20200521 Bericht Espresso-Teewasserbezug Urbin.pdf|Funktionsanalyse Espresso und Teewasserbezug]]&lt;br /&gt;
* [[:Datei:20200522 Bericht Funktionsanalyse Energieeffizienz Egger Alexander.pdf|Funktionsanalyse Energieeffizienz]]&lt;br /&gt;
* [[:Datei:20200521 V2 Bericht Funktionsanalyse Bedienung Sladoje.pdf|Funktionsanalyse Bedienung]]&lt;br /&gt;
* [[:Datei:20200525 Bericht Abbildung aller Maschinen Urbin V2.pdf|Funktionsanalyse Abbildung aller Maschinen]]&lt;br /&gt;
* [[:Datei:20200609 Bericht Fehleranalyse Entschichtung.pdf|Fehleranalyse Entschichtung]]&lt;br /&gt;
* [[:Datei:20200610 Fehleranalyse Dampf Brühgruppe Sladoje.pdf|Fehleranalyse Brühgruppe und Dampfbezug]]&lt;br /&gt;
* [[:Datei:20200613 Bericht Fehleranalyse Mischer;Magnetventile V2.pdf|Fehleranalyse Mischer und Magnetventile]]&lt;br /&gt;
* [[:Datei:20200611 Bericht3 NerminArbi.pdf|Fehleranalyse Boiler]]&lt;br /&gt;
* [[:Datei:20200705 Dichtheitsprüfung.pdf|Dichtheitsprüfung]]&lt;br /&gt;
* [[:Datei:20200704 Massnahmen Urbin.pdf|Prüfkonzepte Magnetventile und Mischer]]&lt;br /&gt;
* [[:Datei:20200701 Maßnahmenanalyse NerminArbi.pdf|Maßnahmen Boiler]]&lt;br /&gt;
* [[:Datei:20200628 Maßnahmen Entschichtung zweiter Stand.pdf|Maßnahmen Entschichtung]]&lt;br /&gt;
* [[:Datei:20200627 Maßnahmenkonzept Brühguppe Dampf Sladoje.pdf|Maßnahmen Brühgruppe und Dampf]]&lt;br /&gt;
* [[:Datei:20200707_FMEA.xlsx|FMEA Tabelle]]&lt;br /&gt;
* [[:Datei:20201207_Bedienkonzept.pptx|PPT Simulation des Bedienkonzeptes]]&lt;br /&gt;
* [[:Datei:20210207_Bedienkonzept_Funktionsliste.xlsx|Bedienkonzept Funktionsliste]]&lt;br /&gt;
* [[:Datei:20210219_Bedienkonzept_Projektdokumentation.pdf|Bedienkonzept Projektdokumentation]]&lt;br /&gt;
* [[:Datei:HMProjektBedienoberflaecheEspresso.zip|MATLAB® GUI]]&lt;br /&gt;
* [[Entwicklung Systemsoftware SoSe2022]]&lt;br /&gt;
* [[Entwicklung Systemsoftware SoSe2023]]&lt;br /&gt;
* [[Mikrocontroller Programmierung in MicroPython WiSe 2025/26]]&lt;br /&gt;
&lt;br /&gt;
= [http://www.institut-fuer-kaffeetechnologie.de/Intern/index.php?title=Programmcode Programmcode] =&lt;br /&gt;
Aktueller Programmcode und Änderungsdokumentation ab Jan 2023&lt;br /&gt;
&lt;br /&gt;
= [http://www.institut-fuer-kaffeetechnologie.de/Intern/index.php?title=Software-Bugs Software-Bugs] =&lt;br /&gt;
&lt;br /&gt;
= ToDo-Liste(n) Systemsoftware =&lt;br /&gt;
&lt;br /&gt;
== Prioritätsangabe ==&lt;br /&gt;
Prio 1 - Abarbeitung zeitnah erforderlich&amp;lt;br&amp;gt;&lt;br /&gt;
Prio 2 - Abarbeitung erforderlich&amp;lt;br&amp;gt;&lt;br /&gt;
Prio 3 - Abarbeitung kann warten&amp;lt;br&amp;gt;&lt;br /&gt;
Prio 99 - Abarbeitung erfordert Vorarbeiten&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Status ==&lt;br /&gt;
10 - Erfasst&amp;lt;br&amp;gt;&lt;br /&gt;
30 - in Bearbeitung&amp;lt;br&amp;gt;&lt;br /&gt;
50 - Lösung definiert&amp;lt;br&amp;gt;&lt;br /&gt;
70 - in Umsetzung&amp;lt;br&amp;gt;&lt;br /&gt;
90 - Umsetzung abgeschlossen&amp;lt;br&amp;gt;&lt;br /&gt;
99 - Abbruch per Beschluss (Dokumentation dazu erforderlich)&amp;lt;br&amp;gt;&lt;br /&gt;
100 - Maßnahme bestätigt&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ToDo-Liste: Mechatronische Inbetriebnahme Glasboilermaschine =&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Arbeitspaket !! Wer !! Prio !! Status !! WV&lt;br /&gt;
|-&lt;br /&gt;
| [[Fehlerbehebungen]] || || 1 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Startprozedure]] || ||  1 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Tankfüllstandsregelung]] || || 1 || 10 ||&lt;br /&gt;
|- &lt;br /&gt;
| [[Boilerfüllstandsregelung]] || || 1 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Boilerdruckregelung]] || || 1 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Mischwassertemperaturregelung]] || || 1 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Durchflussregelung]] || || 1 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Kaffeebezug]] || || 2 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Teebezug]] || || 1 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Temperatureinstellung über Vertikalhebel]] || || 1 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Simulation Handhebelmaschine]] || || 1 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Flush/Rückspülreinigung]] || || 1 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| || || || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= ToDo-Liste: MCUs - Verlagerung der Regelkreise aus der MATLAB®-GUI auf die Mikrocontroller der Steuerungselektronik =&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Arbeitspaket !! Wer !! Prio !! Status !! WV&lt;br /&gt;
|-&lt;br /&gt;
| [[Kommunikation per UART|UART Kommunikation zwischen den einzelnen MCUs]] || Peter Vogginger|| 1 || 30 || 29.01.2026&lt;br /&gt;
|-&lt;br /&gt;
| [[Mehrkernnutzung und/oder Multitasking]] || Peter Vogginger||  1 || 30 ||05.02.2026&lt;br /&gt;
|-&lt;br /&gt;
| [[Startprozedur]]&lt;br /&gt;
|Philipp Schiebel&lt;br /&gt;
|1&lt;br /&gt;
|30&lt;br /&gt;
|22.01.2026&lt;br /&gt;
|-&lt;br /&gt;
| [[Verlagerung des Füllstandsreglers auf das Basisboard]] || Philipp Schiebel|| 1 || 30 || 15.01.2026&lt;br /&gt;
|- &lt;br /&gt;
| [[Verlagerung der Boilerdruckregelung auf die Messplatine]] || Philipp Schiebel|| 1 || 30 ||  	 22.01.2026&lt;br /&gt;
|-&lt;br /&gt;
| [[Verlagerung des Mischtemperaturreglers auf das Basisboard]] || Philipp Schiebel|| 1 || 10 || 29.01.2026&lt;br /&gt;
|-&lt;br /&gt;
| [[Verlagerung des Durchflussreglers auf das Basisboard]] || Philipp Schiebel|| 1 || 10 ||  	 29.01.2026&lt;br /&gt;
|-&lt;br /&gt;
| [[Erstellung der Funktionssteuerung - Preinfusion auf dem Basisboard]] || || 2 || 10 || &lt;br /&gt;
|-&lt;br /&gt;
| [[Erstellung der Funktionssteuerung - Kaffeebezug auf dem Basisboard]] || || 1 || 10 || &lt;br /&gt;
|-&lt;br /&gt;
| [[Erstellung der Funktionssteuerung - Wasserbezug auf dem Basisboard]] || || 1 || 10 || &lt;br /&gt;
|-&lt;br /&gt;
| [[Erstellung der Funktionssteuerung - Dampfbezug auf dem Basisboard]] || || 1 || 10 || 	 &lt;br /&gt;
|-&lt;br /&gt;
| [[Erstellung der Funktionssteuerung - Spülen auf dem Basisboard]] || || 1 || 10 ||  &lt;br /&gt;
|-&lt;br /&gt;
| [[Erstellung der Funktionssteuerung - Grundreinigung auf dem Basisboard]] || || 1 || 10 ||  &lt;br /&gt;
|-&lt;br /&gt;
| [[Integration eines Displays mit Touchfunktion]] || || 1 || 30 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Integration eines Vertikalhebels]] || || 1 || 30 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Visualisierung und Interaktion über die MATLAB®-GUI]] || || 1 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Visualisierung und Interaktion über eine WEB-Anwendung]] || || 1 || 10 ||  &lt;br /&gt;
|-&lt;br /&gt;
| [[Maschinensimulator]] || alle|| 1 || 30 ||15.01.2026&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= ToDo-Liste: Allgemeines =&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Arbeitspaket !! Wer !! Prio !! Status !! WV&lt;br /&gt;
|-&lt;br /&gt;
| [[Sicherheitsfunktionen]] || || 99 || 50 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[ Übersicht über verbaute Aktorik und Sensorik in Tabellenform]] || || 2 || 90 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Stromsparmodus]] || || 99 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| || || || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= ToDo-Liste: MCUs - Hardwarenahe Software =&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Arbeitspaket !! Wer !! Prio !! Status !! WV&lt;br /&gt;
|-&lt;br /&gt;
| [[Grundfunktionen der MCU und mehrere MCUs]] || || || 100 ||&lt;br /&gt;
|-	&lt;br /&gt;
| Basisboard: [[Schalten Magnetventile (Labor) STM32-Basisboard]] MATLAB®GUI || || || 100&lt;br /&gt;
|-&lt;br /&gt;
| Basisboard: [[Pumpenansteuerung Basisboard Multi-MCU]] || || || 100 ||&lt;br /&gt;
|- 	 &lt;br /&gt;
| Basisboard: [[Schrittmotorsteuerungen Basisboard Multi-MCU]] || || || 100 ||&lt;br /&gt;
|-&lt;br /&gt;
| Basisboard: [[Tastenerkennung Basisboard Multi-MCU]] || || 1 || 10 || &lt;br /&gt;
|- 	 &lt;br /&gt;
| Basisboard: [[Füllstandserkennung Basisboard Multi-MCU]] || || || 100 ||&lt;br /&gt;
|- 	 &lt;br /&gt;
| Basisboard: [[Durchflussmessung Basisnoard Multi-MCU]] || || || 100 ||&lt;br /&gt;
|- 	  	 	  	 &lt;br /&gt;
| SSR-Platine: [[Schalten Magnetventile SSR-Platine Multi-MCU]] || || || 100 ||&lt;br /&gt;
|- 	 &lt;br /&gt;
| SSR-Platine: [[Schrittmotorsteuerungen SSR-Platine Multi-MCU]] || || || 100 ||&lt;br /&gt;
|-&lt;br /&gt;
| Messplatine: [[Messdatenerfassung Multi-MCU]] || || || 100 ||&lt;br /&gt;
|-&lt;br /&gt;
| || || || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= ToDo-Liste der Grundlagenprogrammierung - MATLAB®-Funktionen und GUI =&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Arbeitspaket !! Wer !! Prio !! Status !! WV&lt;br /&gt;
|-&lt;br /&gt;
| [[MATLAB®-GUI Start der App]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[MATLAB®-GUI Initialisierung Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[MATLAB®-GUI Schalten Magnetventile]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[MATLAB®-GUI Datensicherung]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Messwerte erfassen Multi-MCU]] || || || ||&lt;br /&gt;
|- &lt;br /&gt;
| [[Pumpenansteuerung Multi-MCU]] || || || ||&lt;br /&gt;
|- &lt;br /&gt;
| [[Füllstandsregler Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Regler Boilerdruck Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Mischregler Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Durchflussregler Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Misch-Durchfluss Kaskadenregelung Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Preinfusion Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[einfacher Kaffeebezug Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Kaffeebezug Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Wasserbezug Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Dampfbezug Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Spülvorgänge Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Grundreinigung Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Tastenbedienung Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Display Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Glasboiler Abtropfwanne]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Schrittmotorensteuerung Bypass]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Schrittmotorensteuerung Mischer]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Schrittmotorensteuerung Brühgruppendrossel]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Adaption an Multi-MCU - Neuprogrammierung MATLAB® GUI]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| Dokumentation der Software mit STM32-Elektronik. &amp;lt;br&amp;gt;Ein Betrieb dieser wird nicht mehr weiter verfolgt. || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Messwerte erfassen (Labor)]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Pumpenansteuerung (Labor)]] || ||  || || &lt;br /&gt;
|-&lt;br /&gt;
| [[Füllstandsregler (Labor)]] || ||  || || &lt;br /&gt;
|-&lt;br /&gt;
| [[Regler Boilerdruck (Labor)]] || ||  || ||  &lt;br /&gt;
|-&lt;br /&gt;
| [[Mischregler (Labor)]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Durchflussregler (Labor)]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[einfacher Kaffeebezug (Labor)]] || ||  || ||  &lt;br /&gt;
|-&lt;br /&gt;
| [[Kaffeebezug (Labor)]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Wasserbezug (Labor)]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Dampfbezug]] || ||  || ||  &lt;br /&gt;
|-&lt;br /&gt;
| [[Spülvorgänge (Labor)]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Tastenbedienung (Labor)]] || || || ||  &lt;br /&gt;
|-&lt;br /&gt;
| [[Anpassungen für Schrittmotorensteuerung]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| || || || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= ToDo-Liste: APP =&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Arbeitspaket !! Wer !! Prio !! Status !! WV&lt;br /&gt;
|-&lt;br /&gt;
| [[APP - Konzept]] || || 2 || 10 || &lt;br /&gt;
|- 	 &lt;br /&gt;
| [[Messwerte erfassen APP]] || || 99 || 10 || &lt;br /&gt;
|-&lt;br /&gt;
| [[Preset / Profilverwaltung]] || || 99 || 10 || &lt;br /&gt;
|-&lt;br /&gt;
| || || || ||&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Peter Vogginger</name></author>
	</entry>
	<entry>
		<id>http://www.institut-fuer-kaffeetechnologie.de/Wiki/index.php?title=Mehrkernnutzung_und/oder_Multitasking&amp;diff=4812</id>
		<title>Mehrkernnutzung und/oder Multitasking</title>
		<link rel="alternate" type="text/html" href="http://www.institut-fuer-kaffeetechnologie.de/Wiki/index.php?title=Mehrkernnutzung_und/oder_Multitasking&amp;diff=4812"/>
		<updated>2026-01-15T13:06:49Z</updated>

		<summary type="html">&lt;p&gt;Peter Vogginger: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Peter Vogginger, 15.01.2025&amp;lt;br&amp;gt;Versuch der Mehrkernnutzung =&lt;br /&gt;
Die Mehrkernnutzung wird versuchshalber mit einem zusätzlichen Schrittmotor und der bereits programmierten UART-Kommunikation getestet. Die Schrittmotorsteuerung wird auf den Hauptkern (Core 0) und die Kommunikation auf den 2. Kern (Core 1) verlagert. Diese Aufteilung wird gewählt, da es vermutlich zu einem besserem Motorlauf führt. Dies wird im weiteren Verlauf auch versucht, zu bestätigen.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Versuchsaufbau besteht aus zwei RP2040-Platinen, dem Schrittmotor, sowie dessen Ansteuerung/ Stromversorgung (realisiert auf einer zusätzlichen Platine). Die RP2040-Platinen sind miteinander verkabelt (siehe hierzu Seite [[Kommunikation_per_UART]]). Die Platine mit der Schrittmotorsteuerung ist als Relais in dem Kommunikationsring ausgeführt. Die zweite RP2040 beinhaltet den Code für den ersten Token (Messwert-Platine) und startet die Kommunikation.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Versuchsdurchführung sieht vor, dass der Schrittmotor permanent drehen soll und bei Beginn der Kommunikation die Drehbewegung des Motors beobachtet wird. Der Programmcode des Motors ist frei im Netz erhältlich (Stichwort Stepper Code). Die Kommunikation über UART wird als reines Relais ausgeführt, das heißt der eingehende Token wird kontrolliert und weitergesendet. Dies wurde bereits erfolgreich angewendet. (Siehe hierzu Seite [[Kommunikation_per_UART]]).&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Läuft sowohl die Kommunikation, ersichtlich über das Ausgabefenster in THONNY, und dreht der Motor ebenso, ist die Mehrkernnutzung erfolgreich getestet. Im weiteren Verlauf wird das Drehverhalten der Motorwelle mit und ohne parallele Kommunikation beurteilt und verfeinert.&lt;br /&gt;
Im ersten Versuch zeigt sich, dass sich die Welle des Motors ohne Mehrkernnutzung nahezu ruckfrei dreht, allerdings in paralleler Ausführung sich ein starkes Rucken einstellt. Um dies zu reduzieren, wird die Motor-Ansteuerung auf die spezialisierte Hardware-Einheit PIO des RP2040 verlegt. Sie ermöglicht es, Ein- und Ausgabesignale sehr präzise und unabhängig von der CPU zu steuern, indem eigene kleine Programme (ASM-Code) direkt in der PIO-Hardware ausgeführt werden. Diese ist fest auf dem RP2040 integriert, es wird nur der Programmcode der Schrittmotorsteuerung angepasst.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Daraufhin zeigt sich, dass sich mit dieser Art der Motorsteuerung ein weniger ruckeliges Verhalten während der parallel ablaufenden Kommunikation einstellt. Allerdings ist die Drehung der Motorwelle, ohne die Verwendung der Mehrkernnutzung, weniger flüssig. Dies ist hier allerdings nicht entscheidend.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ebenso zeigt sich, dass die Verlagerung der Kommunikation auf den Nebenkern nicht zu dem oben erwähnten besseren Motorlauf führt. Ganz im Gegenteil, eine Verlagerung der Motorsteuerung auf den Nebenkern (Core1), wobei zugleich die Kommunikation auf dem Hauptkern (Core0) ausgeführt wird, erweist sich als deutlich besser im Hinblick auf den sofortigen Kommunikationsaufbau, und die Motorbewegung ist weniger ruckelig.&amp;lt;br&amp;gt;&lt;br /&gt;
Link zum bisherigen Programmcode: [[Datei:20260108_Test_Dualcorenutzung.zip]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im weiteren Verlauf wird die Positionierung der Schrittmotorwelle mittels Datenwert im Token übermittelt und dessen korrekte Anfahrung getestet. Der Schrittmotor hat hierzu die Position 0. Es gilt, die Übersetzung des Getriebes im Schrittmotor zu beachten. Bisher fehlt hierzu noch der Programmcode. &lt;br /&gt;
&lt;br /&gt;
= Armin Rohnen, 11.04.2024 =&lt;br /&gt;
Grundsätzlich verfügt der ARM-Prozessor der Raspberry Pi Pcio MCU RP2040 über zwei Kerne, die im Gegensatz zu anderen MCUs gleichwertig sein sollen. Die Quellenlage hierzu lässt jedoch eine eindeutige Beurteilung dieser Annahme nicht zu. Eine ggf. verbessernde Quellenlage könnte hierzu neue Ansätze liefern. Für die Verlagerung der Regelkreise auf die MCUs ist zuvor eine Festlegung zu treffen in welcher Form eine Mehrkernnutzung und/oder ein Multitasking implementiert wird.&lt;br /&gt;
&lt;br /&gt;
Damit ist ein Framework für die Systemsteuerung zu definieren. Hierzu sind in der Linksammlung [119] unter Scheduling, Threading und Frameworks einige Libraries aufgelistet. &lt;br /&gt;
&lt;br /&gt;
MicroPython stellt hierzu die Module uasyncio und _thread zur Verfügung. Letzteres verwendet für die Programmausführung den zweiten Prozessorkern. _thread wird allerdings als sehr experimentell bezeichnet. Allerdings lassen sich keine Negativinformation recherchieren.&lt;/div&gt;</summary>
		<author><name>Peter Vogginger</name></author>
	</entry>
	<entry>
		<id>http://www.institut-fuer-kaffeetechnologie.de/Wiki/index.php?title=Mehrkernnutzung_und/oder_Multitasking&amp;diff=4811</id>
		<title>Mehrkernnutzung und/oder Multitasking</title>
		<link rel="alternate" type="text/html" href="http://www.institut-fuer-kaffeetechnologie.de/Wiki/index.php?title=Mehrkernnutzung_und/oder_Multitasking&amp;diff=4811"/>
		<updated>2026-01-15T12:58:48Z</updated>

		<summary type="html">&lt;p&gt;Peter Vogginger: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Peter Vogginger, 15.01.2025&amp;lt;br&amp;gt;Versuch der Mehrkernnutzung =&lt;br /&gt;
Die Mehrkernnutzung wird versuchshalber mit einem zusätzlichen Schrittmotor und der bereits programmierten UART-Kommunikation getestet. Die Schrittmotorsteuerung wird auf den Hauptkern (Core 0) und die Kommunikation auf den 2. Kern (Core 1) verlagert. Diese Aufteilung wird gewählt, da es vermutlich zu einem besserem Motorlauf führt. Dies wird im weiteren Verlauf auch versucht, zu bestätigen.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Versuchsaufbau besteht aus zwei RP2040-Platinen, dem Schrittmotor, sowie dessen Ansteuerung/ Stromversorgung (realisiert auf einer zusätzlichen Platine). Die RP2040-Platinen sind miteinander verkabelt (siehe hierzu Seite [[Kommunikation_per_UART]]). Die Platine mit der Schrittmotorsteuerung ist als Relais in dem Kommunikationsring ausgeführt. Die zweite RP2040 beinhaltet den Code für den ersten Token (Messwert-Platine) und startet die Kommunikation.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Versuchsdurchführung sieht vor, dass der Schrittmotor permanent drehen soll und bei Beginn der Kommunikation die Drehbewegung des Motors beobachtet wird. Der Programmcode des Motors ist frei im Netz erhältlich (Stichwort Stepper Code). Die Kommunikation über UART wird als reines Relais ausgeführt, das heißt der eingehende Token wird kontrolliert und weitergesendet. Dies wurde bereits erfolgreich angewendet. (Siehe hierzu Seite [[Kommunikation_per_UART]]).&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Läuft sowohl die Kommunikation, ersichtlich über das Ausgabefenster in THONNY, und dreht der Motor ebenso, ist die Mehrkernnutzung erfolgreich getestet. Im weiteren Verlauf wird das Drehverhalten der Motorwelle mit und ohne parallele Kommunikation beurteilt und verfeinert.&lt;br /&gt;
Im ersten Versuch zeigt sich, dass sich die Welle des Motors ohne Mehrkernnutzung nahezu ruckfrei dreht, allerdings in paralleler Ausführung sich ein starkes Rucken einstellt. Um dies zu reduzieren, wird die Motor-Ansteuerung auf die spezialisierte Hardware-Einheit PIO des RP2040 verlegt. Sie ermöglicht es, Ein- und Ausgabesignale sehr präzise und unabhängig von der CPU zu steuern, indem eigene kleine Programme (ASM-Code) direkt in der PIO-Hardware ausgeführt werden. Diese ist fest auf dem RP2040 integriert, es wird nur der Programmcode der Schrittmotorsteuerung angepasst.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Daraufhin zeigt sich, dass sich mit dieser Art der Motorsteuerung ein weniger ruckeliges Verhalten während der parallel ablaufenden Kommunikation einstellt. Allerdings ist die Drehung der Motorwelle, ohne die Verwendung der Mehrkernnutzung, weniger flüssig. Dies ist hier allerdings nicht entscheidend.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ebenso zeigt sich, dass die Verlagerung der Kommunikation auf den Nebenkern nicht zu dem oben erwähnten besseren Motorlauf führt. Ganz im Gegenteil, eine Verlagerung der Motorsteuerung auf den Nebenkern (Core1), wobei zugleich die Kommunikation auf dem Hauptkern (Core0) ausgeführt wird, erweist sich als deutlich besser im Hinblick auf den sofortigen Kommunikationsaufbau, und die Motorbewegung ist weniger ruckelig.&lt;br /&gt;
Im weiteren Verlauf wird die Positionierung der Schrittmotorwelle mittels Datenwert im Token übermittelt und dessen korrekte Anfahrung getestet. Der Schrittmotor hat hierzu die Position 0. Es gilt, die Übersetzung des Getriebes im Schrittmotor zu beachten. Bisher fehlt noch der Programmcode. &lt;br /&gt;
&lt;br /&gt;
= Armin Rohnen, 11.04.2024 =&lt;br /&gt;
Grundsätzlich verfügt der ARM-Prozessor der Raspberry Pi Pcio MCU RP2040 über zwei Kerne, die im Gegensatz zu anderen MCUs gleichwertig sein sollen. Die Quellenlage hierzu lässt jedoch eine eindeutige Beurteilung dieser Annahme nicht zu. Eine ggf. verbessernde Quellenlage könnte hierzu neue Ansätze liefern. Für die Verlagerung der Regelkreise auf die MCUs ist zuvor eine Festlegung zu treffen in welcher Form eine Mehrkernnutzung und/oder ein Multitasking implementiert wird.&lt;br /&gt;
&lt;br /&gt;
Damit ist ein Framework für die Systemsteuerung zu definieren. Hierzu sind in der Linksammlung [119] unter Scheduling, Threading und Frameworks einige Libraries aufgelistet. &lt;br /&gt;
&lt;br /&gt;
MicroPython stellt hierzu die Module uasyncio und _thread zur Verfügung. Letzteres verwendet für die Programmausführung den zweiten Prozessorkern. _thread wird allerdings als sehr experimentell bezeichnet. Allerdings lassen sich keine Negativinformation recherchieren.&lt;/div&gt;</summary>
		<author><name>Peter Vogginger</name></author>
	</entry>
	<entry>
		<id>http://www.institut-fuer-kaffeetechnologie.de/Wiki/index.php?title=Systemsoftware&amp;diff=4809</id>
		<title>Systemsoftware</title>
		<link rel="alternate" type="text/html" href="http://www.institut-fuer-kaffeetechnologie.de/Wiki/index.php?title=Systemsoftware&amp;diff=4809"/>
		<updated>2026-01-12T17:37:11Z</updated>

		<summary type="html">&lt;p&gt;Peter Vogginger: /* ToDo-Liste: MCUs - Verlagerung der Regelkreise aus der MATLAB®-GUI auf die Mikrocontroller der Steuerungselektronik */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;htmltag tagname=&amp;quot;img&amp;quot; src=&amp;quot;http://vg04.met.vgwort.de/na/4531f1734b324b72b2d7e566cdf639f0&amp;quot;  width=&amp;quot;1&amp;quot; height=&amp;quot;1&amp;quot; alt=&amp;quot;&amp;quot;&amp;gt;&amp;lt;/htmltag&amp;gt;&lt;br /&gt;
[[Datei:Breites Logoband.png|mini|zentriert|hochkant=2.5]]&amp;lt;br&amp;gt;&lt;br /&gt;
Die Systemsoftware lässt sich nicht ohne die Beachtung der Systemelektronik erstellen.&lt;br /&gt;
&lt;br /&gt;
Für die Systemsoftware wurde ein mehrstufiger Entwicklungsprozess definiert:&lt;br /&gt;
# Nutzung einer MCU auf der MicroPython verwendet werden kann. Dies ist durch das STM32F411 nucleo Board der Basiselektronik bzw. durch den Raspberry Pi Pico der Multi-MCU-Elektronik gegeben.&lt;br /&gt;
# Auf der MCU werden lediglich die elementaren Grundfunktionen (GPIO schalten und erfassen, Messwert erfassen, PWM Ausgeben, Sollwert ausgeben, etc.) realisiert und über eine MicroPython zu MATLAB® Schnittstelle [41] wird die Funktionalität in einer MATLAB® GUI hergestellt.&lt;br /&gt;
# Die Softwareentwicklung startet mit der labortechnischen Espressomaschine und wird auf die weiteren Projekte schrittweise transportiert. Dazu ist die Maschinenelektronik gleich zu halten und es sind die gleichen Anschluss-Pins zu verwenden.&lt;br /&gt;
# Nach Abschluss der Testphase der MATLAB® Bedienung wird schrittweise die Betriebssoftware in MicroPython auf der MCU implementiert, so dass am Ende dieses Prozessschrittes die MATLAB®-Verbindung lediglich für weiterführende Datenerfassung und grafische Darstellungen verwendet wird, welche nicht mit dem Display der Maschine möglich ist oder dort nicht dargestellt werden soll.&lt;br /&gt;
# Ob eine Portierung des MicroPython-Codes nach Microcontroller C durchgeführt wird, ist derzeit nicht entschieden.&lt;br /&gt;
&lt;br /&gt;
Es wurden mehrere, die Softwareentwicklung vorbereitende FMEAs durchgeführt.  Die hierdurch entstandenen Dokumentation befinden sich in der Dokumentationsauflistung. Im weiteren wurde eine Projektarbeit zur Konzeptfindung für die Badienung durchgeführt. Auch die hierdurch entstandenen, teilweise auf die FMEA aufbauenden Dokumente befinden sich in der Dokumentationsliste.&lt;br /&gt;
&lt;br /&gt;
= Projektdokumentationen und Beschreibungen =&lt;br /&gt;
* [[:Datei:20210228 Konzept Systemelektronik.pdf|Konzeptbeschreibung Systemelektronik]]&lt;br /&gt;
* [[:Datei:20210605 Workflow Embedded Systems.pdf|Workflow Embedded Systems]]&lt;br /&gt;
* [[:Datei:20200521 Bericht1 NerminArbi.pdf|Funktionsanalyse Boilerbefüllung, Tassenwärmung, Milchschäumen]]&lt;br /&gt;
* [[:Datei:20200518 Bericht halbauto Entkalkung Egger Alexander.pdf|Funktionsanalyse zur halbautomatischen Entkalkung]]&lt;br /&gt;
* [[:Datei:20200518 V0 4 Bericht Funktionsanalyse Rückspulung-Spulung Sladoje.pdf|Funktionsanalyse Rückspülung und Spülung]]&lt;br /&gt;
* [[:Datei:20200521 Bericht Espresso-Teewasserbezug Urbin.pdf|Funktionsanalyse Espresso und Teewasserbezug]]&lt;br /&gt;
* [[:Datei:20200522 Bericht Funktionsanalyse Energieeffizienz Egger Alexander.pdf|Funktionsanalyse Energieeffizienz]]&lt;br /&gt;
* [[:Datei:20200521 V2 Bericht Funktionsanalyse Bedienung Sladoje.pdf|Funktionsanalyse Bedienung]]&lt;br /&gt;
* [[:Datei:20200525 Bericht Abbildung aller Maschinen Urbin V2.pdf|Funktionsanalyse Abbildung aller Maschinen]]&lt;br /&gt;
* [[:Datei:20200609 Bericht Fehleranalyse Entschichtung.pdf|Fehleranalyse Entschichtung]]&lt;br /&gt;
* [[:Datei:20200610 Fehleranalyse Dampf Brühgruppe Sladoje.pdf|Fehleranalyse Brühgruppe und Dampfbezug]]&lt;br /&gt;
* [[:Datei:20200613 Bericht Fehleranalyse Mischer;Magnetventile V2.pdf|Fehleranalyse Mischer und Magnetventile]]&lt;br /&gt;
* [[:Datei:20200611 Bericht3 NerminArbi.pdf|Fehleranalyse Boiler]]&lt;br /&gt;
* [[:Datei:20200705 Dichtheitsprüfung.pdf|Dichtheitsprüfung]]&lt;br /&gt;
* [[:Datei:20200704 Massnahmen Urbin.pdf|Prüfkonzepte Magnetventile und Mischer]]&lt;br /&gt;
* [[:Datei:20200701 Maßnahmenanalyse NerminArbi.pdf|Maßnahmen Boiler]]&lt;br /&gt;
* [[:Datei:20200628 Maßnahmen Entschichtung zweiter Stand.pdf|Maßnahmen Entschichtung]]&lt;br /&gt;
* [[:Datei:20200627 Maßnahmenkonzept Brühguppe Dampf Sladoje.pdf|Maßnahmen Brühgruppe und Dampf]]&lt;br /&gt;
* [[:Datei:20200707_FMEA.xlsx|FMEA Tabelle]]&lt;br /&gt;
* [[:Datei:20201207_Bedienkonzept.pptx|PPT Simulation des Bedienkonzeptes]]&lt;br /&gt;
* [[:Datei:20210207_Bedienkonzept_Funktionsliste.xlsx|Bedienkonzept Funktionsliste]]&lt;br /&gt;
* [[:Datei:20210219_Bedienkonzept_Projektdokumentation.pdf|Bedienkonzept Projektdokumentation]]&lt;br /&gt;
* [[:Datei:HMProjektBedienoberflaecheEspresso.zip|MATLAB® GUI]]&lt;br /&gt;
* [[Entwicklung Systemsoftware SoSe2022]]&lt;br /&gt;
* [[Entwicklung Systemsoftware SoSe2023]]&lt;br /&gt;
* [[Mikrocontroller Programmierung in MicroPython WiSe 2025/26]]&lt;br /&gt;
&lt;br /&gt;
= [http://www.institut-fuer-kaffeetechnologie.de/Intern/index.php?title=Programmcode Programmcode] =&lt;br /&gt;
Aktueller Programmcode und Änderungsdokumentation ab Jan 2023&lt;br /&gt;
&lt;br /&gt;
= [http://www.institut-fuer-kaffeetechnologie.de/Intern/index.php?title=Software-Bugs Software-Bugs] =&lt;br /&gt;
&lt;br /&gt;
= ToDo-Liste(n) Systemsoftware =&lt;br /&gt;
&lt;br /&gt;
== Prioritätsangabe ==&lt;br /&gt;
Prio 1 - Abarbeitung zeitnah erforderlich&amp;lt;br&amp;gt;&lt;br /&gt;
Prio 2 - Abarbeitung erforderlich&amp;lt;br&amp;gt;&lt;br /&gt;
Prio 3 - Abarbeitung kann warten&amp;lt;br&amp;gt;&lt;br /&gt;
Prio 99 - Abarbeitung erfordert Vorarbeiten&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Status ==&lt;br /&gt;
10 - Erfasst&amp;lt;br&amp;gt;&lt;br /&gt;
30 - in Bearbeitung&amp;lt;br&amp;gt;&lt;br /&gt;
50 - Lösung definiert&amp;lt;br&amp;gt;&lt;br /&gt;
70 - in Umsetzung&amp;lt;br&amp;gt;&lt;br /&gt;
90 - Umsetzung abgeschlossen&amp;lt;br&amp;gt;&lt;br /&gt;
99 - Abbruch per Beschluss (Dokumentation dazu erforderlich)&amp;lt;br&amp;gt;&lt;br /&gt;
100 - Maßnahme bestätigt&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ToDo-Liste: Mechatronische Inbetriebnahme Glasboilermaschine =&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Arbeitspaket !! Wer !! Prio !! Status !! WV&lt;br /&gt;
|-&lt;br /&gt;
| [[Fehlerbehebungen]] || || 1 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Startprozedure]] || ||  1 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Tankfüllstandsregelung]] || || 1 || 10 ||&lt;br /&gt;
|- &lt;br /&gt;
| [[Boilerfüllstandsregelung]] || || 1 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Boilerdruckregelung]] || || 1 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Mischwassertemperaturregelung]] || || 1 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Durchflussregelung]] || || 1 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Kaffeebezug]] || || 2 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Teebezug]] || || 1 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Temperatureinstellung über Vertikalhebel]] || || 1 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Simulation Handhebelmaschine]] || || 1 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Flush/Rückspülreinigung]] || || 1 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| || || || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= ToDo-Liste: MCUs - Verlagerung der Regelkreise aus der MATLAB®-GUI auf die Mikrocontroller der Steuerungselektronik =&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Arbeitspaket !! Wer !! Prio !! Status !! WV&lt;br /&gt;
|-&lt;br /&gt;
| [[Kommunikation per UART|UART Kommunikation zwischen den einzelnen MCUs]] || Peter Vogginger|| 1 || 30 || 15.01.2026&lt;br /&gt;
|-&lt;br /&gt;
| [[Mehrkernnutzung und/oder Multitasking]] || Peter Vogginger||  1 || 30 ||05.02.2026&lt;br /&gt;
|-&lt;br /&gt;
| [[Startprozedur]]&lt;br /&gt;
|Philipp Schiebel&lt;br /&gt;
|1&lt;br /&gt;
|30&lt;br /&gt;
|18.12.2025&lt;br /&gt;
|-&lt;br /&gt;
| [[Verlagerung des Füllstandsreglers auf das Basisboard]] || Philipp Schiebel|| 1 || 30 || (27.12.2025)&lt;br /&gt;
|- &lt;br /&gt;
| [[Verlagerung der Boilerdruckregelung auf die Messplatine]] || Philipp Schiebel|| 1 || 30 ||  	 (02.01.2026)&lt;br /&gt;
|-&lt;br /&gt;
| [[Verlagerung des Mischtemperaturreglers auf das Basisboard]] || Philipp Schiebel|| 1 || 10 || 15.01.2025&lt;br /&gt;
|-&lt;br /&gt;
| [[Verlagerung des Durchflussreglers auf das Basisboard]] || Philipp Schiebel|| 1 || 10 ||  	 29.01.2025&lt;br /&gt;
|-&lt;br /&gt;
| [[Erstellung der Funktionssteuerung - Preinfusion auf dem Basisboard]] || || 2 || 10 || &lt;br /&gt;
|-&lt;br /&gt;
| [[Erstellung der Funktionssteuerung - Kaffeebezug auf dem Basisboard]] || || 1 || 10 || &lt;br /&gt;
|-&lt;br /&gt;
| [[Erstellung der Funktionssteuerung - Wasserbezug auf dem Basisboard]] || || 1 || 10 || &lt;br /&gt;
|-&lt;br /&gt;
| [[Erstellung der Funktionssteuerung - Dampfbezug auf dem Basisboard]] || || 1 || 10 || 	 &lt;br /&gt;
|-&lt;br /&gt;
| [[Erstellung der Funktionssteuerung - Spülen auf dem Basisboard]] || || 1 || 10 ||  &lt;br /&gt;
|-&lt;br /&gt;
| [[Erstellung der Funktionssteuerung - Grundreinigung auf dem Basisboard]] || || 1 || 10 ||  &lt;br /&gt;
|-&lt;br /&gt;
| [[Integration eines Displays mit Touchfunktion]] || || 1 || 30 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Integration eines Vertikalhebels]] || || 1 || 30 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Visualisierung und Interaktion über die MATLAB®-GUI]] || || 1 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Visualisierung und Interaktion über eine WEB-Anwendung]] || || 1 || 10 ||  &lt;br /&gt;
|-&lt;br /&gt;
| [[Maschinensimulator]] || alle|| 1 || 30 ||18.12.2025&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= ToDo-Liste: Allgemeines =&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Arbeitspaket !! Wer !! Prio !! Status !! WV&lt;br /&gt;
|-&lt;br /&gt;
| [[Sicherheitsfunktionen]] || || 99 || 50 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[ Übersicht über verbaute Aktorik und Sensorik in Tabellenform]] || || 2 || 90 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Stromsparmodus]] || || 99 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| || || || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= ToDo-Liste: MCUs - Hardwarenahe Software =&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Arbeitspaket !! Wer !! Prio !! Status !! WV&lt;br /&gt;
|-&lt;br /&gt;
| [[Grundfunktionen der MCU und mehrere MCUs]] || || || 100 ||&lt;br /&gt;
|-	&lt;br /&gt;
| Basisboard: [[Schalten Magnetventile (Labor) STM32-Basisboard]] MATLAB®GUI || || || 100&lt;br /&gt;
|-&lt;br /&gt;
| Basisboard: [[Pumpenansteuerung Basisboard Multi-MCU]] || || || 100 ||&lt;br /&gt;
|- 	 &lt;br /&gt;
| Basisboard: [[Schrittmotorsteuerungen Basisboard Multi-MCU]] || || || 100 ||&lt;br /&gt;
|-&lt;br /&gt;
| Basisboard: [[Tastenerkennung Basisboard Multi-MCU]] || || 1 || 10 || &lt;br /&gt;
|- 	 &lt;br /&gt;
| Basisboard: [[Füllstandserkennung Basisboard Multi-MCU]] || || || 100 ||&lt;br /&gt;
|- 	 &lt;br /&gt;
| Basisboard: [[Durchflussmessung Basisnoard Multi-MCU]] || || || 100 ||&lt;br /&gt;
|- 	  	 	  	 &lt;br /&gt;
| SSR-Platine: [[Schalten Magnetventile SSR-Platine Multi-MCU]] || || || 100 ||&lt;br /&gt;
|- 	 &lt;br /&gt;
| SSR-Platine: [[Schrittmotorsteuerungen SSR-Platine Multi-MCU]] || || || 100 ||&lt;br /&gt;
|-&lt;br /&gt;
| Messplatine: [[Messdatenerfassung Multi-MCU]] || || || 100 ||&lt;br /&gt;
|-&lt;br /&gt;
| || || || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= ToDo-Liste der Grundlagenprogrammierung - MATLAB®-Funktionen und GUI =&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Arbeitspaket !! Wer !! Prio !! Status !! WV&lt;br /&gt;
|-&lt;br /&gt;
| [[MATLAB®-GUI Start der App]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[MATLAB®-GUI Initialisierung Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[MATLAB®-GUI Schalten Magnetventile]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[MATLAB®-GUI Datensicherung]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Messwerte erfassen Multi-MCU]] || || || ||&lt;br /&gt;
|- &lt;br /&gt;
| [[Pumpenansteuerung Multi-MCU]] || || || ||&lt;br /&gt;
|- &lt;br /&gt;
| [[Füllstandsregler Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Regler Boilerdruck Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Mischregler Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Durchflussregler Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Misch-Durchfluss Kaskadenregelung Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Preinfusion Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[einfacher Kaffeebezug Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Kaffeebezug Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Wasserbezug Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Dampfbezug Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Spülvorgänge Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Grundreinigung Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Tastenbedienung Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Display Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Glasboiler Abtropfwanne]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Schrittmotorensteuerung Bypass]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Schrittmotorensteuerung Mischer]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Schrittmotorensteuerung Brühgruppendrossel]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Adaption an Multi-MCU - Neuprogrammierung MATLAB® GUI]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| Dokumentation der Software mit STM32-Elektronik. &amp;lt;br&amp;gt;Ein Betrieb dieser wird nicht mehr weiter verfolgt. || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Messwerte erfassen (Labor)]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Pumpenansteuerung (Labor)]] || ||  || || &lt;br /&gt;
|-&lt;br /&gt;
| [[Füllstandsregler (Labor)]] || ||  || || &lt;br /&gt;
|-&lt;br /&gt;
| [[Regler Boilerdruck (Labor)]] || ||  || ||  &lt;br /&gt;
|-&lt;br /&gt;
| [[Mischregler (Labor)]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Durchflussregler (Labor)]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[einfacher Kaffeebezug (Labor)]] || ||  || ||  &lt;br /&gt;
|-&lt;br /&gt;
| [[Kaffeebezug (Labor)]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Wasserbezug (Labor)]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Dampfbezug]] || ||  || ||  &lt;br /&gt;
|-&lt;br /&gt;
| [[Spülvorgänge (Labor)]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Tastenbedienung (Labor)]] || || || ||  &lt;br /&gt;
|-&lt;br /&gt;
| [[Anpassungen für Schrittmotorensteuerung]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| || || || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= ToDo-Liste: APP =&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Arbeitspaket !! Wer !! Prio !! Status !! WV&lt;br /&gt;
|-&lt;br /&gt;
| [[APP - Konzept]] || || 2 || 10 || &lt;br /&gt;
|- 	 &lt;br /&gt;
| [[Messwerte erfassen APP]] || || 99 || 10 || &lt;br /&gt;
|-&lt;br /&gt;
| [[Preset / Profilverwaltung]] || || 99 || 10 || &lt;br /&gt;
|-&lt;br /&gt;
| || || || ||&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Peter Vogginger</name></author>
	</entry>
	<entry>
		<id>http://www.institut-fuer-kaffeetechnologie.de/Wiki/index.php?title=Kommunikation_per_UART&amp;diff=4808</id>
		<title>Kommunikation per UART</title>
		<link rel="alternate" type="text/html" href="http://www.institut-fuer-kaffeetechnologie.de/Wiki/index.php?title=Kommunikation_per_UART&amp;diff=4808"/>
		<updated>2026-01-08T13:41:23Z</updated>

		<summary type="html">&lt;p&gt;Peter Vogginger: /* Peter Vogginger, 18.12.2025 Setter und Getter für Bits und Bytes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Peter Vogginger, 18.12.2025&amp;lt;br&amp;gt; Setter und Getter für Bits und Bytes =&lt;br /&gt;
Beim Arbeiten mit binären Daten ist der Einsatz von Setter- und Getter-Funktionen sinnvoll, da &lt;br /&gt;
sie den Code übersichtlicher machen und Fehler durch direkte Bit- oder Bytemanipulation &lt;br /&gt;
vermeiden. Ein Setter verändert einen Wert in einem Bytearray, während ein Getter einen &lt;br /&gt;
bestehenden Wert ausliest. Der Setter wird bei Bits in Form von zwei Funktionen beschrieben, &lt;br /&gt;
einmal das Setzen eines Bits auf 1 und das Löschen eines Bits. Letzteres meint das Setzen eines &lt;br /&gt;
Bits auf 0. &lt;br /&gt;
&lt;br /&gt;
Zum Setzen einzelner Bits (siehe linke Grafik in der Abbildung 4) wird zunächst aus dem Bitindex &lt;br /&gt;
eine Bitmaske erzeugt, indem der Wert 1 entsprechend nach links verschoben wird (1 &amp;lt;&amp;lt; &lt;br /&gt;
bit_index). Durch eine OR-Verknüpfung des Bytes mit dieser Maske wird das betreffende Bit &lt;br /&gt;
zuverlässig auf den Wert 1 gesetzt.&lt;br /&gt;
&lt;br /&gt;
Zum Löschen eines Bits (siehe zweite Grafik von links in der Abbildung 4) wird dieselbe Maske &lt;br /&gt;
invertiert und das Byte anschließend mit einer AND-Verknüpfung verarbeitet. Dadurch wird das &lt;br /&gt;
Zielbit sicher auf den Wert 0 gesetzt. Beide Operationen verändern ausschließlich das &lt;br /&gt;
gewünschte Bit, alle anderen Bits im Byte bleiben unverändert.&lt;br /&gt;
&lt;br /&gt;
Das Auslesen eines Bits (siehe mittlere Grafik in der Abbildung 4) erfolgt, indem das &lt;br /&gt;
entsprechende Byte um den Bitindex nach rechts verschoben und anschließend mit 1 maskiert &lt;br /&gt;
wird. Auf diese Weise wird das Zielbit isoliert und als Wert 0 oder 1 zurückgegeben. &lt;br /&gt;
Für die Verarbeitung ganzer Messwerte, die aus ein oder zwei Bytes bestehen, werden ebenfalls &lt;br /&gt;
Setter und Getter verwendet.&lt;br /&gt;
&lt;br /&gt;
Beim Schreiben von Bytes (siehe vierte Grafik von links in der Abbildung 4) wird der Integerwert &lt;br /&gt;
im Big-Endian-Format in zwei Bytes umgewandelt und an der vorgesehenen Position im &lt;br /&gt;
Bytearray gespeichert.&lt;br /&gt;
&lt;br /&gt;
Big-Endian-Format bedeutet, dass bei mehrbyteigen Werten das höherwertige Byte (MSB) zuerst &lt;br /&gt;
gespeichert oder übertragen wird, gefolgt vom niederwertigen Byte (LSB). Im Gegensatz dazu &lt;br /&gt;
gibt es noch das Format Little-Endian. Hierbei ist die Reihenfolge genau umgekehrt, das &lt;br /&gt;
niederwertiges Byte wird zuerst übertragen. Entscheidend ist, dass Sender und Empfänger &lt;br /&gt;
dieselbe Endianess verwenden, sonst entstehen falsche Werte.&lt;br /&gt;
&lt;br /&gt;
Das Auslesen von Bytes (siehe rechte Grafik in der Abbildung 4) erfolgt durch Entnehmen von &lt;br /&gt;
einem (oder zwei Bytes) und deren Rückwandlung in einen Integer. Da beide Funktionen &lt;br /&gt;
dasselbe Format Big-Endian verwenden, wird der Messwert exakt so zurückgegeben, wie er &lt;br /&gt;
zuvor gespeichert wurde.&lt;br /&gt;
&lt;br /&gt;
Die genannten fünf Funktionen werden in die Datei utils.py geschrieben. Diese Datei wird auf jeder Platine hinterlegt. &amp;lt;br /&amp;gt; &lt;br /&gt;
Beispielaufruf: utils.set_bytes(token, ort, wert)&lt;br /&gt;
&lt;br /&gt;
[[Datei:Setter Getter.png|thumb|1000px|gerahmt|zentriert|alternativtext=Funktionsablauf Setter und Getter, (c) Peter Vogginger|Funktionsablauf Setter und Getter, (c) Peter Vogginger]]&lt;br /&gt;
&lt;br /&gt;
= Armin Rohnen, 13.12.2025&amp;lt;br&amp;gt;Espressomaschinen-Kommunikations-Ring Timing =&lt;br /&gt;
[[Datei:20251213 EKR-Timing.png|thumb|1000px|gerahmt|zentriert|alternativtext=EKR Timing Diagramm, (c) Armin Rohnen|EKR Timing Diagramm, (c) Armin Rohnen]]&lt;br /&gt;
Das Timing des Espressomaschinen-Kommunikations-Rings erfolgt durch die Taktung des ADCs der Messwertplatine. Dieser kann mit einer maximalen Abtastrate von 860 SPS (Samples per Second) betrieben werden. Da jeder 1. Messwert verworfen werden muss und insgesamt 8 Messkanäle berücksichtigt werden müssen, beträgt die effektive Abtastrate 53,75 Hz bzw. alle 18,6 ms steht damit ein neuer Messwertdatensatz zur Verfügung und es wird der Token an die Basisplatine (bas) gesendet. Nach aktuellem Stand (12. Dezember 2025) besteht der Token aus 74 Bytes, was 740 Transferbits ergibt und mit der definierten Transferrate von 230.400 Baud eine Übertragungszeit von 3,2 ms erfordert.&lt;br /&gt;
&lt;br /&gt;
Der Kommunikationsring ist mit der Abfolge - Messwertplatine -&amp;gt; Basisplatine -&amp;gt; SSR-Platine -&amp;gt; Displayplatine -&amp;gt; (Maschinensimulator) -&amp;gt; Messwertplatine definiert. Außer auf der Messwertplatine wird jeweils der Token empfangen, danach die erforderlichen Programmcodes ausgeführt und Änderungen am Token vorgenommen um ihn abschließend an die nächste Platine weiter zu senden. Bei Einstellvorgängen des Dosierventils auf der SSR-Platine wird dies so nicht funktionieren, da die Verstellung des Schrittmotors zu lange dauern wird.&lt;br /&gt;
&lt;br /&gt;
Wird die Kommunikation so wie beschrieben separat betrachtet, dann summiert sich die Transferzeit auf 12,8 ms (bzw. 16 ms mit eingebundenen Maschinensimulator) bis dass der dann mit Änderungen versehene Token wieder an der Messwertplatine angekommen ist. Alle 18,6 ms sendet bei höchster Abtastrate die Messwertplatine den Token erneut. Damit keine Informationen verloren gehen, bleiben insgesamt 5,8 ms Rechenzeit für alle im Ring befindlichen Platinen übrig. Die Messwertplatine fügt aus diesem Grund die Messwerte erst direkt vor dem Senden des Tokens darin ein.&lt;br /&gt;
&lt;br /&gt;
Da eine Summenrechenzeit von 5,8 ms sehr knapp ist, ist zu prüfen, ob der Betrieb in maximaler ADC-Abtastrat emöglich ist.&lt;br /&gt;
&lt;br /&gt;
Eine Reduzierung auf die Abtastrate 475 SPS würde den Token-Aktualisierungstakt auf 33,7 ms (29,7 Hz) erhöhen. Da die kummulierte Übertragungszeit mit 12,8 ms gleich bleibt, ergäbe sich dann eine Restrechenzeit von 20,9 ms. Da der aktualisierte Token, in dem die Messwertplatine wieder Änderungen einfügen darf, dann erst nach dem 3. Messwert eintrifft, ist weiterhin eine Zwischenspeicherung der erfassten Messdaten erforderlich.&lt;br /&gt;
&lt;br /&gt;
= Armin Rohnen, 30.11.2025&amp;lt;br&amp;gt; Kommunikationsstart und kontinuierliches Sendendes Token im ADC Takt der Messwertplatine =&lt;br /&gt;
Über die Messwertplatine wird der Kommunikationsstart realisiert. Damit dies nicht direkt beim Einschalten erfolgt ist der zugehörige Code in der Datei main_mwp.py abgelegt. Wird diese Datei ausgeführt, dann startet die Kommunikation zwischen den Platinen und im Weiteren erfolgt der Maschinenstart.&lt;br /&gt;
&lt;br /&gt;
Aktuell müssen die Variablen UART_TimeOut, token und uart global definiert werden. Werden diese zu einem späteren Zeitpunkt in main.py initialisiert, dann sind diese automatisch global.&lt;br /&gt;
&lt;br /&gt;
Es wird der Initialtoken mit 75-Bytes angelegt und in Byte[0] wird &amp;quot;0x0A&amp;quot; eingetragen. Sollte es sich ergeben, dass die Tokendefinition noch zu weiteren Bytes führt, dann ist dies an den entsprechenden Stellen der main.py auf den Platinen einzutragen. &lt;br /&gt;
&lt;br /&gt;
Im weiteren Ablauf wird die uart-Schnittstelle initialisiert. In der Datei uart_lib.py ist die Klassendefinition des UARTHandler hinterlegt. Diese konfiguriert die uart-Schnittstelle. Im Konstruktor der Klasse ist hinterlegt, dass per UART.IRQ_RXIDLE auf eingehende Daten an der uart-Schnittstelle ragiert wird. Es wird als erstes die Methode _uart_rx_handler aufgerufen, welche sich innerhalb der Klasse befindet. Darin werden lediglich die Daten eingelsen und auf die Methode on_receive weiterverwiesen. Die Methode on_receive ist in allen Realisierungen gleich und prüft auf empfangene Datenlänge und auf das gültige Startzeichen. Danach wird auf die Methode local_receive weitergeleitet.&lt;br /&gt;
&lt;br /&gt;
Die Methode uart.local_receive aus der Klassendefinition wird durch uart.local_receive = mwp_receive_handler mit der in main_mwp.py befindlichen Funktion ersetzt. Da der zu erwartende Token eingegangen ist, wird als erstes die UART-TimeOut-Funktion deaktiviert. Es wird geprüft, ob die Sicherheitsfunktion aufgerufen werden muss oder ob der Token abgearbeitet werden kann. Handelt es sich bei dem empfangenen Token um den ersten Token, werden aktuell das Default-Kaffeerezept und die Betriebsparameter in den Token eingetragen. Es wid eine Byte-Positionsliste erstellt, an die die Messwerte im Token eingetragen werden sollen und es wird der ADS1115 gestartet, welcher danach das Senden des Token takten wird.&lt;br /&gt;
&lt;br /&gt;
In der Datei mwp_messwerte.py ist die Klassendefinition des ADS1115MuxSampler angelegt. Das ist die Umsetzung als Klassendefinition der bisherigen Messdatenerfassung. Der Konstruktor benötigt den Token, eine Positionslsite für die Byte-Nr. der Messwerte im Token (token_pos_list), das UART-Schnittstellenobjekt, die PIN-Nr über den der ADC-IRQ (irq_pin_nr) eingeht und die Kennziffer für die Abtastrate (smple_rate) des ADCs.&amp;lt;br&amp;gt;&lt;br /&gt;
Wenn der ADC gestartet ist, wird nach jedem erfolgten Sampling der Messwert durch die Methode _sample abgeholt. Es wird lediglich jeder zweite Messwert verwendet, da sich in der Wandlung des ersten Messwerts die Umstellung des Multiplexers befindet und der Messwert damit nicht korrekt sein kann. Gültige Messwerte werden als 2 Bytes im Token an der zugehörigen Position abgelegt und danach wird der nächste Messkanal am Multiplexer eingestellt. Ist der achte Messwert erfasst, wird der Token gesendet und die Abarbeitung startet wieder neu.&lt;br /&gt;
&lt;br /&gt;
Damit der Token über die im Verbund befindlichen Platinen durchgereicht wird existiert ein allgemeingültiges main.py und eine allgemeingültige uart_lib.py. In main.py muss die jeweils gültige Länge des Tokens inkl. aller Sonderbyts wie Startzeichen und Checksumme hinterlegt sein, sonst erfolgt keine Weiterleitung des Token. In der uart_lib.py wird aktuell der Token um 0,1 Sekunde verzägert weiter gesendet. Das ist zum Testen über den ADC-TAkt zu löschen.&lt;br /&gt;
&lt;br /&gt;
= Armin Rohnen, 28.11.2025 - Grundkonzept des Programmcodes für die UART-Kommunikation =&lt;br /&gt;
Auf den jeweiligen Platinen werden durch die Bestromung die MCUs gestartet und es werden nacheinander die Dateien &amp;quot;boot.py&amp;quot; und &amp;quot;main.py&amp;quot; abgearbeitet. In &amp;quot;boot.py&amp;quot; befindet sich weiter kein Progammcode, dort werden höchstens Systemeinstellungen vorgenommen. In &amp;quot;main.py&amp;quot; befindet sich die Initialisierung der jeweiligen Platine. Dieses Prgramm muss beendet werden und darf keine Endlosschleife enthalten. Die Steuerung des Ablaufes erfolgt über Interrupt-Service-Routinen (ISR) welche auf definierte Interrupts reagieren und jeweils den zugehörigen Programmcode ausführen.&lt;br /&gt;
&lt;br /&gt;
[[Datei:20251128 Initialisierung MWP.png|thumb|1000px|gerahmt|zentriert|alternativtext=Abb. 1) Konzept zur Initialisierung der Messwertplatine, (c) Armin Rohnen|Abb. 1) Konzept zur Initialisierung der Messwertplatine, (c) Armin Rohnen]]&lt;br /&gt;
&lt;br /&gt;
Zur weiteren Funktionalität auf der Messwertplatine gehört mindestens die Erstellung des (Grund)Tokens und das erste Senden des Tokens. Wird ein Token empfangen bzw. werden Daten an der UART-Schnittstelle erkannt, erfolgt die Abarbeitung gemäß Abb. 2.&lt;br /&gt;
&lt;br /&gt;
[[Datei:20251128 Programmablauf UART IRQ.png|thumb|1000px|gerahmt|zentriert|alternativtext=Abb. 2) Programmablauf UART ISR, (c) Armin Rohnen|Abb. 2) Programmablauf UART ISR, (c) Armin Rohnen]]&lt;br /&gt;
&lt;br /&gt;
Die Abarbeitung des UART IRQ erfolgt auf allen Platinen gleich. Der UART.IRQ_RXIDLE ruft als ISR &amp;quot;_uart_rx_handler&amp;quot; auf. Darin wird lediglich geprüft ob wirklich Daten am UART-RX eingegangen sind. Wenn ja, dann werden die Daten aus dem UART-Eingangspuffer ausgelesen und es wird &amp;quot;on_receive&amp;quot; zur weiteren Überprüfung des Tokens aufgerufen.&amp;lt;br&amp;gt;&lt;br /&gt;
In &amp;quot;on_receive&amp;quot; wird geprüft ob es sich um den (richtigen) Token handelt und dieser Fehlerfrei übertragen wurde. Danach wird ein &amp;quot;local_receive&amp;quot; aufgerufen. Diese Methode der Klasse wird jeweils lokal mit der individuellen Token-Abarbeitung überschrieben. In der Token-Abarbeitung befindet sich üblich die Anweisung zum Senden des Tokens. Lediglich auf der Messwertplatine erfolgt das Senden des Tokens durch eine weitere ISR.&amp;lt;br&amp;gt;&lt;br /&gt;
Die Auslagerung der eigentlichen Verarbeitung des Tokens auf einen lokalen Programmcode entlastet den IRQ, so dass dieser sehr schnell wieder aufgerufen werden kann.&lt;br /&gt;
&lt;br /&gt;
Im &amp;quot;local_receive&amp;quot; der Messwertplatine ist die Überprüfung des ersten gesendeten Tokens enthalten. Ist dieser wieder auf der Messwertplatine eingetroffen, dann wird die Messwerterfassung gestartet und es wird mit der eingestellten Abtastrate des ADC die Alert IRS (Abb. 3) abgearbeitet, welche u.a. zu jedem vollen Messwertesatz einen neuen Token versendet.&lt;br /&gt;
&lt;br /&gt;
[[Datei:20251128 Programmablauf ADC IRQ MWP.png|thumb|1000px|gerahmt|zentriert|alternativtext=Abb. 3) Programmablauf der ADC ISR auf der Messwertplatine, (c) Armin Rohnen|Abb. 3) Programmablauf der ADC ISR auf der Messwertplatine, (c) Armin Rohnen]]&lt;br /&gt;
&lt;br /&gt;
Jeder eingehende Token am UART-RX der jeweiligen Platine lösst die Abarbeitung über die ISR aus. Solange Token im Umflauf sind, solange werden auf den einzelnen Platinen Funktionsabarbeitungen erfolgen. Getriggert wird das System durch die Abtastrate des ADCs auf der Messwertplatine. Endlosschleifen in &amp;quot;main.py&amp;quot; und/oder den ISR stören diesen Ablauf und dürfen daher nicht verwendet werden. Allerdings sind Endlosschleifen icht erforderlich, da dies über den im Umlauf befindlichen Token erfolgt.&lt;br /&gt;
&lt;br /&gt;
= Peter Vogginger, 10.11.2025 - Aufgabenanalyse =&lt;br /&gt;
Aktuell werden die Messwerte von jeder Platine eigenständig an die MATLAB®-GUI versendet. Diese visualisiert und verarbeitet die Messwerte. Die erforderlichen Stellgrößen werden wiederum auf den Platinen in Abhängigkeit der MATLAB®-GUI eingestellt. &lt;br /&gt;
&lt;br /&gt;
In Zukunft soll die Kommunikation unter den MCUs erfolgen. Die Steuerung soll über die Maschinensteuerung erfolgen. Es wird weiterhin eine MATLAB®-GUI (im folgenden MATLAB®-Wartungsapp genannt) geben, diese dient jedoch lediglich für Wartungs- und Versuchszwecke. Die Aufgabe besteht darin, eine robuste und schnelle Kommunikation aufzubauen und diese anschließend auf allen MCUs zu implementieren.&lt;br /&gt;
&lt;br /&gt;
In die Auflistung der miteinander kommunizierenden Steuergeräte ist ein Touch-Display und optional ein Maschinensimulator mit aufzunehmen. Dadurch ergeben sich fünf Platinen, die im ständigen Austausch miteinander stehen: Messwertplatine, SSR-Platine, Basisplatine, Display-Platine und Maschinensimulator.&lt;br /&gt;
&lt;br /&gt;
Zur Fehleranalyse und Erprobung sollen weiterhin alle Messwerte in der Kommunikation enthalten sein, um die MATLAB®-Wartungsapp an die Display-Platine anschließen zu können und mittels Logging alle Daten darauf zu visualisieren. Angelehnt an das 1984 von IBM eingeführte Token Ring Network soll eine „im Kreis laufende“ Kommunikation aufgebaut werden.&lt;br /&gt;
&lt;br /&gt;
== Hardware-Aufbau ==&lt;br /&gt;
Die Verbindungen werden hardwareseitig durch den UART der MCUs hergestellt. Die UART Sendeleitung Tx einer MCU wird mit der Empfangsleitung Rx der nächsten MCU verbunden. Dies wird von Platine zu Platine in der Reihenfolge: Messwertplatine -&amp;gt; Basisplatine -&amp;gt; SSR-Platine -&amp;gt; Display-Platine -&amp;gt; Messwertplatine durchgeführt. Damit ergibt sich ein geschlossener Ring. Optional kann nach der Displayplatine noch der Maschinensimulator eingeschleift werden.&lt;br /&gt;
&lt;br /&gt;
== Messwerte ==&lt;br /&gt;
Es gibt einen definierten Token. Jede Platine erneuert ihren Anteil des Tokens und entnimmt dem Token die benötigten Informationen (Messwerte). Was zuvor die MATLAB®-GUI durchgeführt hat, übernehmen nun die einzelnen Platinen. Dadurch ergibt sich unter den Platinen eine Aufgabenverteilung. Tabelle 1 zeigt eine Auflistung der Daten, die in den Datensatz des Tokens aufgenommen werden sollen. Jede nummerierte Position erhält einen Platz, je nach Bedarf an Größe. Der Token wird als Bytearray ausgeführt.&lt;br /&gt;
&lt;br /&gt;
== Token ==&lt;br /&gt;
=== Anzahl ===&lt;br /&gt;
Die Anzahl der im Kreis laufenden Tokens soll sich auf einen beschränken. Dieser wird erstmalig von der Messwertplatine erzeugt und anschließend „im Kreis“ gesendet, wobei jede MCU nur den für sie relevanten Teil liest bzw. auch umschreibt. Die Abtastrate des ADC (analog digital converter) gibt die Taktrate des Tokens vor. Durch die Wahl der ADC-Abtastrate wird daher die Kommunikationsgeschwindigkeit (Token/s) beeinflusst. Dieser ist der Flaschenhals und es ist eine langsame Steigerung der Taktrate vorzusehen, um mögliche Auswirkungen und Probleme in der Übertragung festzustellen.&lt;br /&gt;
&lt;br /&gt;
=== Struktur ===&lt;br /&gt;
Am Anfang befindet sich ein Startzeichen, um die Art des Tokens (Standard-, Start- oder Paniktoken; siehe unten), festzulegen. Anschließend folgt ein Datensatz und danach eine Prüfsumme. Der Datensatz ist so auszuführen, dass dieser einfach erweitert werden kann, um Erweiterungen zu ermöglichen (z.B. 2. Brühgruppeneinheit). Im Weiteren ist der Token möglichst kurz auszuführen. Der Token soll über eine einheitliche Länge verfügen. Der Token wird als bytearray angelegt und auch so empfangen. (dateneingang = bytearray(readIn(UART))) Datensatz: Jedem Messwert wird ein Bereich von 2 Byte als fester Platz im Token zugewiesen.&lt;br /&gt;
&lt;br /&gt;
=== Prüfsumme ===&lt;br /&gt;
Um die fehlerfreie Übertragung eines Tokens zu bestätigen, wird aus dem Datenblock des Tokens eine Prüfsumme gebildet und diese ans Ende des Tokens angehängt. Das verwendete Verfahren ist CRC-32.&lt;br /&gt;
&lt;br /&gt;
=== Standardtoken ===&lt;br /&gt;
Es ist erkennbar über das Startzeichen am Anfang und wird genutzt für den regelmäßigen Datenaustausch zwischen den MCUs. Starttoken: Es ist erkennbar über das Startzeichen am Anfang. Hierbei wird beim Einschalten der Espressomaschine die Betriebsbereitschaft der gesamten Kommunikation geprüft. Sowohl ob die Hardwareverbindung intakt ist als auch ob alle MCUs empfangen und senden können. Es gilt zu klären, welche MCU dies aussendet.&lt;br /&gt;
&lt;br /&gt;
=== Paniktoken ===&lt;br /&gt;
Es ist erkennbar über das Startzeichen am Anfang. Dies ist die Realisierung eines Not-Halts. Es sollen alle Prozesse augenblicklich gestoppt werden.&lt;br /&gt;
=== Fehlererkennung === &lt;br /&gt;
Wird das Token nicht innerhalb einer definierten Zeitspanne wieder am Empfang einer MCU erkannt, festgelegt über einen timer-Funktion, soll am Display eine Fehlermeldung ausgegeben werden. Erkennt eine Platine einen Fehler (aufgrund Timeout), werden Magnetventile geschlossen (stromlos geschaltet), die Heizungen und die Pumpen werden abgeschaltet, der Wert des Dosierventils Kaltwasser wird gespeichert. Es ist ein Fehlerspeicher im Grundkonzept vorgesehen.&lt;br /&gt;
&lt;br /&gt;
== Token Definition ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Tabelle 1: Tokeninhalt&lt;br /&gt;
|-&lt;br /&gt;
! Platine !! Byte-Nr !! Bits / Bit-Nr. !! Beschreibung !! Wertebereich !! Anmerkung&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|8 Bit&lt;br /&gt;
|Startzeichen&lt;br /&gt;
|&lt;br /&gt;
|0x0A - Standardtoken&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;15&amp;quot; | Messplatine || 1,2 || 16 Bit || Leitwert || 0,2 - 20 S/cm || rowspan=&amp;quot;15&amp;quot; | 16 Bit im Token&lt;br /&gt;
dort wo diese Messwerte verarbeitet werden, werden sie mittels Kennlinie umgerechnet.&lt;br /&gt;
&lt;br /&gt;
Die csv-Datei der Kennlinie befindet sich auf der jeweiligen Platine.&lt;br /&gt;
&lt;br /&gt;
Der Tassenwärmer existiert nur 1x je Machine&lt;br /&gt;
|-&lt;br /&gt;
| 3,4 || 16 Bit || Boilerdruck || 0,5 - 4,5 V / 0 - 4 bar &lt;br /&gt;
|-&lt;br /&gt;
| 5,6 || 16 Bit || Brühgruppendruck (1. BG) || 0,5 - 4,5 / 0 - 12 bar &lt;br /&gt;
|-&lt;br /&gt;
| 7,8 || 16 Bit || Brühgruppendruck (2. BG) || 0,5 - 4,5 / 0 - 12 bar &lt;br /&gt;
|-&lt;br /&gt;
| 9,10 || 16 Bit || Wassereingangstemperatur&lt;br /&gt;
(ersatzweise Leitungsdruck)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 11,12 || 16 Bit || Boiler-NTC (1. BG) || Kennlinie &lt;br /&gt;
|-&lt;br /&gt;
| 13,14 || 16 Bit || Boiler-NTC (2. BG) || Kennlinie &lt;br /&gt;
|-&lt;br /&gt;
| 15,16 || 16 Bit || Tassenwärmer-NTC || Kennlinie &lt;br /&gt;
|-&lt;br /&gt;
| 17,18 || 16 Bit || Mischtemperatur-NTC (1. BG) || Kennlinie &lt;br /&gt;
|-&lt;br /&gt;
| 19,20 || 16 Bit || Mischtemperatur-NTC (2. BG) || Kennlinie &lt;br /&gt;
|-&lt;br /&gt;
| 21,22 || 16 Bit || Brühgruppen-NTC (1. BG) || Kennlinie &lt;br /&gt;
|-&lt;br /&gt;
| 23,24 || 16 Bit || Brühgruppen-NTC (2. BG) || Kennlinie &lt;br /&gt;
|-&lt;br /&gt;
| 25,26 || 16 Bit || Boilerheizung (Soll, 1. BG) || 8 Hz PWM 0 - 100 % &lt;br /&gt;
|-&lt;br /&gt;
| 27,28 || 16 Bit || Boilerheizung (Soll, 2. BG) || 8 Hz PWM 0 - 100 % &lt;br /&gt;
|-&lt;br /&gt;
| 29,20 || 16 Bit || Tassenwärmerheizung (Soll) || 8 Hz PWM 0 - 100 % &lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | SSR-Platine || 31,32 || 16 Bit || Position Schrittmotor Dosierventil 1. BG || 0 - 550 ||&lt;br /&gt;
|-&lt;br /&gt;
| 33,34 || 16 Bit || Position Schrittmotor Dosierventil 2. BG || 0 - 550 ||&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;17&amp;quot; | Basisplatine || 35,36 || 16 Bit || Verstellwert Schrittmotor Dosierventil 1. BG || Integer mit Vorzeichen ||&lt;br /&gt;
|-&lt;br /&gt;
| 37,38 || 16 Bit || Verstellwert Schrittmotor Dosierventil 2. BG || Integer mit Vorzeichen ||&lt;br /&gt;
|-&lt;br /&gt;
|39,40&lt;br /&gt;
|16 Bit&lt;br /&gt;
|Pumpensollwert 1. BG&lt;br /&gt;
|0 - 4096&lt;br /&gt;
|entspricht 0 - 5000 mV bzw. 0 - 5000 U/min&lt;br /&gt;
|-&lt;br /&gt;
|41,42&lt;br /&gt;
|16 Bit&lt;br /&gt;
|Pumpensollwert 2. BG&lt;br /&gt;
|0 - 4096&lt;br /&gt;
|entspricht 0 - 5000 mV bzw. 0 - 5000 U/min&lt;br /&gt;
|-&lt;br /&gt;
|43&lt;br /&gt;
|8 Bit&lt;br /&gt;
|Durchflussrate 1. BG&lt;br /&gt;
|0 - 25 ml/s&lt;br /&gt;
|Integerwert in 1/10 ml/s, damit Wertebereich 0 - 250&lt;br /&gt;
|-&lt;br /&gt;
|44,45&lt;br /&gt;
|16 Bit&lt;br /&gt;
|Durchflusscounts 1. BG&lt;br /&gt;
|0 - 65535&lt;br /&gt;
|je Count 1/39,9 ml, Überlauf muss unterbunden werden&lt;br /&gt;
|-&lt;br /&gt;
|46&lt;br /&gt;
|8 Bit&lt;br /&gt;
|Durchflussrate 2. BG&lt;br /&gt;
|0 - 25 ml/s&lt;br /&gt;
|Integerwert in 1/10 ml/s, damit Wertebereich 0 - 250&lt;br /&gt;
|-&lt;br /&gt;
|47,48&lt;br /&gt;
|16 Bit&lt;br /&gt;
|Durchflusscounts 2. BG&lt;br /&gt;
|0 - 65535&lt;br /&gt;
|je Count 1/39,9 ml, Überlauf muss unterbunden werden&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;9&amp;quot; |49&lt;br /&gt;
|&lt;br /&gt;
|Füllstandsbyte&lt;br /&gt;
|&lt;br /&gt;
| rowspan=&amp;quot;9&amp;quot; |Füllstände werden von den Füllstandsreglern auf der Basisplatine verarbeitet&lt;br /&gt;
Füllstand Abtropfschale True verhindert Pumpenansteuerung&lt;br /&gt;
Füllstand Boiler False verhindert Pumpenansteuerung&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Füllstand Boiler 1. BG || 0/1 &lt;br /&gt;
|-&lt;br /&gt;
| 1 || Füllstand Boiler 2. BG || 0/1 &lt;br /&gt;
|-&lt;br /&gt;
| 2 || Füllstand Tank Minimum || 0/1 &lt;br /&gt;
|-&lt;br /&gt;
| 3 || Füllstand Tank Maximum || 0/1 &lt;br /&gt;
|-&lt;br /&gt;
| 4 || Füllstand Abtropfschale || 0/1 &lt;br /&gt;
|-&lt;br /&gt;
| 5 || || 0/1 &lt;br /&gt;
|-&lt;br /&gt;
| 6 || || 0/1 &lt;br /&gt;
|-&lt;br /&gt;
| 7 || || 0/1 &lt;br /&gt;
|-&lt;br /&gt;
| || rowspan=&amp;quot;9&amp;quot; | 50 || || Magnetventile Byte 1 || || rowspan=&amp;quot;9&amp;quot; | Magnetventile Y101 bis Y113 gehören zur 1. BG&lt;br /&gt;
Y113 ist der Dampfhahn&lt;br /&gt;
Y214 bis Y222 gehören zur 2. BG &lt;br /&gt;
|-&lt;br /&gt;
| || 0 || Y101 || 0/1 &lt;br /&gt;
|-&lt;br /&gt;
| || 1 || Y102 || 0/1 &lt;br /&gt;
|-&lt;br /&gt;
| || 2 || Y103 || 0/1 &lt;br /&gt;
|-&lt;br /&gt;
| || 3 || Y104 || 0/1 &lt;br /&gt;
|-&lt;br /&gt;
| || 4 || Y105 || 0/1 &lt;br /&gt;
|-&lt;br /&gt;
| || 5 || Y106 || 0/1 &lt;br /&gt;
|-&lt;br /&gt;
| || 6 || Y107 || 0/1 &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|7&lt;br /&gt;
|Y108&lt;br /&gt;
|0/1&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| rowspan=&amp;quot;9&amp;quot; |51&lt;br /&gt;
|&lt;br /&gt;
|Magnetventil Byte 2&lt;br /&gt;
|&lt;br /&gt;
| rowspan=&amp;quot;9&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|Y109&lt;br /&gt;
|0/1&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|Y110&lt;br /&gt;
|0/1&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|2&lt;br /&gt;
|Y111&lt;br /&gt;
|0/1&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|3&lt;br /&gt;
|Y112&lt;br /&gt;
|0/1&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|4&lt;br /&gt;
|Y113&lt;br /&gt;
|0/1&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|5&lt;br /&gt;
|Y214&lt;br /&gt;
|0/1&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|6&lt;br /&gt;
|Y215&lt;br /&gt;
|0/1&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|7&lt;br /&gt;
|Y216&lt;br /&gt;
|0/1&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| rowspan=&amp;quot;9&amp;quot; |52&lt;br /&gt;
|&lt;br /&gt;
|Magnetventil Byte 3&lt;br /&gt;
|&lt;br /&gt;
| rowspan=&amp;quot;9&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|Y217&lt;br /&gt;
|0/1&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|Y218&lt;br /&gt;
|0/1&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|2&lt;br /&gt;
|Y219&lt;br /&gt;
|0/1&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|3&lt;br /&gt;
|Y220&lt;br /&gt;
|0/1&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|4&lt;br /&gt;
|Y221&lt;br /&gt;
|0/1&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|5&lt;br /&gt;
|Y222&lt;br /&gt;
|0/1&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|6&lt;br /&gt;
|&lt;br /&gt;
|0/1&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|7&lt;br /&gt;
|&lt;br /&gt;
|0/1&lt;br /&gt;
|-&lt;br /&gt;
|Displayplatine&lt;br /&gt;
|53,54&lt;br /&gt;
|16&lt;br /&gt;
|Bezugswassertemperatur 1. BG&lt;br /&gt;
|30  - 98 °C&lt;br /&gt;
|Integerwert in 1/10 °C, damit Wertebereich 300 bis 980&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|55,56&lt;br /&gt;
|16&lt;br /&gt;
|Bezugswassertemperatur 2. BG&lt;br /&gt;
|30  - 98 °C&lt;br /&gt;
|Integerwert in 1/10 °C, damit Wertebereich 300 bis 980&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|57,58&lt;br /&gt;
|16&lt;br /&gt;
|Bezugsmenge 1. BG&lt;br /&gt;
|20 - 300 g bzw. ml&lt;br /&gt;
|Integerwert in 1/10 ml, damit Wertebereich 200 bis 3000&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|59,60&lt;br /&gt;
|16&lt;br /&gt;
|Bezugsmenge 2. BG&lt;br /&gt;
|20 - 300 g bzw. ml&lt;br /&gt;
|Integerwert in 1/10 ml, damit Wertebereich 200 bis 3000&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|61,62&lt;br /&gt;
|16&lt;br /&gt;
|Bezugszeit 1. BG&lt;br /&gt;
|0 - 120 Sekunden&lt;br /&gt;
|Integerwert in 1/10 Sekunde, damit Wertebereich 0 bis 1200&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|63,64&lt;br /&gt;
|16&lt;br /&gt;
|Bezugszeit 2. BG&lt;br /&gt;
|0 - 120 Sekunden&lt;br /&gt;
|Integerwert in 1/10 Sekunde, damit Wertebereich 0 bis 1200&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|65,66&lt;br /&gt;
|16&lt;br /&gt;
|Preinfusionszeit 1. BG&lt;br /&gt;
|0 - 120 Sekunden&lt;br /&gt;
|Integerwert in 1/10 Sekunde, damit Wertebereich 0 bis 1200&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|67,68&lt;br /&gt;
|16&lt;br /&gt;
|Preinfusionszeit 2. BG&lt;br /&gt;
|0 - 120 Sekunden&lt;br /&gt;
|Integerwert in 1/10 Sekunde, damit Wertebereich 0 bis 1200&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|69&lt;br /&gt;
|8&lt;br /&gt;
|Abschalttemperatur Entschichtung&lt;br /&gt;
|90 - 98 °C&lt;br /&gt;
|Integerwert in °C&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|70&lt;br /&gt;
|8&lt;br /&gt;
|Grenztemperatur&lt;br /&gt;
|135 - 150 °C&lt;br /&gt;
|Integerwert in °C&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|71&lt;br /&gt;
|8&lt;br /&gt;
|Sollwert Boilerdruck&lt;br /&gt;
|1100 - 1500 mbar&lt;br /&gt;
|Integerwert in 10 mbar, damit Wertebereich 110 bis 150&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|72&lt;br /&gt;
|8&lt;br /&gt;
|Stellung Vertikalhebel&lt;br /&gt;
|0 - 180 Grad&lt;br /&gt;
|Integerwert&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| rowspan=&amp;quot;9&amp;quot; |73&lt;br /&gt;
|&lt;br /&gt;
|Maschinenstatus Byte 1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|Mischerstatus 1. BG&lt;br /&gt;
|0/1&lt;br /&gt;
|True = Mischtemperatur erreicht&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|Mischerstatus 2. BG&lt;br /&gt;
|0/1&lt;br /&gt;
|True = Mischtemperatur erreicht&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|2&lt;br /&gt;
|Entschichtung&lt;br /&gt;
|0/1&lt;br /&gt;
|True = Entschichtung aktiv&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|3&lt;br /&gt;
|Handhebelmodus&lt;br /&gt;
|0/1&lt;br /&gt;
|True = aktiv&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|4&lt;br /&gt;
|Rezepteingabe&lt;br /&gt;
|0/1&lt;br /&gt;
|True = aktiv&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|5&lt;br /&gt;
|Wartungsmodus&lt;br /&gt;
|0/1&lt;br /&gt;
|True = aktiv&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|6&lt;br /&gt;
|Schrittmotor Dosierventil Flag&lt;br /&gt;
|0/1&lt;br /&gt;
|True = Schrittmotor für Dosierventil Kaltwasser hat ursprüngliche Position erreicht (Teil der Initialisierung)&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|7&lt;br /&gt;
|&lt;br /&gt;
|0/1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| rowspan=&amp;quot;9&amp;quot; |74&lt;br /&gt;
|&lt;br /&gt;
|Maschinenstatus Byte 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|Kaffeebezug 1. BG&lt;br /&gt;
|0/1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|Kaffeebezug 1. BG&lt;br /&gt;
|0/1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|2&lt;br /&gt;
|Teewasserbezug&lt;br /&gt;
|0/1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|3&lt;br /&gt;
|Dampfbezug&lt;br /&gt;
|0/1&lt;br /&gt;
|Bewirkt 200 mbar Reduzierung Sollwert Boilerdruck&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|4&lt;br /&gt;
|Boilerbefüllung (Befüllungsflag)&lt;br /&gt;
|0/1&lt;br /&gt;
|True = Boilerbefüllung aktiv&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|5&lt;br /&gt;
|Aufheizen&lt;br /&gt;
|0/1&lt;br /&gt;
|True = Aufheizphase, False = Betriebsbereit&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|6&lt;br /&gt;
|Systemstart&lt;br /&gt;
|0/1&lt;br /&gt;
|True = Systemstart&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|7&lt;br /&gt;
|Sicherheitsfunktion&lt;br /&gt;
|0/1&lt;br /&gt;
|True = Sicherheitsfunktion aktiv&lt;br /&gt;
|}&lt;br /&gt;
= Peter Vogginger,19.10.2025 - NUCLEO_H743ZI2 =&lt;br /&gt;
Kommunikation als Token-Ring oder in Stern-Topologie &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der Wechsel der Kommunikation von dem geplanten Token-Ring-Verfahren, hin zur Stern-Topologie erfordert 3 serielle Schnittstellen. Dies ist mit der aktuellen Konstellation, 4 MCUs (Basisplatine, SSR-Platine, Messplatine und Displayplatine) mit jeweils einem Raspberry Pi Pico RP2040, nicht möglich. An einem RP2040 stehen 2 serielle Schnittstellen zur Verfügung. &lt;br /&gt;
&lt;br /&gt;
Der Wechsel hin zu einem größeren Board, dem NUCLEO-H743ZI2 MCU-Board mit einer STM32H7 MCU. Der Wechsel würde Vorteile bieten:  &lt;br /&gt;
* weniger Elektronik in der Peripherie &lt;br /&gt;
* ADCs ausreichend am Board &lt;br /&gt;
* DACs ausreichend am Board &lt;br /&gt;
* 8 serielle Schnittstellen &lt;br /&gt;
* viel mehr nutzbare PINs &lt;br /&gt;
&lt;br /&gt;
Die Vielzahl an Anschlüssen bietet die Möglichkeit, von aktuell 3 Platinen (und 3 MCUs) auf 1 Platine mit einem MCU-Board zu reduzieren. &lt;br /&gt;
&lt;br /&gt;
Allerdings bietet diese Umstellung nicht nur Vorteile.  &lt;br /&gt;
&lt;br /&gt;
Nachteilig wäre, dass bei jedem MicroPython Update ein eigenes Derivat erstellt werden müsste, da default die ADC auf 12-Bit Auflösung in MicroPython definiert sind. Aktuell existiert ein Derivat mit 16-Bit ADC Konfiguration (NUCLEO_H743ZI2_v1-27-0_ADC_16BIT.hex), dies basiert auf der MicroPython Version v1-27-0. &lt;br /&gt;
&lt;br /&gt;
Allerdings ist die Verfügbarkeit von NUCLEO-Boards immer zeitweise nicht gegeben. Diesbezüglich wäre ein Platinenlayout inkl. den Bauelementen für MCU und der direkten Peripherie erforderlich. Was aber erst nach der Inbetriebnahme der beiden Prototypen-Maschinen sinnvoll erscheint. Die Kosten dieser externen Entwicklung werden auf 50 t€ bis 100 t€ geschätzt. &lt;br /&gt;
&lt;br /&gt;
Aufgrund der aktuellen Situation wird bis auf Weiteres die Verwendung von Raspberry Pi Pico verfolgt.&lt;br /&gt;
&lt;br /&gt;
= Armin Rohnen, 16.10.2025 =&lt;br /&gt;
Im Zuge der Analyse für die zweite Auflage von MATLAB® meets MicroPython ist das Thema der UART-Kommunikation tiefer betrachtet worden. &lt;br /&gt;
&lt;br /&gt;
Die Kommunikation ist mit Sorgfalt zu programmieren. Durch Lesen und Schreiben auf die UART-Schnittstelle kann die MCU blockiert und dauerhaft an der Ausführung anderer Programmteile gehindert werden. Die Problematik ist in Abschnitt 3.13 der 2. Auflage MATLAB® meets MicroPython beschrieben.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Armin Rohnen, 11.04.2024 =&lt;br /&gt;
[[Datei:20250322 Konzept.png|thumb|900px|gerahmt|zentriert|alternativtext=Armin Rohnen, Kommunikationskonzept mit Token|Armin Rohnen, Kommunikationskonzept mit Token]]&lt;br /&gt;
Seitens des Platinenlayouts für die Steuerungselektronik wurden die jeweiligen PINs der ersten UARTSchnittstelle für die spätere Inter-Kommunikation der Steuerung herausgelegt. Die Raspberry Pi Pico MCU verfügt über einen jeweils 32 Byte großen Eingangs- bzw. Ausgangspuffer für die UART-Schnittstelle. Dieser soll genutzt werden um die Kommunikation zu ermöglichen. Die jeweilige Kommunikation selbst wird dadurch auf diese 32 Byte begrenzt. Hardwareseitig ist es Denkbar, dass je MCU zwei weitere PINs für die Kommunikation verwendet werden. Lediglich auf der SSR-Platine ist dazu ein Eingriff ins Platinenlayout erforderlich. Dieser kann bei einem Prototypen handwerklich durchgeführt werden. Die zwei zusätzlichen PINs für die Kommunikation (GP04, GP05 auf der Basisplatine, GP03, GP04 auf der SSR-Platine, GP06, GP07 auf der Messplatine) fungieren als eingehender und ausgehender Interrupt, so dass die Kommunikation als ISR programmiert werden kann.&lt;br /&gt;
&lt;br /&gt;
Angelehnt an das 1984 von IBM eingeführte Token Ring Network soll eine „im Kreis laufende“ Kommunikation aufgebaut werden. Ausgehend von der Messplatine wird ein Token über die einzelnen Platinen durchgereicht (Abbildung). Unter Berücksichtigung der Kommunikationsregeln können so eine beliebige Anzahl an Steuerungsplatinen in den Kommunikationsring eingebunden werden. Allerdings sollte dabei die Reihenfolge beachtet werden.&lt;br /&gt;
&lt;br /&gt;
Die Messplatine sendet über UART am Ende jedes gültigen Messwertsatzes einen oder mehrere Token an die Basisplatine. In den Token befinden sich die aktuellen Messwerte und alle anderen „im Kreis laufende“ Daten. Beim ersten Senden werden hier u.u. 0-Werte verwendet, bis dass der erste Token wieder bei der Messplatine angekommen ist. Ggf. unterbricht die Messplatine auch das Senden des Token bzw. der ersten Token-Serie, bis zum ersten Eintreffen eines Tokens. Die Messplatine ist damit der Taktgeber der Kommunikation. Konkret erfolgt dies in Abhängigkeit der Abtastrate des AD-Wandlers.Wenn ein Token versendet ist, wechselt die Messplatine den Logikzustand des ausgehenden Interrupt-PINs. Bevor der nächste Token versendet wird, wird wieder der Ausgangslogikzustand des Interrupt-PINs hergestellt. Sobald die Messplatine auch einen Token empfangen hat wird auch der PWM-Stellwert für das Boilerheizelement (aus Regler Boilerdruck) und für den Tassenwärmer im Token übermittelt.&lt;br /&gt;
&lt;br /&gt;
Von der Messplatine erhält die Basisplatine den Token. Die UART-Schnittstelle wird ausgelesen, wenn am eingehenden Interrupt-PIN der Logikzustand wechselt. Die Basisplatine tauscht im Token die Daten für die eigenen Messwerte, die Schaltzustände der Tasten, die Schaltzustände der Magnetventile usw. aus und sendet den Token an die SSR-Platine weiter. Ist der Token versendet, wechselt die Basisplatine den Logikzustand des ausgehenden Interrupt-PINs und arbeitet in gleicher Logik weiter wie die Messplatine.&lt;br /&gt;
&lt;br /&gt;
Die SSR-Platine bekommt von der Basisplatine den Token durchgereicht. Die SSR-Platine wertet den Token lediglich aus, nimmt keine Veränderungen darin vor und reicht diesen dann weiter. Nach der SSR-Platine kann eine Display-Platine nachgeschaltet werden. Diese wertet die Informationen im Token aus und visualisiert diese bzw. stellt die Informationen über WLAN zur Verfügung. Im Falle eines Touch-Displays werden die Bytes für die Schaltzustände der Tasten ausgetauscht. Abschließend erhält die Messplatine wieder den Token und übernimmt die relevanten Informationen daraus in den neu zu sendenden Token.&lt;br /&gt;
&lt;br /&gt;
Anstelle des eingehenden und ausgehenden Interrupt-PINs kann u.u. auch die MicroPython-Funktionalität uart.irq verwendet werden. Diese ruft eine ISR auf, sobald Daten im EIngangspuffer der UART-Schnittstelle eingegangen sind.&lt;br /&gt;
&lt;br /&gt;
Das Konzept ist auszugestalten und der bzw. die Token sind exakt zu definieren. Dabei ist auch zu definieren (und zu erproben) wie die dann übergeordnete MATLAB®-GUI die Daten für die Visualisierung erhält. Der einzelne Token darf aufgrund der Limitierung durch den UART-Puffer des Raspberry Pi Picos 32 Byte nicht überschreiten. Als maximale Datenrate sind 115200 Baud möglich, was unter Berücksichtigung von START / STOP-Bits und Paritätsbit eine maximale Kommunikationsrate von 11520 Byte je Sekunde ergibt. Damit wären 360 jeweils 32 Byte lange Token in der Kommunikation möglich. Nach aktuellem Stand der Recherchen überschreitet die Datenmenge für die Kommunikation die 32 Byte Grenze, so dass mit mehreren Token gearbeitet werden muss. Jeder Token weist im ersten Byte eine Token-Nr auf, so dass der Token zweifelsfrei identifiziert werden kann. Alle Token müssen die gleiche Länge in Bytes aufweisen. Für zukünftige Erweiterungen sind Leer-Bytes in den Token vorhanden. Jeder der 4 Token muss die gleiche Länge in Bytes aufweisen.&lt;br /&gt;
&lt;br /&gt;
Getaktet wird die Kommunikation durch die Datenerfassung der Messplatine. Aufgrund der jeweils ungültigen ersten Wandlung eines Messkanals ist eine maximale Abtastrate von 430 Messwerten je Sekunde aufgeteilt auf acht Messkanäle, was ca. 53 Datensätze je Sekunde ergibt. Bei einer Abtastrate von 475 SPS ergeben sich 30 gültige Messdatensätze je Sekunde.Wird nach jedem zweiten gültigen Messkanal ein 27 Byte langer Token von der Messplatine gesendet, dann ergibt dies eine Inter-Kommunikation zwischen den MCUs von 120 Token bzw. 3240 Byte je Sekunde, was unter der als Maximum angesehenen Datenrate liegt. Selbst bei einer Verlängerung der Token auf 32 Byte würde lediglich 1/3 des theoretisch möglichen Datentransfers durchgeführt.&lt;/div&gt;</summary>
		<author><name>Peter Vogginger</name></author>
	</entry>
	<entry>
		<id>http://www.institut-fuer-kaffeetechnologie.de/Wiki/index.php?title=Kommunikation_per_UART&amp;diff=4807</id>
		<title>Kommunikation per UART</title>
		<link rel="alternate" type="text/html" href="http://www.institut-fuer-kaffeetechnologie.de/Wiki/index.php?title=Kommunikation_per_UART&amp;diff=4807"/>
		<updated>2026-01-08T13:40:41Z</updated>

		<summary type="html">&lt;p&gt;Peter Vogginger: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Peter Vogginger, 18.12.2025&amp;lt;br&amp;gt; Setter und Getter für Bits und Bytes =&lt;br /&gt;
Dokumentation Setter / Getter &lt;br /&gt;
Beim Arbeiten mit binären Daten ist der Einsatz von Setter- und Getter-Funktionen sinnvoll, da &lt;br /&gt;
sie den Code übersichtlicher machen und Fehler durch direkte Bit- oder Bytemanipulation &lt;br /&gt;
vermeiden. Ein Setter verändert einen Wert in einem Bytearray, während ein Getter einen &lt;br /&gt;
bestehenden Wert ausliest. Der Setter wird bei Bits in Form von zwei Funktionen beschrieben, &lt;br /&gt;
einmal das Setzen eines Bits auf 1 und das Löschen eines Bits. Letzteres meint das Setzen eines &lt;br /&gt;
Bits auf 0. &lt;br /&gt;
&lt;br /&gt;
Zum Setzen einzelner Bits (siehe linke Grafik in der Abbildung 4) wird zunächst aus dem Bitindex &lt;br /&gt;
eine Bitmaske erzeugt, indem der Wert 1 entsprechend nach links verschoben wird (1 &amp;lt;&amp;lt; &lt;br /&gt;
bit_index). Durch eine OR-Verknüpfung des Bytes mit dieser Maske wird das betreffende Bit &lt;br /&gt;
zuverlässig auf den Wert 1 gesetzt.&lt;br /&gt;
&lt;br /&gt;
Zum Löschen eines Bits (siehe zweite Grafik von links in der Abbildung 4) wird dieselbe Maske &lt;br /&gt;
invertiert und das Byte anschließend mit einer AND-Verknüpfung verarbeitet. Dadurch wird das &lt;br /&gt;
Zielbit sicher auf den Wert 0 gesetzt. Beide Operationen verändern ausschließlich das &lt;br /&gt;
gewünschte Bit, alle anderen Bits im Byte bleiben unverändert.&lt;br /&gt;
&lt;br /&gt;
Das Auslesen eines Bits (siehe mittlere Grafik in der Abbildung 4) erfolgt, indem das &lt;br /&gt;
entsprechende Byte um den Bitindex nach rechts verschoben und anschließend mit 1 maskiert &lt;br /&gt;
wird. Auf diese Weise wird das Zielbit isoliert und als Wert 0 oder 1 zurückgegeben. &lt;br /&gt;
Für die Verarbeitung ganzer Messwerte, die aus ein oder zwei Bytes bestehen, werden ebenfalls &lt;br /&gt;
Setter und Getter verwendet.&lt;br /&gt;
&lt;br /&gt;
Beim Schreiben von Bytes (siehe vierte Grafik von links in der Abbildung 4) wird der Integerwert &lt;br /&gt;
im Big-Endian-Format in zwei Bytes umgewandelt und an der vorgesehenen Position im &lt;br /&gt;
Bytearray gespeichert.&lt;br /&gt;
&lt;br /&gt;
Big-Endian-Format bedeutet, dass bei mehrbyteigen Werten das höherwertige Byte (MSB) zuerst &lt;br /&gt;
gespeichert oder übertragen wird, gefolgt vom niederwertigen Byte (LSB). Im Gegensatz dazu &lt;br /&gt;
gibt es noch das Format Little-Endian. Hierbei ist die Reihenfolge genau umgekehrt, das &lt;br /&gt;
niederwertiges Byte wird zuerst übertragen. Entscheidend ist, dass Sender und Empfänger &lt;br /&gt;
dieselbe Endianess verwenden, sonst entstehen falsche Werte.&lt;br /&gt;
&lt;br /&gt;
Das Auslesen von Bytes (siehe rechte Grafik in der Abbildung 4) erfolgt durch Entnehmen von &lt;br /&gt;
einem (oder zwei Bytes) und deren Rückwandlung in einen Integer. Da beide Funktionen &lt;br /&gt;
dasselbe Format Big-Endian verwenden, wird der Messwert exakt so zurückgegeben, wie er &lt;br /&gt;
zuvor gespeichert wurde.&lt;br /&gt;
&lt;br /&gt;
Die genannten fünf Funktionen werden in die Datei utils.py geschrieben. Diese Datei wird auf jeder Platine hinterlegt. &amp;lt;br /&amp;gt; &lt;br /&gt;
Beispielaufruf: utils.set_bytes(token, ort, wert)&lt;br /&gt;
&lt;br /&gt;
[[Datei:Setter Getter.png|thumb|1000px|gerahmt|zentriert|alternativtext=Funktionsablauf Setter und Getter, (c) Peter Vogginger|Funktionsablauf Setter und Getter, (c) Peter Vogginger]]&lt;br /&gt;
&lt;br /&gt;
= Armin Rohnen, 13.12.2025&amp;lt;br&amp;gt;Espressomaschinen-Kommunikations-Ring Timing =&lt;br /&gt;
[[Datei:20251213 EKR-Timing.png|thumb|1000px|gerahmt|zentriert|alternativtext=EKR Timing Diagramm, (c) Armin Rohnen|EKR Timing Diagramm, (c) Armin Rohnen]]&lt;br /&gt;
Das Timing des Espressomaschinen-Kommunikations-Rings erfolgt durch die Taktung des ADCs der Messwertplatine. Dieser kann mit einer maximalen Abtastrate von 860 SPS (Samples per Second) betrieben werden. Da jeder 1. Messwert verworfen werden muss und insgesamt 8 Messkanäle berücksichtigt werden müssen, beträgt die effektive Abtastrate 53,75 Hz bzw. alle 18,6 ms steht damit ein neuer Messwertdatensatz zur Verfügung und es wird der Token an die Basisplatine (bas) gesendet. Nach aktuellem Stand (12. Dezember 2025) besteht der Token aus 74 Bytes, was 740 Transferbits ergibt und mit der definierten Transferrate von 230.400 Baud eine Übertragungszeit von 3,2 ms erfordert.&lt;br /&gt;
&lt;br /&gt;
Der Kommunikationsring ist mit der Abfolge - Messwertplatine -&amp;gt; Basisplatine -&amp;gt; SSR-Platine -&amp;gt; Displayplatine -&amp;gt; (Maschinensimulator) -&amp;gt; Messwertplatine definiert. Außer auf der Messwertplatine wird jeweils der Token empfangen, danach die erforderlichen Programmcodes ausgeführt und Änderungen am Token vorgenommen um ihn abschließend an die nächste Platine weiter zu senden. Bei Einstellvorgängen des Dosierventils auf der SSR-Platine wird dies so nicht funktionieren, da die Verstellung des Schrittmotors zu lange dauern wird.&lt;br /&gt;
&lt;br /&gt;
Wird die Kommunikation so wie beschrieben separat betrachtet, dann summiert sich die Transferzeit auf 12,8 ms (bzw. 16 ms mit eingebundenen Maschinensimulator) bis dass der dann mit Änderungen versehene Token wieder an der Messwertplatine angekommen ist. Alle 18,6 ms sendet bei höchster Abtastrate die Messwertplatine den Token erneut. Damit keine Informationen verloren gehen, bleiben insgesamt 5,8 ms Rechenzeit für alle im Ring befindlichen Platinen übrig. Die Messwertplatine fügt aus diesem Grund die Messwerte erst direkt vor dem Senden des Tokens darin ein.&lt;br /&gt;
&lt;br /&gt;
Da eine Summenrechenzeit von 5,8 ms sehr knapp ist, ist zu prüfen, ob der Betrieb in maximaler ADC-Abtastrat emöglich ist.&lt;br /&gt;
&lt;br /&gt;
Eine Reduzierung auf die Abtastrate 475 SPS würde den Token-Aktualisierungstakt auf 33,7 ms (29,7 Hz) erhöhen. Da die kummulierte Übertragungszeit mit 12,8 ms gleich bleibt, ergäbe sich dann eine Restrechenzeit von 20,9 ms. Da der aktualisierte Token, in dem die Messwertplatine wieder Änderungen einfügen darf, dann erst nach dem 3. Messwert eintrifft, ist weiterhin eine Zwischenspeicherung der erfassten Messdaten erforderlich.&lt;br /&gt;
&lt;br /&gt;
= Armin Rohnen, 30.11.2025&amp;lt;br&amp;gt; Kommunikationsstart und kontinuierliches Sendendes Token im ADC Takt der Messwertplatine =&lt;br /&gt;
Über die Messwertplatine wird der Kommunikationsstart realisiert. Damit dies nicht direkt beim Einschalten erfolgt ist der zugehörige Code in der Datei main_mwp.py abgelegt. Wird diese Datei ausgeführt, dann startet die Kommunikation zwischen den Platinen und im Weiteren erfolgt der Maschinenstart.&lt;br /&gt;
&lt;br /&gt;
Aktuell müssen die Variablen UART_TimeOut, token und uart global definiert werden. Werden diese zu einem späteren Zeitpunkt in main.py initialisiert, dann sind diese automatisch global.&lt;br /&gt;
&lt;br /&gt;
Es wird der Initialtoken mit 75-Bytes angelegt und in Byte[0] wird &amp;quot;0x0A&amp;quot; eingetragen. Sollte es sich ergeben, dass die Tokendefinition noch zu weiteren Bytes führt, dann ist dies an den entsprechenden Stellen der main.py auf den Platinen einzutragen. &lt;br /&gt;
&lt;br /&gt;
Im weiteren Ablauf wird die uart-Schnittstelle initialisiert. In der Datei uart_lib.py ist die Klassendefinition des UARTHandler hinterlegt. Diese konfiguriert die uart-Schnittstelle. Im Konstruktor der Klasse ist hinterlegt, dass per UART.IRQ_RXIDLE auf eingehende Daten an der uart-Schnittstelle ragiert wird. Es wird als erstes die Methode _uart_rx_handler aufgerufen, welche sich innerhalb der Klasse befindet. Darin werden lediglich die Daten eingelsen und auf die Methode on_receive weiterverwiesen. Die Methode on_receive ist in allen Realisierungen gleich und prüft auf empfangene Datenlänge und auf das gültige Startzeichen. Danach wird auf die Methode local_receive weitergeleitet.&lt;br /&gt;
&lt;br /&gt;
Die Methode uart.local_receive aus der Klassendefinition wird durch uart.local_receive = mwp_receive_handler mit der in main_mwp.py befindlichen Funktion ersetzt. Da der zu erwartende Token eingegangen ist, wird als erstes die UART-TimeOut-Funktion deaktiviert. Es wird geprüft, ob die Sicherheitsfunktion aufgerufen werden muss oder ob der Token abgearbeitet werden kann. Handelt es sich bei dem empfangenen Token um den ersten Token, werden aktuell das Default-Kaffeerezept und die Betriebsparameter in den Token eingetragen. Es wid eine Byte-Positionsliste erstellt, an die die Messwerte im Token eingetragen werden sollen und es wird der ADS1115 gestartet, welcher danach das Senden des Token takten wird.&lt;br /&gt;
&lt;br /&gt;
In der Datei mwp_messwerte.py ist die Klassendefinition des ADS1115MuxSampler angelegt. Das ist die Umsetzung als Klassendefinition der bisherigen Messdatenerfassung. Der Konstruktor benötigt den Token, eine Positionslsite für die Byte-Nr. der Messwerte im Token (token_pos_list), das UART-Schnittstellenobjekt, die PIN-Nr über den der ADC-IRQ (irq_pin_nr) eingeht und die Kennziffer für die Abtastrate (smple_rate) des ADCs.&amp;lt;br&amp;gt;&lt;br /&gt;
Wenn der ADC gestartet ist, wird nach jedem erfolgten Sampling der Messwert durch die Methode _sample abgeholt. Es wird lediglich jeder zweite Messwert verwendet, da sich in der Wandlung des ersten Messwerts die Umstellung des Multiplexers befindet und der Messwert damit nicht korrekt sein kann. Gültige Messwerte werden als 2 Bytes im Token an der zugehörigen Position abgelegt und danach wird der nächste Messkanal am Multiplexer eingestellt. Ist der achte Messwert erfasst, wird der Token gesendet und die Abarbeitung startet wieder neu.&lt;br /&gt;
&lt;br /&gt;
Damit der Token über die im Verbund befindlichen Platinen durchgereicht wird existiert ein allgemeingültiges main.py und eine allgemeingültige uart_lib.py. In main.py muss die jeweils gültige Länge des Tokens inkl. aller Sonderbyts wie Startzeichen und Checksumme hinterlegt sein, sonst erfolgt keine Weiterleitung des Token. In der uart_lib.py wird aktuell der Token um 0,1 Sekunde verzägert weiter gesendet. Das ist zum Testen über den ADC-TAkt zu löschen.&lt;br /&gt;
&lt;br /&gt;
= Armin Rohnen, 28.11.2025 - Grundkonzept des Programmcodes für die UART-Kommunikation =&lt;br /&gt;
Auf den jeweiligen Platinen werden durch die Bestromung die MCUs gestartet und es werden nacheinander die Dateien &amp;quot;boot.py&amp;quot; und &amp;quot;main.py&amp;quot; abgearbeitet. In &amp;quot;boot.py&amp;quot; befindet sich weiter kein Progammcode, dort werden höchstens Systemeinstellungen vorgenommen. In &amp;quot;main.py&amp;quot; befindet sich die Initialisierung der jeweiligen Platine. Dieses Prgramm muss beendet werden und darf keine Endlosschleife enthalten. Die Steuerung des Ablaufes erfolgt über Interrupt-Service-Routinen (ISR) welche auf definierte Interrupts reagieren und jeweils den zugehörigen Programmcode ausführen.&lt;br /&gt;
&lt;br /&gt;
[[Datei:20251128 Initialisierung MWP.png|thumb|1000px|gerahmt|zentriert|alternativtext=Abb. 1) Konzept zur Initialisierung der Messwertplatine, (c) Armin Rohnen|Abb. 1) Konzept zur Initialisierung der Messwertplatine, (c) Armin Rohnen]]&lt;br /&gt;
&lt;br /&gt;
Zur weiteren Funktionalität auf der Messwertplatine gehört mindestens die Erstellung des (Grund)Tokens und das erste Senden des Tokens. Wird ein Token empfangen bzw. werden Daten an der UART-Schnittstelle erkannt, erfolgt die Abarbeitung gemäß Abb. 2.&lt;br /&gt;
&lt;br /&gt;
[[Datei:20251128 Programmablauf UART IRQ.png|thumb|1000px|gerahmt|zentriert|alternativtext=Abb. 2) Programmablauf UART ISR, (c) Armin Rohnen|Abb. 2) Programmablauf UART ISR, (c) Armin Rohnen]]&lt;br /&gt;
&lt;br /&gt;
Die Abarbeitung des UART IRQ erfolgt auf allen Platinen gleich. Der UART.IRQ_RXIDLE ruft als ISR &amp;quot;_uart_rx_handler&amp;quot; auf. Darin wird lediglich geprüft ob wirklich Daten am UART-RX eingegangen sind. Wenn ja, dann werden die Daten aus dem UART-Eingangspuffer ausgelesen und es wird &amp;quot;on_receive&amp;quot; zur weiteren Überprüfung des Tokens aufgerufen.&amp;lt;br&amp;gt;&lt;br /&gt;
In &amp;quot;on_receive&amp;quot; wird geprüft ob es sich um den (richtigen) Token handelt und dieser Fehlerfrei übertragen wurde. Danach wird ein &amp;quot;local_receive&amp;quot; aufgerufen. Diese Methode der Klasse wird jeweils lokal mit der individuellen Token-Abarbeitung überschrieben. In der Token-Abarbeitung befindet sich üblich die Anweisung zum Senden des Tokens. Lediglich auf der Messwertplatine erfolgt das Senden des Tokens durch eine weitere ISR.&amp;lt;br&amp;gt;&lt;br /&gt;
Die Auslagerung der eigentlichen Verarbeitung des Tokens auf einen lokalen Programmcode entlastet den IRQ, so dass dieser sehr schnell wieder aufgerufen werden kann.&lt;br /&gt;
&lt;br /&gt;
Im &amp;quot;local_receive&amp;quot; der Messwertplatine ist die Überprüfung des ersten gesendeten Tokens enthalten. Ist dieser wieder auf der Messwertplatine eingetroffen, dann wird die Messwerterfassung gestartet und es wird mit der eingestellten Abtastrate des ADC die Alert IRS (Abb. 3) abgearbeitet, welche u.a. zu jedem vollen Messwertesatz einen neuen Token versendet.&lt;br /&gt;
&lt;br /&gt;
[[Datei:20251128 Programmablauf ADC IRQ MWP.png|thumb|1000px|gerahmt|zentriert|alternativtext=Abb. 3) Programmablauf der ADC ISR auf der Messwertplatine, (c) Armin Rohnen|Abb. 3) Programmablauf der ADC ISR auf der Messwertplatine, (c) Armin Rohnen]]&lt;br /&gt;
&lt;br /&gt;
Jeder eingehende Token am UART-RX der jeweiligen Platine lösst die Abarbeitung über die ISR aus. Solange Token im Umflauf sind, solange werden auf den einzelnen Platinen Funktionsabarbeitungen erfolgen. Getriggert wird das System durch die Abtastrate des ADCs auf der Messwertplatine. Endlosschleifen in &amp;quot;main.py&amp;quot; und/oder den ISR stören diesen Ablauf und dürfen daher nicht verwendet werden. Allerdings sind Endlosschleifen icht erforderlich, da dies über den im Umlauf befindlichen Token erfolgt.&lt;br /&gt;
&lt;br /&gt;
= Peter Vogginger, 10.11.2025 - Aufgabenanalyse =&lt;br /&gt;
Aktuell werden die Messwerte von jeder Platine eigenständig an die MATLAB®-GUI versendet. Diese visualisiert und verarbeitet die Messwerte. Die erforderlichen Stellgrößen werden wiederum auf den Platinen in Abhängigkeit der MATLAB®-GUI eingestellt. &lt;br /&gt;
&lt;br /&gt;
In Zukunft soll die Kommunikation unter den MCUs erfolgen. Die Steuerung soll über die Maschinensteuerung erfolgen. Es wird weiterhin eine MATLAB®-GUI (im folgenden MATLAB®-Wartungsapp genannt) geben, diese dient jedoch lediglich für Wartungs- und Versuchszwecke. Die Aufgabe besteht darin, eine robuste und schnelle Kommunikation aufzubauen und diese anschließend auf allen MCUs zu implementieren.&lt;br /&gt;
&lt;br /&gt;
In die Auflistung der miteinander kommunizierenden Steuergeräte ist ein Touch-Display und optional ein Maschinensimulator mit aufzunehmen. Dadurch ergeben sich fünf Platinen, die im ständigen Austausch miteinander stehen: Messwertplatine, SSR-Platine, Basisplatine, Display-Platine und Maschinensimulator.&lt;br /&gt;
&lt;br /&gt;
Zur Fehleranalyse und Erprobung sollen weiterhin alle Messwerte in der Kommunikation enthalten sein, um die MATLAB®-Wartungsapp an die Display-Platine anschließen zu können und mittels Logging alle Daten darauf zu visualisieren. Angelehnt an das 1984 von IBM eingeführte Token Ring Network soll eine „im Kreis laufende“ Kommunikation aufgebaut werden.&lt;br /&gt;
&lt;br /&gt;
== Hardware-Aufbau ==&lt;br /&gt;
Die Verbindungen werden hardwareseitig durch den UART der MCUs hergestellt. Die UART Sendeleitung Tx einer MCU wird mit der Empfangsleitung Rx der nächsten MCU verbunden. Dies wird von Platine zu Platine in der Reihenfolge: Messwertplatine -&amp;gt; Basisplatine -&amp;gt; SSR-Platine -&amp;gt; Display-Platine -&amp;gt; Messwertplatine durchgeführt. Damit ergibt sich ein geschlossener Ring. Optional kann nach der Displayplatine noch der Maschinensimulator eingeschleift werden.&lt;br /&gt;
&lt;br /&gt;
== Messwerte ==&lt;br /&gt;
Es gibt einen definierten Token. Jede Platine erneuert ihren Anteil des Tokens und entnimmt dem Token die benötigten Informationen (Messwerte). Was zuvor die MATLAB®-GUI durchgeführt hat, übernehmen nun die einzelnen Platinen. Dadurch ergibt sich unter den Platinen eine Aufgabenverteilung. Tabelle 1 zeigt eine Auflistung der Daten, die in den Datensatz des Tokens aufgenommen werden sollen. Jede nummerierte Position erhält einen Platz, je nach Bedarf an Größe. Der Token wird als Bytearray ausgeführt.&lt;br /&gt;
&lt;br /&gt;
== Token ==&lt;br /&gt;
=== Anzahl ===&lt;br /&gt;
Die Anzahl der im Kreis laufenden Tokens soll sich auf einen beschränken. Dieser wird erstmalig von der Messwertplatine erzeugt und anschließend „im Kreis“ gesendet, wobei jede MCU nur den für sie relevanten Teil liest bzw. auch umschreibt. Die Abtastrate des ADC (analog digital converter) gibt die Taktrate des Tokens vor. Durch die Wahl der ADC-Abtastrate wird daher die Kommunikationsgeschwindigkeit (Token/s) beeinflusst. Dieser ist der Flaschenhals und es ist eine langsame Steigerung der Taktrate vorzusehen, um mögliche Auswirkungen und Probleme in der Übertragung festzustellen.&lt;br /&gt;
&lt;br /&gt;
=== Struktur ===&lt;br /&gt;
Am Anfang befindet sich ein Startzeichen, um die Art des Tokens (Standard-, Start- oder Paniktoken; siehe unten), festzulegen. Anschließend folgt ein Datensatz und danach eine Prüfsumme. Der Datensatz ist so auszuführen, dass dieser einfach erweitert werden kann, um Erweiterungen zu ermöglichen (z.B. 2. Brühgruppeneinheit). Im Weiteren ist der Token möglichst kurz auszuführen. Der Token soll über eine einheitliche Länge verfügen. Der Token wird als bytearray angelegt und auch so empfangen. (dateneingang = bytearray(readIn(UART))) Datensatz: Jedem Messwert wird ein Bereich von 2 Byte als fester Platz im Token zugewiesen.&lt;br /&gt;
&lt;br /&gt;
=== Prüfsumme ===&lt;br /&gt;
Um die fehlerfreie Übertragung eines Tokens zu bestätigen, wird aus dem Datenblock des Tokens eine Prüfsumme gebildet und diese ans Ende des Tokens angehängt. Das verwendete Verfahren ist CRC-32.&lt;br /&gt;
&lt;br /&gt;
=== Standardtoken ===&lt;br /&gt;
Es ist erkennbar über das Startzeichen am Anfang und wird genutzt für den regelmäßigen Datenaustausch zwischen den MCUs. Starttoken: Es ist erkennbar über das Startzeichen am Anfang. Hierbei wird beim Einschalten der Espressomaschine die Betriebsbereitschaft der gesamten Kommunikation geprüft. Sowohl ob die Hardwareverbindung intakt ist als auch ob alle MCUs empfangen und senden können. Es gilt zu klären, welche MCU dies aussendet.&lt;br /&gt;
&lt;br /&gt;
=== Paniktoken ===&lt;br /&gt;
Es ist erkennbar über das Startzeichen am Anfang. Dies ist die Realisierung eines Not-Halts. Es sollen alle Prozesse augenblicklich gestoppt werden.&lt;br /&gt;
=== Fehlererkennung === &lt;br /&gt;
Wird das Token nicht innerhalb einer definierten Zeitspanne wieder am Empfang einer MCU erkannt, festgelegt über einen timer-Funktion, soll am Display eine Fehlermeldung ausgegeben werden. Erkennt eine Platine einen Fehler (aufgrund Timeout), werden Magnetventile geschlossen (stromlos geschaltet), die Heizungen und die Pumpen werden abgeschaltet, der Wert des Dosierventils Kaltwasser wird gespeichert. Es ist ein Fehlerspeicher im Grundkonzept vorgesehen.&lt;br /&gt;
&lt;br /&gt;
== Token Definition ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Tabelle 1: Tokeninhalt&lt;br /&gt;
|-&lt;br /&gt;
! Platine !! Byte-Nr !! Bits / Bit-Nr. !! Beschreibung !! Wertebereich !! Anmerkung&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|8 Bit&lt;br /&gt;
|Startzeichen&lt;br /&gt;
|&lt;br /&gt;
|0x0A - Standardtoken&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;15&amp;quot; | Messplatine || 1,2 || 16 Bit || Leitwert || 0,2 - 20 S/cm || rowspan=&amp;quot;15&amp;quot; | 16 Bit im Token&lt;br /&gt;
dort wo diese Messwerte verarbeitet werden, werden sie mittels Kennlinie umgerechnet.&lt;br /&gt;
&lt;br /&gt;
Die csv-Datei der Kennlinie befindet sich auf der jeweiligen Platine.&lt;br /&gt;
&lt;br /&gt;
Der Tassenwärmer existiert nur 1x je Machine&lt;br /&gt;
|-&lt;br /&gt;
| 3,4 || 16 Bit || Boilerdruck || 0,5 - 4,5 V / 0 - 4 bar &lt;br /&gt;
|-&lt;br /&gt;
| 5,6 || 16 Bit || Brühgruppendruck (1. BG) || 0,5 - 4,5 / 0 - 12 bar &lt;br /&gt;
|-&lt;br /&gt;
| 7,8 || 16 Bit || Brühgruppendruck (2. BG) || 0,5 - 4,5 / 0 - 12 bar &lt;br /&gt;
|-&lt;br /&gt;
| 9,10 || 16 Bit || Wassereingangstemperatur&lt;br /&gt;
(ersatzweise Leitungsdruck)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 11,12 || 16 Bit || Boiler-NTC (1. BG) || Kennlinie &lt;br /&gt;
|-&lt;br /&gt;
| 13,14 || 16 Bit || Boiler-NTC (2. BG) || Kennlinie &lt;br /&gt;
|-&lt;br /&gt;
| 15,16 || 16 Bit || Tassenwärmer-NTC || Kennlinie &lt;br /&gt;
|-&lt;br /&gt;
| 17,18 || 16 Bit || Mischtemperatur-NTC (1. BG) || Kennlinie &lt;br /&gt;
|-&lt;br /&gt;
| 19,20 || 16 Bit || Mischtemperatur-NTC (2. BG) || Kennlinie &lt;br /&gt;
|-&lt;br /&gt;
| 21,22 || 16 Bit || Brühgruppen-NTC (1. BG) || Kennlinie &lt;br /&gt;
|-&lt;br /&gt;
| 23,24 || 16 Bit || Brühgruppen-NTC (2. BG) || Kennlinie &lt;br /&gt;
|-&lt;br /&gt;
| 25,26 || 16 Bit || Boilerheizung (Soll, 1. BG) || 8 Hz PWM 0 - 100 % &lt;br /&gt;
|-&lt;br /&gt;
| 27,28 || 16 Bit || Boilerheizung (Soll, 2. BG) || 8 Hz PWM 0 - 100 % &lt;br /&gt;
|-&lt;br /&gt;
| 29,20 || 16 Bit || Tassenwärmerheizung (Soll) || 8 Hz PWM 0 - 100 % &lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | SSR-Platine || 31,32 || 16 Bit || Position Schrittmotor Dosierventil 1. BG || 0 - 550 ||&lt;br /&gt;
|-&lt;br /&gt;
| 33,34 || 16 Bit || Position Schrittmotor Dosierventil 2. BG || 0 - 550 ||&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;17&amp;quot; | Basisplatine || 35,36 || 16 Bit || Verstellwert Schrittmotor Dosierventil 1. BG || Integer mit Vorzeichen ||&lt;br /&gt;
|-&lt;br /&gt;
| 37,38 || 16 Bit || Verstellwert Schrittmotor Dosierventil 2. BG || Integer mit Vorzeichen ||&lt;br /&gt;
|-&lt;br /&gt;
|39,40&lt;br /&gt;
|16 Bit&lt;br /&gt;
|Pumpensollwert 1. BG&lt;br /&gt;
|0 - 4096&lt;br /&gt;
|entspricht 0 - 5000 mV bzw. 0 - 5000 U/min&lt;br /&gt;
|-&lt;br /&gt;
|41,42&lt;br /&gt;
|16 Bit&lt;br /&gt;
|Pumpensollwert 2. BG&lt;br /&gt;
|0 - 4096&lt;br /&gt;
|entspricht 0 - 5000 mV bzw. 0 - 5000 U/min&lt;br /&gt;
|-&lt;br /&gt;
|43&lt;br /&gt;
|8 Bit&lt;br /&gt;
|Durchflussrate 1. BG&lt;br /&gt;
|0 - 25 ml/s&lt;br /&gt;
|Integerwert in 1/10 ml/s, damit Wertebereich 0 - 250&lt;br /&gt;
|-&lt;br /&gt;
|44,45&lt;br /&gt;
|16 Bit&lt;br /&gt;
|Durchflusscounts 1. BG&lt;br /&gt;
|0 - 65535&lt;br /&gt;
|je Count 1/39,9 ml, Überlauf muss unterbunden werden&lt;br /&gt;
|-&lt;br /&gt;
|46&lt;br /&gt;
|8 Bit&lt;br /&gt;
|Durchflussrate 2. BG&lt;br /&gt;
|0 - 25 ml/s&lt;br /&gt;
|Integerwert in 1/10 ml/s, damit Wertebereich 0 - 250&lt;br /&gt;
|-&lt;br /&gt;
|47,48&lt;br /&gt;
|16 Bit&lt;br /&gt;
|Durchflusscounts 2. BG&lt;br /&gt;
|0 - 65535&lt;br /&gt;
|je Count 1/39,9 ml, Überlauf muss unterbunden werden&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;9&amp;quot; |49&lt;br /&gt;
|&lt;br /&gt;
|Füllstandsbyte&lt;br /&gt;
|&lt;br /&gt;
| rowspan=&amp;quot;9&amp;quot; |Füllstände werden von den Füllstandsreglern auf der Basisplatine verarbeitet&lt;br /&gt;
Füllstand Abtropfschale True verhindert Pumpenansteuerung&lt;br /&gt;
Füllstand Boiler False verhindert Pumpenansteuerung&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Füllstand Boiler 1. BG || 0/1 &lt;br /&gt;
|-&lt;br /&gt;
| 1 || Füllstand Boiler 2. BG || 0/1 &lt;br /&gt;
|-&lt;br /&gt;
| 2 || Füllstand Tank Minimum || 0/1 &lt;br /&gt;
|-&lt;br /&gt;
| 3 || Füllstand Tank Maximum || 0/1 &lt;br /&gt;
|-&lt;br /&gt;
| 4 || Füllstand Abtropfschale || 0/1 &lt;br /&gt;
|-&lt;br /&gt;
| 5 || || 0/1 &lt;br /&gt;
|-&lt;br /&gt;
| 6 || || 0/1 &lt;br /&gt;
|-&lt;br /&gt;
| 7 || || 0/1 &lt;br /&gt;
|-&lt;br /&gt;
| || rowspan=&amp;quot;9&amp;quot; | 50 || || Magnetventile Byte 1 || || rowspan=&amp;quot;9&amp;quot; | Magnetventile Y101 bis Y113 gehören zur 1. BG&lt;br /&gt;
Y113 ist der Dampfhahn&lt;br /&gt;
Y214 bis Y222 gehören zur 2. BG &lt;br /&gt;
|-&lt;br /&gt;
| || 0 || Y101 || 0/1 &lt;br /&gt;
|-&lt;br /&gt;
| || 1 || Y102 || 0/1 &lt;br /&gt;
|-&lt;br /&gt;
| || 2 || Y103 || 0/1 &lt;br /&gt;
|-&lt;br /&gt;
| || 3 || Y104 || 0/1 &lt;br /&gt;
|-&lt;br /&gt;
| || 4 || Y105 || 0/1 &lt;br /&gt;
|-&lt;br /&gt;
| || 5 || Y106 || 0/1 &lt;br /&gt;
|-&lt;br /&gt;
| || 6 || Y107 || 0/1 &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|7&lt;br /&gt;
|Y108&lt;br /&gt;
|0/1&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| rowspan=&amp;quot;9&amp;quot; |51&lt;br /&gt;
|&lt;br /&gt;
|Magnetventil Byte 2&lt;br /&gt;
|&lt;br /&gt;
| rowspan=&amp;quot;9&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|Y109&lt;br /&gt;
|0/1&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|Y110&lt;br /&gt;
|0/1&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|2&lt;br /&gt;
|Y111&lt;br /&gt;
|0/1&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|3&lt;br /&gt;
|Y112&lt;br /&gt;
|0/1&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|4&lt;br /&gt;
|Y113&lt;br /&gt;
|0/1&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|5&lt;br /&gt;
|Y214&lt;br /&gt;
|0/1&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|6&lt;br /&gt;
|Y215&lt;br /&gt;
|0/1&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|7&lt;br /&gt;
|Y216&lt;br /&gt;
|0/1&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| rowspan=&amp;quot;9&amp;quot; |52&lt;br /&gt;
|&lt;br /&gt;
|Magnetventil Byte 3&lt;br /&gt;
|&lt;br /&gt;
| rowspan=&amp;quot;9&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|Y217&lt;br /&gt;
|0/1&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|Y218&lt;br /&gt;
|0/1&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|2&lt;br /&gt;
|Y219&lt;br /&gt;
|0/1&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|3&lt;br /&gt;
|Y220&lt;br /&gt;
|0/1&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|4&lt;br /&gt;
|Y221&lt;br /&gt;
|0/1&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|5&lt;br /&gt;
|Y222&lt;br /&gt;
|0/1&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|6&lt;br /&gt;
|&lt;br /&gt;
|0/1&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|7&lt;br /&gt;
|&lt;br /&gt;
|0/1&lt;br /&gt;
|-&lt;br /&gt;
|Displayplatine&lt;br /&gt;
|53,54&lt;br /&gt;
|16&lt;br /&gt;
|Bezugswassertemperatur 1. BG&lt;br /&gt;
|30  - 98 °C&lt;br /&gt;
|Integerwert in 1/10 °C, damit Wertebereich 300 bis 980&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|55,56&lt;br /&gt;
|16&lt;br /&gt;
|Bezugswassertemperatur 2. BG&lt;br /&gt;
|30  - 98 °C&lt;br /&gt;
|Integerwert in 1/10 °C, damit Wertebereich 300 bis 980&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|57,58&lt;br /&gt;
|16&lt;br /&gt;
|Bezugsmenge 1. BG&lt;br /&gt;
|20 - 300 g bzw. ml&lt;br /&gt;
|Integerwert in 1/10 ml, damit Wertebereich 200 bis 3000&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|59,60&lt;br /&gt;
|16&lt;br /&gt;
|Bezugsmenge 2. BG&lt;br /&gt;
|20 - 300 g bzw. ml&lt;br /&gt;
|Integerwert in 1/10 ml, damit Wertebereich 200 bis 3000&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|61,62&lt;br /&gt;
|16&lt;br /&gt;
|Bezugszeit 1. BG&lt;br /&gt;
|0 - 120 Sekunden&lt;br /&gt;
|Integerwert in 1/10 Sekunde, damit Wertebereich 0 bis 1200&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|63,64&lt;br /&gt;
|16&lt;br /&gt;
|Bezugszeit 2. BG&lt;br /&gt;
|0 - 120 Sekunden&lt;br /&gt;
|Integerwert in 1/10 Sekunde, damit Wertebereich 0 bis 1200&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|65,66&lt;br /&gt;
|16&lt;br /&gt;
|Preinfusionszeit 1. BG&lt;br /&gt;
|0 - 120 Sekunden&lt;br /&gt;
|Integerwert in 1/10 Sekunde, damit Wertebereich 0 bis 1200&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|67,68&lt;br /&gt;
|16&lt;br /&gt;
|Preinfusionszeit 2. BG&lt;br /&gt;
|0 - 120 Sekunden&lt;br /&gt;
|Integerwert in 1/10 Sekunde, damit Wertebereich 0 bis 1200&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|69&lt;br /&gt;
|8&lt;br /&gt;
|Abschalttemperatur Entschichtung&lt;br /&gt;
|90 - 98 °C&lt;br /&gt;
|Integerwert in °C&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|70&lt;br /&gt;
|8&lt;br /&gt;
|Grenztemperatur&lt;br /&gt;
|135 - 150 °C&lt;br /&gt;
|Integerwert in °C&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|71&lt;br /&gt;
|8&lt;br /&gt;
|Sollwert Boilerdruck&lt;br /&gt;
|1100 - 1500 mbar&lt;br /&gt;
|Integerwert in 10 mbar, damit Wertebereich 110 bis 150&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|72&lt;br /&gt;
|8&lt;br /&gt;
|Stellung Vertikalhebel&lt;br /&gt;
|0 - 180 Grad&lt;br /&gt;
|Integerwert&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| rowspan=&amp;quot;9&amp;quot; |73&lt;br /&gt;
|&lt;br /&gt;
|Maschinenstatus Byte 1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|Mischerstatus 1. BG&lt;br /&gt;
|0/1&lt;br /&gt;
|True = Mischtemperatur erreicht&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|Mischerstatus 2. BG&lt;br /&gt;
|0/1&lt;br /&gt;
|True = Mischtemperatur erreicht&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|2&lt;br /&gt;
|Entschichtung&lt;br /&gt;
|0/1&lt;br /&gt;
|True = Entschichtung aktiv&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|3&lt;br /&gt;
|Handhebelmodus&lt;br /&gt;
|0/1&lt;br /&gt;
|True = aktiv&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|4&lt;br /&gt;
|Rezepteingabe&lt;br /&gt;
|0/1&lt;br /&gt;
|True = aktiv&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|5&lt;br /&gt;
|Wartungsmodus&lt;br /&gt;
|0/1&lt;br /&gt;
|True = aktiv&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|6&lt;br /&gt;
|Schrittmotor Dosierventil Flag&lt;br /&gt;
|0/1&lt;br /&gt;
|True = Schrittmotor für Dosierventil Kaltwasser hat ursprüngliche Position erreicht (Teil der Initialisierung)&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|7&lt;br /&gt;
|&lt;br /&gt;
|0/1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| rowspan=&amp;quot;9&amp;quot; |74&lt;br /&gt;
|&lt;br /&gt;
|Maschinenstatus Byte 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|Kaffeebezug 1. BG&lt;br /&gt;
|0/1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|Kaffeebezug 1. BG&lt;br /&gt;
|0/1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|2&lt;br /&gt;
|Teewasserbezug&lt;br /&gt;
|0/1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|3&lt;br /&gt;
|Dampfbezug&lt;br /&gt;
|0/1&lt;br /&gt;
|Bewirkt 200 mbar Reduzierung Sollwert Boilerdruck&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|4&lt;br /&gt;
|Boilerbefüllung (Befüllungsflag)&lt;br /&gt;
|0/1&lt;br /&gt;
|True = Boilerbefüllung aktiv&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|5&lt;br /&gt;
|Aufheizen&lt;br /&gt;
|0/1&lt;br /&gt;
|True = Aufheizphase, False = Betriebsbereit&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|6&lt;br /&gt;
|Systemstart&lt;br /&gt;
|0/1&lt;br /&gt;
|True = Systemstart&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|7&lt;br /&gt;
|Sicherheitsfunktion&lt;br /&gt;
|0/1&lt;br /&gt;
|True = Sicherheitsfunktion aktiv&lt;br /&gt;
|}&lt;br /&gt;
= Peter Vogginger,19.10.2025 - NUCLEO_H743ZI2 =&lt;br /&gt;
Kommunikation als Token-Ring oder in Stern-Topologie &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der Wechsel der Kommunikation von dem geplanten Token-Ring-Verfahren, hin zur Stern-Topologie erfordert 3 serielle Schnittstellen. Dies ist mit der aktuellen Konstellation, 4 MCUs (Basisplatine, SSR-Platine, Messplatine und Displayplatine) mit jeweils einem Raspberry Pi Pico RP2040, nicht möglich. An einem RP2040 stehen 2 serielle Schnittstellen zur Verfügung. &lt;br /&gt;
&lt;br /&gt;
Der Wechsel hin zu einem größeren Board, dem NUCLEO-H743ZI2 MCU-Board mit einer STM32H7 MCU. Der Wechsel würde Vorteile bieten:  &lt;br /&gt;
* weniger Elektronik in der Peripherie &lt;br /&gt;
* ADCs ausreichend am Board &lt;br /&gt;
* DACs ausreichend am Board &lt;br /&gt;
* 8 serielle Schnittstellen &lt;br /&gt;
* viel mehr nutzbare PINs &lt;br /&gt;
&lt;br /&gt;
Die Vielzahl an Anschlüssen bietet die Möglichkeit, von aktuell 3 Platinen (und 3 MCUs) auf 1 Platine mit einem MCU-Board zu reduzieren. &lt;br /&gt;
&lt;br /&gt;
Allerdings bietet diese Umstellung nicht nur Vorteile.  &lt;br /&gt;
&lt;br /&gt;
Nachteilig wäre, dass bei jedem MicroPython Update ein eigenes Derivat erstellt werden müsste, da default die ADC auf 12-Bit Auflösung in MicroPython definiert sind. Aktuell existiert ein Derivat mit 16-Bit ADC Konfiguration (NUCLEO_H743ZI2_v1-27-0_ADC_16BIT.hex), dies basiert auf der MicroPython Version v1-27-0. &lt;br /&gt;
&lt;br /&gt;
Allerdings ist die Verfügbarkeit von NUCLEO-Boards immer zeitweise nicht gegeben. Diesbezüglich wäre ein Platinenlayout inkl. den Bauelementen für MCU und der direkten Peripherie erforderlich. Was aber erst nach der Inbetriebnahme der beiden Prototypen-Maschinen sinnvoll erscheint. Die Kosten dieser externen Entwicklung werden auf 50 t€ bis 100 t€ geschätzt. &lt;br /&gt;
&lt;br /&gt;
Aufgrund der aktuellen Situation wird bis auf Weiteres die Verwendung von Raspberry Pi Pico verfolgt.&lt;br /&gt;
&lt;br /&gt;
= Armin Rohnen, 16.10.2025 =&lt;br /&gt;
Im Zuge der Analyse für die zweite Auflage von MATLAB® meets MicroPython ist das Thema der UART-Kommunikation tiefer betrachtet worden. &lt;br /&gt;
&lt;br /&gt;
Die Kommunikation ist mit Sorgfalt zu programmieren. Durch Lesen und Schreiben auf die UART-Schnittstelle kann die MCU blockiert und dauerhaft an der Ausführung anderer Programmteile gehindert werden. Die Problematik ist in Abschnitt 3.13 der 2. Auflage MATLAB® meets MicroPython beschrieben.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Armin Rohnen, 11.04.2024 =&lt;br /&gt;
[[Datei:20250322 Konzept.png|thumb|900px|gerahmt|zentriert|alternativtext=Armin Rohnen, Kommunikationskonzept mit Token|Armin Rohnen, Kommunikationskonzept mit Token]]&lt;br /&gt;
Seitens des Platinenlayouts für die Steuerungselektronik wurden die jeweiligen PINs der ersten UARTSchnittstelle für die spätere Inter-Kommunikation der Steuerung herausgelegt. Die Raspberry Pi Pico MCU verfügt über einen jeweils 32 Byte großen Eingangs- bzw. Ausgangspuffer für die UART-Schnittstelle. Dieser soll genutzt werden um die Kommunikation zu ermöglichen. Die jeweilige Kommunikation selbst wird dadurch auf diese 32 Byte begrenzt. Hardwareseitig ist es Denkbar, dass je MCU zwei weitere PINs für die Kommunikation verwendet werden. Lediglich auf der SSR-Platine ist dazu ein Eingriff ins Platinenlayout erforderlich. Dieser kann bei einem Prototypen handwerklich durchgeführt werden. Die zwei zusätzlichen PINs für die Kommunikation (GP04, GP05 auf der Basisplatine, GP03, GP04 auf der SSR-Platine, GP06, GP07 auf der Messplatine) fungieren als eingehender und ausgehender Interrupt, so dass die Kommunikation als ISR programmiert werden kann.&lt;br /&gt;
&lt;br /&gt;
Angelehnt an das 1984 von IBM eingeführte Token Ring Network soll eine „im Kreis laufende“ Kommunikation aufgebaut werden. Ausgehend von der Messplatine wird ein Token über die einzelnen Platinen durchgereicht (Abbildung). Unter Berücksichtigung der Kommunikationsregeln können so eine beliebige Anzahl an Steuerungsplatinen in den Kommunikationsring eingebunden werden. Allerdings sollte dabei die Reihenfolge beachtet werden.&lt;br /&gt;
&lt;br /&gt;
Die Messplatine sendet über UART am Ende jedes gültigen Messwertsatzes einen oder mehrere Token an die Basisplatine. In den Token befinden sich die aktuellen Messwerte und alle anderen „im Kreis laufende“ Daten. Beim ersten Senden werden hier u.u. 0-Werte verwendet, bis dass der erste Token wieder bei der Messplatine angekommen ist. Ggf. unterbricht die Messplatine auch das Senden des Token bzw. der ersten Token-Serie, bis zum ersten Eintreffen eines Tokens. Die Messplatine ist damit der Taktgeber der Kommunikation. Konkret erfolgt dies in Abhängigkeit der Abtastrate des AD-Wandlers.Wenn ein Token versendet ist, wechselt die Messplatine den Logikzustand des ausgehenden Interrupt-PINs. Bevor der nächste Token versendet wird, wird wieder der Ausgangslogikzustand des Interrupt-PINs hergestellt. Sobald die Messplatine auch einen Token empfangen hat wird auch der PWM-Stellwert für das Boilerheizelement (aus Regler Boilerdruck) und für den Tassenwärmer im Token übermittelt.&lt;br /&gt;
&lt;br /&gt;
Von der Messplatine erhält die Basisplatine den Token. Die UART-Schnittstelle wird ausgelesen, wenn am eingehenden Interrupt-PIN der Logikzustand wechselt. Die Basisplatine tauscht im Token die Daten für die eigenen Messwerte, die Schaltzustände der Tasten, die Schaltzustände der Magnetventile usw. aus und sendet den Token an die SSR-Platine weiter. Ist der Token versendet, wechselt die Basisplatine den Logikzustand des ausgehenden Interrupt-PINs und arbeitet in gleicher Logik weiter wie die Messplatine.&lt;br /&gt;
&lt;br /&gt;
Die SSR-Platine bekommt von der Basisplatine den Token durchgereicht. Die SSR-Platine wertet den Token lediglich aus, nimmt keine Veränderungen darin vor und reicht diesen dann weiter. Nach der SSR-Platine kann eine Display-Platine nachgeschaltet werden. Diese wertet die Informationen im Token aus und visualisiert diese bzw. stellt die Informationen über WLAN zur Verfügung. Im Falle eines Touch-Displays werden die Bytes für die Schaltzustände der Tasten ausgetauscht. Abschließend erhält die Messplatine wieder den Token und übernimmt die relevanten Informationen daraus in den neu zu sendenden Token.&lt;br /&gt;
&lt;br /&gt;
Anstelle des eingehenden und ausgehenden Interrupt-PINs kann u.u. auch die MicroPython-Funktionalität uart.irq verwendet werden. Diese ruft eine ISR auf, sobald Daten im EIngangspuffer der UART-Schnittstelle eingegangen sind.&lt;br /&gt;
&lt;br /&gt;
Das Konzept ist auszugestalten und der bzw. die Token sind exakt zu definieren. Dabei ist auch zu definieren (und zu erproben) wie die dann übergeordnete MATLAB®-GUI die Daten für die Visualisierung erhält. Der einzelne Token darf aufgrund der Limitierung durch den UART-Puffer des Raspberry Pi Picos 32 Byte nicht überschreiten. Als maximale Datenrate sind 115200 Baud möglich, was unter Berücksichtigung von START / STOP-Bits und Paritätsbit eine maximale Kommunikationsrate von 11520 Byte je Sekunde ergibt. Damit wären 360 jeweils 32 Byte lange Token in der Kommunikation möglich. Nach aktuellem Stand der Recherchen überschreitet die Datenmenge für die Kommunikation die 32 Byte Grenze, so dass mit mehreren Token gearbeitet werden muss. Jeder Token weist im ersten Byte eine Token-Nr auf, so dass der Token zweifelsfrei identifiziert werden kann. Alle Token müssen die gleiche Länge in Bytes aufweisen. Für zukünftige Erweiterungen sind Leer-Bytes in den Token vorhanden. Jeder der 4 Token muss die gleiche Länge in Bytes aufweisen.&lt;br /&gt;
&lt;br /&gt;
Getaktet wird die Kommunikation durch die Datenerfassung der Messplatine. Aufgrund der jeweils ungültigen ersten Wandlung eines Messkanals ist eine maximale Abtastrate von 430 Messwerten je Sekunde aufgeteilt auf acht Messkanäle, was ca. 53 Datensätze je Sekunde ergibt. Bei einer Abtastrate von 475 SPS ergeben sich 30 gültige Messdatensätze je Sekunde.Wird nach jedem zweiten gültigen Messkanal ein 27 Byte langer Token von der Messplatine gesendet, dann ergibt dies eine Inter-Kommunikation zwischen den MCUs von 120 Token bzw. 3240 Byte je Sekunde, was unter der als Maximum angesehenen Datenrate liegt. Selbst bei einer Verlängerung der Token auf 32 Byte würde lediglich 1/3 des theoretisch möglichen Datentransfers durchgeführt.&lt;/div&gt;</summary>
		<author><name>Peter Vogginger</name></author>
	</entry>
	<entry>
		<id>http://www.institut-fuer-kaffeetechnologie.de/Wiki/index.php?title=Datei:Setter_Getter.png&amp;diff=4806</id>
		<title>Datei:Setter Getter.png</title>
		<link rel="alternate" type="text/html" href="http://www.institut-fuer-kaffeetechnologie.de/Wiki/index.php?title=Datei:Setter_Getter.png&amp;diff=4806"/>
		<updated>2026-01-08T13:15:13Z</updated>

		<summary type="html">&lt;p&gt;Peter Vogginger: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;SetterGetter&lt;/div&gt;</summary>
		<author><name>Peter Vogginger</name></author>
	</entry>
	<entry>
		<id>http://www.institut-fuer-kaffeetechnologie.de/Wiki/index.php?title=Projektr%C3%BCcksprache_18.12.2025&amp;diff=4805</id>
		<title>Projektrücksprache 18.12.2025</title>
		<link rel="alternate" type="text/html" href="http://www.institut-fuer-kaffeetechnologie.de/Wiki/index.php?title=Projektr%C3%BCcksprache_18.12.2025&amp;diff=4805"/>
		<updated>2025-12-19T20:32:40Z</updated>

		<summary type="html">&lt;p&gt;Peter Vogginger: Die Seite wurde neu angelegt: „=Besprechungsprotokoll – Projektrücksprache 18.12.2025= Ort: Online via ZOOM  Datum: 18.12.2025   Teilnehmer: Philipp Schiebel, Peter Vogginger, LfbA Armin Rohnen   Moderator: Philipp Schiebel  Protokoll: Peter Vogginger  ==Top 1) Annahme des Protokolls==  Das Protokoll ist zwei Tage nach der Besprechung Herrn Rohnen vorzulegen. In Zukunft soll es detailreicher sein.  &amp;lt;br /&amp;gt;   Das Protokoll der letzten Besprechung wird von allen  Teilnehmern angenommen…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Besprechungsprotokoll – Projektrücksprache 18.12.2025=&lt;br /&gt;
Ort: Online via ZOOM&lt;br /&gt;
&lt;br /&gt;
Datum: 18.12.2025 &lt;br /&gt;
&lt;br /&gt;
Teilnehmer: Philipp Schiebel, Peter Vogginger, LfbA Armin Rohnen &lt;br /&gt;
&lt;br /&gt;
Moderator: Philipp Schiebel&lt;br /&gt;
&lt;br /&gt;
Protokoll: Peter Vogginger&lt;br /&gt;
&lt;br /&gt;
==Top 1) Annahme des Protokolls== &lt;br /&gt;
Das Protokoll ist zwei Tage nach der Besprechung Herrn Rohnen vorzulegen. In Zukunft soll es detailreicher sein.  &amp;lt;br /&amp;gt;  &lt;br /&gt;
Das Protokoll der letzten Besprechung wird von allen &lt;br /&gt;
Teilnehmern angenommen. &lt;br /&gt;
&lt;br /&gt;
==Top 2) Projektplanung / GANTT == &lt;br /&gt;
Der aktuelle Stand ist nicht in Ordnung. Es gehört die Vergangenheit mit dazu, sonst fehlt ein gewisser, umfassenderer Blick auf die Projektplanung. &amp;lt;br /&amp;gt;                                                                                                  &lt;br /&gt;
Während der Prüfungsphase liegen die Prioritäten anderswo, dies wird in der Planung nicht berücksichtigt. &amp;lt;br /&amp;gt;  &lt;br /&gt;
Gleich lange Zeiten für alle Regler sind nicht realistisch. Die Abschlusspräsentation am 12.02.2026 ist unverhandelbar. Die Zielvereinbarung ist im Blick zu behalten. Die Revision des Planes soll normalerweise von den Projektmitgliedern selbst kommen. &lt;br /&gt;
&lt;br /&gt;
==Top 3) Status UART Kommunikation== &lt;br /&gt;
Es wurden einige Punkte, darunter der Programmcode der Setter und Getter dessen Dokumentation, abgeschlossen.  &amp;lt;br /&amp;gt; &lt;br /&gt;
Die bestehende Dokumentation ist zu hinterfragen und es ist die Frage zu stellen, ob es ausreichend ist, um zukünftigen Projektgruppen ein klares Bild der Kommunikation zu geben.  &amp;lt;br /&amp;gt;  &lt;br /&gt;
Bei dem mitgenommenen Schrittmotor gibt es, im Gegensatz zum Dosierventil, kein Auseinanderfallen bei zu weiter Verstellung.  &amp;lt;br /&amp;gt;  &lt;br /&gt;
Im Weiteren steht die Displayplatine im Fokus, zeitgleich werden gleiche Programmteile auch auf die SSR-Platine geschrieben. &amp;lt;br /&amp;gt;  &lt;br /&gt;
Im Wiki sind die Flussdiagramme der Setter und Getter hinzuzufügen. &lt;br /&gt;
&lt;br /&gt;
==Top 4) Dokumentation UART Kommunikation==&lt;br /&gt;
Dieser Punkt wurde bereits in Top 3) besprochen.&lt;br /&gt;
&lt;br /&gt;
==Top 5)  Status Startprozedur == &lt;br /&gt;
Das Flussdiagramm wurde zwecks Übersichtlichkeit überarbeitet. Es ist nicht korrekt. &lt;br /&gt;
Die Messwertplatine schickt nach dem Einschalten den Null-Token ab und beim Empfang dieses Tokens ist somit der Verbindungstest erfolgreich. Danach wird das &lt;br /&gt;
Kaffeerezept eingetragen, die Messwerterfassung wird angestoßen und alle acht Messwerte wird der Token versendet.  &amp;lt;br /&amp;gt;  &lt;br /&gt;
Es ist grundsätzlich zu klären wie erkannt wird, dass die Startprozedur erfolgreich abgelaufen ist. Der Boilerdruckregler wird verriegelt, wenn der Boilerfüllstand nicht ausreichend ist. Dies ist unabhängig von der Startprozedur. Das Dosierventil braucht eine gewisse Zeit, bis es zugefahren und wieder auf die alte Position aufgefahren ist. Dies &lt;br /&gt;
ist ebenfalls unabhängig von der Startprozedur. Sobald das Systemstart-Flag null ist, ist die Startprozedur abgeschlossen und Teewasser bzw. Kaffee kann bezogen werden. Möglicherweise sollte die Displayplatine dieses Flag umschalten. Dies ist noch zu klären. Solange der Systemstart nicht abgeschlossen ist, lässt die Displayplatine keine Eingabe in die Maschine zu.  &amp;lt;br /&amp;gt;  &lt;br /&gt;
Solange der Boilerfüllstand nicht ausreichend ist, aktiviert der Füllstandsregler die Pumpe und schaltet die Magnetventile. Hier ist von Vorteil, dass eine erneute Aktivierung beim erneuten Eintreffen des Tokens nicht bemerkbar ist. Die Displayplatine ist zu &lt;br /&gt;
berücksichtigen, auch wenn diese gerade noch nicht vorhanden ist.  &lt;br /&gt;
==Top 6)  Status Maschinensimulator   == &lt;br /&gt;
Es wurden zwei Funktionen zur Berechnung des Digitalwerts, auf Basis des gewünschten Wertes, erstellt. Die Kennlinien werden ergänzt. Die Dokumentation wird noch erstellt, ebenso die Ablaufdiagramme.  &lt;br /&gt;
==Top 7) Dokumentation Maschinensimulator == &lt;br /&gt;
Dieser Punkt wurde bereits in Top 6) besprochen. &lt;br /&gt;
==Top 8)  Termine für die Rücksprache während der vorlesungsfreien Zeit == &lt;br /&gt;
Der nächste Rücksprachetermin ist der 08.01.2026.  &amp;lt;br /&amp;gt;  &lt;br /&gt;
Ein E-Mail-Kontakt mit Herrn Rohnen ist möglich, allerdings können sich Verzögerungen in der Beantwortung ergeben.   &lt;br /&gt;
==Top 9) Nachtrag Programmcode == &lt;br /&gt;
Speicherort des Programmcodes ist im Wiki unter dem Reiter „Systemsoftware“ und dann unter „Programmcode“.  Es können nur Zip-Ordner hochgeladen werden. Dateien, die auf allen Platinen gespeichert werden, werden unter „Messwertplatine“ gespeichert. &amp;lt;br /&amp;gt;  &lt;br /&gt;
Bevor eine neue Programmdatei hochgeladen wird, ist mit Herrn Rohnen abzuklären, ob diese hinsichtlich Dokumentation und Layout passt.&lt;/div&gt;</summary>
		<author><name>Peter Vogginger</name></author>
	</entry>
	<entry>
		<id>http://www.institut-fuer-kaffeetechnologie.de/Wiki/index.php?title=Kommunikation_per_UART&amp;diff=4803</id>
		<title>Kommunikation per UART</title>
		<link rel="alternate" type="text/html" href="http://www.institut-fuer-kaffeetechnologie.de/Wiki/index.php?title=Kommunikation_per_UART&amp;diff=4803"/>
		<updated>2025-12-18T13:22:03Z</updated>

		<summary type="html">&lt;p&gt;Peter Vogginger: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Peter Vogginger, 18.12.2025&amp;lt;br&amp;gt; Setter und Getter für Bits und Bytes =&lt;br /&gt;
Dokumentation Setter / Getter &lt;br /&gt;
Beim Arbeiten mit binären Daten ist der Einsatz von Setter- und Getter-Funktionen sinnvoll, da &lt;br /&gt;
sie den Code übersichtlicher machen und Fehler durch direkte Bit- oder Bytemanipulation &lt;br /&gt;
vermeiden. Ein Setter verändert einen Wert in einem Bytearray, während ein Getter einen &lt;br /&gt;
bestehenden Wert ausliest. Der Setter wird bei Bits in Form von zwei Funktionen beschrieben, &lt;br /&gt;
einmal das Setzen eines Bits auf 1 und das Löschen eines Bits. Letzteres meint das Setzen eines &lt;br /&gt;
Bits auf 0. &lt;br /&gt;
&lt;br /&gt;
Zum Setzen einzelner Bits (siehe linke Grafik in der Abbildung 4) wird zunächst aus dem Bitindex &lt;br /&gt;
eine Bitmaske erzeugt, indem der Wert 1 entsprechend nach links verschoben wird (1 &amp;lt;&amp;lt; &lt;br /&gt;
bit_index). Durch eine OR-Verknüpfung des Bytes mit dieser Maske wird das betreffende Bit &lt;br /&gt;
zuverlässig auf den Wert 1 gesetzt.&lt;br /&gt;
&lt;br /&gt;
Zum Löschen eines Bits (siehe zweite Grafik von links in der Abbildung 4) wird dieselbe Maske &lt;br /&gt;
invertiert und das Byte anschließend mit einer AND-Verknüpfung verarbeitet. Dadurch wird das &lt;br /&gt;
Zielbit sicher auf den Wert 0 gesetzt. Beide Operationen verändern ausschließlich das &lt;br /&gt;
gewünschte Bit, alle anderen Bits im Byte bleiben unverändert.&lt;br /&gt;
&lt;br /&gt;
Das Auslesen eines Bits (siehe mittlere Grafik in der Abbildung 4) erfolgt, indem das &lt;br /&gt;
entsprechende Byte um den Bitindex nach rechts verschoben und anschließend mit 1 maskiert &lt;br /&gt;
wird. Auf diese Weise wird das Zielbit isoliert und als Wert 0 oder 1 zurückgegeben. &lt;br /&gt;
Für die Verarbeitung ganzer Messwerte, die aus ein oder zwei Bytes bestehen, werden ebenfalls &lt;br /&gt;
Setter und Getter verwendet.&lt;br /&gt;
&lt;br /&gt;
Beim Schreiben von Bytes (siehe vierte Grafik von links in der Abbildung 4) wird der Integerwert &lt;br /&gt;
im Big-Endian-Format in zwei Bytes umgewandelt und an der vorgesehenen Position im &lt;br /&gt;
Bytearray gespeichert.&lt;br /&gt;
&lt;br /&gt;
Big-Endian-Format bedeutet, dass bei mehrbyteigen Werten das höherwertige Byte (MSB) zuerst &lt;br /&gt;
gespeichert oder übertragen wird, gefolgt vom niederwertigen Byte (LSB). Im Gegensatz dazu &lt;br /&gt;
gibt es noch das Format Little-Endian. Hierbei ist die Reihenfolge genau umgekehrt, das &lt;br /&gt;
niederwertiges Byte wird zuerst übertragen. Entscheidend ist, dass Sender und Empfänger &lt;br /&gt;
dieselbe Endianess verwenden, sonst entstehen falsche Werte.&lt;br /&gt;
&lt;br /&gt;
Das Auslesen von Bytes (siehe rechte Grafik in der Abbildung 4) erfolgt durch Entnehmen von &lt;br /&gt;
einem (oder zwei Bytes) und deren Rückwandlung in einen Integer. Da beide Funktionen &lt;br /&gt;
dasselbe Format Big-Endian verwenden, wird der Messwert exakt so zurückgegeben, wie er &lt;br /&gt;
zuvor gespeichert wurde.&lt;br /&gt;
&lt;br /&gt;
Die genannten fünf Funktionen werden in die Datei utils.py geschrieben. Diese Datei wird auf jeder Platine hinterlegt. &amp;lt;br /&amp;gt; &lt;br /&gt;
Beispielaufruf: utils.set_bytes(token, ort, wert)&lt;br /&gt;
&lt;br /&gt;
= Armin Rohnen, 13.12.2025&amp;lt;br&amp;gt;Espressomaschinen-Kommunikations-Ring Timing =&lt;br /&gt;
[[Datei:20251213 EKR-Timing.png|thumb|1000px|gerahmt|zentriert|alternativtext=EKR Timing Diagramm, (c) Armin Rohnen|EKR Timing Diagramm, (c) Armin Rohnen]]&lt;br /&gt;
Das Timing des Espressomaschinen-Kommunikations-Rings erfolgt durch die Taktung des ADCs der Messwertplatine. Dieser kann mit einer maximalen Abtastrate von 860 SPS (Samples per Second) betrieben werden. Da jeder 1. Messwert verworfen werden muss und insgesamt 8 Messkanäle berücksichtigt werden müssen, beträgt die effektive Abtastrate 53,75 Hz bzw. alle 18,6 ms steht damit ein neuer Messwertdatensatz zur Verfügung und es wird der Token an die Basisplatine (bas) gesendet. Nach aktuellem Stand (12. Dezember 2025) besteht der Token aus 74 Bytes, was 740 Transferbits ergibt und mit der definierten Transferrate von 230.400 Baud eine Übertragungszeit von 3,2 ms erfordert.&lt;br /&gt;
&lt;br /&gt;
Der Kommunikationsring ist mit der Abfolge - Messwertplatine -&amp;gt; Basisplatine -&amp;gt; SSR-Platine -&amp;gt; Displayplatine -&amp;gt; (Maschinensimulator) -&amp;gt; Messwertplatine definiert. Außer auf der Messwertplatine wird jeweils der Token empfangen, danach die erforderlichen Programmcodes ausgeführt und Änderungen am Token vorgenommen um ihn abschließend an die nächste Platine weiter zu senden. Bei Einstellvorgängen des Dosierventils auf der SSR-Platine wird dies so nicht funktionieren, da die Verstellung des Schrittmotors zu lange dauern wird.&lt;br /&gt;
&lt;br /&gt;
Wird die Kommunikation so wie beschrieben separat betrachtet, dann summiert sich die Transferzeit auf 12,8 ms (bzw. 16 ms mit eingebundenen Maschinensimulator) bis dass der dann mit Änderungen versehene Token wieder an der Messwertplatine angekommen ist. Alle 18,6 ms sendet bei höchster Abtastrate die Messwertplatine den Token erneut. Damit keine Informationen verloren gehen, bleiben insgesamt 5,8 ms Rechenzeit für alle im Ring befindlichen Platinen übrig. Die Messwertplatine fügt aus diesem Grund die Messwerte erst direkt vor dem Senden des Tokens darin ein.&lt;br /&gt;
&lt;br /&gt;
Da eine Summenrechenzeit von 5,8 ms sehr knapp ist, ist zu prüfen, ob der Betrieb in maximaler ADC-Abtastrat emöglich ist.&lt;br /&gt;
&lt;br /&gt;
Eine Reduzierung auf die Abtastrate 475 SPS würde den Token-Aktualisierungstakt auf 33,7 ms (29,7 Hz) erhöhen. Da die kummulierte Übertragungszeit mit 12,8 ms gleich bleibt, ergäbe sich dann eine Restrechenzeit von 20,9 ms. Da der aktualisierte Token, in dem die Messwertplatine wieder Änderungen einfügen darf, dann erst nach dem 3. Messwert eintrifft, ist weiterhin eine Zwischenspeicherung der erfassten Messdaten erforderlich.&lt;br /&gt;
&lt;br /&gt;
= Armin Rohnen, 30.11.2025&amp;lt;br&amp;gt; Kommunikationsstart und kontinuierliches Sendendes Token im ADC Takt der Messwertplatine =&lt;br /&gt;
Über die Messwertplatine wird der Kommunikationsstart realisiert. Damit dies nicht direkt beim Einschalten erfolgt ist der zugehörige Code in der Datei main_mwp.py abgelegt. Wird diese Datei ausgeführt, dann startet die Kommunikation zwischen den Platinen und im Weiteren erfolgt der Maschinenstart.&lt;br /&gt;
&lt;br /&gt;
Aktuell müssen die Variablen UART_TimeOut, token und uart global definiert werden. Werden diese zu einem späteren Zeitpunkt in main.py initialisiert, dann sind diese automatisch global.&lt;br /&gt;
&lt;br /&gt;
Es wird der Initialtoken mit 75-Bytes angelegt und in Byte[0] wird &amp;quot;0x0A&amp;quot; eingetragen. Sollte es sich ergeben, dass die Tokendefinition noch zu weiteren Bytes führt, dann ist dies an den entsprechenden Stellen der main.py auf den Platinen einzutragen. &lt;br /&gt;
&lt;br /&gt;
Im weiteren Ablauf wird die uart-Schnittstelle initialisiert. In der Datei uart_lib.py ist die Klassendefinition des UARTHandler hinterlegt. Diese konfiguriert die uart-Schnittstelle. Im Konstruktor der Klasse ist hinterlegt, dass per UART.IRQ_RXIDLE auf eingehende Daten an der uart-Schnittstelle ragiert wird. Es wird als erstes die Methode _uart_rx_handler aufgerufen, welche sich innerhalb der Klasse befindet. Darin werden lediglich die Daten eingelsen und auf die Methode on_receive weiterverwiesen. Die Methode on_receive ist in allen Realisierungen gleich und prüft auf empfangene Datenlänge und auf das gültige Startzeichen. Danach wird auf die Methode local_receive weitergeleitet.&lt;br /&gt;
&lt;br /&gt;
Die Methode uart.local_receive aus der Klassendefinition wird durch uart.local_receive = mwp_receive_handler mit der in main_mwp.py befindlichen Funktion ersetzt. Da der zu erwartende Token eingegangen ist, wird als erstes die UART-TimeOut-Funktion deaktiviert. Es wird geprüft, ob die Sicherheitsfunktion aufgerufen werden muss oder ob der Token abgearbeitet werden kann. Handelt es sich bei dem empfangenen Token um den ersten Token, werden aktuell das Default-Kaffeerezept und die Betriebsparameter in den Token eingetragen. Es wid eine Byte-Positionsliste erstellt, an die die Messwerte im Token eingetragen werden sollen und es wird der ADS1115 gestartet, welcher danach das Senden des Token takten wird.&lt;br /&gt;
&lt;br /&gt;
In der Datei mwp_messwerte.py ist die Klassendefinition des ADS1115MuxSampler angelegt. Das ist die Umsetzung als Klassendefinition der bisherigen Messdatenerfassung. Der Konstruktor benötigt den Token, eine Positionslsite für die Byte-Nr. der Messwerte im Token (token_pos_list), das UART-Schnittstellenobjekt, die PIN-Nr über den der ADC-IRQ (irq_pin_nr) eingeht und die Kennziffer für die Abtastrate (smple_rate) des ADCs.&amp;lt;br&amp;gt;&lt;br /&gt;
Wenn der ADC gestartet ist, wird nach jedem erfolgten Sampling der Messwert durch die Methode _sample abgeholt. Es wird lediglich jeder zweite Messwert verwendet, da sich in der Wandlung des ersten Messwerts die Umstellung des Multiplexers befindet und der Messwert damit nicht korrekt sein kann. Gültige Messwerte werden als 2 Bytes im Token an der zugehörigen Position abgelegt und danach wird der nächste Messkanal am Multiplexer eingestellt. Ist der achte Messwert erfasst, wird der Token gesendet und die Abarbeitung startet wieder neu.&lt;br /&gt;
&lt;br /&gt;
Damit der Token über die im Verbund befindlichen Platinen durchgereicht wird existiert ein allgemeingültiges main.py und eine allgemeingültige uart_lib.py. In main.py muss die jeweils gültige Länge des Tokens inkl. aller Sonderbyts wie Startzeichen und Checksumme hinterlegt sein, sonst erfolgt keine Weiterleitung des Token. In der uart_lib.py wird aktuell der Token um 0,1 Sekunde verzägert weiter gesendet. Das ist zum Testen über den ADC-TAkt zu löschen.&lt;br /&gt;
&lt;br /&gt;
= Armin Rohnen, 28.11.2025 - Grundkonzept des Programmcodes für die UART-Kommunikation =&lt;br /&gt;
Auf den jeweiligen Platinen werden durch die Bestromung die MCUs gestartet und es werden nacheinander die Dateien &amp;quot;boot.py&amp;quot; und &amp;quot;main.py&amp;quot; abgearbeitet. In &amp;quot;boot.py&amp;quot; befindet sich weiter kein Progammcode, dort werden höchstens Systemeinstellungen vorgenommen. In &amp;quot;main.py&amp;quot; befindet sich die Initialisierung der jeweiligen Platine. Dieses Prgramm muss beendet werden und darf keine Endlosschleife enthalten. Die Steuerung des Ablaufes erfolgt über Interrupt-Service-Routinen (ISR) welche auf definierte Interrupts reagieren und jeweils den zugehörigen Programmcode ausführen.&lt;br /&gt;
&lt;br /&gt;
[[Datei:20251128 Initialisierung MWP.png|thumb|1000px|gerahmt|zentriert|alternativtext=Abb. 1) Konzept zur Initialisierung der Messwertplatine, (c) Armin Rohnen|Abb. 1) Konzept zur Initialisierung der Messwertplatine, (c) Armin Rohnen]]&lt;br /&gt;
&lt;br /&gt;
Zur weiteren Funktionalität auf der Messwertplatine gehört mindestens die Erstellung des (Grund)Tokens und das erste Senden des Tokens. Wird ein Token empfangen bzw. werden Daten an der UART-Schnittstelle erkannt, erfolgt die Abarbeitung gemäß Abb. 2.&lt;br /&gt;
&lt;br /&gt;
[[Datei:20251128 Programmablauf UART IRQ.png|thumb|1000px|gerahmt|zentriert|alternativtext=Abb. 2) Programmablauf UART ISR, (c) Armin Rohnen|Abb. 2) Programmablauf UART ISR, (c) Armin Rohnen]]&lt;br /&gt;
&lt;br /&gt;
Die Abarbeitung des UART IRQ erfolgt auf allen Platinen gleich. Der UART.IRQ_RXIDLE ruft als ISR &amp;quot;_uart_rx_handler&amp;quot; auf. Darin wird lediglich geprüft ob wirklich Daten am UART-RX eingegangen sind. Wenn ja, dann werden die Daten aus dem UART-Eingangspuffer ausgelesen und es wird &amp;quot;on_receive&amp;quot; zur weiteren Überprüfung des Tokens aufgerufen.&amp;lt;br&amp;gt;&lt;br /&gt;
In &amp;quot;on_receive&amp;quot; wird geprüft ob es sich um den (richtigen) Token handelt und dieser Fehlerfrei übertragen wurde. Danach wird ein &amp;quot;local_receive&amp;quot; aufgerufen. Diese Methode der Klasse wird jeweils lokal mit der individuellen Token-Abarbeitung überschrieben. In der Token-Abarbeitung befindet sich üblich die Anweisung zum Senden des Tokens. Lediglich auf der Messwertplatine erfolgt das Senden des Tokens durch eine weitere ISR.&amp;lt;br&amp;gt;&lt;br /&gt;
Die Auslagerung der eigentlichen Verarbeitung des Tokens auf einen lokalen Programmcode entlastet den IRQ, so dass dieser sehr schnell wieder aufgerufen werden kann.&lt;br /&gt;
&lt;br /&gt;
Im &amp;quot;local_receive&amp;quot; der Messwertplatine ist die Überprüfung des ersten gesendeten Tokens enthalten. Ist dieser wieder auf der Messwertplatine eingetroffen, dann wird die Messwerterfassung gestartet und es wird mit der eingestellten Abtastrate des ADC die Alert IRS (Abb. 3) abgearbeitet, welche u.a. zu jedem vollen Messwertesatz einen neuen Token versendet.&lt;br /&gt;
&lt;br /&gt;
[[Datei:20251128 Programmablauf ADC IRQ MWP.png|thumb|1000px|gerahmt|zentriert|alternativtext=Abb. 3) Programmablauf der ADC ISR auf der Messwertplatine, (c) Armin Rohnen|Abb. 3) Programmablauf der ADC ISR auf der Messwertplatine, (c) Armin Rohnen]]&lt;br /&gt;
&lt;br /&gt;
Jeder eingehende Token am UART-RX der jeweiligen Platine lösst die Abarbeitung über die ISR aus. Solange Token im Umflauf sind, solange werden auf den einzelnen Platinen Funktionsabarbeitungen erfolgen. Getriggert wird das System durch die Abtastrate des ADCs auf der Messwertplatine. Endlosschleifen in &amp;quot;main.py&amp;quot; und/oder den ISR stören diesen Ablauf und dürfen daher nicht verwendet werden. Allerdings sind Endlosschleifen icht erforderlich, da dies über den im Umlauf befindlichen Token erfolgt.&lt;br /&gt;
&lt;br /&gt;
= Peter Vogginger, 10.11.2025 - Aufgabenanalyse =&lt;br /&gt;
Aktuell werden die Messwerte von jeder Platine eigenständig an die MATLAB®-GUI versendet. Diese visualisiert und verarbeitet die Messwerte. Die erforderlichen Stellgrößen werden wiederum auf den Platinen in Abhängigkeit der MATLAB®-GUI eingestellt. &lt;br /&gt;
&lt;br /&gt;
In Zukunft soll die Kommunikation unter den MCUs erfolgen. Die Steuerung soll über die Maschinensteuerung erfolgen. Es wird weiterhin eine MATLAB®-GUI (im folgenden MATLAB®-Wartungsapp genannt) geben, diese dient jedoch lediglich für Wartungs- und Versuchszwecke. Die Aufgabe besteht darin, eine robuste und schnelle Kommunikation aufzubauen und diese anschließend auf allen MCUs zu implementieren.&lt;br /&gt;
&lt;br /&gt;
In die Auflistung der miteinander kommunizierenden Steuergeräte ist ein Touch-Display und optional ein Maschinensimulator mit aufzunehmen. Dadurch ergeben sich fünf Platinen, die im ständigen Austausch miteinander stehen: Messwertplatine, SSR-Platine, Basisplatine, Display-Platine und Maschinensimulator.&lt;br /&gt;
&lt;br /&gt;
Zur Fehleranalyse und Erprobung sollen weiterhin alle Messwerte in der Kommunikation enthalten sein, um die MATLAB®-Wartungsapp an die Display-Platine anschließen zu können und mittels Logging alle Daten darauf zu visualisieren. Angelehnt an das 1984 von IBM eingeführte Token Ring Network soll eine „im Kreis laufende“ Kommunikation aufgebaut werden.&lt;br /&gt;
&lt;br /&gt;
== Hardware-Aufbau ==&lt;br /&gt;
Die Verbindungen werden hardwareseitig durch den UART der MCUs hergestellt. Die UART Sendeleitung Tx einer MCU wird mit der Empfangsleitung Rx der nächsten MCU verbunden. Dies wird von Platine zu Platine in der Reihenfolge: Messwertplatine -&amp;gt; Basisplatine -&amp;gt; SSR-Platine -&amp;gt; Display-Platine -&amp;gt; Messwertplatine durchgeführt. Damit ergibt sich ein geschlossener Ring. Optional kann nach der Displayplatine noch der Maschinensimulator eingeschleift werden.&lt;br /&gt;
&lt;br /&gt;
== Messwerte ==&lt;br /&gt;
Es gibt einen definierten Token. Jede Platine erneuert ihren Anteil des Tokens und entnimmt dem Token die benötigten Informationen (Messwerte). Was zuvor die MATLAB®-GUI durchgeführt hat, übernehmen nun die einzelnen Platinen. Dadurch ergibt sich unter den Platinen eine Aufgabenverteilung. Tabelle 1 zeigt eine Auflistung der Daten, die in den Datensatz des Tokens aufgenommen werden sollen. Jede nummerierte Position erhält einen Platz, je nach Bedarf an Größe. Der Token wird als Bytearray ausgeführt.&lt;br /&gt;
&lt;br /&gt;
== Token ==&lt;br /&gt;
=== Anzahl ===&lt;br /&gt;
Die Anzahl der im Kreis laufenden Tokens soll sich auf einen beschränken. Dieser wird erstmalig von der Messwertplatine erzeugt und anschließend „im Kreis“ gesendet, wobei jede MCU nur den für sie relevanten Teil liest bzw. auch umschreibt. Die Abtastrate des ADC (analog digital converter) gibt die Taktrate des Tokens vor. Durch die Wahl der ADC-Abtastrate wird daher die Kommunikationsgeschwindigkeit (Token/s) beeinflusst. Dieser ist der Flaschenhals und es ist eine langsame Steigerung der Taktrate vorzusehen, um mögliche Auswirkungen und Probleme in der Übertragung festzustellen.&lt;br /&gt;
&lt;br /&gt;
=== Struktur ===&lt;br /&gt;
Am Anfang befindet sich ein Startzeichen, um die Art des Tokens (Standard-, Start- oder Paniktoken; siehe unten), festzulegen. Anschließend folgt ein Datensatz und danach eine Prüfsumme. Der Datensatz ist so auszuführen, dass dieser einfach erweitert werden kann, um Erweiterungen zu ermöglichen (z.B. 2. Brühgruppeneinheit). Im Weiteren ist der Token möglichst kurz auszuführen. Der Token soll über eine einheitliche Länge verfügen. Der Token wird als bytearray angelegt und auch so empfangen. (dateneingang = bytearray(readIn(UART))) Datensatz: Jedem Messwert wird ein Bereich von 2 Byte als fester Platz im Token zugewiesen.&lt;br /&gt;
&lt;br /&gt;
=== Prüfsumme ===&lt;br /&gt;
Um die fehlerfreie Übertragung eines Tokens zu bestätigen, wird aus dem Datenblock des Tokens eine Prüfsumme gebildet und diese ans Ende des Tokens angehängt. Das verwendete Verfahren ist CRC-32.&lt;br /&gt;
&lt;br /&gt;
=== Standardtoken ===&lt;br /&gt;
Es ist erkennbar über das Startzeichen am Anfang und wird genutzt für den regelmäßigen Datenaustausch zwischen den MCUs. Starttoken: Es ist erkennbar über das Startzeichen am Anfang. Hierbei wird beim Einschalten der Espressomaschine die Betriebsbereitschaft der gesamten Kommunikation geprüft. Sowohl ob die Hardwareverbindung intakt ist als auch ob alle MCUs empfangen und senden können. Es gilt zu klären, welche MCU dies aussendet.&lt;br /&gt;
&lt;br /&gt;
=== Paniktoken ===&lt;br /&gt;
Es ist erkennbar über das Startzeichen am Anfang. Dies ist die Realisierung eines Not-Halts. Es sollen alle Prozesse augenblicklich gestoppt werden.&lt;br /&gt;
=== Fehlererkennung === &lt;br /&gt;
Wird das Token nicht innerhalb einer definierten Zeitspanne wieder am Empfang einer MCU erkannt, festgelegt über einen timer-Funktion, soll am Display eine Fehlermeldung ausgegeben werden. Erkennt eine Platine einen Fehler (aufgrund Timeout), werden Magnetventile geschlossen (stromlos geschaltet), die Heizungen und die Pumpen werden abgeschaltet, der Wert des Dosierventils Kaltwasser wird gespeichert. Es ist ein Fehlerspeicher im Grundkonzept vorgesehen.&lt;br /&gt;
&lt;br /&gt;
== Token Definition ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Tabelle 1: Tokeninhalt&lt;br /&gt;
|-&lt;br /&gt;
! Platine !! Byte-Nr !! Bits / Bit-Nr. !! Beschreibung !! Wertebereich !! Anmerkung&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|8 Bit&lt;br /&gt;
|Startzeichen&lt;br /&gt;
|&lt;br /&gt;
|0x0A - Standardtoken&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;15&amp;quot; | Messplatine || 1,2 || 16 Bit || Leitwert || 0,2 - 20 S/cm || rowspan=&amp;quot;15&amp;quot; | 16 Bit im Token&lt;br /&gt;
dort wo diese Messwerte verarbeitet werden, werden sie mittels Kennlinie umgerechnet.&lt;br /&gt;
&lt;br /&gt;
Die csv-Datei der Kennlinie befindet sich auf der jeweiligen Platine.&lt;br /&gt;
&lt;br /&gt;
Der Tassenwärmer existiert nur 1x je Machine&lt;br /&gt;
|-&lt;br /&gt;
| 3,4 || 16 Bit || Boilerdruck || 0,5 - 4,5 V / 0 - 4 bar &lt;br /&gt;
|-&lt;br /&gt;
| 5,6 || 16 Bit || Brühgruppendruck (1. BG) || 0,5 - 4,5 / 0 - 12 bar &lt;br /&gt;
|-&lt;br /&gt;
| 7,8 || 16 Bit || Brühgruppendruck (2. BG) || 0,5 - 4,5 / 0 - 12 bar &lt;br /&gt;
|-&lt;br /&gt;
| 9,10 || 16 Bit || Wassereingangstemperatur&lt;br /&gt;
(ersatzweise Leitungsdruck)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 11,12 || 16 Bit || Boiler-NTC (1. BG) || Kennlinie &lt;br /&gt;
|-&lt;br /&gt;
| 13,14 || 16 Bit || Boiler-NTC (2. BG) || Kennlinie &lt;br /&gt;
|-&lt;br /&gt;
| 15,16 || 16 Bit || Tassenwärmer-NTC || Kennlinie &lt;br /&gt;
|-&lt;br /&gt;
| 17,18 || 16 Bit || Mischtemperatur-NTC (1. BG) || Kennlinie &lt;br /&gt;
|-&lt;br /&gt;
| 19,20 || 16 Bit || Mischtemperatur-NTC (2. BG) || Kennlinie &lt;br /&gt;
|-&lt;br /&gt;
| 21,22 || 16 Bit || Brühgruppen-NTC (1. BG) || Kennlinie &lt;br /&gt;
|-&lt;br /&gt;
| 23,24 || 16 Bit || Brühgruppen-NTC (2. BG) || Kennlinie &lt;br /&gt;
|-&lt;br /&gt;
| 25,26 || 16 Bit || Boilerheizung (Soll, 1. BG) || 8 Hz PWM 0 - 100 % &lt;br /&gt;
|-&lt;br /&gt;
| 27,28 || 16 Bit || Boilerheizung (Soll, 2. BG) || 8 Hz PWM 0 - 100 % &lt;br /&gt;
|-&lt;br /&gt;
| 29,20 || 16 Bit || Tassenwärmerheizung (Soll) || 8 Hz PWM 0 - 100 % &lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | SSR-Platine || 31,32 || 16 Bit || Position Schrittmotor Dosierventil 1. BG || 0 - 550 ||&lt;br /&gt;
|-&lt;br /&gt;
| 33,34 || 16 Bit || Position Schrittmotor Dosierventil 2. BG || 0 - 550 ||&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;17&amp;quot; | Basisplatine || 35,36 || 16 Bit || Verstellwert Schrittmotor Dosierventil 1. BG || Integer mit Vorzeichen ||&lt;br /&gt;
|-&lt;br /&gt;
| 37,38 || 16 Bit || Verstellwert Schrittmotor Dosierventil 2. BG || Integer mit Vorzeichen ||&lt;br /&gt;
|-&lt;br /&gt;
|39,40&lt;br /&gt;
|16 Bit&lt;br /&gt;
|Pumpensollwert 1. BG&lt;br /&gt;
|0 - 4096&lt;br /&gt;
|entspricht 0 - 5000 mV bzw. 0 - 5000 U/min&lt;br /&gt;
|-&lt;br /&gt;
|41,42&lt;br /&gt;
|16 Bit&lt;br /&gt;
|Pumpensollwert 2. BG&lt;br /&gt;
|0 - 4096&lt;br /&gt;
|entspricht 0 - 5000 mV bzw. 0 - 5000 U/min&lt;br /&gt;
|-&lt;br /&gt;
|43&lt;br /&gt;
|8 Bit&lt;br /&gt;
|Durchflussrate 1. BG&lt;br /&gt;
|0 - 25 ml/s&lt;br /&gt;
|Integerwert in 1/10 ml/s, damit Wertebereich 0 - 250&lt;br /&gt;
|-&lt;br /&gt;
|44,45&lt;br /&gt;
|16 Bit&lt;br /&gt;
|Durchflusscounts 1. BG&lt;br /&gt;
|0 - 65535&lt;br /&gt;
|je Count 1/39,9 ml, Überlauf muss unterbunden werden&lt;br /&gt;
|-&lt;br /&gt;
|46&lt;br /&gt;
|8 Bit&lt;br /&gt;
|Durchflussrate 2. BG&lt;br /&gt;
|0 - 25 ml/s&lt;br /&gt;
|Integerwert in 1/10 ml/s, damit Wertebereich 0 - 250&lt;br /&gt;
|-&lt;br /&gt;
|47,48&lt;br /&gt;
|16 Bit&lt;br /&gt;
|Durchflusscounts 2. BG&lt;br /&gt;
|0 - 65535&lt;br /&gt;
|je Count 1/39,9 ml, Überlauf muss unterbunden werden&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;9&amp;quot; |49&lt;br /&gt;
|&lt;br /&gt;
|Füllstandsbyte&lt;br /&gt;
|&lt;br /&gt;
| rowspan=&amp;quot;9&amp;quot; |Füllstände werden von den Füllstandsreglern auf der Basisplatine verarbeitet&lt;br /&gt;
Füllstand Abtropfschale True verhindert Pumpenansteuerung&lt;br /&gt;
Füllstand Boiler False verhindert Pumpenansteuerung&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Füllstand Boiler 1. BG || 0/1 &lt;br /&gt;
|-&lt;br /&gt;
| 1 || Füllstand Boiler 2. BG || 0/1 &lt;br /&gt;
|-&lt;br /&gt;
| 2 || Füllstand Tank Minimum || 0/1 &lt;br /&gt;
|-&lt;br /&gt;
| 3 || Füllstand Tank Maximum || 0/1 &lt;br /&gt;
|-&lt;br /&gt;
| 4 || Füllstand Abtropfschale || 0/1 &lt;br /&gt;
|-&lt;br /&gt;
| 5 || || 0/1 &lt;br /&gt;
|-&lt;br /&gt;
| 6 || || 0/1 &lt;br /&gt;
|-&lt;br /&gt;
| 7 || || 0/1 &lt;br /&gt;
|-&lt;br /&gt;
| || rowspan=&amp;quot;9&amp;quot; | 50 || || Magnetventile Byte 1 || || rowspan=&amp;quot;9&amp;quot; | Magnetventile Y101 bis Y113 gehören zur 1. BG&lt;br /&gt;
Y113 ist der Dampfhahn&lt;br /&gt;
Y214 bis Y222 gehören zur 2. BG &lt;br /&gt;
|-&lt;br /&gt;
| || 0 || Y101 || 0/1 &lt;br /&gt;
|-&lt;br /&gt;
| || 1 || Y102 || 0/1 &lt;br /&gt;
|-&lt;br /&gt;
| || 2 || Y103 || 0/1 &lt;br /&gt;
|-&lt;br /&gt;
| || 3 || Y104 || 0/1 &lt;br /&gt;
|-&lt;br /&gt;
| || 4 || Y105 || 0/1 &lt;br /&gt;
|-&lt;br /&gt;
| || 5 || Y106 || 0/1 &lt;br /&gt;
|-&lt;br /&gt;
| || 6 || Y107 || 0/1 &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|7&lt;br /&gt;
|Y108&lt;br /&gt;
|0/1&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| rowspan=&amp;quot;9&amp;quot; |51&lt;br /&gt;
|&lt;br /&gt;
|Magnetventil Byte 2&lt;br /&gt;
|&lt;br /&gt;
| rowspan=&amp;quot;9&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|Y109&lt;br /&gt;
|0/1&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|Y110&lt;br /&gt;
|0/1&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|2&lt;br /&gt;
|Y111&lt;br /&gt;
|0/1&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|3&lt;br /&gt;
|Y112&lt;br /&gt;
|0/1&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|4&lt;br /&gt;
|Y113&lt;br /&gt;
|0/1&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|5&lt;br /&gt;
|Y214&lt;br /&gt;
|0/1&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|6&lt;br /&gt;
|Y215&lt;br /&gt;
|0/1&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|7&lt;br /&gt;
|Y216&lt;br /&gt;
|0/1&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| rowspan=&amp;quot;9&amp;quot; |52&lt;br /&gt;
|&lt;br /&gt;
|Magnetventil Byte 3&lt;br /&gt;
|&lt;br /&gt;
| rowspan=&amp;quot;9&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|Y217&lt;br /&gt;
|0/1&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|Y218&lt;br /&gt;
|0/1&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|2&lt;br /&gt;
|Y219&lt;br /&gt;
|0/1&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|3&lt;br /&gt;
|Y220&lt;br /&gt;
|0/1&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|4&lt;br /&gt;
|Y221&lt;br /&gt;
|0/1&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|5&lt;br /&gt;
|Y222&lt;br /&gt;
|0/1&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|6&lt;br /&gt;
|&lt;br /&gt;
|0/1&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|7&lt;br /&gt;
|&lt;br /&gt;
|0/1&lt;br /&gt;
|-&lt;br /&gt;
|Displayplatine&lt;br /&gt;
|53,54&lt;br /&gt;
|16&lt;br /&gt;
|Bezugswassertemperatur 1. BG&lt;br /&gt;
|30  - 98 °C&lt;br /&gt;
|Integerwert in 1/10 °C, damit Wertebereich 300 bis 980&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|55,56&lt;br /&gt;
|16&lt;br /&gt;
|Bezugswassertemperatur 2. BG&lt;br /&gt;
|30  - 98 °C&lt;br /&gt;
|Integerwert in 1/10 °C, damit Wertebereich 300 bis 980&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|57,58&lt;br /&gt;
|16&lt;br /&gt;
|Bezugsmenge 1. BG&lt;br /&gt;
|20 - 300 g bzw. ml&lt;br /&gt;
|Integerwert in 1/10 ml, damit Wertebereich 200 bis 3000&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|59,60&lt;br /&gt;
|16&lt;br /&gt;
|Bezugsmenge 2. BG&lt;br /&gt;
|20 - 300 g bzw. ml&lt;br /&gt;
|Integerwert in 1/10 ml, damit Wertebereich 200 bis 3000&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|61,62&lt;br /&gt;
|16&lt;br /&gt;
|Bezugszeit 1. BG&lt;br /&gt;
|0 - 120 Sekunden&lt;br /&gt;
|Integerwert in 1/10 Sekunde, damit Wertebereich 0 bis 1200&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|63,64&lt;br /&gt;
|16&lt;br /&gt;
|Bezugszeit 2. BG&lt;br /&gt;
|0 - 120 Sekunden&lt;br /&gt;
|Integerwert in 1/10 Sekunde, damit Wertebereich 0 bis 1200&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|65,66&lt;br /&gt;
|16&lt;br /&gt;
|Preinfusionszeit 1. BG&lt;br /&gt;
|0 - 120 Sekunden&lt;br /&gt;
|Integerwert in 1/10 Sekunde, damit Wertebereich 0 bis 1200&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|67,68&lt;br /&gt;
|16&lt;br /&gt;
|Preinfusionszeit 2. BG&lt;br /&gt;
|0 - 120 Sekunden&lt;br /&gt;
|Integerwert in 1/10 Sekunde, damit Wertebereich 0 bis 1200&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|69&lt;br /&gt;
|8&lt;br /&gt;
|Abschalttemperatur Entschichtung&lt;br /&gt;
|90 - 98 °C&lt;br /&gt;
|Integerwert in °C&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|70&lt;br /&gt;
|8&lt;br /&gt;
|Grenztemperatur&lt;br /&gt;
|135 - 150 °C&lt;br /&gt;
|Integerwert in °C&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|71&lt;br /&gt;
|8&lt;br /&gt;
|Sollwert Boilerdruck&lt;br /&gt;
|1100 - 1500 mbar&lt;br /&gt;
|Integerwert in 10 mbar, damit Wertebereich 110 bis 150&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|72&lt;br /&gt;
|8&lt;br /&gt;
|Stellung Vertikalhebel&lt;br /&gt;
|0 - 180 Grad&lt;br /&gt;
|Integerwert&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| rowspan=&amp;quot;9&amp;quot; |73&lt;br /&gt;
|&lt;br /&gt;
|Maschinenstatus Byte 1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|Mischerstatus 1. BG&lt;br /&gt;
|0/1&lt;br /&gt;
|True = Mischtemperatur erreicht&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|Mischerstatus 2. BG&lt;br /&gt;
|0/1&lt;br /&gt;
|True = Mischtemperatur erreicht&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|2&lt;br /&gt;
|Entschichtung&lt;br /&gt;
|0/1&lt;br /&gt;
|True = Entschichtung aktiv&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|3&lt;br /&gt;
|Handhebelmodus&lt;br /&gt;
|0/1&lt;br /&gt;
|True = aktiv&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|4&lt;br /&gt;
|Rezepteingabe&lt;br /&gt;
|0/1&lt;br /&gt;
|True = aktiv&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|5&lt;br /&gt;
|Wartungsmodus&lt;br /&gt;
|0/1&lt;br /&gt;
|True = aktiv&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|6&lt;br /&gt;
|Schrittmotor Dosierventil Flag&lt;br /&gt;
|0/1&lt;br /&gt;
|True = Schrittmotor für Dosierventil Kaltwasser hat ursprüngliche Position erreicht (Teil der Initialisierung)&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|7&lt;br /&gt;
|&lt;br /&gt;
|0/1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| rowspan=&amp;quot;9&amp;quot; |74&lt;br /&gt;
|&lt;br /&gt;
|Maschinenstatus Byte 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|Kaffeebezug 1. BG&lt;br /&gt;
|0/1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|Kaffeebezug 1. BG&lt;br /&gt;
|0/1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|2&lt;br /&gt;
|Teewasserbezug&lt;br /&gt;
|0/1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|3&lt;br /&gt;
|Dampfbezug&lt;br /&gt;
|0/1&lt;br /&gt;
|Bewirkt 200 mbar Reduzierung Sollwert Boilerdruck&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|4&lt;br /&gt;
|Boilerbefüllung (Befüllungsflag)&lt;br /&gt;
|0/1&lt;br /&gt;
|True = Boilerbefüllung aktiv&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|5&lt;br /&gt;
|Aufheizen&lt;br /&gt;
|0/1&lt;br /&gt;
|True = Aufheizphase, False = Betriebsbereit&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|6&lt;br /&gt;
|Systemstart&lt;br /&gt;
|0/1&lt;br /&gt;
|True = Systemstart&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|7&lt;br /&gt;
|Sicherheitsfunktion&lt;br /&gt;
|0/1&lt;br /&gt;
|True = Sicherheitsfunktion aktiv&lt;br /&gt;
|}&lt;br /&gt;
= Peter Vogginger,19.10.2025 - NUCLEO_H743ZI2 =&lt;br /&gt;
Kommunikation als Token-Ring oder in Stern-Topologie &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der Wechsel der Kommunikation von dem geplanten Token-Ring-Verfahren, hin zur Stern-Topologie erfordert 3 serielle Schnittstellen. Dies ist mit der aktuellen Konstellation, 4 MCUs (Basisplatine, SSR-Platine, Messplatine und Displayplatine) mit jeweils einem Raspberry Pi Pico RP2040, nicht möglich. An einem RP2040 stehen 2 serielle Schnittstellen zur Verfügung. &lt;br /&gt;
&lt;br /&gt;
Der Wechsel hin zu einem größeren Board, dem NUCLEO-H743ZI2 MCU-Board mit einer STM32H7 MCU. Der Wechsel würde Vorteile bieten:  &lt;br /&gt;
* weniger Elektronik in der Peripherie &lt;br /&gt;
* ADCs ausreichend am Board &lt;br /&gt;
* DACs ausreichend am Board &lt;br /&gt;
* 8 serielle Schnittstellen &lt;br /&gt;
* viel mehr nutzbare PINs &lt;br /&gt;
&lt;br /&gt;
Die Vielzahl an Anschlüssen bietet die Möglichkeit, von aktuell 3 Platinen (und 3 MCUs) auf 1 Platine mit einem MCU-Board zu reduzieren. &lt;br /&gt;
&lt;br /&gt;
Allerdings bietet diese Umstellung nicht nur Vorteile.  &lt;br /&gt;
&lt;br /&gt;
Nachteilig wäre, dass bei jedem MicroPython Update ein eigenes Derivat erstellt werden müsste, da default die ADC auf 12-Bit Auflösung in MicroPython definiert sind. Aktuell existiert ein Derivat mit 16-Bit ADC Konfiguration (NUCLEO_H743ZI2_v1-27-0_ADC_16BIT.hex), dies basiert auf der MicroPython Version v1-27-0. &lt;br /&gt;
&lt;br /&gt;
Allerdings ist die Verfügbarkeit von NUCLEO-Boards immer zeitweise nicht gegeben. Diesbezüglich wäre ein Platinenlayout inkl. den Bauelementen für MCU und der direkten Peripherie erforderlich. Was aber erst nach der Inbetriebnahme der beiden Prototypen-Maschinen sinnvoll erscheint. Die Kosten dieser externen Entwicklung werden auf 50 t€ bis 100 t€ geschätzt. &lt;br /&gt;
&lt;br /&gt;
Aufgrund der aktuellen Situation wird bis auf Weiteres die Verwendung von Raspberry Pi Pico verfolgt.&lt;br /&gt;
&lt;br /&gt;
= Armin Rohnen, 16.10.2025 =&lt;br /&gt;
Im Zuge der Analyse für die zweite Auflage von MATLAB® meets MicroPython ist das Thema der UART-Kommunikation tiefer betrachtet worden. &lt;br /&gt;
&lt;br /&gt;
Die Kommunikation ist mit Sorgfalt zu programmieren. Durch Lesen und Schreiben auf die UART-Schnittstelle kann die MCU blockiert und dauerhaft an der Ausführung anderer Programmteile gehindert werden. Die Problematik ist in Abschnitt 3.13 der 2. Auflage MATLAB® meets MicroPython beschrieben.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Armin Rohnen, 11.04.2024 =&lt;br /&gt;
[[Datei:20250322 Konzept.png|thumb|900px|gerahmt|zentriert|alternativtext=Armin Rohnen, Kommunikationskonzept mit Token|Armin Rohnen, Kommunikationskonzept mit Token]]&lt;br /&gt;
Seitens des Platinenlayouts für die Steuerungselektronik wurden die jeweiligen PINs der ersten UARTSchnittstelle für die spätere Inter-Kommunikation der Steuerung herausgelegt. Die Raspberry Pi Pico MCU verfügt über einen jeweils 32 Byte großen Eingangs- bzw. Ausgangspuffer für die UART-Schnittstelle. Dieser soll genutzt werden um die Kommunikation zu ermöglichen. Die jeweilige Kommunikation selbst wird dadurch auf diese 32 Byte begrenzt. Hardwareseitig ist es Denkbar, dass je MCU zwei weitere PINs für die Kommunikation verwendet werden. Lediglich auf der SSR-Platine ist dazu ein Eingriff ins Platinenlayout erforderlich. Dieser kann bei einem Prototypen handwerklich durchgeführt werden. Die zwei zusätzlichen PINs für die Kommunikation (GP04, GP05 auf der Basisplatine, GP03, GP04 auf der SSR-Platine, GP06, GP07 auf der Messplatine) fungieren als eingehender und ausgehender Interrupt, so dass die Kommunikation als ISR programmiert werden kann.&lt;br /&gt;
&lt;br /&gt;
Angelehnt an das 1984 von IBM eingeführte Token Ring Network soll eine „im Kreis laufende“ Kommunikation aufgebaut werden. Ausgehend von der Messplatine wird ein Token über die einzelnen Platinen durchgereicht (Abbildung). Unter Berücksichtigung der Kommunikationsregeln können so eine beliebige Anzahl an Steuerungsplatinen in den Kommunikationsring eingebunden werden. Allerdings sollte dabei die Reihenfolge beachtet werden.&lt;br /&gt;
&lt;br /&gt;
Die Messplatine sendet über UART am Ende jedes gültigen Messwertsatzes einen oder mehrere Token an die Basisplatine. In den Token befinden sich die aktuellen Messwerte und alle anderen „im Kreis laufende“ Daten. Beim ersten Senden werden hier u.u. 0-Werte verwendet, bis dass der erste Token wieder bei der Messplatine angekommen ist. Ggf. unterbricht die Messplatine auch das Senden des Token bzw. der ersten Token-Serie, bis zum ersten Eintreffen eines Tokens. Die Messplatine ist damit der Taktgeber der Kommunikation. Konkret erfolgt dies in Abhängigkeit der Abtastrate des AD-Wandlers.Wenn ein Token versendet ist, wechselt die Messplatine den Logikzustand des ausgehenden Interrupt-PINs. Bevor der nächste Token versendet wird, wird wieder der Ausgangslogikzustand des Interrupt-PINs hergestellt. Sobald die Messplatine auch einen Token empfangen hat wird auch der PWM-Stellwert für das Boilerheizelement (aus Regler Boilerdruck) und für den Tassenwärmer im Token übermittelt.&lt;br /&gt;
&lt;br /&gt;
Von der Messplatine erhält die Basisplatine den Token. Die UART-Schnittstelle wird ausgelesen, wenn am eingehenden Interrupt-PIN der Logikzustand wechselt. Die Basisplatine tauscht im Token die Daten für die eigenen Messwerte, die Schaltzustände der Tasten, die Schaltzustände der Magnetventile usw. aus und sendet den Token an die SSR-Platine weiter. Ist der Token versendet, wechselt die Basisplatine den Logikzustand des ausgehenden Interrupt-PINs und arbeitet in gleicher Logik weiter wie die Messplatine.&lt;br /&gt;
&lt;br /&gt;
Die SSR-Platine bekommt von der Basisplatine den Token durchgereicht. Die SSR-Platine wertet den Token lediglich aus, nimmt keine Veränderungen darin vor und reicht diesen dann weiter. Nach der SSR-Platine kann eine Display-Platine nachgeschaltet werden. Diese wertet die Informationen im Token aus und visualisiert diese bzw. stellt die Informationen über WLAN zur Verfügung. Im Falle eines Touch-Displays werden die Bytes für die Schaltzustände der Tasten ausgetauscht. Abschließend erhält die Messplatine wieder den Token und übernimmt die relevanten Informationen daraus in den neu zu sendenden Token.&lt;br /&gt;
&lt;br /&gt;
Anstelle des eingehenden und ausgehenden Interrupt-PINs kann u.u. auch die MicroPython-Funktionalität uart.irq verwendet werden. Diese ruft eine ISR auf, sobald Daten im EIngangspuffer der UART-Schnittstelle eingegangen sind.&lt;br /&gt;
&lt;br /&gt;
Das Konzept ist auszugestalten und der bzw. die Token sind exakt zu definieren. Dabei ist auch zu definieren (und zu erproben) wie die dann übergeordnete MATLAB®-GUI die Daten für die Visualisierung erhält. Der einzelne Token darf aufgrund der Limitierung durch den UART-Puffer des Raspberry Pi Picos 32 Byte nicht überschreiten. Als maximale Datenrate sind 115200 Baud möglich, was unter Berücksichtigung von START / STOP-Bits und Paritätsbit eine maximale Kommunikationsrate von 11520 Byte je Sekunde ergibt. Damit wären 360 jeweils 32 Byte lange Token in der Kommunikation möglich. Nach aktuellem Stand der Recherchen überschreitet die Datenmenge für die Kommunikation die 32 Byte Grenze, so dass mit mehreren Token gearbeitet werden muss. Jeder Token weist im ersten Byte eine Token-Nr auf, so dass der Token zweifelsfrei identifiziert werden kann. Alle Token müssen die gleiche Länge in Bytes aufweisen. Für zukünftige Erweiterungen sind Leer-Bytes in den Token vorhanden. Jeder der 4 Token muss die gleiche Länge in Bytes aufweisen.&lt;br /&gt;
&lt;br /&gt;
Getaktet wird die Kommunikation durch die Datenerfassung der Messplatine. Aufgrund der jeweils ungültigen ersten Wandlung eines Messkanals ist eine maximale Abtastrate von 430 Messwerten je Sekunde aufgeteilt auf acht Messkanäle, was ca. 53 Datensätze je Sekunde ergibt. Bei einer Abtastrate von 475 SPS ergeben sich 30 gültige Messdatensätze je Sekunde.Wird nach jedem zweiten gültigen Messkanal ein 27 Byte langer Token von der Messplatine gesendet, dann ergibt dies eine Inter-Kommunikation zwischen den MCUs von 120 Token bzw. 3240 Byte je Sekunde, was unter der als Maximum angesehenen Datenrate liegt. Selbst bei einer Verlängerung der Token auf 32 Byte würde lediglich 1/3 des theoretisch möglichen Datentransfers durchgeführt.&lt;/div&gt;</summary>
		<author><name>Peter Vogginger</name></author>
	</entry>
	<entry>
		<id>http://www.institut-fuer-kaffeetechnologie.de/Wiki/index.php?title=Projektr%C3%BCcksprache_04.12.2025&amp;diff=4788</id>
		<title>Projektrücksprache 04.12.2025</title>
		<link rel="alternate" type="text/html" href="http://www.institut-fuer-kaffeetechnologie.de/Wiki/index.php?title=Projektr%C3%BCcksprache_04.12.2025&amp;diff=4788"/>
		<updated>2025-12-09T20:14:29Z</updated>

		<summary type="html">&lt;p&gt;Peter Vogginger: Die Seite wurde neu angelegt: „=Besprechungsprotokoll – Projektrücksprache 04.12.2025= Ort: Online via ZOOM  Datum: 04.12.2025   Teilnehmer: Philipp Schiebel, Peter Vogginger, LfbA Armin Rohnen   Moderator: Philipp Schiebel  Protokoll: Peter Vogginger  ==Top 1) Annahme des Protokolls==  Das Protokoll der letzten Besprechung wird von allen Teilnehmern angenommen.  ==Top 2) Status UART Kommunikation==  Die Grundstruktur des Codes für die UART-Kommunikation wird so beibehalten. Erweit…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Besprechungsprotokoll – Projektrücksprache 04.12.2025=&lt;br /&gt;
Ort: Online via ZOOM&lt;br /&gt;
&lt;br /&gt;
Datum: 04.12.2025 &lt;br /&gt;
&lt;br /&gt;
Teilnehmer: Philipp Schiebel, Peter Vogginger, LfbA Armin Rohnen &lt;br /&gt;
&lt;br /&gt;
Moderator: Philipp Schiebel&lt;br /&gt;
&lt;br /&gt;
Protokoll: Peter Vogginger&lt;br /&gt;
&lt;br /&gt;
==Top 1) Annahme des Protokolls== &lt;br /&gt;
Das Protokoll der letzten Besprechung wird von allen Teilnehmern angenommen.&lt;br /&gt;
&lt;br /&gt;
==Top 2) Status UART Kommunikation== &lt;br /&gt;
Die Grundstruktur des Codes für die UART-Kommunikation wird so beibehalten. Erweiterungen sind möglichst einfach auszuführen, damit spätere Projektgruppen diese auch schnell verstehen können.&amp;lt;br /&amp;gt; Die vorgestellte Klasse struct wird nicht im Code aufgenommen.&amp;lt;br /&amp;gt; Bevor Änderungen einprogrammiert werden, ist ein Ablaufdiagramm, und anschließend eine Dokumentation, zu erstellen.&amp;lt;br /&amp;gt; Einzelne Funktionen, wie Setter und Getter, können zu Testzwecken in den individuellen Code jeder Platine und auch in die übergeordnete Klasse UARTHandler in der uart_lib eingefügt werden. Dabei wird dann evaluiert, welcher Ort sich besser eignet.&amp;lt;br /&amp;gt;&lt;br /&gt;
Die Funktion local_recieve auf der Messwertplatine funktioniert. Im weiteren Verlauf werden nun die Funktionen zum einfachen Setzen von Bits und Bytes definiert. Die Initialisierung der UART-Schnittstelle in der main.py (auf der Messwertplatine) wird vereinfacht. Hierzu lautet der Aufruf nun:&amp;lt;br /&amp;gt; uart = UARTHandler(baudrate = 230400, token_len = token(len)).&amp;lt;br /&amp;gt; Dazu wird auch der Code in der Klasse UARTHandler angepasst.&amp;lt;br /&amp;gt; Für die Sicherheitsfunktion ist ein Ablauf zu überlegen.&lt;br /&gt;
&lt;br /&gt;
==Top 3) Status Verlagerung des Füllstandsreglers== &lt;br /&gt;
Aktuell erfolgt die Anpassung des Füllstandsreglers an die UART-Kommunikation. &amp;lt;br /&amp;gt;&lt;br /&gt;
Der Code des Füllstandsreglers wird in die Funktion local_recieve auf der Basisplatine geschrieben. Für die korrekte Ausführung benötigt dieser die aktuellen Füllstände. Als Ausgabe sendet er ein analoges Signal (Spannung). Vor dem Code des Füllstandsreglers ist der Code zur Initialisierung der Basisplatine erforderlich. Hierzu zählen UART, einzelne PINS, I2C, DAC und Füllstände. Bei der Initialisierung ist der DAC (digital analog converter) gesichert 0 zu setzen, da dieser sonst einen zufälligen Wert annimmt und somit unbeabsichtigt Magnetventile bzw. den Motor schaltet.&lt;br /&gt;
&lt;br /&gt;
==Top 4) Status Maschinensimulator==&lt;br /&gt;
Die Überprüfung aller Ausgangssignale mit dem Multimeter ist erfolgreich abgeschlossen. Im nächsten Schritt werden Testszenarien überlegt und diese programmiert. Es ist zu beachten, dass die NTC-Widerstände nicht linear sind und somit die Umrechnung mit einer Kennlinie erfolgt. Es sind Flussdiagramme zu erstellen. Die Umrechnung der NTC-Kennlinie Temperatur zu Widerstandswert erfolgt praktischerweise über Thonny, ohne eine eigens entworfene MATLAB® GUI.&lt;br /&gt;
&lt;br /&gt;
==Top 5) Projektplanung / GANTT== &lt;br /&gt;
Der Projektplan wird eingehalten, es sind keine Verzögerungen zu melden.&lt;/div&gt;</summary>
		<author><name>Peter Vogginger</name></author>
	</entry>
	<entry>
		<id>http://www.institut-fuer-kaffeetechnologie.de/Wiki/index.php?title=Systemsoftware&amp;diff=4787</id>
		<title>Systemsoftware</title>
		<link rel="alternate" type="text/html" href="http://www.institut-fuer-kaffeetechnologie.de/Wiki/index.php?title=Systemsoftware&amp;diff=4787"/>
		<updated>2025-12-08T17:43:53Z</updated>

		<summary type="html">&lt;p&gt;Peter Vogginger: /* ToDo-Liste: MCUs - Verlagerung der Regelkreise aus der MATLAB®-GUI auf die Mikrocontroller der Steuerungselektronik */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;htmltag tagname=&amp;quot;img&amp;quot; src=&amp;quot;http://vg04.met.vgwort.de/na/4531f1734b324b72b2d7e566cdf639f0&amp;quot;  width=&amp;quot;1&amp;quot; height=&amp;quot;1&amp;quot; alt=&amp;quot;&amp;quot;&amp;gt;&amp;lt;/htmltag&amp;gt;&lt;br /&gt;
[[Datei:Breites Logoband.png|mini|zentriert|hochkant=2.5]]&amp;lt;br&amp;gt;&lt;br /&gt;
Die Systemsoftware lässt sich nicht ohne die Beachtung der Systemelektronik erstellen.&lt;br /&gt;
&lt;br /&gt;
Für die Systemsoftware wurde ein mehrstufiger Entwicklungsprozess definiert:&lt;br /&gt;
# Nutzung einer MCU auf der MicroPython verwendet werden kann. Dies ist durch das STM32F411 nucleo Board der Basiselektronik bzw. durch den Raspberry Pi Pico der Multi-MCU-Elektronik gegeben.&lt;br /&gt;
# Auf der MCU werden lediglich die elementaren Grundfunktionen (GPIO schalten und erfassen, Messwert erfassen, PWM Ausgeben, Sollwert ausgeben, etc.) realisiert und über eine MicroPython zu MATLAB® Schnittstelle [41] wird die Funktionalität in einer MATLAB® GUI hergestellt.&lt;br /&gt;
# Die Softwareentwicklung startet mit der labortechnischen Espressomaschine und wird auf die weiteren Projekte schrittweise transportiert. Dazu ist die Maschinenelektronik gleich zu halten und es sind die gleichen Anschluss-Pins zu verwenden.&lt;br /&gt;
# Nach Abschluss der Testphase der MATLAB® Bedienung wird schrittweise die Betriebssoftware in MicroPython auf der MCU implementiert, so dass am Ende dieses Prozessschrittes die MATLAB®-Verbindung lediglich für weiterführende Datenerfassung und grafische Darstellungen verwendet wird, welche nicht mit dem Display der Maschine möglich ist oder dort nicht dargestellt werden soll.&lt;br /&gt;
# Ob eine Portierung des MicroPython-Codes nach Microcontroller C durchgeführt wird, ist derzeit nicht entschieden.&lt;br /&gt;
&lt;br /&gt;
Es wurden mehrere, die Softwareentwicklung vorbereitende FMEAs durchgeführt.  Die hierdurch entstandenen Dokumentation befinden sich in der Dokumentationsauflistung. Im weiteren wurde eine Projektarbeit zur Konzeptfindung für die Badienung durchgeführt. Auch die hierdurch entstandenen, teilweise auf die FMEA aufbauenden Dokumente befinden sich in der Dokumentationsliste.&lt;br /&gt;
&lt;br /&gt;
= Projektdokumentationen und Beschreibungen =&lt;br /&gt;
* [[:Datei:20210228 Konzept Systemelektronik.pdf|Konzeptbeschreibung Systemelektronik]]&lt;br /&gt;
* [[:Datei:20210605 Workflow Embedded Systems.pdf|Workflow Embedded Systems]]&lt;br /&gt;
* [[:Datei:20200521 Bericht1 NerminArbi.pdf|Funktionsanalyse Boilerbefüllung, Tassenwärmung, Milchschäumen]]&lt;br /&gt;
* [[:Datei:20200518 Bericht halbauto Entkalkung Egger Alexander.pdf|Funktionsanalyse zur halbautomatischen Entkalkung]]&lt;br /&gt;
* [[:Datei:20200518 V0 4 Bericht Funktionsanalyse Rückspulung-Spulung Sladoje.pdf|Funktionsanalyse Rückspülung und Spülung]]&lt;br /&gt;
* [[:Datei:20200521 Bericht Espresso-Teewasserbezug Urbin.pdf|Funktionsanalyse Espresso und Teewasserbezug]]&lt;br /&gt;
* [[:Datei:20200522 Bericht Funktionsanalyse Energieeffizienz Egger Alexander.pdf|Funktionsanalyse Energieeffizienz]]&lt;br /&gt;
* [[:Datei:20200521 V2 Bericht Funktionsanalyse Bedienung Sladoje.pdf|Funktionsanalyse Bedienung]]&lt;br /&gt;
* [[:Datei:20200525 Bericht Abbildung aller Maschinen Urbin V2.pdf|Funktionsanalyse Abbildung aller Maschinen]]&lt;br /&gt;
* [[:Datei:20200609 Bericht Fehleranalyse Entschichtung.pdf|Fehleranalyse Entschichtung]]&lt;br /&gt;
* [[:Datei:20200610 Fehleranalyse Dampf Brühgruppe Sladoje.pdf|Fehleranalyse Brühgruppe und Dampfbezug]]&lt;br /&gt;
* [[:Datei:20200613 Bericht Fehleranalyse Mischer;Magnetventile V2.pdf|Fehleranalyse Mischer und Magnetventile]]&lt;br /&gt;
* [[:Datei:20200611 Bericht3 NerminArbi.pdf|Fehleranalyse Boiler]]&lt;br /&gt;
* [[:Datei:20200705 Dichtheitsprüfung.pdf|Dichtheitsprüfung]]&lt;br /&gt;
* [[:Datei:20200704 Massnahmen Urbin.pdf|Prüfkonzepte Magnetventile und Mischer]]&lt;br /&gt;
* [[:Datei:20200701 Maßnahmenanalyse NerminArbi.pdf|Maßnahmen Boiler]]&lt;br /&gt;
* [[:Datei:20200628 Maßnahmen Entschichtung zweiter Stand.pdf|Maßnahmen Entschichtung]]&lt;br /&gt;
* [[:Datei:20200627 Maßnahmenkonzept Brühguppe Dampf Sladoje.pdf|Maßnahmen Brühgruppe und Dampf]]&lt;br /&gt;
* [[:Datei:20200707_FMEA.xlsx|FMEA Tabelle]]&lt;br /&gt;
* [[:Datei:20201207_Bedienkonzept.pptx|PPT Simulation des Bedienkonzeptes]]&lt;br /&gt;
* [[:Datei:20210207_Bedienkonzept_Funktionsliste.xlsx|Bedienkonzept Funktionsliste]]&lt;br /&gt;
* [[:Datei:20210219_Bedienkonzept_Projektdokumentation.pdf|Bedienkonzept Projektdokumentation]]&lt;br /&gt;
* [[:Datei:HMProjektBedienoberflaecheEspresso.zip|MATLAB® GUI]]&lt;br /&gt;
* [[Entwicklung Systemsoftware SoSe2022]]&lt;br /&gt;
* [[Entwicklung Systemsoftware SoSe2023]]&lt;br /&gt;
* [[Mikrocontroller Programmierung in MicroPython WiSe 2025/26]]&lt;br /&gt;
&lt;br /&gt;
= [http://www.institut-fuer-kaffeetechnologie.de/Intern/index.php?title=Programmcode Programmcode] =&lt;br /&gt;
Aktueller Programmcode und Änderungsdokumentation ab Jan 2023&lt;br /&gt;
&lt;br /&gt;
= [http://www.institut-fuer-kaffeetechnologie.de/Intern/index.php?title=Software-Bugs Software-Bugs] =&lt;br /&gt;
&lt;br /&gt;
= ToDo-Liste(n) Systemsoftware =&lt;br /&gt;
&lt;br /&gt;
== Prioritätsangabe ==&lt;br /&gt;
Prio 1 - Abarbeitung zeitnah erforderlich&amp;lt;br&amp;gt;&lt;br /&gt;
Prio 2 - Abarbeitung erforderlich&amp;lt;br&amp;gt;&lt;br /&gt;
Prio 3 - Abarbeitung kann warten&amp;lt;br&amp;gt;&lt;br /&gt;
Prio 99 - Abarbeitung erfordert Vorarbeiten&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Status ==&lt;br /&gt;
10 - Erfasst&amp;lt;br&amp;gt;&lt;br /&gt;
30 - in Bearbeitung&amp;lt;br&amp;gt;&lt;br /&gt;
50 - Lösung definiert&amp;lt;br&amp;gt;&lt;br /&gt;
70 - in Umsetzung&amp;lt;br&amp;gt;&lt;br /&gt;
90 - Umsetzung abgeschlossen&amp;lt;br&amp;gt;&lt;br /&gt;
99 - Abbruch per Beschluss (Dokumentation dazu erforderlich)&amp;lt;br&amp;gt;&lt;br /&gt;
100 - Maßnahme bestätigt&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ToDo-Liste: Mechatronische Inbetriebnahme Glasboilermaschine =&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Arbeitspaket !! Wer !! Prio !! Status !! WV&lt;br /&gt;
|-&lt;br /&gt;
| [[Fehlerbehebungen]] || || 1 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Startprozedure]] || ||  1 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Tankfüllstandsregelung]] || || 1 || 10 ||&lt;br /&gt;
|- &lt;br /&gt;
| [[Boilerfüllstandsregelung]] || || 1 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Boilerdruckregelung]] || || 1 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Mischwassertemperaturregelung]] || || 1 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Durchflussregelung]] || || 1 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Kaffeebezug]] || || 2 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Teebezug]] || || 1 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Temperatureinstellung über Vertikalhebel]] || || 1 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Simulation Handhebelmaschine]] || || 1 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Flush/Rückspülreinigung]] || || 1 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| || || || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= ToDo-Liste: MCUs - Verlagerung der Regelkreise aus der MATLAB®-GUI auf die Mikrocontroller der Steuerungselektronik =&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Arbeitspaket !! Wer !! Prio !! Status !! WV&lt;br /&gt;
|-&lt;br /&gt;
| [[Kommunikation per UART|UART Kommunikation zwischen den einzelnen MCUs]] || Peter Vogginger|| 1 || 30 || 11.12.2025&lt;br /&gt;
|-&lt;br /&gt;
| [[Mehrkernnutzung und/oder Multitasking]] || Peter Vogginger||  1 || 30 ||18.12.2025&lt;br /&gt;
|-&lt;br /&gt;
| [[Startprozedur]]&lt;br /&gt;
|Philipp Schiebel&lt;br /&gt;
|1&lt;br /&gt;
|30&lt;br /&gt;
|08.01.2025&lt;br /&gt;
|-&lt;br /&gt;
| [[Verlagerung des Füllstandsreglers auf das Basisboard]] || Philipp Schiebel|| 1 || 30 || 11.12.2025&lt;br /&gt;
|- &lt;br /&gt;
| [[Verlagerung der Boilerdruckregelung auf die Messplatine]] || Philipp Schiebel|| 1 || 30 ||  	 18.12.2025&lt;br /&gt;
|-&lt;br /&gt;
| [[Verlagerung des Mischtemperaturreglers auf das Basisboard]] || Philipp Schiebel|| 1 || 10 || 08.01.2025&lt;br /&gt;
|-&lt;br /&gt;
| [[Verlagerung des Durchflussreglers auf das Basisboard]] || Philipp Schiebel|| 1 || 10 ||  	 22.01.2025&lt;br /&gt;
|-&lt;br /&gt;
| [[Erstellung der Funktionssteuerung - Preinfusion auf dem Basisboard]] || || 2 || 10 || &lt;br /&gt;
|-&lt;br /&gt;
| [[Erstellung der Funktionssteuerung - Kaffeebezug auf dem Basisboard]] || || 1 || 10 || &lt;br /&gt;
|-&lt;br /&gt;
| [[Erstellung der Funktionssteuerung - Wasserbezug auf dem Basisboard]] || || 1 || 10 || &lt;br /&gt;
|-&lt;br /&gt;
| [[Erstellung der Funktionssteuerung - Dampfbezug auf dem Basisboard]] || || 1 || 10 || 	 &lt;br /&gt;
|-&lt;br /&gt;
| [[Erstellung der Funktionssteuerung - Spülen auf dem Basisboard]] || || 1 || 10 ||  &lt;br /&gt;
|-&lt;br /&gt;
| [[Erstellung der Funktionssteuerung - Grundreinigung auf dem Basisboard]] || || 1 || 10 ||  &lt;br /&gt;
|-&lt;br /&gt;
| [[Integration eines Displays mit Touchfunktion]] || || 1 || 30 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Integration eines Vertikalhebels]] || || 1 || 30 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Visualisierung und Interaktion über die MATLAB®-GUI]] || || 1 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Visualisierung und Interaktion über eine WEB-Anwendung]] || || 1 || 10 ||  &lt;br /&gt;
|-&lt;br /&gt;
| [[Maschinensimulator]] || alle|| 1 || 30 ||11.12.2025&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= ToDo-Liste: Allgemeines =&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Arbeitspaket !! Wer !! Prio !! Status !! WV&lt;br /&gt;
|-&lt;br /&gt;
| [[Sicherheitsfunktionen]] || || 99 || 50 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[ Übersicht über verbaute Aktorik und Sensorik in Tabellenform]] || || 2 || 90 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Stromsparmodus]] || || 99 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| || || || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= ToDo-Liste: MCUs - Hardwarenahe Software =&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Arbeitspaket !! Wer !! Prio !! Status !! WV&lt;br /&gt;
|-&lt;br /&gt;
| [[Grundfunktionen der MCU und mehrere MCUs]] || || || 100 ||&lt;br /&gt;
|-	&lt;br /&gt;
| Basisboard: [[Schalten Magnetventile (Labor) STM32-Basisboard]] MATLAB®GUI || || || 100&lt;br /&gt;
|-&lt;br /&gt;
| Basisboard: [[Pumpenansteuerung Basisboard Multi-MCU]] || || || 100 ||&lt;br /&gt;
|- 	 &lt;br /&gt;
| Basisboard: [[Schrittmotorsteuerungen Basisboard Multi-MCU]] || || || 100 ||&lt;br /&gt;
|-&lt;br /&gt;
| Basisboard: [[Tastenerkennung Basisboard Multi-MCU]] || || 1 || 10 || &lt;br /&gt;
|- 	 &lt;br /&gt;
| Basisboard: [[Füllstandserkennung Basisboard Multi-MCU]] || || || 100 ||&lt;br /&gt;
|- 	 &lt;br /&gt;
| Basisboard: [[Durchflussmessung Basisnoard Multi-MCU]] || || || 100 ||&lt;br /&gt;
|- 	  	 	  	 &lt;br /&gt;
| SSR-Platine: [[Schalten Magnetventile SSR-Platine Multi-MCU]] || || || 100 ||&lt;br /&gt;
|- 	 &lt;br /&gt;
| SSR-Platine: [[Schrittmotorsteuerungen SSR-Platine Multi-MCU]] || || || 100 ||&lt;br /&gt;
|-&lt;br /&gt;
| Messplatine: [[Messdatenerfassung Multi-MCU]] || || || 100 ||&lt;br /&gt;
|-&lt;br /&gt;
| || || || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= ToDo-Liste der Grundlagenprogrammierung - MATLAB®-Funktionen und GUI =&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Arbeitspaket !! Wer !! Prio !! Status !! WV&lt;br /&gt;
|-&lt;br /&gt;
| [[MATLAB®-GUI Start der App]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[MATLAB®-GUI Initialisierung Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[MATLAB®-GUI Schalten Magnetventile]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[MATLAB®-GUI Datensicherung]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Messwerte erfassen Multi-MCU]] || || || ||&lt;br /&gt;
|- &lt;br /&gt;
| [[Pumpenansteuerung Multi-MCU]] || || || ||&lt;br /&gt;
|- &lt;br /&gt;
| [[Füllstandsregler Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Regler Boilerdruck Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Mischregler Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Durchflussregler Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Misch-Durchfluss Kaskadenregelung Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Preinfusion Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[einfacher Kaffeebezug Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Kaffeebezug Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Wasserbezug Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Dampfbezug Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Spülvorgänge Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Grundreinigung Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Tastenbedienung Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Display Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Glasboiler Abtropfwanne]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Schrittmotorensteuerung Bypass]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Schrittmotorensteuerung Mischer]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Schrittmotorensteuerung Brühgruppendrossel]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Adaption an Multi-MCU - Neuprogrammierung MATLAB® GUI]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| Dokumentation der Software mit STM32-Elektronik. &amp;lt;br&amp;gt;Ein Betrieb dieser wird nicht mehr weiter verfolgt. || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Messwerte erfassen (Labor)]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Pumpenansteuerung (Labor)]] || ||  || || &lt;br /&gt;
|-&lt;br /&gt;
| [[Füllstandsregler (Labor)]] || ||  || || &lt;br /&gt;
|-&lt;br /&gt;
| [[Regler Boilerdruck (Labor)]] || ||  || ||  &lt;br /&gt;
|-&lt;br /&gt;
| [[Mischregler (Labor)]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Durchflussregler (Labor)]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[einfacher Kaffeebezug (Labor)]] || ||  || ||  &lt;br /&gt;
|-&lt;br /&gt;
| [[Kaffeebezug (Labor)]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Wasserbezug (Labor)]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Dampfbezug]] || ||  || ||  &lt;br /&gt;
|-&lt;br /&gt;
| [[Spülvorgänge (Labor)]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Tastenbedienung (Labor)]] || || || ||  &lt;br /&gt;
|-&lt;br /&gt;
| [[Anpassungen für Schrittmotorensteuerung]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| || || || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= ToDo-Liste: APP =&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Arbeitspaket !! Wer !! Prio !! Status !! WV&lt;br /&gt;
|-&lt;br /&gt;
| [[APP - Konzept]] || || 2 || 10 || &lt;br /&gt;
|- 	 &lt;br /&gt;
| [[Messwerte erfassen APP]] || || 99 || 10 || &lt;br /&gt;
|-&lt;br /&gt;
| [[Preset / Profilverwaltung]] || || 99 || 10 || &lt;br /&gt;
|-&lt;br /&gt;
| || || || ||&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Peter Vogginger</name></author>
	</entry>
	<entry>
		<id>http://www.institut-fuer-kaffeetechnologie.de/Wiki/index.php?title=Systemsoftware&amp;diff=4771</id>
		<title>Systemsoftware</title>
		<link rel="alternate" type="text/html" href="http://www.institut-fuer-kaffeetechnologie.de/Wiki/index.php?title=Systemsoftware&amp;diff=4771"/>
		<updated>2025-11-24T17:49:58Z</updated>

		<summary type="html">&lt;p&gt;Peter Vogginger: /* ToDo-Liste: MCUs - Verlagerung der Regelkreise aus der MATLAB®-GUI auf die Mikrocontroller der Steuerungselektronik */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;htmltag tagname=&amp;quot;img&amp;quot; src=&amp;quot;http://vg04.met.vgwort.de/na/4531f1734b324b72b2d7e566cdf639f0&amp;quot;  width=&amp;quot;1&amp;quot; height=&amp;quot;1&amp;quot; alt=&amp;quot;&amp;quot;&amp;gt;&amp;lt;/htmltag&amp;gt;&lt;br /&gt;
[[Datei:Breites Logoband.png|mini|zentriert|hochkant=2.5]]&amp;lt;br&amp;gt;&lt;br /&gt;
Die Systemsoftware lässt sich nicht ohne die Beachtung der Systemelektronik erstellen.&lt;br /&gt;
&lt;br /&gt;
Für die Systemsoftware wurde ein mehrstufiger Entwicklungsprozess definiert:&lt;br /&gt;
# Nutzung einer MCU auf der MicroPython verwendet werden kann. Dies ist durch das STM32F411 nucleo Board der Basiselektronik bzw. durch den Raspberry Pi Pico der Multi-MCU-Elektronik gegeben.&lt;br /&gt;
# Auf der MCU werden lediglich die elementaren Grundfunktionen (GPIO schalten und erfassen, Messwert erfassen, PWM Ausgeben, Sollwert ausgeben, etc.) realisiert und über eine MicroPython zu MATLAB® Schnittstelle [41] wird die Funktionalität in einer MATLAB® GUI hergestellt.&lt;br /&gt;
# Die Softwareentwicklung startet mit der labortechnischen Espressomaschine und wird auf die weiteren Projekte schrittweise transportiert. Dazu ist die Maschinenelektronik gleich zu halten und es sind die gleichen Anschluss-Pins zu verwenden.&lt;br /&gt;
# Nach Abschluss der Testphase der MATLAB® Bedienung wird schrittweise die Betriebssoftware in MicroPython auf der MCU implementiert, so dass am Ende dieses Prozessschrittes die MATLAB®-Verbindung lediglich für weiterführende Datenerfassung und grafische Darstellungen verwendet wird, welche nicht mit dem Display der Maschine möglich ist oder dort nicht dargestellt werden soll.&lt;br /&gt;
# Ob eine Portierung des MicroPython-Codes nach Microcontroller C durchgeführt wird, ist derzeit nicht entschieden.&lt;br /&gt;
&lt;br /&gt;
Es wurden mehrere, die Softwareentwicklung vorbereitende FMEAs durchgeführt.  Die hierdurch entstandenen Dokumentation befinden sich in der Dokumentationsauflistung. Im weiteren wurde eine Projektarbeit zur Konzeptfindung für die Badienung durchgeführt. Auch die hierdurch entstandenen, teilweise auf die FMEA aufbauenden Dokumente befinden sich in der Dokumentationsliste.&lt;br /&gt;
&lt;br /&gt;
= Projektdokumentationen und Beschreibungen =&lt;br /&gt;
* [[:Datei:20210228 Konzept Systemelektronik.pdf|Konzeptbeschreibung Systemelektronik]]&lt;br /&gt;
* [[:Datei:20210605 Workflow Embedded Systems.pdf|Workflow Embedded Systems]]&lt;br /&gt;
* [[:Datei:20200521 Bericht1 NerminArbi.pdf|Funktionsanalyse Boilerbefüllung, Tassenwärmung, Milchschäumen]]&lt;br /&gt;
* [[:Datei:20200518 Bericht halbauto Entkalkung Egger Alexander.pdf|Funktionsanalyse zur halbautomatischen Entkalkung]]&lt;br /&gt;
* [[:Datei:20200518 V0 4 Bericht Funktionsanalyse Rückspulung-Spulung Sladoje.pdf|Funktionsanalyse Rückspülung und Spülung]]&lt;br /&gt;
* [[:Datei:20200521 Bericht Espresso-Teewasserbezug Urbin.pdf|Funktionsanalyse Espresso und Teewasserbezug]]&lt;br /&gt;
* [[:Datei:20200522 Bericht Funktionsanalyse Energieeffizienz Egger Alexander.pdf|Funktionsanalyse Energieeffizienz]]&lt;br /&gt;
* [[:Datei:20200521 V2 Bericht Funktionsanalyse Bedienung Sladoje.pdf|Funktionsanalyse Bedienung]]&lt;br /&gt;
* [[:Datei:20200525 Bericht Abbildung aller Maschinen Urbin V2.pdf|Funktionsanalyse Abbildung aller Maschinen]]&lt;br /&gt;
* [[:Datei:20200609 Bericht Fehleranalyse Entschichtung.pdf|Fehleranalyse Entschichtung]]&lt;br /&gt;
* [[:Datei:20200610 Fehleranalyse Dampf Brühgruppe Sladoje.pdf|Fehleranalyse Brühgruppe und Dampfbezug]]&lt;br /&gt;
* [[:Datei:20200613 Bericht Fehleranalyse Mischer;Magnetventile V2.pdf|Fehleranalyse Mischer und Magnetventile]]&lt;br /&gt;
* [[:Datei:20200611 Bericht3 NerminArbi.pdf|Fehleranalyse Boiler]]&lt;br /&gt;
* [[:Datei:20200705 Dichtheitsprüfung.pdf|Dichtheitsprüfung]]&lt;br /&gt;
* [[:Datei:20200704 Massnahmen Urbin.pdf|Prüfkonzepte Magnetventile und Mischer]]&lt;br /&gt;
* [[:Datei:20200701 Maßnahmenanalyse NerminArbi.pdf|Maßnahmen Boiler]]&lt;br /&gt;
* [[:Datei:20200628 Maßnahmen Entschichtung zweiter Stand.pdf|Maßnahmen Entschichtung]]&lt;br /&gt;
* [[:Datei:20200627 Maßnahmenkonzept Brühguppe Dampf Sladoje.pdf|Maßnahmen Brühgruppe und Dampf]]&lt;br /&gt;
* [[:Datei:20200707_FMEA.xlsx|FMEA Tabelle]]&lt;br /&gt;
* [[:Datei:20201207_Bedienkonzept.pptx|PPT Simulation des Bedienkonzeptes]]&lt;br /&gt;
* [[:Datei:20210207_Bedienkonzept_Funktionsliste.xlsx|Bedienkonzept Funktionsliste]]&lt;br /&gt;
* [[:Datei:20210219_Bedienkonzept_Projektdokumentation.pdf|Bedienkonzept Projektdokumentation]]&lt;br /&gt;
* [[:Datei:HMProjektBedienoberflaecheEspresso.zip|MATLAB® GUI]]&lt;br /&gt;
* [[Entwicklung Systemsoftware SoSe2022]]&lt;br /&gt;
* [[Entwicklung Systemsoftware SoSe2023]]&lt;br /&gt;
* [[Mikrocontroller Programmierung in MicroPython WiSe 2025/26]]&lt;br /&gt;
&lt;br /&gt;
= [http://www.institut-fuer-kaffeetechnologie.de/Intern/index.php?title=Programmcode Programmcode] =&lt;br /&gt;
Aktueller Programmcode und Änderungsdokumentation ab Jan 2023&lt;br /&gt;
&lt;br /&gt;
= [http://www.institut-fuer-kaffeetechnologie.de/Intern/index.php?title=Software-Bugs Software-Bugs] =&lt;br /&gt;
&lt;br /&gt;
= ToDo-Liste(n) Systemsoftware =&lt;br /&gt;
&lt;br /&gt;
== Prioritätsangabe ==&lt;br /&gt;
Prio 1 - Abarbeitung zeitnah erforderlich&amp;lt;br&amp;gt;&lt;br /&gt;
Prio 2 - Abarbeitung erforderlich&amp;lt;br&amp;gt;&lt;br /&gt;
Prio 3 - Abarbeitung kann warten&amp;lt;br&amp;gt;&lt;br /&gt;
Prio 99 - Abarbeitung erfordert Vorarbeiten&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Status ==&lt;br /&gt;
10 - Erfasst&amp;lt;br&amp;gt;&lt;br /&gt;
30 - in Bearbeitung&amp;lt;br&amp;gt;&lt;br /&gt;
50 - Lösung definiert&amp;lt;br&amp;gt;&lt;br /&gt;
70 - in Umsetzung&amp;lt;br&amp;gt;&lt;br /&gt;
90 - Umsetzung abgeschlossen&amp;lt;br&amp;gt;&lt;br /&gt;
99 - Abbruch per Beschluss (Dokumentation dazu erforderlich)&amp;lt;br&amp;gt;&lt;br /&gt;
100 - Maßnahme bestätigt&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ToDo-Liste: Mechatronische Inbetriebnahme Glasboilermaschine =&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Arbeitspaket !! Wer !! Prio !! Status !! WV&lt;br /&gt;
|-&lt;br /&gt;
| [[Fehlerbehebungen]] || || 1 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Startprozedure]] || ||  1 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Tankfüllstandsregelung]] || || 1 || 10 ||&lt;br /&gt;
|- &lt;br /&gt;
| [[Boilerfüllstandsregelung]] || || 1 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Boilerdruckregelung]] || || 1 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Mischwassertemperaturregelung]] || || 1 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Durchflussregelung]] || || 1 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Kaffeebezug]] || || 2 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Teebezug]] || || 1 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Temperatureinstellung über Vertikalhebel]] || || 1 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Simulation Handhebelmaschine]] || || 1 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Flush/Rückspülreinigung]] || || 1 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| || || || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= ToDo-Liste: MCUs - Verlagerung der Regelkreise aus der MATLAB®-GUI auf die Mikrocontroller der Steuerungselektronik =&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Arbeitspaket !! Wer !! Prio !! Status !! WV&lt;br /&gt;
|-&lt;br /&gt;
| [[Kommunikation per UART|UART Kommunikation zwischen den einzelnen MCUs]] || Peter Vogginger|| 1 || 30 || 27.11.2025&lt;br /&gt;
|-&lt;br /&gt;
| [[Mehrkernnutzung und/oder Multitasking]] || Peter Vogginger||  1 || 30 ||04.12.2025&lt;br /&gt;
|-&lt;br /&gt;
| [[Startprozedur]]&lt;br /&gt;
|Philipp Schiebel&lt;br /&gt;
|1&lt;br /&gt;
|30&lt;br /&gt;
|27.11.2025&lt;br /&gt;
|-&lt;br /&gt;
| [[Verlagerung des Füllstandsreglers auf das Basisboard]] || Philipp Schiebel|| 1 || 30 || 20.11.2025&lt;br /&gt;
|- &lt;br /&gt;
| [[Verlagerung der Boilerdruckregelung auf die Messplatine]] || Philipp Schiebel|| 1 || 30 ||  	 27.11.2025&lt;br /&gt;
|-&lt;br /&gt;
| [[Verlagerung des Mischtemperaturreglers auf das Basisboard]] || Philipp Schiebel|| 1 || 10 || 04.12.2025&lt;br /&gt;
|-&lt;br /&gt;
| [[Verlagerung des Durchflussreglers auf das Basisboard]] || Philipp Schiebel|| 1 || 10 ||  	 04.12.2025&lt;br /&gt;
|-&lt;br /&gt;
| [[Erstellung der Funktionssteuerung - Preinfusion auf dem Basisboard]] || || 2 || 10 || &lt;br /&gt;
|-&lt;br /&gt;
| [[Erstellung der Funktionssteuerung - Kaffeebezug auf dem Basisboard]] || || 1 || 10 || &lt;br /&gt;
|-&lt;br /&gt;
| [[Erstellung der Funktionssteuerung - Wasserbezug auf dem Basisboard]] || || 1 || 10 || &lt;br /&gt;
|-&lt;br /&gt;
| [[Erstellung der Funktionssteuerung - Dampfbezug auf dem Basisboard]] || || 1 || 10 || 	 &lt;br /&gt;
|-&lt;br /&gt;
| [[Erstellung der Funktionssteuerung - Spülen auf dem Basisboard]] || || 1 || 10 ||  &lt;br /&gt;
|-&lt;br /&gt;
| [[Erstellung der Funktionssteuerung - Grundreinigung auf dem Basisboard]] || || 1 || 10 ||  &lt;br /&gt;
|-&lt;br /&gt;
| [[Integration eines Displays mit Touchfunktion]] || || 1 || 30 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Integration eines Vertikalhebels]] || || 1 || 30 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Visualisierung und Interaktion über die MATLAB®-GUI]] || || 1 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Visualisierung und Interaktion über eine WEB-Anwendung]] || || 1 || 10 ||  &lt;br /&gt;
|-&lt;br /&gt;
| [[Maschinensimulator]] || alle|| 1 || 30 ||20.11.2025&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= ToDo-Liste: Allgemeines =&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Arbeitspaket !! Wer !! Prio !! Status !! WV&lt;br /&gt;
|-&lt;br /&gt;
| [[Sicherheitsfunktionen]] || || 99 || 50 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[ Übersicht über verbaute Aktorik und Sensorik in Tabellenform]] || || 2 || 90 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Stromsparmodus]] || || 99 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| || || || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= ToDo-Liste: MCUs - Hardwarenahe Software =&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Arbeitspaket !! Wer !! Prio !! Status !! WV&lt;br /&gt;
|-&lt;br /&gt;
| [[Grundfunktionen der MCU und mehrere MCUs]] || || || 100 ||&lt;br /&gt;
|-	&lt;br /&gt;
| Basisboard: [[Schalten Magnetventile (Labor) STM32-Basisboard]] MATLAB®GUI || || || 100&lt;br /&gt;
|-&lt;br /&gt;
| Basisboard: [[Pumpenansteuerung Basisboard Multi-MCU]] || || || 100 ||&lt;br /&gt;
|- 	 &lt;br /&gt;
| Basisboard: [[Schrittmotorsteuerungen Basisboard Multi-MCU]] || || || 100 ||&lt;br /&gt;
|-&lt;br /&gt;
| Basisboard: [[Tastenerkennung Basisboard Multi-MCU]] || || 1 || 10 || &lt;br /&gt;
|- 	 &lt;br /&gt;
| Basisboard: [[Füllstandserkennung Basisboard Multi-MCU]] || || || 100 ||&lt;br /&gt;
|- 	 &lt;br /&gt;
| Basisboard: [[Durchflussmessung Basisnoard Multi-MCU]] || || || 100 ||&lt;br /&gt;
|- 	  	 	  	 &lt;br /&gt;
| SSR-Platine: [[Schalten Magnetventile SSR-Platine Multi-MCU]] || || || 100 ||&lt;br /&gt;
|- 	 &lt;br /&gt;
| SSR-Platine: [[Schrittmotorsteuerungen SSR-Platine Multi-MCU]] || || || 100 ||&lt;br /&gt;
|-&lt;br /&gt;
| Messplatine: [[Messdatenerfassung Multi-MCU]] || || || 100 ||&lt;br /&gt;
|-&lt;br /&gt;
| || || || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= ToDo-Liste der Grundlagenprogrammierung - MATLAB®-Funktionen und GUI =&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Arbeitspaket !! Wer !! Prio !! Status !! WV&lt;br /&gt;
|-&lt;br /&gt;
| [[MATLAB®-GUI Start der App]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[MATLAB®-GUI Initialisierung Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[MATLAB®-GUI Schalten Magnetventile]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[MATLAB®-GUI Datensicherung]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Messwerte erfassen Multi-MCU]] || || || ||&lt;br /&gt;
|- &lt;br /&gt;
| [[Pumpenansteuerung Multi-MCU]] || || || ||&lt;br /&gt;
|- &lt;br /&gt;
| [[Füllstandsregler Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Regler Boilerdruck Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Mischregler Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Durchflussregler Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Misch-Durchfluss Kaskadenregelung Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Preinfusion Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[einfacher Kaffeebezug Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Kaffeebezug Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Wasserbezug Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Dampfbezug Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Spülvorgänge Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Grundreinigung Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Tastenbedienung Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Display Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Glasboiler Abtropfwanne]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Schrittmotorensteuerung Bypass]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Schrittmotorensteuerung Mischer]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Schrittmotorensteuerung Brühgruppendrossel]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Adaption an Multi-MCU - Neuprogrammierung MATLAB® GUI]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| Dokumentation der Software mit STM32-Elektronik. &amp;lt;br&amp;gt;Ein Betrieb dieser wird nicht mehr weiter verfolgt. || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Messwerte erfassen (Labor)]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Pumpenansteuerung (Labor)]] || ||  || || &lt;br /&gt;
|-&lt;br /&gt;
| [[Füllstandsregler (Labor)]] || ||  || || &lt;br /&gt;
|-&lt;br /&gt;
| [[Regler Boilerdruck (Labor)]] || ||  || ||  &lt;br /&gt;
|-&lt;br /&gt;
| [[Mischregler (Labor)]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Durchflussregler (Labor)]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[einfacher Kaffeebezug (Labor)]] || ||  || ||  &lt;br /&gt;
|-&lt;br /&gt;
| [[Kaffeebezug (Labor)]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Wasserbezug (Labor)]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Dampfbezug]] || ||  || ||  &lt;br /&gt;
|-&lt;br /&gt;
| [[Spülvorgänge (Labor)]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Tastenbedienung (Labor)]] || || || ||  &lt;br /&gt;
|-&lt;br /&gt;
| [[Anpassungen für Schrittmotorensteuerung]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| || || || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= ToDo-Liste: APP =&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Arbeitspaket !! Wer !! Prio !! Status !! WV&lt;br /&gt;
|-&lt;br /&gt;
| [[APP - Konzept]] || || 2 || 10 || &lt;br /&gt;
|- 	 &lt;br /&gt;
| [[Messwerte erfassen APP]] || || 99 || 10 || &lt;br /&gt;
|-&lt;br /&gt;
| [[Preset / Profilverwaltung]] || || 99 || 10 || &lt;br /&gt;
|-&lt;br /&gt;
| || || || ||&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Peter Vogginger</name></author>
	</entry>
	<entry>
		<id>http://www.institut-fuer-kaffeetechnologie.de/Wiki/index.php?title=Projektr%C3%BCcksprache_20.11.2025&amp;diff=4770</id>
		<title>Projektrücksprache 20.11.2025</title>
		<link rel="alternate" type="text/html" href="http://www.institut-fuer-kaffeetechnologie.de/Wiki/index.php?title=Projektr%C3%BCcksprache_20.11.2025&amp;diff=4770"/>
		<updated>2025-11-21T09:50:10Z</updated>

		<summary type="html">&lt;p&gt;Peter Vogginger: Die Seite wurde neu angelegt: „=Besprechungsprotokoll – Projektrücksprache 20.11.2025= Ort: Labor für Maschinendynamik, B0273  Datum: 20.11.2025   Teilnehmer: Philipp Schiebel, Peter Vogginger, LfbA Armin Rohnen   Moderator: Philipp Schiebel  Protokoll: Peter Vogginger  ==Top 1) Annahme des Protokolls==  Das Protokoll der letzten Besprechung wird von allen Teilnehmern angenommen.   ==Top 2) Status UART Kommunikation==  Der aktuelle Fortschritt im Programmcode wird vorgestellt. Die…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Besprechungsprotokoll – Projektrücksprache 20.11.2025=&lt;br /&gt;
Ort: Labor für Maschinendynamik, B0273&lt;br /&gt;
&lt;br /&gt;
Datum: 20.11.2025 &lt;br /&gt;
&lt;br /&gt;
Teilnehmer: Philipp Schiebel, Peter Vogginger, LfbA Armin Rohnen &lt;br /&gt;
&lt;br /&gt;
Moderator: Philipp Schiebel&lt;br /&gt;
&lt;br /&gt;
Protokoll: Peter Vogginger&lt;br /&gt;
&lt;br /&gt;
==Top 1) Annahme des Protokolls== &lt;br /&gt;
Das Protokoll der letzten Besprechung wird von allen Teilnehmern angenommen. &lt;br /&gt;
&lt;br /&gt;
==Top 2) Status UART Kommunikation== &lt;br /&gt;
Der aktuelle Fortschritt im Programmcode wird vorgestellt. Die Testplatine empfängt bereits über einen angeschlossenen A/D-Wandler (ADS1115) Messwerte. Diese sind fiktiv, da die Datenleitung des ADS1115 nicht weiterverbunden ist.&amp;lt;br /&amp;gt;&lt;br /&gt;
Die Unterbrechung der gestarteten Wandlung erweist sich als schwierig. Hierzu ist entweder mehrfach der Unterbrechungs-Befehl in der integrierten Entwicklungsumgebung (IDE) Thonny zu betätigen oder es ist die Stromzufuhr zu unterbrechen. Die Integration eines Stop-Befehls in den Programmcode ist somit erforderlich. &amp;lt;br /&amp;gt;  &amp;lt;br /&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
Sobald die oben genannte Datenerfassung und -unterbrechung fehlerfrei funktioniert, ist eine Dokumentation zu erstellen. Diese ist bei dem Erreichen von Meilensteinen zu erweitern. Dies gilt zum Beispiel, sobald die Verarbeitung und das Weitersenden des Tokens auf einer weiteren Platine erfolgreich implementiert wurde. &lt;br /&gt;
&lt;br /&gt;
==Top 3) Status Verlagerung des Füllstandsreglers== &lt;br /&gt;
Der Boilerdruckwert wird als Indikator verwendet, ob der Dampfhahn zwecks Druckabbau im Boiler geöffnet werden soll. Während der Befüllung des Boilers mit Frischwasser entsteht zwangsläufig Druck, da die eingeschlossene Luft nicht entweichen kann. Wenn viel Frischwasser aufgefüllt wird, entsteht somit ein hoher Druck. Viel Wasser wird meist nur im kalten Zustand nachgefüllt, bei einem heißen Boiler meist eher wenig. Als Sicherheitsmaßnahme darf der Regler den Dampfhahn nur bei kaltem Boiler öffnen, damit kein heißer Dampf austritt.&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;  &lt;br /&gt;
 &lt;br /&gt;
Es ist eine interne Timer-Funktion möglich. Die Funktion sleep() legt den Prozessor für die eingestellte Dauer lahm. Der Timer wird benötigt, um die Pumpe nach dem Erreichen des erforderlichen Boilerfüllstandes noch 1,5 Sekunden weiterfördern zu lassen, um einen ständigen Reglereingriff zu vehindern. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Top 4) Status Hardware Maschinensimulator==&lt;br /&gt;
Es werden die Komponenten und die Verkabelung erklärt. Um die NTC-Widerstände zu simulieren, wird die Funktion set_poti(Kanalnummer 0-7, Wert von 0-255) verwendet. Um die Füllstände zu simulieren, wird die Funktion fuell[Nummer Füllstand 0-3 .value(0 oder 1)] verwendet.&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Die grünen bzw. schwarzen Kabel werden an die Pins jener Platine angeschlossen, an derer sonst der entsprechende Sensor sitzt. Mit dem Maschinensimulator ist es somit unter anderem möglich, die Füllstände in Kombination mit dem Aufheizen des Wassers zu simulieren. &lt;br /&gt;
==Top 5) Projektplanung / GANTT== &lt;br /&gt;
Es ist wichtig, den Projektplan aktuell zu halten und bei jedem Teammeeting die Fortschritte zu erfassen. Sobald es zu Verzögerungen kommt, ist dies zu melden.&amp;lt;br /&amp;gt;  &lt;br /&gt;
Der Projektplan ist in jede Besprechung mitzunehmen.&lt;/div&gt;</summary>
		<author><name>Peter Vogginger</name></author>
	</entry>
	<entry>
		<id>http://www.institut-fuer-kaffeetechnologie.de/Wiki/index.php?title=Mikrocontroller_Programmierung_in_MicroPython_WiSe_2025/26&amp;diff=4768</id>
		<title>Mikrocontroller Programmierung in MicroPython WiSe 2025/26</title>
		<link rel="alternate" type="text/html" href="http://www.institut-fuer-kaffeetechnologie.de/Wiki/index.php?title=Mikrocontroller_Programmierung_in_MicroPython_WiSe_2025/26&amp;diff=4768"/>
		<updated>2025-11-20T10:38:40Z</updated>

		<summary type="html">&lt;p&gt;Peter Vogginger: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;htmltag tagname=&amp;quot;img&amp;quot; src=&amp;quot;https://vg06.met.vgwort.de/na/c62555318b0346218dc23a5ada9f7726&amp;quot; width=&amp;quot;1&amp;quot; height=&amp;quot;1&amp;quot; alt=&amp;quot;&amp;quot;&amp;gt;&amp;lt;/htmltag&amp;gt;&lt;br /&gt;
[[Datei:Breites Logoband.png|mini|zentriert|hochkant=2.5]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Mikrocontroller Programmierung in MicroPython Wintersemetser 2025/26 =&lt;br /&gt;
Für das Projekt der labortechnischen und Glasboiler Espressomaschine soll die vorhandene Master (MATLAB®-App) Client (RPi RP2040 MCUs in MicroPython) Steuerung auf eine autarke Multi-MCU-Steuerung mit mehreren RPi RP2040 und/oder RPi RP2350 mit einer MATLAB®-App als Service-Tool umgestellt werden.&lt;br /&gt;
&lt;br /&gt;
Die Umstellung soll im ersten Schritt über Demonstratoren vorbereitet werden. Die erforderlichen Steuerungsplatinen sind in mehrfacher Ausfertigung vorhanden, so dass Teilaufgaben voneinander unabhängig abgearbeitet werden können.&lt;br /&gt;
&lt;br /&gt;
Die Programmcodes in MicroPython für die Realisierung der Grundfunktionen (Schalten, Messwerte erfassen, Display ansteuern, UART Kommunikation, MATLAB® Kommunikation) sind in MATLAB® meets MicroPython [40] vorhanden. Hierzu wird die zweite (noch nicht veröffentlichte) Ausgabe zur Verfügung gestellt.&lt;br /&gt;
&lt;br /&gt;
Diese Projektarbeit dient der Weiterentwicklung der modularisierten Systemsteuerung im Gesamtprojekt zur Entwicklung der Siebträger-Espressomaschinen.&lt;br /&gt;
&lt;br /&gt;
= Aufgabenanalyse =&lt;br /&gt;
== UART Kommunikation zwischen den einzelnen MCUs ==&lt;br /&gt;
Die bestehende Kommunikation über die MATLAB®-GUI soll durch ein robustes, ringförmiges UART-System ersetzt werden, bei dem fünf MCUs kontinuierlich einen gemeinsamen Token austauschen. Jede Platine ergänzt oder liest dabei spezifische Daten, während Start-, Standard- und Paniktoken sowie CRC-Prüfsummen für zuverlässigen Betrieb und Fehlererkennung sorgen.&lt;br /&gt;
&lt;br /&gt;
== Mehrkernnutzung und/oder Multitasking ==&lt;br /&gt;
Beim Raspberry Pi Pico soll der zweite Prozessorkern genutzt werden, um die MCU-Kommunikation auszulagern und dadurch den Hauptkern für bestehende Steuerungsaufgaben zu entlasten. Dabei sind die Einschränkungen von _thread() sowie Konflikte beim Zugriff auf gemeinsame Peripherie zu berücksichtigen, während uasyncio als alternative kooperative Multitasking-Lösung nur einen Kern nutzen kann.&lt;br /&gt;
&lt;br /&gt;
== Startprozedur ==&lt;br /&gt;
Diese wird initialisiert durch die Aktivierung aller vier MCUs und dient der Gewährleistung einer korrekten Kommunikationsstruktur sowie dem sequenziellen Start von Füllstands- und Boilerdruckregelung. Die Betriebsbereitschaft wird signalisiert, sobald der Boilerdruck-Sollwert erreicht wird.&lt;br /&gt;
&lt;br /&gt;
== Füllstandsregelung ==&lt;br /&gt;
Ziel ist die vollständige Übertragung der bisher in der MATLAB®-GUI realisierten Boiler-Füllstandsregelung auf die Basisplatine, um eine PC-unabhängige Regelung zu ermöglichen. Die Regelung erkennt den Füllstand über eine Kurzschlussdetektion; liegt kein Kurzschluss vor, wird dies als unzureichender Füllstand interpretiert und der Boilerdruckregler zur Vermeidung von Trockenheizen gesperrt. Bei Erreichen des Sollfüllstands erfolgt eine gezielte Überfüllung bei reduzierter Pumpenspannung, um ein periodisches An- und Abschalten der Regelung vorzubeugen.&lt;br /&gt;
&lt;br /&gt;
== Boilerdruckregelung ==&lt;br /&gt;
Dieser PID-Regler wird auf die SSR-Platine übertragen und aktiviert sich aus Sicherheitsgründen erst dann, wenn ein korrekter Wasserstand im Boiler erkannt wurde. Parallel zur Druckhaltung steuert die Regelung die Entschichtungsfunktion, welche aktiv bleibt, bis die Boilertemperatur einen einstellbaren Grenzwert erreicht.&lt;br /&gt;
&lt;br /&gt;
== Mischtemperaturregelung ==&lt;br /&gt;
Um die Wassertemperatur für Kaffee und Tee zu steuern, wird ein PID-Regler für das Mischventil auf der Basisplatine implementiert. Dabei wird eine Kaskadenstruktur verwendet, in der die Mischtemperaturregelung den äußeren Kreis bildet und direkt vom inneren Durchflussregelkreis abhängig ist.&lt;br /&gt;
&lt;br /&gt;
== Durchflussregelung ==&lt;br /&gt;
Der auf das Basisboard verlagerte PID-Regler sorgt durch Anpassung der Pumpenspannung für einen konstanten Volumenstrom. Als innerer Regelkreis liefert er kontinuierlich Durchflusswerte an den Mischtemperaturregler, um die Temperaturstabilisierung zu gewährleisten&lt;br /&gt;
&lt;br /&gt;
== Maschinensimulator - Hardware ==&lt;br /&gt;
Für die Steuerungselektronik besteht die Siebträger Espressomaschine aus Messwerten. Dies sind in der aktuellen Form&lt;br /&gt;
* 4 NTC Temperatursensoren mit 10 kOhm&lt;br /&gt;
* 2 Druckmesswerte im Spannungsbereich 0,5 bis 4,5 V&lt;br /&gt;
* Leitwert und Temperatur des zufließenden Wassers im Spannungsbereich 0 bis 5 V&lt;br /&gt;
* Flowmeter mit 39,9 Impulsen je ccm&lt;br /&gt;
* 4 Füllstandssensoren über Kurzschlussdetektion&lt;br /&gt;
&lt;br /&gt;
Realisiert werden diese Messwerte über ein digitales Potentiometer MCP4151 mit 10 kOhm, welches über eine SPI-Schnittstelle eingestellt werden kann. Damit werden die 4 NTC Temperatursensoren und über die Spannungsteilerfunktion des Bauelements werden die Druckmesswerte, der Leitwert und die Temperatur des zufließenden Wassers simuliert.&lt;br /&gt;
&lt;br /&gt;
Die Kurzschlusserzeugung der Füllstandssensoren werden mit einem digitalen Analogschalter (DG411) realisiert und das Flowmetersignal wird über eine Transistorfolgeschaltung erzeugt.&lt;br /&gt;
&lt;br /&gt;
Die Schaltung benötigt eine MCU mit mindestens 17 für Kommunikation und Elektronikansteuerung verfügbaren PINs. Hierzu ist eine Raspberry Pi Pico MCU vorgesehen. &lt;br /&gt;
&lt;br /&gt;
== Maschinensimulator - Hardware ==&lt;br /&gt;
Auf der MCU selbst ist zwingend die SPI-Kommunikation zu den digitalen Potentiometer mit insgesamt 8 verschiedenen Chipselect erforderlich. Die digitalen Analogschalter benötigen lediglich ein PIN mit Digoutfunktion während das Flowmetersignal als PWM-Signal mit variabler Frequenz realisiert wird. Für die variable Frequenz kann über die Anweisung PWM.freq([Frequenz]) eingestellt werden.&lt;br /&gt;
&lt;br /&gt;
Die Einstellwerte für das digitale Potentiometer sollten für die 4 NTC Temperatursensoren als Temperaturwerte eingegeben werden. Aus dem Eingabewert wird und über die Beachtung der nichtlinearen Kennlinie der NTCs sowie dem nichtlinearen Zusammenhang aus Einstellwert und Widerstandswert der Einstellwert des jeweiligen digitalen Potentiometers. Die normierten Kennlinien der NTCs liegen vor. Eventuell lassen sich darüber die erforderlichen Einstellwerte ermitteln.&lt;br /&gt;
&lt;br /&gt;
Auch die Einstellwerte für die Simulation der Druckmesswerte sollten in bar für den Brühgruppendruck bzw. in mbar für den Boilerdruck erfolgen. Auch hier muss die nichtlinearität des digitalen Potentiometers berücksichtigt werden.&lt;br /&gt;
&lt;br /&gt;
Es erscheint sinnvoll, dass der Maschinensimulator in den Kommunikationsring eingebunden wird. Aus dem Token kann der Sollwert für die Pumpensteuerung entnommen werden, welches wiederum für die Generierung des Flowmetersignals verwendet werden kann. Ebenso können aus dem Token die Heizleistungen entnommen werden, was für die Temperatursignale sowei Boilerdrucksignal verwendet werden könnte.&lt;br /&gt;
&lt;br /&gt;
Für die einfachere Bedienung und um die Anzahl der benötigten PCs zu minimieren ist eine MATLAB®-GUI nützlich. In dieser sollten die simulierten Signale per numerischer Eingabe, Schalter oder Slider einstellbar sein. ebenso sollten darin Umschaltungen möglich sein, so dass die simulierten Signale in Abhängigkeit der Pumpensteuerung und Heizleistung erzeugt werden. Auch denkbar wären die generierung von Messwerten über bekannte Messwertverläufe von gemessenen Kaffeebezügen.&lt;br /&gt;
&lt;br /&gt;
= Leistungsvereinbarung =&lt;br /&gt;
== Kommunikation ==&lt;br /&gt;
Es wird eine Kommunikation zwischen den MCUs (Platinen) der Maschinensteuerung aufgebaut. Dazu wird die auf den einzelnen Platinen herausgeführte UART-Schnittstelle so verbunden, dass ein Kommunikationsring entsteht. Über den Kommunikationsring wird ein als Token bezeichnetes Datenpaket mit allen für den Maschinenbetrieb erforderlichen Messdaten, Stellgrößen, Anforderungen, Einstellparametern und Logging-Informationen im Kreis durchgereicht. Der Token wird so gestaltet, dass dieser dynamisch an spätere Anforderungen (2. Brühgruppe) angepasst werden kann. Der Token wird für eine möglichst kleine Anzahl an Kommunikations-Bytes binär ausgeführt. Es wird eine Definitionstabelle des Tokens im öffentlichen Wiki erstellt. Das Verfahren wird als Espressomaschinen-Kommunikations-Ring (EKR) bezeichnet.&lt;br /&gt;
&lt;br /&gt;
== Mehrkernnutzung ==&lt;br /&gt;
Es wird versucht, über die MicroPython-Funktionalität „_thread“ die Kommunikation von den anderweitigen Prozessaufgaben auf allen MCUs zu trennen und auf den zweiten Prozessorkern zu verlagern.&lt;br /&gt;
&lt;br /&gt;
== Verlagerung der Regelkreise ==&lt;br /&gt;
Die aktuell über die MATLAB®-GUI ausgeführten Regelkreise, Füllstandsregelung (Boiler und Tanks), Boilerdruckregelung, Mischtemperaturregelung und Durchflussregelung werden auf die dafür prädestinierten MCUs verlagert. Die Reglercodes dazu sind im Prinzip in MATLAB® vorhanden, müssen aber an das MCU-Umfeld und die Programmiersprache MicroPython angepasst werden. Funktionstest der Regler an einer realen Hardware sind nicht möglich, da diese soweit noch nicht vorhanden ist. Ziel ist die vollständige Implementierung der Reglerlogik in MicroPython einschließlich Schnittstellenanpassung und Variablenmanagement. Die Funktionsprüfung erfolgt auf Codeebene sowie über simulierte Testfälle.&lt;br /&gt;
&lt;br /&gt;
Für den Ablauf zwischen Einschalten der Maschine und Betriebsbereitschaft zum Kaffeebezug, im Weiteren Betriebsbereitschaft zum Dampfbezug, wird eine Startprozedur definiert und soweit es die vorhandene Hardware zulässt getestet.&lt;br /&gt;
&lt;br /&gt;
== Maschinensimulator ==&lt;br /&gt;
Zur Überprüfung des MCU-Verbunds, der implementierten Reglerlogik sowie der Startprozedur ohne vorhandene reale Maschinenhardware wird ein Maschinensimulator eingesetzt.&lt;br /&gt;
&lt;br /&gt;
Die Hardware für den Maschinensimulator wird bereitgestellt. Der Maschinensimulator generiert die Widerstandswerte der NTC-Temperatursensoren sowie die Spannungswerte der analogen Sensoren im Bereich von 0,5 V bis 4,5 V. Die Füllstandssensoren werden über Kurzschlussschalter simuliert, der Durchflusssensor über eine getaktete Transistorfolgeschaltung mit PWM-Ansteuerung. Zur Nachbildung der Temperatursensoren, Drucksensoren, Füllstandssensoren, Leitwert- und Durchflusssignale werden geeignete bereits festgelegte elektronische Komponenten verwendet. Die Ansteuerung der einzelnen Signalerzeuger ist dabei offen zu gestalten und kann im Verlauf der Implementierung festgelegt werden.&lt;br /&gt;
&lt;br /&gt;
Der Maschinensimulator wird in den bestehenden Kommunikationsring integriert. Dadurch können Sollwerte und Systemparameter aus dem Token ausgelesen und zur Erzeugung der simulierten Sensorsignale genutzt werden.&lt;br /&gt;
&lt;br /&gt;
= Besprechungsprotokolle =&lt;br /&gt;
* [[Projektstart 09.10.2025]]&lt;br /&gt;
* [[Projektrücksprache 15.10.2025]]&lt;br /&gt;
* [[Projektrücksprache 23.10.2025]]&lt;br /&gt;
* [[Projektrücksprache 30.10.2025]]&lt;br /&gt;
* [[Projektrücksprache 06.11.2025]]&lt;br /&gt;
* [[Projektrücksprache 13.11.2025]]&lt;br /&gt;
* [[Projektrücksprache 20.11.2025]]&lt;br /&gt;
* [[Projektrücksprache 27.11.2025]]&lt;br /&gt;
* [[Projektrücksprache 04.12.2025]]&lt;br /&gt;
* [[Projektrücksprache 11.12.2025]]&lt;br /&gt;
* [[Projektrücksprache 18.12.2025]]&lt;br /&gt;
* [[Projektrücksprache 08.01.2026]]&lt;br /&gt;
* [[Projektrücksprache 15.01.2026]]&lt;br /&gt;
* [[Projektrücksprache 05.02.2026]]&lt;br /&gt;
* [[Abschlusspräsentation 12.02.2026]]&lt;/div&gt;</summary>
		<author><name>Peter Vogginger</name></author>
	</entry>
	<entry>
		<id>http://www.institut-fuer-kaffeetechnologie.de/Wiki/index.php?title=Kommunikation_per_UART&amp;diff=4766</id>
		<title>Kommunikation per UART</title>
		<link rel="alternate" type="text/html" href="http://www.institut-fuer-kaffeetechnologie.de/Wiki/index.php?title=Kommunikation_per_UART&amp;diff=4766"/>
		<updated>2025-11-20T10:28:22Z</updated>

		<summary type="html">&lt;p&gt;Peter Vogginger: /* Token Definition */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Peter Vogginger,10.11.2025 - Aufgabenanalyse =&lt;br /&gt;
Aktuell werden die Messwerte von jeder Platine eigenständig an die MATLAB®-GUI versendet. Diese visualisiert und verarbeitet die Messwerte. Die erforderlichen Stellgrößen werden wiederum auf den Platinen in Abhängigkeit der MATLAB®-GUI eingestellt. &lt;br /&gt;
&lt;br /&gt;
In Zukunft soll die Kommunikation unter den MCUs erfolgen. Die Steuerung soll über die Maschinensteuerung erfolgen. Es wird weiterhin eine MATLAB®-GUI (im folgenden MATLAB®-Wartungsapp genannt) geben, diese dient jedoch lediglich für Wartungs- und Versuchszwecke. Die Aufgabe besteht darin, eine robuste und schnelle Kommunikation aufzubauen und diese anschließend auf allen MCUs zu implementieren.&lt;br /&gt;
&lt;br /&gt;
In die Auflistung der miteinander kommunizierenden Steuergeräte ist ein Touch-Display und optional ein Maschinensimulator mit aufzunehmen. Dadurch ergeben sich fünf Platinen, die im ständigen Austausch miteinander stehen: Messwertplatine, SSR-Platine, Basisplatine, Display-Platine und Maschinensimulator.&lt;br /&gt;
&lt;br /&gt;
Zur Fehleranalyse und Erprobung sollen weiterhin alle Messwerte in der Kommunikation enthalten sein, um die MATLAB®-Wartungsapp an die Display-Platine anschließen zu können und mittels Logging alle Daten darauf zu visualisieren. Angelehnt an das 1984 von IBM eingeführte Token Ring Network soll eine „im Kreis laufende“ Kommunikation aufgebaut werden.&lt;br /&gt;
&lt;br /&gt;
== Hardware-Aufbau ==&lt;br /&gt;
Die Verbindungen werden hardwareseitig durch den UART der MCUs hergestellt. Die UART Sendeleitung Tx einer MCU wird mit der Empfangsleitung Rx der nächsten MCU verbunden. Dies wird von Platine zu Platine in der Reihenfolge: Messwertplatine -&amp;gt; Basisplatine -&amp;gt; SSR-Platine -&amp;gt; Display-Platine -&amp;gt; Messwertplatine durchgeführt. Damit ergibt sich ein geschlossener Ring. Optional kann nach der Displayplatine noch der Maschinensimulator eingeschleift werden.&lt;br /&gt;
&lt;br /&gt;
== Messwerte ==&lt;br /&gt;
Es gibt einen definierten Token. Jede Platine erneuert ihren Anteil des Tokens und entnimmt dem Token die benötigten Informationen (Messwerte). Was zuvor die MATLAB®-GUI durchgeführt hat, übernehmen nun die einzelnen Platinen. Dadurch ergibt sich unter den Platinen eine Aufgabenverteilung. Tabelle 1 zeigt eine Auflistung der Daten, die in den Datensatz des Tokens aufgenommen werden sollen. Jede nummerierte Position erhält einen Platz, je nach Bedarf an Größe. Der Token wird als Bytearray ausgeführt.&lt;br /&gt;
&lt;br /&gt;
== Token ==&lt;br /&gt;
=== Anzahl ===&lt;br /&gt;
Die Anzahl der im Kreis laufenden Tokens soll sich auf einen beschränken. Dieser wird erstmalig von der Messwertplatine erzeugt und anschließend „im Kreis“ gesendet, wobei jede MCU nur den für sie relevanten Teil liest bzw. auch umschreibt. Die Abtastrate des ADC (analog digital converter) gibt die Taktrate des Tokens vor. Durch die Wahl der ADC-Abtastrate wird daher die Kommunikationsgeschwindigkeit (Token/s) beeinflusst. Dieser ist der Flaschenhals und es ist eine langsame Steigerung der Taktrate vorzusehen, um mögliche Auswirkungen und Probleme in der Übertragung festzustellen.&lt;br /&gt;
&lt;br /&gt;
=== Struktur ===&lt;br /&gt;
Am Anfang befindet sich ein Startzeichen, um die Art des Tokens (Standard-, Start- oder Paniktoken; siehe unten), festzulegen. Anschließend folgt ein Datensatz und danach eine Prüfsumme. Der Datensatz ist so auszuführen, dass dieser einfach erweitert werden kann, um Erweiterungen zu ermöglichen (z.B. 2. Brühgruppeneinheit). Im Weiteren ist der Token möglichst kurz auszuführen. Der Token soll über eine einheitliche Länge verfügen. Der Token wird als bytearray angelegt und auch so empfangen. (dateneingang = bytearray(readIn(UART))) Datensatz: Jedem Messwert wird ein Bereich von 2 Byte als fester Platz im Token zugewiesen.&lt;br /&gt;
&lt;br /&gt;
=== Prüfsumme ===&lt;br /&gt;
Um die fehlerfreie Übertragung eines Tokens zu bestätigen, wird aus dem Datenblock des Tokens eine Prüfsumme gebildet und diese ans Ende des Tokens angehängt. Das verwendete Verfahren ist CRC-32.&lt;br /&gt;
&lt;br /&gt;
=== Standardtoken ===&lt;br /&gt;
Es ist erkennbar über das Startzeichen am Anfang und wird genutzt für den regelmäßigen Datenaustausch zwischen den MCUs. Starttoken: Es ist erkennbar über das Startzeichen am Anfang. Hierbei wird beim Einschalten der Espressomaschine die Betriebsbereitschaft der gesamten Kommunikation geprüft. Sowohl ob die Hardwareverbindung intakt ist als auch ob alle MCUs empfangen und senden können. Es gilt zu klären, welche MCU dies aussendet.&lt;br /&gt;
&lt;br /&gt;
=== Paniktoken ===&lt;br /&gt;
Es ist erkennbar über das Startzeichen am Anfang. Dies ist die Realisierung eines Not-Halts. Es sollen alle Prozesse augenblicklich gestoppt werden.&lt;br /&gt;
=== Fehlererkennung === &lt;br /&gt;
Wird das Token nicht innerhalb einer definierten Zeitspanne wieder am Empfang einer MCU erkannt, festgelegt über einen timer-Funktion, soll am Display eine Fehlermeldung ausgegeben werden. Erkennt eine Platine einen Fehler (aufgrund Timeout), werden Magnetventile geschlossen (stromlos geschaltet), die Heizungen und die Pumpen werden abgeschaltet, der Wert des Dosierventils Kaltwasser wird gespeichert. Es ist ein Fehlerspeicher im Grundkonzept vorgesehen.&lt;br /&gt;
&lt;br /&gt;
== Token Definition ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Tabelle 1: Tokeninhalt&lt;br /&gt;
|-&lt;br /&gt;
! Platine !! Byte-Nr !! Bits / Bit-Nr. !! Beschreibung !! Wertebereich !! Anmerkung&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;15&amp;quot; | Messplatine || 0,1 || 16 Bit || Leitwert || 0,2 - 20 S/cm || rowspan=&amp;quot;15&amp;quot; | 16 Bit im Token&lt;br /&gt;
dort wo diese Messwerte verarbeitet werden, werden sie mittels Kennlinie umgerechnet.&lt;br /&gt;
&lt;br /&gt;
Die csv-Datei der Kennlinie befindet sich auf der jeweiligen Platine.&lt;br /&gt;
&lt;br /&gt;
Der Tassenwärmer existiert nur 1x je Machine&lt;br /&gt;
|-&lt;br /&gt;
| 2,3 || 16 Bit || Boilerdruck || 0,5 - 4,5 V / 0 - 4 bar &lt;br /&gt;
|-&lt;br /&gt;
| 4,5 || 16 Bit || Brühgruppendruck (1. BG) || 0,5 - 4,5 / 0 - 12 bar &lt;br /&gt;
|-&lt;br /&gt;
| 6,7 || 16 Bit || Brühgruppendruck (2. BG) || 0,5 - 4,5 / 0 - 12 bar &lt;br /&gt;
|-&lt;br /&gt;
| 8,9 || 16 Bit || Wassereingangstemperatur&lt;br /&gt;
(ersatzweise Leitungsdruck)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 10,11 || 16 Bit || Boiler-NTC (1. BG) || Kennlinie &lt;br /&gt;
|-&lt;br /&gt;
| 12,13 || 16 Bit || Boiler-NTC (2. BG) || Kennlinie &lt;br /&gt;
|-&lt;br /&gt;
| 14,15 || 16 Bit || Tassenwärmer-NTC || Kennlinie &lt;br /&gt;
|-&lt;br /&gt;
| 16,17 || 16 Bit || Mischtemperatur-NTC (1. BG) || Kennlinie &lt;br /&gt;
|-&lt;br /&gt;
| 18,19 || 16 Bit || Mischtemperatur-NTC (2. BG) || Kennlinie &lt;br /&gt;
|-&lt;br /&gt;
| 20,21 || 16 Bit || Brühgruppen-NTC (1. BG) || Kennlinie &lt;br /&gt;
|-&lt;br /&gt;
| 22,23 || 16 Bit || Brühgruppen-NTC (2. BG) || Kennlinie &lt;br /&gt;
|-&lt;br /&gt;
| 24,25 || 16 Bit || Boilerheizung (Soll, 1. BG) || 8 Hz PWM 0 - 100 % &lt;br /&gt;
|-&lt;br /&gt;
| 26,27 || 16 Bit || Boilerheizung (Soll, 2. BG) || 8 Hz PWM 0 - 100 % &lt;br /&gt;
|-&lt;br /&gt;
| 28,29 || 16 Bit || Tassenwärmerheizung (Soll) || 8 Hz PWM 0 - 100 % &lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | SSR-Platine || 30,31 || 16 Bit || Position Schrittmotor Dosierventil 1. BG || 0 - 550 ||&lt;br /&gt;
|-&lt;br /&gt;
| 32,33 || 16 Bit || Position Schrittmotor Dosierventil 2. BG || 0 - 550 ||&lt;br /&gt;
|-&lt;br /&gt;
| Basisplatine || 34,35 || 16 Bit || Verstellwert Schrittmotor Dosierventil 1. BG || Integer mit Vorzeichen ||&lt;br /&gt;
|-&lt;br /&gt;
| || 36,37 || 16 Bit || Verstellwert Schrittmotor Dosierventil 2. BG || Integer mit Vorzeichen ||&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|16 Bit&lt;br /&gt;
|Pumpensollwert 1. BG&lt;br /&gt;
|0 - 4096&lt;br /&gt;
|entspricht 0 - 5000 mV bzw. 0 - 5000 U/min&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|16 Bit&lt;br /&gt;
|Pumpensollwert 2. BG&lt;br /&gt;
|0 - 4096&lt;br /&gt;
|entspricht 0 - 5000 mV bzw. 0 - 5000 U/min&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|8 Bit&lt;br /&gt;
|Durchflussrate 1. BG&lt;br /&gt;
|0 - 25 ml/s&lt;br /&gt;
|Integerwert in 1/10 ml/s, damit Wertebereich 0 - 250&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|16 Bit&lt;br /&gt;
|Durchflusscounts 1. BG&lt;br /&gt;
|0 - 65535&lt;br /&gt;
|je Count 1/39,9 ml, Überlauf muss unterbunden werden&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|8 Bit&lt;br /&gt;
|Durchflussrate 2. BG&lt;br /&gt;
|0 - 25 ml/s&lt;br /&gt;
|Integerwert in 1/10 ml/s, damit Wertebereich 0 - 250&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|16 Bit&lt;br /&gt;
|Durchflusscounts 2. BG&lt;br /&gt;
|0 - 65535&lt;br /&gt;
|je Count 1/39,9 ml, Überlauf muss unterbunden werden&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| rowspan=&amp;quot;9&amp;quot; |38&lt;br /&gt;
|&lt;br /&gt;
|Füllstandsbyte&lt;br /&gt;
|&lt;br /&gt;
| rowspan=&amp;quot;9&amp;quot; |Füllstände werden von den Füllstandsreglern auf der Basisplatine verarbeitet&lt;br /&gt;
Füllstand Abtropfschale True verhindert Pumpenansteuerung&lt;br /&gt;
Füllstand Boiler False verhindert Pumpenansteuerung&lt;br /&gt;
|-&lt;br /&gt;
| || 0 || Füllstand Boiler 1. BG || 0/1 &lt;br /&gt;
|-&lt;br /&gt;
| || 1 || Füllstand Boiler 2. BG || 0/1 &lt;br /&gt;
|-&lt;br /&gt;
| || 2 || Füllstand Tank Minimum || 0/1 &lt;br /&gt;
|-&lt;br /&gt;
| || 3 || Füllstand Tank Maximum || 0/1 &lt;br /&gt;
|-&lt;br /&gt;
| || 4 || Füllstand Abtropfschale || 0/1 &lt;br /&gt;
|-&lt;br /&gt;
| || 5 || || 0/1 &lt;br /&gt;
|-&lt;br /&gt;
| || 6 || || 0/1 &lt;br /&gt;
|-&lt;br /&gt;
| || 7 || || 0/1 &lt;br /&gt;
|-&lt;br /&gt;
| || rowspan=&amp;quot;9&amp;quot; | 39 || || Magnetventile Byte 1 || || rowspan=&amp;quot;9&amp;quot; | Magnetventile Y101 bis Y113 gehören zur 1. BG&lt;br /&gt;
Y113 ist der Dampfhahn&lt;br /&gt;
Y214 bis Y222 gehören zur 2. BG &lt;br /&gt;
|-&lt;br /&gt;
| || 0 || Y101 || 0/1 &lt;br /&gt;
|-&lt;br /&gt;
| || 1 || Y102 || 0/1 &lt;br /&gt;
|-&lt;br /&gt;
| || 2 || Y103 || 0/1 &lt;br /&gt;
|-&lt;br /&gt;
| || 3 || Y104 || 0/1 &lt;br /&gt;
|-&lt;br /&gt;
| || 4 || Y105 || 0/1 &lt;br /&gt;
|-&lt;br /&gt;
| || 5 || Y106 || 0/1 &lt;br /&gt;
|-&lt;br /&gt;
| || 6 || Y107 || 0/1 &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|7&lt;br /&gt;
|Y108&lt;br /&gt;
|0/1&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| rowspan=&amp;quot;9&amp;quot; |40&lt;br /&gt;
|&lt;br /&gt;
|Magnetventil Byte 2&lt;br /&gt;
|&lt;br /&gt;
| rowspan=&amp;quot;9&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|Y109&lt;br /&gt;
|0/1&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|Y110&lt;br /&gt;
|0/1&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|2&lt;br /&gt;
|Y111&lt;br /&gt;
|0/1&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|3&lt;br /&gt;
|Y112&lt;br /&gt;
|0/1&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|4&lt;br /&gt;
|Y113&lt;br /&gt;
|0/1&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|5&lt;br /&gt;
|Y214&lt;br /&gt;
|0/1&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|6&lt;br /&gt;
|Y215&lt;br /&gt;
|0/1&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|7&lt;br /&gt;
|Y216&lt;br /&gt;
|0/1&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| rowspan=&amp;quot;9&amp;quot; |41&lt;br /&gt;
|&lt;br /&gt;
|Magnetventil Byte 3&lt;br /&gt;
|&lt;br /&gt;
| rowspan=&amp;quot;9&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|Y217&lt;br /&gt;
|0/1&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|Y218&lt;br /&gt;
|0/1&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|2&lt;br /&gt;
|Y219&lt;br /&gt;
|0/1&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|3&lt;br /&gt;
|Y220&lt;br /&gt;
|0/1&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|4&lt;br /&gt;
|Y221&lt;br /&gt;
|0/1&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|5&lt;br /&gt;
|Y222&lt;br /&gt;
|0/1&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|6&lt;br /&gt;
|&lt;br /&gt;
|0/1&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|7&lt;br /&gt;
|&lt;br /&gt;
|0/1&lt;br /&gt;
|-&lt;br /&gt;
|Displayplatine&lt;br /&gt;
|42,43&lt;br /&gt;
|16&lt;br /&gt;
|Bezugswassertemperatur 1. BG&lt;br /&gt;
|30  - 98 °C&lt;br /&gt;
|Integerwert in 1/10 °C, damit Wertebereich 300 bis 980&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|44,45&lt;br /&gt;
|16&lt;br /&gt;
|Bezugswassertemperatur 2. BG&lt;br /&gt;
|30  - 98 °C&lt;br /&gt;
|Integerwert in 1/10 °C, damit Wertebereich 300 bis 980&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|46,47&lt;br /&gt;
|16&lt;br /&gt;
|Bezugsmenge 1. BG&lt;br /&gt;
|20 - 300 g bzw. ml&lt;br /&gt;
|Integerwert in 1/10 ml, damit Wertebereich 200 bis 3000&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|48,49&lt;br /&gt;
|16&lt;br /&gt;
|Bezugsmenge 2. BG&lt;br /&gt;
|20 - 300 g bzw. ml&lt;br /&gt;
|Integerwert in 1/10 ml, damit Wertebereich 200 bis 3000&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|50,51&lt;br /&gt;
|16&lt;br /&gt;
|Bezugszeit 1. BG&lt;br /&gt;
|0 - 120 Sekunden&lt;br /&gt;
|Integerwert in 1/10 Sekunde, damit Wertebereich 0 bis 1200&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|52,53&lt;br /&gt;
|16&lt;br /&gt;
|Bezugszeit 2. BG&lt;br /&gt;
|0 - 120 Sekunden&lt;br /&gt;
|Integerwert in 1/10 Sekunde, damit Wertebereich 0 bis 1200&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|54,55&lt;br /&gt;
|16&lt;br /&gt;
|Preinfusionszeit 1. BG&lt;br /&gt;
|0 - 120 Sekunden&lt;br /&gt;
|Integerwert in 1/10 Sekunde, damit Wertebereich 0 bis 1200&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|56,57&lt;br /&gt;
|16&lt;br /&gt;
|Preinfusionszeit 2. BG&lt;br /&gt;
|0 - 120 Sekunden&lt;br /&gt;
|Integerwert in 1/10 Sekunde, damit Wertebereich 0 bis 1200&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|58&lt;br /&gt;
|8&lt;br /&gt;
|Abschalttemperatur Entschichtung&lt;br /&gt;
|90 - 98 °C&lt;br /&gt;
|Integerwert in °C&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|59&lt;br /&gt;
|8&lt;br /&gt;
|Grenztemperatur&lt;br /&gt;
|135 - 150 °C&lt;br /&gt;
|Integerwert in °C&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|60&lt;br /&gt;
|8&lt;br /&gt;
|Sollwert Boilerdruck&lt;br /&gt;
|1100 - 1500 mbar&lt;br /&gt;
|Integerwert in 10 mbar, damit Wertebereich 110 bis 150&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|61&lt;br /&gt;
|8&lt;br /&gt;
|Stellung Vertikalhebel&lt;br /&gt;
|0 - 180 Grad&lt;br /&gt;
|Integerwert&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| rowspan=&amp;quot;9&amp;quot; |62&lt;br /&gt;
|&lt;br /&gt;
|Maschinenstatus Byte 1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|Mischerstatus 1. BG&lt;br /&gt;
|0/1&lt;br /&gt;
|True = Mischtemperatur erreicht&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|Mischerstatus 2. BG&lt;br /&gt;
|0/1&lt;br /&gt;
|True = Mischtemperatur erreicht&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|2&lt;br /&gt;
|Entschichtung&lt;br /&gt;
|0/1&lt;br /&gt;
|True = Entschichtung aktiv&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|3&lt;br /&gt;
|Handhebelmodus&lt;br /&gt;
|0/1&lt;br /&gt;
|True = aktiv&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|4&lt;br /&gt;
|Rezepteingabe&lt;br /&gt;
|0/1&lt;br /&gt;
|True = aktiv&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|5&lt;br /&gt;
|Wartungsmodus&lt;br /&gt;
|0/1&lt;br /&gt;
|True = aktiv&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|6&lt;br /&gt;
|Schrittmotor Dosierventil Flag&lt;br /&gt;
|0/1&lt;br /&gt;
|True = Schrittmotor für Dosierventil Kaltwasser hat ursprüngliche Position erreicht (Teil der Initialisierung)&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|7&lt;br /&gt;
|&lt;br /&gt;
|0/1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| rowspan=&amp;quot;9&amp;quot; |63&lt;br /&gt;
|&lt;br /&gt;
|Maschinenstatus Byte 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|Kaffeebezug 1. BG&lt;br /&gt;
|0/1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|Kaffeebezug 1. BG&lt;br /&gt;
|0/1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|2&lt;br /&gt;
|Teewasserbezug&lt;br /&gt;
|0/1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|3&lt;br /&gt;
|Dampfbezug&lt;br /&gt;
|0/1&lt;br /&gt;
|Bewirkt 200 mbar Reduzierung Sollwert Boilerdruck&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|4&lt;br /&gt;
|&lt;br /&gt;
|0/1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|5&lt;br /&gt;
|Aufheizen&lt;br /&gt;
|0/1&lt;br /&gt;
|True = Aufheizphase, False = Betriebsbereit&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|6&lt;br /&gt;
|Systemstart&lt;br /&gt;
|0/1&lt;br /&gt;
|True = Systemstart&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|7&lt;br /&gt;
|Sicherheitsfunktion&lt;br /&gt;
|0/1&lt;br /&gt;
|True = Sicherheitsfunktion aktiv&lt;br /&gt;
|}&lt;br /&gt;
= Peter Vogginger,19.10.2025 - NUCLEO_H743ZI2 =&lt;br /&gt;
Kommunikation als Token-Ring oder in Stern-Topologie &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der Wechsel der Kommunikation von dem geplanten Token-Ring-Verfahren, hin zur Stern-Topologie erfordert 3 serielle Schnittstellen. Dies ist mit der aktuellen Konstellation, 4 MCUs (Basisplatine, SSR-Platine, Messplatine und Displayplatine) mit jeweils einem Raspberry Pi Pico RP2040, nicht möglich. An einem RP2040 stehen 2 serielle Schnittstellen zur Verfügung. &lt;br /&gt;
&lt;br /&gt;
Der Wechsel hin zu einem größeren Board, dem NUCLEO-H743ZI2 MCU-Board mit einer STM32H7 MCU. Der Wechsel würde Vorteile bieten:  &lt;br /&gt;
* weniger Elektronik in der Peripherie &lt;br /&gt;
* ADCs ausreichend am Board &lt;br /&gt;
* DACs ausreichend am Board &lt;br /&gt;
* 8 serielle Schnittstellen &lt;br /&gt;
* viel mehr nutzbare PINs &lt;br /&gt;
&lt;br /&gt;
Die Vielzahl an Anschlüssen bietet die Möglichkeit, von aktuell 3 Platinen (und 3 MCUs) auf 1 Platine mit einem MCU-Board zu reduzieren. &lt;br /&gt;
&lt;br /&gt;
Allerdings bietet diese Umstellung nicht nur Vorteile.  &lt;br /&gt;
&lt;br /&gt;
Nachteilig wäre, dass bei jedem MicroPython Update ein eigenes Derivat erstellt werden müsste, da default die ADC auf 12-Bit Auflösung in MicroPython definiert sind. Aktuell existiert ein Derivat mit 16-Bit ADC Konfiguration (NUCLEO_H743ZI2_v1-27-0_ADC_16BIT.hex), dies basiert auf der MicroPython Version v1-27-0. &lt;br /&gt;
&lt;br /&gt;
Allerdings ist die Verfügbarkeit von NUCLEO-Boards immer zeitweise nicht gegeben. Diesbezüglich wäre ein Platinenlayout inkl. den Bauelementen für MCU und der direkten Peripherie erforderlich. Was aber erst nach der Inbetriebnahme der beiden Prototypen-Maschinen sinnvoll erscheint. Die Kosten dieser externen Entwicklung werden auf 50 t€ bis 100 t€ geschätzt. &lt;br /&gt;
&lt;br /&gt;
Aufgrund der aktuellen Situation wird bis auf Weiteres die Verwendung von Raspberry Pi Pico verfolgt.&lt;br /&gt;
&lt;br /&gt;
= Armin Rohnen, 16.10.2025 =&lt;br /&gt;
Im Zuge der Analyse für die zweite Auflage von MATLAB® meets MicroPython ist das Thema der UART-Kommunikation tiefer betrachtet worden. &lt;br /&gt;
&lt;br /&gt;
Die Kommunikation ist mit Sorgfalt zu programmieren. Durch Lesen und Schreiben auf die UART-Schnittstelle kann die MCU blockiert und dauerhaft an der Ausführung anderer Programmteile gehindert werden. Die Problematik ist in Abschnitt 3.13 der 2. Auflage MATLAB® meets MicroPython beschrieben.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Armin Rohnen, 11.04.2024 =&lt;br /&gt;
[[Datei:20250322 Konzept.png|thumb|900px|gerahmt|zentriert|alternativtext=Armin Rohnen, Kommunikationskonzept mit Token|Armin Rohnen, Kommunikationskonzept mit Token]]&lt;br /&gt;
Seitens des Platinenlayouts für die Steuerungselektronik wurden die jeweiligen PINs der ersten UARTSchnittstelle für die spätere Inter-Kommunikation der Steuerung herausgelegt. Die Raspberry Pi Pico MCU verfügt über einen jeweils 32 Byte großen Eingangs- bzw. Ausgangspuffer für die UART-Schnittstelle. Dieser soll genutzt werden um die Kommunikation zu ermöglichen. Die jeweilige Kommunikation selbst wird dadurch auf diese 32 Byte begrenzt. Hardwareseitig ist es Denkbar, dass je MCU zwei weitere PINs für die Kommunikation verwendet werden. Lediglich auf der SSR-Platine ist dazu ein Eingriff ins Platinenlayout erforderlich. Dieser kann bei einem Prototypen handwerklich durchgeführt werden. Die zwei zusätzlichen PINs für die Kommunikation (GP04, GP05 auf der Basisplatine, GP03, GP04 auf der SSR-Platine, GP06, GP07 auf der Messplatine) fungieren als eingehender und ausgehender Interrupt, so dass die Kommunikation als ISR programmiert werden kann.&lt;br /&gt;
&lt;br /&gt;
Angelehnt an das 1984 von IBM eingeführte Token Ring Network soll eine „im Kreis laufende“ Kommunikation aufgebaut werden. Ausgehend von der Messplatine wird ein Token über die einzelnen Platinen durchgereicht (Abbildung). Unter Berücksichtigung der Kommunikationsregeln können so eine beliebige Anzahl an Steuerungsplatinen in den Kommunikationsring eingebunden werden. Allerdings sollte dabei die Reihenfolge beachtet werden.&lt;br /&gt;
&lt;br /&gt;
Die Messplatine sendet über UART am Ende jedes gültigen Messwertsatzes einen oder mehrere Token an die Basisplatine. In den Token befinden sich die aktuellen Messwerte und alle anderen „im Kreis laufende“ Daten. Beim ersten Senden werden hier u.u. 0-Werte verwendet, bis dass der erste Token wieder bei der Messplatine angekommen ist. Ggf. unterbricht die Messplatine auch das Senden des Token bzw. der ersten Token-Serie, bis zum ersten Eintreffen eines Tokens. Die Messplatine ist damit der Taktgeber der Kommunikation. Konkret erfolgt dies in Abhängigkeit der Abtastrate des AD-Wandlers.Wenn ein Token versendet ist, wechselt die Messplatine den Logikzustand des ausgehenden Interrupt-PINs. Bevor der nächste Token versendet wird, wird wieder der Ausgangslogikzustand des Interrupt-PINs hergestellt. Sobald die Messplatine auch einen Token empfangen hat wird auch der PWM-Stellwert für das Boilerheizelement (aus Regler Boilerdruck) und für den Tassenwärmer im Token übermittelt.&lt;br /&gt;
&lt;br /&gt;
Von der Messplatine erhält die Basisplatine den Token. Die UART-Schnittstelle wird ausgelesen, wenn am eingehenden Interrupt-PIN der Logikzustand wechselt. Die Basisplatine tauscht im Token die Daten für die eigenen Messwerte, die Schaltzustände der Tasten, die Schaltzustände der Magnetventile usw. aus und sendet den Token an die SSR-Platine weiter. Ist der Token versendet, wechselt die Basisplatine den Logikzustand des ausgehenden Interrupt-PINs und arbeitet in gleicher Logik weiter wie die Messplatine.&lt;br /&gt;
&lt;br /&gt;
Die SSR-Platine bekommt von der Basisplatine den Token durchgereicht. Die SSR-Platine wertet den Token lediglich aus, nimmt keine Veränderungen darin vor und reicht diesen dann weiter. Nach der SSR-Platine kann eine Display-Platine nachgeschaltet werden. Diese wertet die Informationen im Token aus und visualisiert diese bzw. stellt die Informationen über WLAN zur Verfügung. Im Falle eines Touch-Displays werden die Bytes für die Schaltzustände der Tasten ausgetauscht. Abschließend erhält die Messplatine wieder den Token und übernimmt die relevanten Informationen daraus in den neu zu sendenden Token.&lt;br /&gt;
&lt;br /&gt;
Anstelle des eingehenden und ausgehenden Interrupt-PINs kann u.u. auch die MicroPython-Funktionalität uart.irq verwendet werden. Diese ruft eine ISR auf, sobald Daten im EIngangspuffer der UART-Schnittstelle eingegangen sind.&lt;br /&gt;
&lt;br /&gt;
Das Konzept ist auszugestalten und der bzw. die Token sind exakt zu definieren. Dabei ist auch zu definieren (und zu erproben) wie die dann übergeordnete MATLAB®-GUI die Daten für die Visualisierung erhält. Der einzelne Token darf aufgrund der Limitierung durch den UART-Puffer des Raspberry Pi Picos 32 Byte nicht überschreiten. Als maximale Datenrate sind 115200 Baud möglich, was unter Berücksichtigung von START / STOP-Bits und Paritätsbit eine maximale Kommunikationsrate von 11520 Byte je Sekunde ergibt. Damit wären 360 jeweils 32 Byte lange Token in der Kommunikation möglich. Nach aktuellem Stand der Recherchen überschreitet die Datenmenge für die Kommunikation die 32 Byte Grenze, so dass mit mehreren Token gearbeitet werden muss. Jeder Token weist im ersten Byte eine Token-Nr auf, so dass der Token zweifelsfrei identifiziert werden kann. Alle Token müssen die gleiche Länge in Bytes aufweisen. Für zukünftige Erweiterungen sind Leer-Bytes in den Token vorhanden. Jeder der 4 Token muss die gleiche Länge in Bytes aufweisen.&lt;br /&gt;
&lt;br /&gt;
Getaktet wird die Kommunikation durch die Datenerfassung der Messplatine. Aufgrund der jeweils ungültigen ersten Wandlung eines Messkanals ist eine maximale Abtastrate von 430 Messwerten je Sekunde aufgeteilt auf acht Messkanäle, was ca. 53 Datensätze je Sekunde ergibt. Bei einer Abtastrate von 475 SPS ergeben sich 30 gültige Messdatensätze je Sekunde.Wird nach jedem zweiten gültigen Messkanal ein 27 Byte langer Token von der Messplatine gesendet, dann ergibt dies eine Inter-Kommunikation zwischen den MCUs von 120 Token bzw. 3240 Byte je Sekunde, was unter der als Maximum angesehenen Datenrate liegt. Selbst bei einer Verlängerung der Token auf 32 Byte würde lediglich 1/3 des theoretisch möglichen Datentransfers durchgeführt.&lt;/div&gt;</summary>
		<author><name>Peter Vogginger</name></author>
	</entry>
	<entry>
		<id>http://www.institut-fuer-kaffeetechnologie.de/Wiki/index.php?title=Systemsoftware&amp;diff=4763</id>
		<title>Systemsoftware</title>
		<link rel="alternate" type="text/html" href="http://www.institut-fuer-kaffeetechnologie.de/Wiki/index.php?title=Systemsoftware&amp;diff=4763"/>
		<updated>2025-11-17T18:04:32Z</updated>

		<summary type="html">&lt;p&gt;Peter Vogginger: /* ToDo-Liste: MCUs - Verlagerung der Regelkreise aus der MATLAB®-GUI auf die Mikrocontroller der Steuerungselektronik */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;htmltag tagname=&amp;quot;img&amp;quot; src=&amp;quot;http://vg04.met.vgwort.de/na/4531f1734b324b72b2d7e566cdf639f0&amp;quot;  width=&amp;quot;1&amp;quot; height=&amp;quot;1&amp;quot; alt=&amp;quot;&amp;quot;&amp;gt;&amp;lt;/htmltag&amp;gt;&lt;br /&gt;
[[Datei:Breites Logoband.png|mini|zentriert|hochkant=2.5]]&amp;lt;br&amp;gt;&lt;br /&gt;
Die Systemsoftware lässt sich nicht ohne die Beachtung der Systemelektronik erstellen.&lt;br /&gt;
&lt;br /&gt;
Für die Systemsoftware wurde ein mehrstufiger Entwicklungsprozess definiert:&lt;br /&gt;
# Nutzung einer MCU auf der MicroPython verwendet werden kann. Dies ist durch das STM32F411 nucleo Board der Basiselektronik bzw. durch den Raspberry Pi Pico der Multi-MCU-Elektronik gegeben.&lt;br /&gt;
# Auf der MCU werden lediglich die elementaren Grundfunktionen (GPIO schalten und erfassen, Messwert erfassen, PWM Ausgeben, Sollwert ausgeben, etc.) realisiert und über eine MicroPython zu MATLAB® Schnittstelle [41] wird die Funktionalität in einer MATLAB® GUI hergestellt.&lt;br /&gt;
# Die Softwareentwicklung startet mit der labortechnischen Espressomaschine und wird auf die weiteren Projekte schrittweise transportiert. Dazu ist die Maschinenelektronik gleich zu halten und es sind die gleichen Anschluss-Pins zu verwenden.&lt;br /&gt;
# Nach Abschluss der Testphase der MATLAB® Bedienung wird schrittweise die Betriebssoftware in MicroPython auf der MCU implementiert, so dass am Ende dieses Prozessschrittes die MATLAB®-Verbindung lediglich für weiterführende Datenerfassung und grafische Darstellungen verwendet wird, welche nicht mit dem Display der Maschine möglich ist oder dort nicht dargestellt werden soll.&lt;br /&gt;
# Ob eine Portierung des MicroPython-Codes nach Microcontroller C durchgeführt wird, ist derzeit nicht entschieden.&lt;br /&gt;
&lt;br /&gt;
Es wurden mehrere, die Softwareentwicklung vorbereitende FMEAs durchgeführt.  Die hierdurch entstandenen Dokumentation befinden sich in der Dokumentationsauflistung. Im weiteren wurde eine Projektarbeit zur Konzeptfindung für die Badienung durchgeführt. Auch die hierdurch entstandenen, teilweise auf die FMEA aufbauenden Dokumente befinden sich in der Dokumentationsliste.&lt;br /&gt;
&lt;br /&gt;
= Projektdokumentationen und Beschreibungen =&lt;br /&gt;
* [[:Datei:20210228 Konzept Systemelektronik.pdf|Konzeptbeschreibung Systemelektronik]]&lt;br /&gt;
* [[:Datei:20210605 Workflow Embedded Systems.pdf|Workflow Embedded Systems]]&lt;br /&gt;
* [[:Datei:20200521 Bericht1 NerminArbi.pdf|Funktionsanalyse Boilerbefüllung, Tassenwärmung, Milchschäumen]]&lt;br /&gt;
* [[:Datei:20200518 Bericht halbauto Entkalkung Egger Alexander.pdf|Funktionsanalyse zur halbautomatischen Entkalkung]]&lt;br /&gt;
* [[:Datei:20200518 V0 4 Bericht Funktionsanalyse Rückspulung-Spulung Sladoje.pdf|Funktionsanalyse Rückspülung und Spülung]]&lt;br /&gt;
* [[:Datei:20200521 Bericht Espresso-Teewasserbezug Urbin.pdf|Funktionsanalyse Espresso und Teewasserbezug]]&lt;br /&gt;
* [[:Datei:20200522 Bericht Funktionsanalyse Energieeffizienz Egger Alexander.pdf|Funktionsanalyse Energieeffizienz]]&lt;br /&gt;
* [[:Datei:20200521 V2 Bericht Funktionsanalyse Bedienung Sladoje.pdf|Funktionsanalyse Bedienung]]&lt;br /&gt;
* [[:Datei:20200525 Bericht Abbildung aller Maschinen Urbin V2.pdf|Funktionsanalyse Abbildung aller Maschinen]]&lt;br /&gt;
* [[:Datei:20200609 Bericht Fehleranalyse Entschichtung.pdf|Fehleranalyse Entschichtung]]&lt;br /&gt;
* [[:Datei:20200610 Fehleranalyse Dampf Brühgruppe Sladoje.pdf|Fehleranalyse Brühgruppe und Dampfbezug]]&lt;br /&gt;
* [[:Datei:20200613 Bericht Fehleranalyse Mischer;Magnetventile V2.pdf|Fehleranalyse Mischer und Magnetventile]]&lt;br /&gt;
* [[:Datei:20200611 Bericht3 NerminArbi.pdf|Fehleranalyse Boiler]]&lt;br /&gt;
* [[:Datei:20200705 Dichtheitsprüfung.pdf|Dichtheitsprüfung]]&lt;br /&gt;
* [[:Datei:20200704 Massnahmen Urbin.pdf|Prüfkonzepte Magnetventile und Mischer]]&lt;br /&gt;
* [[:Datei:20200701 Maßnahmenanalyse NerminArbi.pdf|Maßnahmen Boiler]]&lt;br /&gt;
* [[:Datei:20200628 Maßnahmen Entschichtung zweiter Stand.pdf|Maßnahmen Entschichtung]]&lt;br /&gt;
* [[:Datei:20200627 Maßnahmenkonzept Brühguppe Dampf Sladoje.pdf|Maßnahmen Brühgruppe und Dampf]]&lt;br /&gt;
* [[:Datei:20200707_FMEA.xlsx|FMEA Tabelle]]&lt;br /&gt;
* [[:Datei:20201207_Bedienkonzept.pptx|PPT Simulation des Bedienkonzeptes]]&lt;br /&gt;
* [[:Datei:20210207_Bedienkonzept_Funktionsliste.xlsx|Bedienkonzept Funktionsliste]]&lt;br /&gt;
* [[:Datei:20210219_Bedienkonzept_Projektdokumentation.pdf|Bedienkonzept Projektdokumentation]]&lt;br /&gt;
* [[:Datei:HMProjektBedienoberflaecheEspresso.zip|MATLAB® GUI]]&lt;br /&gt;
* [[Entwicklung Systemsoftware SoSe2022]]&lt;br /&gt;
* [[Entwicklung Systemsoftware SoSe2023]]&lt;br /&gt;
* [[Mikrocontroller Programmierung in MicroPython WiSe 2025/26]]&lt;br /&gt;
&lt;br /&gt;
= [http://www.institut-fuer-kaffeetechnologie.de/Intern/index.php?title=Programmcode Programmcode] =&lt;br /&gt;
Aktueller Programmcode und Änderungsdokumentation ab Jan 2023&lt;br /&gt;
&lt;br /&gt;
= [http://www.institut-fuer-kaffeetechnologie.de/Intern/index.php?title=Software-Bugs Software-Bugs] =&lt;br /&gt;
&lt;br /&gt;
= ToDo-Liste(n) Systemsoftware =&lt;br /&gt;
&lt;br /&gt;
== Prioritätsangabe ==&lt;br /&gt;
Prio 1 - Abarbeitung zeitnah erforderlich&amp;lt;br&amp;gt;&lt;br /&gt;
Prio 2 - Abarbeitung erforderlich&amp;lt;br&amp;gt;&lt;br /&gt;
Prio 3 - Abarbeitung kann warten&amp;lt;br&amp;gt;&lt;br /&gt;
Prio 99 - Abarbeitung erfordert Vorarbeiten&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Status ==&lt;br /&gt;
10 - Erfasst&amp;lt;br&amp;gt;&lt;br /&gt;
30 - in Bearbeitung&amp;lt;br&amp;gt;&lt;br /&gt;
50 - Lösung definiert&amp;lt;br&amp;gt;&lt;br /&gt;
70 - in Umsetzung&amp;lt;br&amp;gt;&lt;br /&gt;
90 - Umsetzung abgeschlossen&amp;lt;br&amp;gt;&lt;br /&gt;
99 - Abbruch per Beschluss (Dokumentation dazu erforderlich)&amp;lt;br&amp;gt;&lt;br /&gt;
100 - Maßnahme bestätigt&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ToDo-Liste: Mechatronische Inbetriebnahme Glasboilermaschine =&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Arbeitspaket !! Wer !! Prio !! Status !! WV&lt;br /&gt;
|-&lt;br /&gt;
| [[Fehlerbehebungen]] || || 1 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Startprozedure]] || ||  1 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Tankfüllstandsregelung]] || || 1 || 10 ||&lt;br /&gt;
|- &lt;br /&gt;
| [[Boilerfüllstandsregelung]] || || 1 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Boilerdruckregelung]] || || 1 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Mischwassertemperaturregelung]] || || 1 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Durchflussregelung]] || || 1 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Kaffeebezug]] || || 2 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Teebezug]] || || 1 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Temperatureinstellung über Vertikalhebel]] || || 1 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Simulation Handhebelmaschine]] || || 1 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Flush/Rückspülreinigung]] || || 1 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| || || || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= ToDo-Liste: MCUs - Verlagerung der Regelkreise aus der MATLAB®-GUI auf die Mikrocontroller der Steuerungselektronik =&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Arbeitspaket !! Wer !! Prio !! Status !! WV&lt;br /&gt;
|-&lt;br /&gt;
| [[Kommunikation per UART|UART Kommunikation zwischen den einzelnen MCUs]] || Peter Vogginger|| 1 || 30 || 20.11.2025&lt;br /&gt;
|-&lt;br /&gt;
| [[Mehrkernnutzung und/oder Multitasking]] || Peter Vogginger||  1 || 30 ||04.12.2025&lt;br /&gt;
|-&lt;br /&gt;
| [[Startprozedur]]&lt;br /&gt;
|Philipp Schiebel&lt;br /&gt;
|1&lt;br /&gt;
|30&lt;br /&gt;
|20.11.2025&lt;br /&gt;
|-&lt;br /&gt;
| [[Verlagerung des Füllstandsreglers auf das Basisboard]] || Philipp Schiebel|| 1 || 30 || 13.11.2025&lt;br /&gt;
|- &lt;br /&gt;
| [[Verlagerung der Boilerdruckregelung auf die Messplatine]] || Philipp Schiebel|| 1 || 30 ||  	 20.11.2025&lt;br /&gt;
|-&lt;br /&gt;
| [[Verlagerung des Mischtemperaturreglers auf das Basisboard]] || Philipp Schiebel|| 1 || 10 || 27.11.2025&lt;br /&gt;
|-&lt;br /&gt;
| [[Verlagerung des Durchflussreglers auf das Basisboard]] || Philipp Schiebel|| 1 || 10 ||  	 27.11.2025&lt;br /&gt;
|-&lt;br /&gt;
| [[Erstellung der Funktionssteuerung - Preinfusion auf dem Basisboard]] || || 2 || 10 || &lt;br /&gt;
|-&lt;br /&gt;
| [[Erstellung der Funktionssteuerung - Kaffeebezug auf dem Basisboard]] || || 1 || 10 || &lt;br /&gt;
|-&lt;br /&gt;
| [[Erstellung der Funktionssteuerung - Wasserbezug auf dem Basisboard]] || || 1 || 10 || &lt;br /&gt;
|-&lt;br /&gt;
| [[Erstellung der Funktionssteuerung - Dampfbezug auf dem Basisboard]] || || 1 || 10 || 	 &lt;br /&gt;
|-&lt;br /&gt;
| [[Erstellung der Funktionssteuerung - Spülen auf dem Basisboard]] || || 1 || 10 ||  &lt;br /&gt;
|-&lt;br /&gt;
| [[Erstellung der Funktionssteuerung - Grundreinigung auf dem Basisboard]] || || 1 || 10 ||  &lt;br /&gt;
|-&lt;br /&gt;
| [[Integration eines Displays mit Touchfunktion]] || || 1 || 30 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Integration eines Vertikalhebels]] || || 1 || 30 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Visualisierung und Interaktion über die MATLAB®-GUI]] || || 1 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Visualisierung und Interaktion über eine WEB-Anwendung]] || || 1 || 10 ||  &lt;br /&gt;
|-&lt;br /&gt;
| [[Maschinensimulator]] || alle|| 1 || 30 ||13.11.2025&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= ToDo-Liste: Allgemeines =&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Arbeitspaket !! Wer !! Prio !! Status !! WV&lt;br /&gt;
|-&lt;br /&gt;
| [[Sicherheitsfunktionen]] || || 99 || 50 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[ Übersicht über verbaute Aktorik und Sensorik in Tabellenform]] || || 2 || 90 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Stromsparmodus]] || || 99 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| || || || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= ToDo-Liste: MCUs - Hardwarenahe Software =&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Arbeitspaket !! Wer !! Prio !! Status !! WV&lt;br /&gt;
|-&lt;br /&gt;
| [[Grundfunktionen der MCU und mehrere MCUs]] || || || 100 ||&lt;br /&gt;
|-	&lt;br /&gt;
| Basisboard: [[Schalten Magnetventile (Labor) STM32-Basisboard]] MATLAB®GUI || || || 100&lt;br /&gt;
|-&lt;br /&gt;
| Basisboard: [[Pumpenansteuerung Basisboard Multi-MCU]] || || || 100 ||&lt;br /&gt;
|- 	 &lt;br /&gt;
| Basisboard: [[Schrittmotorsteuerungen Basisboard Multi-MCU]] || || || 100 ||&lt;br /&gt;
|-&lt;br /&gt;
| Basisboard: [[Tastenerkennung Basisboard Multi-MCU]] || || 1 || 10 || &lt;br /&gt;
|- 	 &lt;br /&gt;
| Basisboard: [[Füllstandserkennung Basisboard Multi-MCU]] || || || 100 ||&lt;br /&gt;
|- 	 &lt;br /&gt;
| Basisboard: [[Durchflussmessung Basisnoard Multi-MCU]] || || || 100 ||&lt;br /&gt;
|- 	  	 	  	 &lt;br /&gt;
| SSR-Platine: [[Schalten Magnetventile SSR-Platine Multi-MCU]] || || || 100 ||&lt;br /&gt;
|- 	 &lt;br /&gt;
| SSR-Platine: [[Schrittmotorsteuerungen SSR-Platine Multi-MCU]] || || || 100 ||&lt;br /&gt;
|-&lt;br /&gt;
| Messplatine: [[Messdatenerfassung Multi-MCU]] || || || 100 ||&lt;br /&gt;
|-&lt;br /&gt;
| || || || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= ToDo-Liste der Grundlagenprogrammierung - MATLAB®-Funktionen und GUI =&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Arbeitspaket !! Wer !! Prio !! Status !! WV&lt;br /&gt;
|-&lt;br /&gt;
| [[MATLAB®-GUI Start der App]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[MATLAB®-GUI Initialisierung Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[MATLAB®-GUI Schalten Magnetventile]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[MATLAB®-GUI Datensicherung]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Messwerte erfassen Multi-MCU]] || || || ||&lt;br /&gt;
|- &lt;br /&gt;
| [[Pumpenansteuerung Multi-MCU]] || || || ||&lt;br /&gt;
|- &lt;br /&gt;
| [[Füllstandsregler Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Regler Boilerdruck Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Mischregler Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Durchflussregler Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Misch-Durchfluss Kaskadenregelung Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Preinfusion Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[einfacher Kaffeebezug Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Kaffeebezug Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Wasserbezug Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Dampfbezug Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Spülvorgänge Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Grundreinigung Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Tastenbedienung Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Display Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Glasboiler Abtropfwanne]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Schrittmotorensteuerung Bypass]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Schrittmotorensteuerung Mischer]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Schrittmotorensteuerung Brühgruppendrossel]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Adaption an Multi-MCU - Neuprogrammierung MATLAB® GUI]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| Dokumentation der Software mit STM32-Elektronik. &amp;lt;br&amp;gt;Ein Betrieb dieser wird nicht mehr weiter verfolgt. || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Messwerte erfassen (Labor)]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Pumpenansteuerung (Labor)]] || ||  || || &lt;br /&gt;
|-&lt;br /&gt;
| [[Füllstandsregler (Labor)]] || ||  || || &lt;br /&gt;
|-&lt;br /&gt;
| [[Regler Boilerdruck (Labor)]] || ||  || ||  &lt;br /&gt;
|-&lt;br /&gt;
| [[Mischregler (Labor)]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Durchflussregler (Labor)]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[einfacher Kaffeebezug (Labor)]] || ||  || ||  &lt;br /&gt;
|-&lt;br /&gt;
| [[Kaffeebezug (Labor)]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Wasserbezug (Labor)]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Dampfbezug]] || ||  || ||  &lt;br /&gt;
|-&lt;br /&gt;
| [[Spülvorgänge (Labor)]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Tastenbedienung (Labor)]] || || || ||  &lt;br /&gt;
|-&lt;br /&gt;
| [[Anpassungen für Schrittmotorensteuerung]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| || || || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= ToDo-Liste: APP =&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Arbeitspaket !! Wer !! Prio !! Status !! WV&lt;br /&gt;
|-&lt;br /&gt;
| [[APP - Konzept]] || || 2 || 10 || &lt;br /&gt;
|- 	 &lt;br /&gt;
| [[Messwerte erfassen APP]] || || 99 || 10 || &lt;br /&gt;
|-&lt;br /&gt;
| [[Preset / Profilverwaltung]] || || 99 || 10 || &lt;br /&gt;
|-&lt;br /&gt;
| || || || ||&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Peter Vogginger</name></author>
	</entry>
	<entry>
		<id>http://www.institut-fuer-kaffeetechnologie.de/Wiki/index.php?title=Kommunikation_per_UART&amp;diff=4749</id>
		<title>Kommunikation per UART</title>
		<link rel="alternate" type="text/html" href="http://www.institut-fuer-kaffeetechnologie.de/Wiki/index.php?title=Kommunikation_per_UART&amp;diff=4749"/>
		<updated>2025-11-13T07:53:32Z</updated>

		<summary type="html">&lt;p&gt;Peter Vogginger: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Peter Vogginger,10.11.2025 - Aufgabenanalyse =&lt;br /&gt;
Aktuell werden die Messwerte von jeder Platine eigenständig an die MATLAB®-GUI versendet. Diese visualisiert und verarbeitet die Messwerte. Die erforderlichen Stellgrößen werden wiederum auf den Platinen in Abhängigkeit der MATLAB®-GUI eingestellt. &lt;br /&gt;
&lt;br /&gt;
In Zukunft soll die Kommunikation unter den MCUs erfolgen. Die Steuerung soll über die Maschinensteuerung erfolgen. Es wird weiterhin eine MATLAB®-GUI (im folgenden MATLAB®-Wartungsapp genannt) geben, diese dient jedoch lediglich für Wartungs- und Versuchszwecke. Die Aufgabe besteht darin, eine robuste und schnelle Kommunikation aufzubauen und diese anschließend auf allen MCUs zu implementieren.&lt;br /&gt;
&lt;br /&gt;
In die Auflistung der miteinander kommunizierenden Steuergeräte ist ein Touch-Display und optional ein Maschinensimulator mit aufzunehmen. Dadurch ergeben sich fünf Platinen, die im ständigen Austausch miteinander stehen: Messwertplatine, SSR-Platine, Basisplatine, Display-Platine und Maschinensimulator.&lt;br /&gt;
&lt;br /&gt;
Zur Fehleranalyse und Erprobung sollen weiterhin alle Messwerte in der Kommunikation enthalten sein, um die MATLAB®-Wartungsapp an die Display-Platine anschließen zu können und mittels Logging alle Daten darauf zu visualisieren. Angelehnt an das 1984 von IBM eingeführte Token Ring Network soll eine „im Kreis laufende“ Kommunikation aufgebaut werden.&lt;br /&gt;
&lt;br /&gt;
== Hardware-Aufbau ==&lt;br /&gt;
Die Verbindungen werden hardwareseitig durch den UART der MCUs hergestellt. Die UART Sendeleitung Tx einer MCU wird mit der Empfangsleitung Rx der nächsten MCU verbunden. Dies wird von Platine zu Platine in der Reihenfolge: Messwertplatine -&amp;gt; Basisplatine -&amp;gt; SSR-Platine -&amp;gt; Display-Platine -&amp;gt; Messwertplatine durchgeführt. Damit ergibt sich ein geschlossener Ring. Optional kann nach der Displayplatine noch der Maschinensimulator eingeschleift werden.&lt;br /&gt;
&lt;br /&gt;
== Messwerte ==&lt;br /&gt;
Es gibt einen definierten Token. Jede Platine erneuert ihren Anteil des Tokens und entnimmt dem Token die benötigten Informationen (Messwerte). Was zuvor die MATLAB®-GUI durchgeführt hat, übernehmen nun die einzelnen Platinen. Dadurch ergibt sich unter den Platinen eine Aufgabenverteilung. Tabelle 1 zeigt eine Auflistung der Daten, die in den Datensatz des Tokens aufgenommen werden sollen. Jede nummerierte Position erhält einen Platz, je nach Bedarf an Größe. Der Token wird als Bytearray ausgeführt.&lt;br /&gt;
&lt;br /&gt;
== Token ==&lt;br /&gt;
=== Anzahl ===&lt;br /&gt;
Die Anzahl der im Kreis laufenden Tokens soll sich auf einen beschränken. Dieser wird erstmalig von der Messwertplatine erzeugt und anschließend „im Kreis“ gesendet, wobei jede MCU nur den für sie relevanten Teil liest bzw. auch umschreibt. Die Abtastrate des ADC (analog digital converter) gibt die Taktrate des Tokens vor. Durch die Wahl der ADC-Abtastrate wird daher die Kommunikationsgeschwindigkeit (Token/s) beeinflusst. Dieser ist der Flaschenhals und es ist eine langsame Steigerung der Taktrate vorzusehen, um mögliche Auswirkungen und Probleme in der Übertragung festzustellen.&lt;br /&gt;
&lt;br /&gt;
=== Struktur ===&lt;br /&gt;
Am Anfang befindet sich ein Startzeichen, um die Art des Tokens (Standard-, Start- oder Paniktoken; siehe unten), festzulegen. Anschließend folgt ein Datensatz und danach eine Prüfsumme. Der Datensatz ist so auszuführen, dass dieser einfach erweitert werden kann, um Erweiterungen zu ermöglichen (z.B. 2. Brühgruppeneinheit). Im Weiteren ist der Token möglichst kurz auszuführen. Der Token soll über eine einheitliche Länge verfügen. Der Token wird als bytearray angelegt und auch so empfangen. (dateneingang = bytearray(readIn(UART))) Datensatz: Jedem Messwert wird ein Bereich von 2 Byte als fester Platz im Token zugewiesen.&lt;br /&gt;
&lt;br /&gt;
=== Prüfsumme ===&lt;br /&gt;
Um die fehlerfreie Übertragung eines Tokens zu bestätigen, wird aus dem Datenblock des Tokens eine Prüfsumme gebildet und diese ans Ende des Tokens angehängt. Das verwendete Verfahren ist CRC-32.&lt;br /&gt;
&lt;br /&gt;
=== Standardtoken ===&lt;br /&gt;
Es ist erkennbar über das Startzeichen am Anfang und wird genutzt für den regelmäßigen Datenaustausch zwischen den MCUs. Starttoken: Es ist erkennbar über das Startzeichen am Anfang. Hierbei wird beim Einschalten der Espressomaschine die Betriebsbereitschaft der gesamten Kommunikation geprüft. Sowohl ob die Hardwareverbindung intakt ist als auch ob alle MCUs empfangen und senden können. Es gilt zu klären, welche MCU dies aussendet.&lt;br /&gt;
&lt;br /&gt;
=== Paniktoken ===&lt;br /&gt;
Es ist erkennbar über das Startzeichen am Anfang. Dies ist die Realisierung eines Not-Halts. Es sollen alle Prozesse augenblicklich gestoppt werden.&lt;br /&gt;
=== Fehlererkennung === &lt;br /&gt;
Wird das Token nicht innerhalb einer definierten Zeitspanne wieder am Empfang einer MCU erkannt, festgelegt über einen timer-Funktion, soll am Display eine Fehlermeldung ausgegeben werden. Erkennt eine Platine einen Fehler (aufgrund Timeout), werden Magnetventile geschlossen (stromlos geschaltet), die Heizungen und die Pumpen werden abgeschaltet, der Wert des Dosierventils Kaltwasser wird gespeichert. Es ist ein Fehlerspeicher im Grundkonzept vorgesehen.&lt;br /&gt;
&lt;br /&gt;
== Token Definition ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Tabelle 1: Tokeninhalt&lt;br /&gt;
|-&lt;br /&gt;
! Platine !! Byte-Nr !! Bits / Bit-Nr. !! Beschreibung !! Wertebereich !! Anmerkung&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;15&amp;quot; | Messplatine || 0,1 || 16 Bit || Leitwert || 0,2 - 20 S/cm || rowspan=&amp;quot;15&amp;quot; | 16 Bit im Token&lt;br /&gt;
dort wo diese Messwerte verarbeitet werden, werden sie mittels Kennlinie umgerechnet.&lt;br /&gt;
&lt;br /&gt;
Die csv-Datei der Kennlinie befindet sich auf der jeweiligen Platine.&lt;br /&gt;
&lt;br /&gt;
Der Tassenwärmer existiert nur 1x je Machine&lt;br /&gt;
|-&lt;br /&gt;
| 2,3 || 16 Bit || Boilerdruck || 0,5 - 4,5 V / 0 - 4 bar &lt;br /&gt;
|-&lt;br /&gt;
| 4,5 || 16 Bit || Brühgruppendruck (1. BG) || 0,5 - 4,5 / 0 - 12 bar &lt;br /&gt;
|-&lt;br /&gt;
| 6,7 || 16 Bit || Brühgruppendruck (2. BG) || 0,5 - 4,5 / 0 - 12 bar &lt;br /&gt;
|-&lt;br /&gt;
| 8,9 || 16 Bit || Wassereingangstemperatur&lt;br /&gt;
(ersatzweise Leitungsdruck)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 10,11 || 16 Bit || Boiler-NTC (1. BG) || Kennlinie &lt;br /&gt;
|-&lt;br /&gt;
| 12,13 || 16 Bit || Boiler-NTC (2. BG) || Kennlinie &lt;br /&gt;
|-&lt;br /&gt;
| 14,15 || 16 Bit || Tassenwärmer-NTC || Kennlinie &lt;br /&gt;
|-&lt;br /&gt;
| 16,17 || 16 Bit || Mischtemperatur-NTC (1. BG) || Kennlinie &lt;br /&gt;
|-&lt;br /&gt;
| 18,19 || 16 Bit || Mischtemperatur-NTC (2. BG) || Kennlinie &lt;br /&gt;
|-&lt;br /&gt;
| 20,21 || 16 Bit || Brühgruppen-NTC (1. BG) || Kennlinie &lt;br /&gt;
|-&lt;br /&gt;
| 22,23 || 16 Bit || Brühgruppen-NTC (2. BG) || Kennlinie &lt;br /&gt;
|-&lt;br /&gt;
| 24,25 || 16 Bit || Boilerheizung (Soll, 1. BG) || 8 Hz PWM 0 - 100 % &lt;br /&gt;
|-&lt;br /&gt;
| 26,27 || 16 Bit || Boilerheizung (Soll, 2. BG) || 8 Hz PWM 0 - 100 % &lt;br /&gt;
|-&lt;br /&gt;
| 28,29 || 16 Bit || Tassenwärmerheizung (Soll) || 8 Hz PWM 0 - 100 % &lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | SSR-Platine || 30,31 || 16 Bit || Position Schrittmotor Dosierventil 1. BG || 0 - 550 ||&lt;br /&gt;
|-&lt;br /&gt;
| 32,33 || 16 Bit || Position Schrittmotor Dosierventil 2. BG || 0 - 550 ||&lt;br /&gt;
|-&lt;br /&gt;
| Basisplatine || 34,35 || 16 Bit || Verstellwert Schrittmotor Dosierventil 1. BG || Integer mit Vorzeichen ||&lt;br /&gt;
|-&lt;br /&gt;
| || 36,37 || 16 Bit || Verstellwert Schrittmotor Dosierventil 2. BG || Integer mit Vorzeichen ||&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| rowspan=&amp;quot;9&amp;quot; |38&lt;br /&gt;
|&lt;br /&gt;
|Füllstandsbyte&lt;br /&gt;
|&lt;br /&gt;
| rowspan=&amp;quot;9&amp;quot; |Füllstände werden von den Füllstandsreglern auf der Basisplatine verarbeitet&lt;br /&gt;
Füllstand Abtropfschale True verhindert Pumpenansteuerung&lt;br /&gt;
Füllstand Boiler False verhindert Pumpenansteuerung&lt;br /&gt;
|-&lt;br /&gt;
| || 0 || Füllstand Boiler 1. BG || Boolean &lt;br /&gt;
|-&lt;br /&gt;
| || 1 || Füllstand Boiler 2. BG || Boolean &lt;br /&gt;
|-&lt;br /&gt;
| || 2 || Füllstand Tank Minimum || Boolean &lt;br /&gt;
|-&lt;br /&gt;
| || 3 || Füllstand Tank Maximum || Boolean &lt;br /&gt;
|-&lt;br /&gt;
| || 4 || Füllstand Abtropfschale || Boolean &lt;br /&gt;
|-&lt;br /&gt;
| || 5 || || Boolean &lt;br /&gt;
|-&lt;br /&gt;
| || 6 || || Boolean &lt;br /&gt;
|-&lt;br /&gt;
| || 7 || || Boolean &lt;br /&gt;
|-&lt;br /&gt;
| || rowspan=&amp;quot;9&amp;quot; | 39 || || Magnetventile Byte 1 || || rowspan=&amp;quot;9&amp;quot; | Magnetventile Y101 bis Y113 gehören zur 1. BG&lt;br /&gt;
Y113 ist der Dampfhahn&lt;br /&gt;
Y214 bis Y222 gehören zur 2. BG &lt;br /&gt;
|-&lt;br /&gt;
| || 0 || Y101 || Boolean &lt;br /&gt;
|-&lt;br /&gt;
| || 1 || Y102 || Boolean &lt;br /&gt;
|-&lt;br /&gt;
| || 2 || Y103 || Boolean &lt;br /&gt;
|-&lt;br /&gt;
| || 3 || Y104 || Boolean &lt;br /&gt;
|-&lt;br /&gt;
| || 4 || Y105 || Boolean &lt;br /&gt;
|-&lt;br /&gt;
| || 5 || Y106 || Boolean &lt;br /&gt;
|-&lt;br /&gt;
| || 6 || Y107 || Boolean &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|7&lt;br /&gt;
|Y108&lt;br /&gt;
|Boolean&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| rowspan=&amp;quot;9&amp;quot; |40&lt;br /&gt;
|&lt;br /&gt;
|Magnetventil Byte 2&lt;br /&gt;
|&lt;br /&gt;
| rowspan=&amp;quot;9&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|Y109&lt;br /&gt;
|Boolean&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|Y110&lt;br /&gt;
|Boolean&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|2&lt;br /&gt;
|Y111&lt;br /&gt;
|Boolean&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|3&lt;br /&gt;
|Y112&lt;br /&gt;
|Boolean&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|4&lt;br /&gt;
|Y113&lt;br /&gt;
|Boolean&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|5&lt;br /&gt;
|Y214&lt;br /&gt;
|Boolean&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|6&lt;br /&gt;
|Y215&lt;br /&gt;
|Boolean&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|7&lt;br /&gt;
|Y216&lt;br /&gt;
|Boolean&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| rowspan=&amp;quot;9&amp;quot; |41&lt;br /&gt;
|&lt;br /&gt;
|Magnetventil Byte 3&lt;br /&gt;
|&lt;br /&gt;
| rowspan=&amp;quot;9&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|Y217&lt;br /&gt;
|Boolean&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|Y218&lt;br /&gt;
|Boolean&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|2&lt;br /&gt;
|Y219&lt;br /&gt;
|Boolean&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|3&lt;br /&gt;
|Y220&lt;br /&gt;
|Boolean&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|4&lt;br /&gt;
|Y221&lt;br /&gt;
|Boolean&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|5&lt;br /&gt;
|Y222&lt;br /&gt;
|Boolean&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|6&lt;br /&gt;
|&lt;br /&gt;
|Boolean&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|7&lt;br /&gt;
|&lt;br /&gt;
|Boolean&lt;br /&gt;
|-&lt;br /&gt;
|Displayplatine&lt;br /&gt;
|42,43&lt;br /&gt;
|16&lt;br /&gt;
|Bezugswassertemperatur 1. BG&lt;br /&gt;
|30  - 98 °C&lt;br /&gt;
|Integerwert in 1/10 °C, damit Wertebereich 300 bis 980&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|44,45&lt;br /&gt;
|16&lt;br /&gt;
|Bezugswassertemperatur 2. BG&lt;br /&gt;
|30  - 98 °C&lt;br /&gt;
|Integerwert in 1/10 °C, damit Wertebereich 300 bis 980&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|46,47&lt;br /&gt;
|16&lt;br /&gt;
|Bezugsmenge 1. BG&lt;br /&gt;
|20 - 300 g bzw. ml&lt;br /&gt;
|Integerwert in 1/10 ml, damit Wertebereich 200 bis 3000&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|48,49&lt;br /&gt;
|16&lt;br /&gt;
|Bezugsmenge 2. BG&lt;br /&gt;
|20 - 300 g bzw. ml&lt;br /&gt;
|Integerwert in 1/10 ml, damit Wertebereich 200 bis 3000&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|50,51&lt;br /&gt;
|16&lt;br /&gt;
|Bezugszeit 1. BG&lt;br /&gt;
|0 - 120 Sekunden&lt;br /&gt;
|Integerwert in 1/10 Sekunde, damit Wertebereich 0 bis 1200&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|52,53&lt;br /&gt;
|16&lt;br /&gt;
|Bezugszeit 2. BG&lt;br /&gt;
|0 - 120 Sekunden&lt;br /&gt;
|Integerwert in 1/10 Sekunde, damit Wertebereich 0 bis 1200&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|54,55&lt;br /&gt;
|16&lt;br /&gt;
|Preinfusionszeit 1. BG&lt;br /&gt;
|0 - 120 Sekunden&lt;br /&gt;
|Integerwert in 1/10 Sekunde, damit Wertebereich 0 bis 1200&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|56,57&lt;br /&gt;
|16&lt;br /&gt;
|Preinfusionszeit 2. BG&lt;br /&gt;
|0 - 120 Sekunden&lt;br /&gt;
|Integerwert in 1/10 Sekunde, damit Wertebereich 0 bis 1200&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|58&lt;br /&gt;
|8&lt;br /&gt;
|Abschalttemperatur Entschichtung&lt;br /&gt;
|90 - 98 °C&lt;br /&gt;
|Integerwert in °C&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|59&lt;br /&gt;
|8&lt;br /&gt;
|Grenztemperatur&lt;br /&gt;
|135 - 150 °C&lt;br /&gt;
|Integerwert in °C&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|60&lt;br /&gt;
|8&lt;br /&gt;
|Sollwert Boilerdruck&lt;br /&gt;
|1100 - 1500 mbar&lt;br /&gt;
|Integerwert in 10 mbar, damit Wertebereich 110 bis 150&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|61&lt;br /&gt;
|8&lt;br /&gt;
|Stellung Vertikalhebel&lt;br /&gt;
|0 - 180 Grad&lt;br /&gt;
|Integerwert&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| rowspan=&amp;quot;9&amp;quot; |62&lt;br /&gt;
|&lt;br /&gt;
|Maschinenstatus Byte 1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|Mischerstatus 1. BG&lt;br /&gt;
|Boolean&lt;br /&gt;
|True = Mischtemperatur erreicht&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|Mischerstatus 2. BG&lt;br /&gt;
|Boolean&lt;br /&gt;
|True = Mischtemperatur erreicht&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|2&lt;br /&gt;
|Entschichtung&lt;br /&gt;
|Boolean&lt;br /&gt;
|True = Entschichtung aktiv&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|3&lt;br /&gt;
|Handhebelmodus&lt;br /&gt;
|Boolean&lt;br /&gt;
|True = aktiv&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|4&lt;br /&gt;
|Rezepteingabe&lt;br /&gt;
|Boolean&lt;br /&gt;
|True = aktiv&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|5&lt;br /&gt;
|Wartungsmodus&lt;br /&gt;
|Boolean&lt;br /&gt;
|True = aktiv&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|6&lt;br /&gt;
|&lt;br /&gt;
|Boolean&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|7&lt;br /&gt;
|&lt;br /&gt;
|Boolean&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| rowspan=&amp;quot;9&amp;quot; |63&lt;br /&gt;
|&lt;br /&gt;
|Maschinenstatus Byte 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|Kaffeebezug 1. BG&lt;br /&gt;
|Boolean&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|Kaffeebezug 1. BG&lt;br /&gt;
|Boolean&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|2&lt;br /&gt;
|Teewasserbezug&lt;br /&gt;
|Boolean&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|3&lt;br /&gt;
|Dampfbezug&lt;br /&gt;
|Boolean&lt;br /&gt;
|Bewirkt 200 mbar Reduzierung Sollwert Boilerdruck&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|4&lt;br /&gt;
|&lt;br /&gt;
|Boolean&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|5&lt;br /&gt;
|Aufheizen&lt;br /&gt;
|Boolean&lt;br /&gt;
|True = Aufheizphase, False = Betriebsbereit&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|6&lt;br /&gt;
|Systemstart&lt;br /&gt;
|Boolean&lt;br /&gt;
|True = Systemstart&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|7&lt;br /&gt;
|Sicherheitsfunktion&lt;br /&gt;
|Boolean&lt;br /&gt;
|True = Sicherheitsfunktion aktiv&lt;br /&gt;
|}&lt;br /&gt;
= Peter Vogginger,19.10.2025 - NUCLEO_H743ZI2 =&lt;br /&gt;
Kommunikation als Token-Ring oder in Stern-Topologie &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der Wechsel der Kommunikation von dem geplanten Token-Ring-Verfahren, hin zur Stern-Topologie erfordert 3 serielle Schnittstellen. Dies ist mit der aktuellen Konstellation, 4 MCUs (Basisplatine, SSR-Platine, Messplatine und Displayplatine) mit jeweils einem Raspberry Pi Pico RP2040, nicht möglich. An einem RP2040 stehen 2 serielle Schnittstellen zur Verfügung. &lt;br /&gt;
&lt;br /&gt;
Der Wechsel hin zu einem größeren Board, dem NUCLEO-H743ZI2 MCU-Board mit einer STM32H7 MCU. Der Wechsel würde Vorteile bieten:  &lt;br /&gt;
* weniger Elektronik in der Peripherie &lt;br /&gt;
* ADCs ausreichend am Board &lt;br /&gt;
* DACs ausreichend am Board &lt;br /&gt;
* 8 serielle Schnittstellen &lt;br /&gt;
* viel mehr nutzbare PINs &lt;br /&gt;
&lt;br /&gt;
Die Vielzahl an Anschlüssen bietet die Möglichkeit, von aktuell 3 Platinen (und 3 MCUs) auf 1 Platine mit einem MCU-Board zu reduzieren. &lt;br /&gt;
&lt;br /&gt;
Allerdings bietet diese Umstellung nicht nur Vorteile.  &lt;br /&gt;
&lt;br /&gt;
Nachteilig wäre, dass bei jedem MicroPython Update ein eigenes Derivat erstellt werden müsste, da default die ADC auf 12-Bit Auflösung in MicroPython definiert sind. Aktuell existiert ein Derivat mit 16-Bit ADC Konfiguration (NUCLEO_H743ZI2_v1-27-0_ADC_16BIT.hex), dies basiert auf der MicroPython Version v1-27-0. &lt;br /&gt;
&lt;br /&gt;
Allerdings ist die Verfügbarkeit von NUCLEO-Boards immer zeitweise nicht gegeben. Diesbezüglich wäre ein Platinenlayout inkl. den Bauelementen für MCU und der direkten Peripherie erforderlich. Was aber erst nach der Inbetriebnahme der beiden Prototypen-Maschinen sinnvoll erscheint. Die Kosten dieser externen Entwicklung werden auf 50 t€ bis 100 t€ geschätzt. &lt;br /&gt;
&lt;br /&gt;
Aufgrund der aktuellen Situation wird bis auf Weiteres die Verwendung von Raspberry Pi Pico verfolgt.&lt;br /&gt;
&lt;br /&gt;
= Armin Rohnen, 16.10.2025 =&lt;br /&gt;
Im Zuge der Analyse für die zweite Auflage von MATLAB® meets MicroPython ist das Thema der UART-Kommunikation tiefer betrachtet worden. &lt;br /&gt;
&lt;br /&gt;
Die Kommunikation ist mit Sorgfalt zu programmieren. Durch Lesen und Schreiben auf die UART-Schnittstelle kann die MCU blockiert und dauerhaft an der Ausführung anderer Programmteile gehindert werden. Die Problematik ist in Abschnitt 3.13 der 2. Auflage MATLAB® meets MicroPython beschrieben.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Armin Rohnen, 11.04.2024 =&lt;br /&gt;
[[Datei:20250322 Konzept.png|thumb|900px|gerahmt|zentriert|alternativtext=Armin Rohnen, Kommunikationskonzept mit Token|Armin Rohnen, Kommunikationskonzept mit Token]]&lt;br /&gt;
Seitens des Platinenlayouts für die Steuerungselektronik wurden die jeweiligen PINs der ersten UARTSchnittstelle für die spätere Inter-Kommunikation der Steuerung herausgelegt. Die Raspberry Pi Pico MCU verfügt über einen jeweils 32 Byte großen Eingangs- bzw. Ausgangspuffer für die UART-Schnittstelle. Dieser soll genutzt werden um die Kommunikation zu ermöglichen. Die jeweilige Kommunikation selbst wird dadurch auf diese 32 Byte begrenzt. Hardwareseitig ist es Denkbar, dass je MCU zwei weitere PINs für die Kommunikation verwendet werden. Lediglich auf der SSR-Platine ist dazu ein Eingriff ins Platinenlayout erforderlich. Dieser kann bei einem Prototypen handwerklich durchgeführt werden. Die zwei zusätzlichen PINs für die Kommunikation (GP04, GP05 auf der Basisplatine, GP03, GP04 auf der SSR-Platine, GP06, GP07 auf der Messplatine) fungieren als eingehender und ausgehender Interrupt, so dass die Kommunikation als ISR programmiert werden kann.&lt;br /&gt;
&lt;br /&gt;
Angelehnt an das 1984 von IBM eingeführte Token Ring Network soll eine „im Kreis laufende“ Kommunikation aufgebaut werden. Ausgehend von der Messplatine wird ein Token über die einzelnen Platinen durchgereicht (Abbildung). Unter Berücksichtigung der Kommunikationsregeln können so eine beliebige Anzahl an Steuerungsplatinen in den Kommunikationsring eingebunden werden. Allerdings sollte dabei die Reihenfolge beachtet werden.&lt;br /&gt;
&lt;br /&gt;
Die Messplatine sendet über UART am Ende jedes gültigen Messwertsatzes einen oder mehrere Token an die Basisplatine. In den Token befinden sich die aktuellen Messwerte und alle anderen „im Kreis laufende“ Daten. Beim ersten Senden werden hier u.u. 0-Werte verwendet, bis dass der erste Token wieder bei der Messplatine angekommen ist. Ggf. unterbricht die Messplatine auch das Senden des Token bzw. der ersten Token-Serie, bis zum ersten Eintreffen eines Tokens. Die Messplatine ist damit der Taktgeber der Kommunikation. Konkret erfolgt dies in Abhängigkeit der Abtastrate des AD-Wandlers.Wenn ein Token versendet ist, wechselt die Messplatine den Logikzustand des ausgehenden Interrupt-PINs. Bevor der nächste Token versendet wird, wird wieder der Ausgangslogikzustand des Interrupt-PINs hergestellt. Sobald die Messplatine auch einen Token empfangen hat wird auch der PWM-Stellwert für das Boilerheizelement (aus Regler Boilerdruck) und für den Tassenwärmer im Token übermittelt.&lt;br /&gt;
&lt;br /&gt;
Von der Messplatine erhält die Basisplatine den Token. Die UART-Schnittstelle wird ausgelesen, wenn am eingehenden Interrupt-PIN der Logikzustand wechselt. Die Basisplatine tauscht im Token die Daten für die eigenen Messwerte, die Schaltzustände der Tasten, die Schaltzustände der Magnetventile usw. aus und sendet den Token an die SSR-Platine weiter. Ist der Token versendet, wechselt die Basisplatine den Logikzustand des ausgehenden Interrupt-PINs und arbeitet in gleicher Logik weiter wie die Messplatine.&lt;br /&gt;
&lt;br /&gt;
Die SSR-Platine bekommt von der Basisplatine den Token durchgereicht. Die SSR-Platine wertet den Token lediglich aus, nimmt keine Veränderungen darin vor und reicht diesen dann weiter. Nach der SSR-Platine kann eine Display-Platine nachgeschaltet werden. Diese wertet die Informationen im Token aus und visualisiert diese bzw. stellt die Informationen über WLAN zur Verfügung. Im Falle eines Touch-Displays werden die Bytes für die Schaltzustände der Tasten ausgetauscht. Abschließend erhält die Messplatine wieder den Token und übernimmt die relevanten Informationen daraus in den neu zu sendenden Token.&lt;br /&gt;
&lt;br /&gt;
Anstelle des eingehenden und ausgehenden Interrupt-PINs kann u.u. auch die MicroPython-Funktionalität uart.irq verwendet werden. Diese ruft eine ISR auf, sobald Daten im EIngangspuffer der UART-Schnittstelle eingegangen sind.&lt;br /&gt;
&lt;br /&gt;
Das Konzept ist auszugestalten und der bzw. die Token sind exakt zu definieren. Dabei ist auch zu definieren (und zu erproben) wie die dann übergeordnete MATLAB®-GUI die Daten für die Visualisierung erhält. Der einzelne Token darf aufgrund der Limitierung durch den UART-Puffer des Raspberry Pi Picos 32 Byte nicht überschreiten. Als maximale Datenrate sind 115200 Baud möglich, was unter Berücksichtigung von START / STOP-Bits und Paritätsbit eine maximale Kommunikationsrate von 11520 Byte je Sekunde ergibt. Damit wären 360 jeweils 32 Byte lange Token in der Kommunikation möglich. Nach aktuellem Stand der Recherchen überschreitet die Datenmenge für die Kommunikation die 32 Byte Grenze, so dass mit mehreren Token gearbeitet werden muss. Jeder Token weist im ersten Byte eine Token-Nr auf, so dass der Token zweifelsfrei identifiziert werden kann. Alle Token müssen die gleiche Länge in Bytes aufweisen. Für zukünftige Erweiterungen sind Leer-Bytes in den Token vorhanden. Jeder der 4 Token muss die gleiche Länge in Bytes aufweisen.&lt;br /&gt;
&lt;br /&gt;
Getaktet wird die Kommunikation durch die Datenerfassung der Messplatine. Aufgrund der jeweils ungültigen ersten Wandlung eines Messkanals ist eine maximale Abtastrate von 430 Messwerten je Sekunde aufgeteilt auf acht Messkanäle, was ca. 53 Datensätze je Sekunde ergibt. Bei einer Abtastrate von 475 SPS ergeben sich 30 gültige Messdatensätze je Sekunde.Wird nach jedem zweiten gültigen Messkanal ein 27 Byte langer Token von der Messplatine gesendet, dann ergibt dies eine Inter-Kommunikation zwischen den MCUs von 120 Token bzw. 3240 Byte je Sekunde, was unter der als Maximum angesehenen Datenrate liegt. Selbst bei einer Verlängerung der Token auf 32 Byte würde lediglich 1/3 des theoretisch möglichen Datentransfers durchgeführt.&lt;/div&gt;</summary>
		<author><name>Peter Vogginger</name></author>
	</entry>
	<entry>
		<id>http://www.institut-fuer-kaffeetechnologie.de/Wiki/index.php?title=Kommunikation_per_UART&amp;diff=4747</id>
		<title>Kommunikation per UART</title>
		<link rel="alternate" type="text/html" href="http://www.institut-fuer-kaffeetechnologie.de/Wiki/index.php?title=Kommunikation_per_UART&amp;diff=4747"/>
		<updated>2025-11-13T07:41:00Z</updated>

		<summary type="html">&lt;p&gt;Peter Vogginger: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Peter Vogginger,10.11.2025 - Aufgabenanalyse =&lt;br /&gt;
Aktuell werden die Messwerte von jeder Platine eigenständig an die MATLAB®-GUI versendet. Diese visualisiert und verarbeitet die Messwerte. Die erforderlichen Stellgrößen werden wiederum auf den Platinen in Abhängigkeit der MATLAB®-GUI eingestellt. &lt;br /&gt;
&lt;br /&gt;
In Zukunft soll die Kommunikation unter den MCUs erfolgen. Die Steuerung soll über die Maschinensteuerung erfolgen. Es wird weiterhin eine MATLAB®-GUI (im folgenden MATLAB®-Wartungsapp genannt) geben, diese dient jedoch lediglich für Wartungs- und Versuchszwecke. Die Aufgabe besteht darin, eine robuste und schnelle Kommunikation aufzubauen und diese anschließend auf allen MCUs zu implementieren.&lt;br /&gt;
&lt;br /&gt;
In die Auflistung der miteinander kommunizierenden Steuergeräte ist ein Touch-Display und optional ein Maschinensimulator mit aufzunehmen. Dadurch ergeben sich fünf Platinen, die im ständigen Austausch miteinander stehen: Messwertplatine, SSR-Platine, Basisplatine, Display-Platine und Maschinensimulator.&lt;br /&gt;
&lt;br /&gt;
Zur Fehleranalyse und Erprobung sollen weiterhin alle Messwerte in der Kommunikation enthalten sein, um die MATLAB®-Wartungsapp an die Display-Platine anschließen zu können und mittels Logging alle Daten darauf zu visualisieren. Angelehnt an das 1984 von IBM eingeführte Token Ring Network soll eine „im Kreis laufende“ Kommunikation aufgebaut werden.&lt;br /&gt;
&lt;br /&gt;
== Hardware-Aufbau ==&lt;br /&gt;
Die Verbindungen werden hardwareseitig durch den UART der MCUs hergestellt. Die UART Sendeleitung Tx einer MCU wird mit der Empfangsleitung Rx der nächsten MCU verbunden. Dies wird von Platine zu Platine in der Reihenfolge: Messwertplatine -&amp;gt; Basisplatine -&amp;gt; SSR-Platine -&amp;gt; Display-Platine -&amp;gt; Messwertplatine durchgeführt. Damit ergibt sich ein geschlossener Ring. Optional kann nach der Displayplatine noch der Maschinensimulator eingeschleift werden.&lt;br /&gt;
&lt;br /&gt;
== Messwerte ==&lt;br /&gt;
Es gibt einen definierten Token. Jede Platine erneuert ihren Anteil des Tokens und entnimmt dem Token die benötigten Informationen (Messwerte). Was zuvor die MATLAB®-GUI durchgeführt hat, übernehmen nun die einzelnen Platinen. Dadurch ergibt sich unter den Platinen eine Aufgabenverteilung. Tabelle 1 zeigt eine Auflistung der Daten, die in den Datensatz des Tokens aufgenommen werden sollen. Jede nummerierte Position erhält einen Platz, je nach Bedarf an Größe. Der Token wird als Bytearray ausgeführt.&lt;br /&gt;
&lt;br /&gt;
== Token ==&lt;br /&gt;
=== Anzahl ===&lt;br /&gt;
Die Anzahl der im Kreis laufenden Tokens soll sich auf einen beschränken. Dieser wird erstmalig von der Messwertplatine erzeugt und anschließend „im Kreis“ gesendet, wobei jede MCU nur den für sie relevanten Teil liest bzw. auch umschreibt. Die Abtastrate des ADC (analog digital converter) gibt die Taktrate des Tokens vor. Durch die Wahl der ADC-Abtastrate wird daher die Kommunikationsgeschwindigkeit (Token/s) beeinflusst. Dieser ist der Flaschenhals und es ist eine langsame Steigerung der Taktrate vorzusehen, um mögliche Auswirkungen und Probleme in der Übertragung festzustellen.&lt;br /&gt;
&lt;br /&gt;
=== Struktur ===&lt;br /&gt;
Am Anfang befindet sich ein Startzeichen, um die Art des Tokens (Standard-, Start- oder Paniktoken; siehe unten), festzulegen. Anschließend folgt ein Datensatz und danach eine Prüfsumme. Der Datensatz ist so auszuführen, dass dieser einfach erweitert werden kann, um Erweiterungen zu ermöglichen (z.B. 2. Brühgruppeneinheit). Im Weiteren ist der Token möglichst kurz auszuführen. Der Token soll über eine einheitliche Länge verfügen. Der Token wird als bytearray angelegt und auch so empfangen. (dateneingang = bytearray(readIn(UART))) Datensatz: Jedem Messwert wird ein Bereich von 2 Byte als fester Platz im Token zugewiesen.&lt;br /&gt;
&lt;br /&gt;
=== Prüfsumme ===&lt;br /&gt;
Um die fehlerfreie Übertragung eines Tokens zu bestätigen, wird aus dem Datenblock des Tokens eine Prüfsumme gebildet und diese ans Ende des Tokens angehängt. Das verwendete Verfahren ist CRC-32.&lt;br /&gt;
&lt;br /&gt;
=== Standardtoken ===&lt;br /&gt;
Es ist erkennbar über das Startzeichen am Anfang und wird genutzt für den regelmäßigen Datenaustausch zwischen den MCUs. Starttoken: Es ist erkennbar über das Startzeichen am Anfang. Hierbei wird beim Einschalten der Espressomaschine die Betriebsbereitschaft der gesamten Kommunikation geprüft. Sowohl ob die Hardwareverbindung intakt ist als auch ob alle MCUs empfangen und senden können. Es gilt zu klären, welche MCU dies aussendet.&lt;br /&gt;
&lt;br /&gt;
=== Paniktoken ===&lt;br /&gt;
Es ist erkennbar über das Startzeichen am Anfang. Dies ist die Realisierung eines Not-Halts. Es sollen alle Prozesse augenblicklich gestoppt werden.&lt;br /&gt;
=== Fehlererkennung === &lt;br /&gt;
Wird das Token nicht innerhalb einer definierten Zeitspanne wieder am Empfang einer MCU erkannt, festgelegt über einen timer-Funktion, soll am Display eine Fehlermeldung ausgegeben werden. Erkennt eine Platine einen Fehler (aufgrund Timeout), werden Magnetventile geschlossen (stromlos geschaltet), die Heizungen und die Pumpen werden abgeschaltet, der Wert des Dosierventils Kaltwasser wird gespeichert. Es ist ein Fehlerspeicher im Grundkonzept vorgesehen.&lt;br /&gt;
&lt;br /&gt;
== Token Definition ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Tabelle 1: Tokeninhalt&lt;br /&gt;
|-&lt;br /&gt;
! Platine !! Byte-Nr !! Bits / Bit-Nr. !! Beschreibung !! Wertebereich !! Anmerkung&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;15&amp;quot; | Messplatine || 0,1 || 16 Bit || Leitwert || 0,2 - 20 S/cm || rowspan=&amp;quot;15&amp;quot; | 16 Bit im Token&lt;br /&gt;
dort wo diese Messwerte verarbeitet werden, werden sie mittels Kennlinie umgerechnet.&lt;br /&gt;
&lt;br /&gt;
Die csv-Datei der Kennlinie befindet sich auf der jeweiligen Platine.&lt;br /&gt;
&lt;br /&gt;
Der Tassenwärmer existiert nur 1x je Machine&lt;br /&gt;
|-&lt;br /&gt;
| 2,3 || 16 Bit || Boilerdruck || 0,5 - 4,5 V / 0 - 4 bar &lt;br /&gt;
|-&lt;br /&gt;
| 4,5 || 16 Bit || Brühgruppendruck (1. BG) || 0,5 - 4,5 / 0 - 12 bar &lt;br /&gt;
|-&lt;br /&gt;
| 6,7 || 16 Bit || Brühgruppendruck (2. BG) || 0,5 - 4,5 / 0 - 12 bar &lt;br /&gt;
|-&lt;br /&gt;
| 8,9 || 16 Bit || Wassereingangstemperatur&lt;br /&gt;
(ersatzweise Leitungsdruck)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 10,11 || 16 Bit || Boiler-NTC (1. BG) || Kennlinie &lt;br /&gt;
|-&lt;br /&gt;
| 12,13 || 16 Bit || Boiler-NTC (2. BG) || Kennlinie &lt;br /&gt;
|-&lt;br /&gt;
| 14,15 || 16 Bit || Tassenwärmer-NTC || Kennlinie &lt;br /&gt;
|-&lt;br /&gt;
| 16,17 || 16 Bit || Mischtemperatur-NTC (1. BG) || Kennlinie &lt;br /&gt;
|-&lt;br /&gt;
| 18,19 || 16 Bit || Mischtemperatur-NTC (2. BG) || Kennlinie &lt;br /&gt;
|-&lt;br /&gt;
| 20,21 || 16 Bit || Brühgruppen-NTC (1. BG) || Kennlinie &lt;br /&gt;
|-&lt;br /&gt;
| 22,23 || 16 Bit || Brühgruppen-NTC (2. BG) || Kennlinie &lt;br /&gt;
|-&lt;br /&gt;
| 24,25 || 16 Bit || Boilerheizung (Soll, 1. BG) || 8 Hz PWM 0 - 100 % &lt;br /&gt;
|-&lt;br /&gt;
| 26,27 || 16 Bit || Boilerheizung (Soll, 2. BG) || 8 Hz PWM 0 - 100 % &lt;br /&gt;
|-&lt;br /&gt;
| 28,29 || 16 Bit || Tassenwärmerheizung (Soll) || 8 Hz PWM 0 - 100 % &lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | SSR-Platine || 30,31 || 16 Bit || Position Schrittmotor Dosierventil 1. BG || 0 - 550 ||&lt;br /&gt;
|-&lt;br /&gt;
| 32,33 || 16 Bit || Position Schrittmotor Dosierventil 2. BG || 0 - 550 ||&lt;br /&gt;
|-&lt;br /&gt;
| Basisplatine || 34,35 || 16 Bit || Verstellwert Schrittmotor Dosierventil 1. BG || Integer mit Vorzeichen ||&lt;br /&gt;
|-&lt;br /&gt;
| || 36,37 || 16 Bit || Verstellwert Schrittmotor Dosierventil 2. BG || Integer mit Vorzeichen ||&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| rowspan=&amp;quot;9&amp;quot; |38&lt;br /&gt;
|&lt;br /&gt;
|Füllstandsbyte&lt;br /&gt;
|&lt;br /&gt;
| rowspan=&amp;quot;9&amp;quot; |Füllstände werden von den Füllstandsreglern auf der Basisplatine verarbeitet&lt;br /&gt;
Füllstand Abtropfschale True verhindert Pumpenansteuerung&lt;br /&gt;
Füllstand Boiler False verhindert Pumpenansteuerung&lt;br /&gt;
|-&lt;br /&gt;
| || 0 || Füllstand Boiler 1. BG || Boolean &lt;br /&gt;
|-&lt;br /&gt;
| || 1 || Füllstand Boiler 2. BG || Boolean &lt;br /&gt;
|-&lt;br /&gt;
| || 2 || Füllstand Tank Minimum || Boolean &lt;br /&gt;
|-&lt;br /&gt;
| || 3 || Füllstand Tank Maximum || Boolean &lt;br /&gt;
|-&lt;br /&gt;
| || 4 || Füllstand Abtropfschale || Boolean &lt;br /&gt;
|-&lt;br /&gt;
| || 5 || || Boolean &lt;br /&gt;
|-&lt;br /&gt;
| || 6 || || Boolean &lt;br /&gt;
|-&lt;br /&gt;
| || 7 || || Boolean &lt;br /&gt;
|-&lt;br /&gt;
| || rowspan=&amp;quot;9&amp;quot; | 39 || || Magnetventile Byte 1 || || rowspan=&amp;quot;9&amp;quot; | Magnetventile Y101 bis Y113 gehören zur 1. BG&lt;br /&gt;
Y113 ist der Dampfhahn&lt;br /&gt;
Y214 bis Y222 gehören zur 2. BG &lt;br /&gt;
|-&lt;br /&gt;
| || 0 || Y101 || Boolean &lt;br /&gt;
|-&lt;br /&gt;
| || 1 || Y102 || Boolean &lt;br /&gt;
|-&lt;br /&gt;
| || 2 || Y103 || Boolean &lt;br /&gt;
|-&lt;br /&gt;
| || 3 || Y104 || Boolean &lt;br /&gt;
|-&lt;br /&gt;
| || 4 || Y105 || Boolean &lt;br /&gt;
|-&lt;br /&gt;
| || 5 || Y106 || Boolean &lt;br /&gt;
|-&lt;br /&gt;
| || 6 || Y107 || Boolean &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|7&lt;br /&gt;
|Y108&lt;br /&gt;
|Boolean&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| rowspan=&amp;quot;9&amp;quot; |40&lt;br /&gt;
|&lt;br /&gt;
|Magnetventil Byte 2&lt;br /&gt;
|&lt;br /&gt;
| rowspan=&amp;quot;9&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|Y109&lt;br /&gt;
|Boolean&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|Y110&lt;br /&gt;
|Boolean&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|2&lt;br /&gt;
|Y111&lt;br /&gt;
|Boolean&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|3&lt;br /&gt;
|Y112&lt;br /&gt;
|Boolean&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|4&lt;br /&gt;
|Y113&lt;br /&gt;
|Boolean&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|5&lt;br /&gt;
|Y214&lt;br /&gt;
|Boolean&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|6&lt;br /&gt;
|Y215&lt;br /&gt;
|Boolean&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|7&lt;br /&gt;
|Y216&lt;br /&gt;
|Boolean&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| rowspan=&amp;quot;9&amp;quot; |41&lt;br /&gt;
|&lt;br /&gt;
|Magnetventil Byte 3&lt;br /&gt;
|&lt;br /&gt;
| rowspan=&amp;quot;9&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|Y217&lt;br /&gt;
|Boolean&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|Y218&lt;br /&gt;
|Boolean&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|2&lt;br /&gt;
|Y219&lt;br /&gt;
|Boolean&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|3&lt;br /&gt;
|Y220&lt;br /&gt;
|Boolean&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|4&lt;br /&gt;
|Y221&lt;br /&gt;
|Boolean&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|5&lt;br /&gt;
|Y222&lt;br /&gt;
|Boolean&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|6&lt;br /&gt;
|&lt;br /&gt;
|Boolean&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|7&lt;br /&gt;
|&lt;br /&gt;
|Boolean&lt;br /&gt;
|-&lt;br /&gt;
|Displayplatine&lt;br /&gt;
|42,43&lt;br /&gt;
|16&lt;br /&gt;
|Bezugswassertemperatur 1. BG&lt;br /&gt;
|30  - 98 °C&lt;br /&gt;
|Integerwert in 1/10 °C, damit Wertebereich 300 bis 980&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|44,45&lt;br /&gt;
|16&lt;br /&gt;
|Bezugswassertemperatur 2. BG&lt;br /&gt;
|30  - 98 °C&lt;br /&gt;
|Integerwert in 1/10 °C, damit Wertebereich 300 bis 980&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|46,47&lt;br /&gt;
|16&lt;br /&gt;
|Bezugsmenge 1. BG&lt;br /&gt;
|20 - 300 g bzw. ml&lt;br /&gt;
|Integerwert in 1/10 ml, damit Wertebereich 200 bis 3000&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|48,49&lt;br /&gt;
|16&lt;br /&gt;
|Bezugsmenge 2. BG&lt;br /&gt;
|20 - 300 g bzw. ml&lt;br /&gt;
|Integerwert in 1/10 ml, damit Wertebereich 200 bis 3000&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|50,51&lt;br /&gt;
|16&lt;br /&gt;
|Bezugszeit 1. BG&lt;br /&gt;
|0 - 120 Sekunden&lt;br /&gt;
|Integerwert in 1/10 Sekunde, damit Wertebereich 0 bis 1200&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|52,53&lt;br /&gt;
|16&lt;br /&gt;
|Bezugszeit 2. BG&lt;br /&gt;
|0 - 120 Sekunden&lt;br /&gt;
|Integerwert in 1/10 Sekunde, damit Wertebereich 0 bis 1200&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|54,55&lt;br /&gt;
|16&lt;br /&gt;
|Preinfusionszeit 1. BG&lt;br /&gt;
|0 - 120 Sekunden&lt;br /&gt;
|Integerwert in 1/10 Sekunde, damit Wertebereich 0 bis 1200&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|56,57&lt;br /&gt;
|16&lt;br /&gt;
|Preinfusionszeit 2. BG&lt;br /&gt;
|0 - 120 Sekunden&lt;br /&gt;
|Integerwert in 1/10 Sekunde, damit Wertebereich 0 bis 1200&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|58&lt;br /&gt;
|8&lt;br /&gt;
|Abschalttemperatur Entschichtung&lt;br /&gt;
|90 - 98 °C&lt;br /&gt;
|Integerwert in °C&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|59&lt;br /&gt;
|8&lt;br /&gt;
|Grenztemperatur&lt;br /&gt;
|135 - 150 °C&lt;br /&gt;
|Integerwert in °C&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|60&lt;br /&gt;
|8&lt;br /&gt;
|Sollwert Boilerdruck&lt;br /&gt;
|1100 - 1500 mbar&lt;br /&gt;
|Integerwert in 10 mbar, damit Wertebereich 110 bis 150&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|61&lt;br /&gt;
|8&lt;br /&gt;
|Stellung Vertikalhebel&lt;br /&gt;
|0 - 180 Grad&lt;br /&gt;
|Integerwert&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| rowspan=&amp;quot;9&amp;quot; |&lt;br /&gt;
|&lt;br /&gt;
|Maschinenstatus Byte 1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|Mischerstatus 1. BG&lt;br /&gt;
|Boolean&lt;br /&gt;
|True = Mischtemperatur erreicht&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|Mischerstatus 2. BG&lt;br /&gt;
|Boolean&lt;br /&gt;
|True = Mischtemperatur erreicht&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|2&lt;br /&gt;
|Entschichtung&lt;br /&gt;
|Boolean&lt;br /&gt;
|True = Entschichtung aktiv&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|3&lt;br /&gt;
|Handhebelmodus&lt;br /&gt;
|Boolean&lt;br /&gt;
|True = aktiv&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|4&lt;br /&gt;
|Rezepteingabe&lt;br /&gt;
|Boolean&lt;br /&gt;
|True = aktiv&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|5&lt;br /&gt;
|Wartungsmodus&lt;br /&gt;
|Boolean&lt;br /&gt;
|True = aktiv&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|6&lt;br /&gt;
|&lt;br /&gt;
|Boolean&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|7&lt;br /&gt;
|Sicherheitsfunktion&lt;br /&gt;
|Boolean&lt;br /&gt;
|True = Sicherheitsfunktion aktiv&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| rowspan=&amp;quot;9&amp;quot; |&lt;br /&gt;
|&lt;br /&gt;
|Maschinenstatus Byte 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|Kaffeebezug 1. BG&lt;br /&gt;
|Boolean&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|Kaffeebezug 1. BG&lt;br /&gt;
|Boolean&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|2&lt;br /&gt;
|Teewasserbezug&lt;br /&gt;
|Boolean&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|3&lt;br /&gt;
|Dampfbezug&lt;br /&gt;
|Boolean&lt;br /&gt;
|Bewirkt 200 mbar Reduzierung Sollwert Boilerdruck&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|4&lt;br /&gt;
|&lt;br /&gt;
|Boolean&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|5&lt;br /&gt;
|&lt;br /&gt;
|Boolean&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|6&lt;br /&gt;
|&lt;br /&gt;
|Boolean&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|7&lt;br /&gt;
|&lt;br /&gt;
|Boolean&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
= Peter Vogginger,19.10.2025 - NUCLEO_H743ZI2 =&lt;br /&gt;
Kommunikation als Token-Ring oder in Stern-Topologie &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der Wechsel der Kommunikation von dem geplanten Token-Ring-Verfahren, hin zur Stern-Topologie erfordert 3 serielle Schnittstellen. Dies ist mit der aktuellen Konstellation, 4 MCUs (Basisplatine, SSR-Platine, Messplatine und Displayplatine) mit jeweils einem Raspberry Pi Pico RP2040, nicht möglich. An einem RP2040 stehen 2 serielle Schnittstellen zur Verfügung. &lt;br /&gt;
&lt;br /&gt;
Der Wechsel hin zu einem größeren Board, dem NUCLEO-H743ZI2 MCU-Board mit einer STM32H7 MCU. Der Wechsel würde Vorteile bieten:  &lt;br /&gt;
* weniger Elektronik in der Peripherie &lt;br /&gt;
* ADCs ausreichend am Board &lt;br /&gt;
* DACs ausreichend am Board &lt;br /&gt;
* 8 serielle Schnittstellen &lt;br /&gt;
* viel mehr nutzbare PINs &lt;br /&gt;
&lt;br /&gt;
Die Vielzahl an Anschlüssen bietet die Möglichkeit, von aktuell 3 Platinen (und 3 MCUs) auf 1 Platine mit einem MCU-Board zu reduzieren. &lt;br /&gt;
&lt;br /&gt;
Allerdings bietet diese Umstellung nicht nur Vorteile.  &lt;br /&gt;
&lt;br /&gt;
Nachteilig wäre, dass bei jedem MicroPython Update ein eigenes Derivat erstellt werden müsste, da default die ADC auf 12-Bit Auflösung in MicroPython definiert sind. Aktuell existiert ein Derivat mit 16-Bit ADC Konfiguration (NUCLEO_H743ZI2_v1-27-0_ADC_16BIT.hex), dies basiert auf der MicroPython Version v1-27-0. &lt;br /&gt;
&lt;br /&gt;
Allerdings ist die Verfügbarkeit von NUCLEO-Boards immer zeitweise nicht gegeben. Diesbezüglich wäre ein Platinenlayout inkl. den Bauelementen für MCU und der direkten Peripherie erforderlich. Was aber erst nach der Inbetriebnahme der beiden Prototypen-Maschinen sinnvoll erscheint. Die Kosten dieser externen Entwicklung werden auf 50 t€ bis 100 t€ geschätzt. &lt;br /&gt;
&lt;br /&gt;
Aufgrund der aktuellen Situation wird bis auf Weiteres die Verwendung von Raspberry Pi Pico verfolgt.&lt;br /&gt;
&lt;br /&gt;
= Armin Rohnen, 16.10.2025 =&lt;br /&gt;
Im Zuge der Analyse für die zweite Auflage von MATLAB® meets MicroPython ist das Thema der UART-Kommunikation tiefer betrachtet worden. &lt;br /&gt;
&lt;br /&gt;
Die Kommunikation ist mit Sorgfalt zu programmieren. Durch Lesen und Schreiben auf die UART-Schnittstelle kann die MCU blockiert und dauerhaft an der Ausführung anderer Programmteile gehindert werden. Die Problematik ist in Abschnitt 3.13 der 2. Auflage MATLAB® meets MicroPython beschrieben.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Armin Rohnen, 11.04.2024 =&lt;br /&gt;
[[Datei:20250322 Konzept.png|thumb|900px|gerahmt|zentriert|alternativtext=Armin Rohnen, Kommunikationskonzept mit Token|Armin Rohnen, Kommunikationskonzept mit Token]]&lt;br /&gt;
Seitens des Platinenlayouts für die Steuerungselektronik wurden die jeweiligen PINs der ersten UARTSchnittstelle für die spätere Inter-Kommunikation der Steuerung herausgelegt. Die Raspberry Pi Pico MCU verfügt über einen jeweils 32 Byte großen Eingangs- bzw. Ausgangspuffer für die UART-Schnittstelle. Dieser soll genutzt werden um die Kommunikation zu ermöglichen. Die jeweilige Kommunikation selbst wird dadurch auf diese 32 Byte begrenzt. Hardwareseitig ist es Denkbar, dass je MCU zwei weitere PINs für die Kommunikation verwendet werden. Lediglich auf der SSR-Platine ist dazu ein Eingriff ins Platinenlayout erforderlich. Dieser kann bei einem Prototypen handwerklich durchgeführt werden. Die zwei zusätzlichen PINs für die Kommunikation (GP04, GP05 auf der Basisplatine, GP03, GP04 auf der SSR-Platine, GP06, GP07 auf der Messplatine) fungieren als eingehender und ausgehender Interrupt, so dass die Kommunikation als ISR programmiert werden kann.&lt;br /&gt;
&lt;br /&gt;
Angelehnt an das 1984 von IBM eingeführte Token Ring Network soll eine „im Kreis laufende“ Kommunikation aufgebaut werden. Ausgehend von der Messplatine wird ein Token über die einzelnen Platinen durchgereicht (Abbildung). Unter Berücksichtigung der Kommunikationsregeln können so eine beliebige Anzahl an Steuerungsplatinen in den Kommunikationsring eingebunden werden. Allerdings sollte dabei die Reihenfolge beachtet werden.&lt;br /&gt;
&lt;br /&gt;
Die Messplatine sendet über UART am Ende jedes gültigen Messwertsatzes einen oder mehrere Token an die Basisplatine. In den Token befinden sich die aktuellen Messwerte und alle anderen „im Kreis laufende“ Daten. Beim ersten Senden werden hier u.u. 0-Werte verwendet, bis dass der erste Token wieder bei der Messplatine angekommen ist. Ggf. unterbricht die Messplatine auch das Senden des Token bzw. der ersten Token-Serie, bis zum ersten Eintreffen eines Tokens. Die Messplatine ist damit der Taktgeber der Kommunikation. Konkret erfolgt dies in Abhängigkeit der Abtastrate des AD-Wandlers.Wenn ein Token versendet ist, wechselt die Messplatine den Logikzustand des ausgehenden Interrupt-PINs. Bevor der nächste Token versendet wird, wird wieder der Ausgangslogikzustand des Interrupt-PINs hergestellt. Sobald die Messplatine auch einen Token empfangen hat wird auch der PWM-Stellwert für das Boilerheizelement (aus Regler Boilerdruck) und für den Tassenwärmer im Token übermittelt.&lt;br /&gt;
&lt;br /&gt;
Von der Messplatine erhält die Basisplatine den Token. Die UART-Schnittstelle wird ausgelesen, wenn am eingehenden Interrupt-PIN der Logikzustand wechselt. Die Basisplatine tauscht im Token die Daten für die eigenen Messwerte, die Schaltzustände der Tasten, die Schaltzustände der Magnetventile usw. aus und sendet den Token an die SSR-Platine weiter. Ist der Token versendet, wechselt die Basisplatine den Logikzustand des ausgehenden Interrupt-PINs und arbeitet in gleicher Logik weiter wie die Messplatine.&lt;br /&gt;
&lt;br /&gt;
Die SSR-Platine bekommt von der Basisplatine den Token durchgereicht. Die SSR-Platine wertet den Token lediglich aus, nimmt keine Veränderungen darin vor und reicht diesen dann weiter. Nach der SSR-Platine kann eine Display-Platine nachgeschaltet werden. Diese wertet die Informationen im Token aus und visualisiert diese bzw. stellt die Informationen über WLAN zur Verfügung. Im Falle eines Touch-Displays werden die Bytes für die Schaltzustände der Tasten ausgetauscht. Abschließend erhält die Messplatine wieder den Token und übernimmt die relevanten Informationen daraus in den neu zu sendenden Token.&lt;br /&gt;
&lt;br /&gt;
Anstelle des eingehenden und ausgehenden Interrupt-PINs kann u.u. auch die MicroPython-Funktionalität uart.irq verwendet werden. Diese ruft eine ISR auf, sobald Daten im EIngangspuffer der UART-Schnittstelle eingegangen sind.&lt;br /&gt;
&lt;br /&gt;
Das Konzept ist auszugestalten und der bzw. die Token sind exakt zu definieren. Dabei ist auch zu definieren (und zu erproben) wie die dann übergeordnete MATLAB®-GUI die Daten für die Visualisierung erhält. Der einzelne Token darf aufgrund der Limitierung durch den UART-Puffer des Raspberry Pi Picos 32 Byte nicht überschreiten. Als maximale Datenrate sind 115200 Baud möglich, was unter Berücksichtigung von START / STOP-Bits und Paritätsbit eine maximale Kommunikationsrate von 11520 Byte je Sekunde ergibt. Damit wären 360 jeweils 32 Byte lange Token in der Kommunikation möglich. Nach aktuellem Stand der Recherchen überschreitet die Datenmenge für die Kommunikation die 32 Byte Grenze, so dass mit mehreren Token gearbeitet werden muss. Jeder Token weist im ersten Byte eine Token-Nr auf, so dass der Token zweifelsfrei identifiziert werden kann. Alle Token müssen die gleiche Länge in Bytes aufweisen. Für zukünftige Erweiterungen sind Leer-Bytes in den Token vorhanden. Jeder der 4 Token muss die gleiche Länge in Bytes aufweisen.&lt;br /&gt;
&lt;br /&gt;
Getaktet wird die Kommunikation durch die Datenerfassung der Messplatine. Aufgrund der jeweils ungültigen ersten Wandlung eines Messkanals ist eine maximale Abtastrate von 430 Messwerten je Sekunde aufgeteilt auf acht Messkanäle, was ca. 53 Datensätze je Sekunde ergibt. Bei einer Abtastrate von 475 SPS ergeben sich 30 gültige Messdatensätze je Sekunde.Wird nach jedem zweiten gültigen Messkanal ein 27 Byte langer Token von der Messplatine gesendet, dann ergibt dies eine Inter-Kommunikation zwischen den MCUs von 120 Token bzw. 3240 Byte je Sekunde, was unter der als Maximum angesehenen Datenrate liegt. Selbst bei einer Verlängerung der Token auf 32 Byte würde lediglich 1/3 des theoretisch möglichen Datentransfers durchgeführt.&lt;/div&gt;</summary>
		<author><name>Peter Vogginger</name></author>
	</entry>
	<entry>
		<id>http://www.institut-fuer-kaffeetechnologie.de/Wiki/index.php?title=Projektr%C3%BCcksprache_06.11.2025&amp;diff=4742</id>
		<title>Projektrücksprache 06.11.2025</title>
		<link rel="alternate" type="text/html" href="http://www.institut-fuer-kaffeetechnologie.de/Wiki/index.php?title=Projektr%C3%BCcksprache_06.11.2025&amp;diff=4742"/>
		<updated>2025-11-10T19:24:45Z</updated>

		<summary type="html">&lt;p&gt;Peter Vogginger: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Besprechungsprotokoll – Projektrücksprache 06.11.2025=&lt;br /&gt;
Ort: online via ZOOM &lt;br /&gt;
&lt;br /&gt;
Datum: 06.11.2025 &lt;br /&gt;
&lt;br /&gt;
Teilnehmer: Jeremias Kögl, Philipp Schiebel, Peter Vogginger, LfbA Armin Rohnen &lt;br /&gt;
&lt;br /&gt;
Moderator: Jeremias Kögl &lt;br /&gt;
&lt;br /&gt;
Protokollant: Peter Vogginger&lt;br /&gt;
&amp;lt;br /&amp;gt; &lt;br /&gt;
&amp;lt;br /&amp;gt; &lt;br /&gt;
Zu Beginn der Besprechung weist Herr Rohnen auf die Einhaltung der Nomenklatur für alle Dateinamen in diesem Projekt hin. Darüber hinaus beschreibt er das Vorgehen bei der Erstellung der Agenda. Die Themenabfrage erfolgt montags und spätestens am Mittwoch liegt die Agenda allen Teilnehmenden vor. Die Agenda wird anhand der Punkte der ToDo-Liste im Wiki, entsprechend ihren Wiedervorlageterminen und den Rückmeldungen der Beteiligten, erstellt.&amp;lt;br /&amp;gt; &lt;br /&gt;
Zudem weist Herr Rohnen auf einen Fehler im Punkt Top 8) hin. Dieser lautet nur „Status Maschinensimulator“. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Top 1) Protokollannahme== &lt;br /&gt;
Das Protokoll wird nicht angenommen, da es noch nicht im Wiki eingepflegt ist. Die Protokollannahme wird auf die nächste Besprechung verlegt.&lt;br /&gt;
&lt;br /&gt;
==Top 2) Status Startprozedur== &lt;br /&gt;
Die Messplatine übernimmt die Initialisierung der Kommunikation. Die Aufgabenanalyse wird besprochen. Die Themen sind die Initialisierung der Systeme, der Aufbau der Kommunikationsstruktur, der Start der Messwerterfassung, der Reglerstart, die Anzeige und die Fehlerausgabe am Display.&lt;br /&gt;
&lt;br /&gt;
==Top 3) Status UART Kommunikation== &lt;br /&gt;
Die Mitglieder der Projektgruppe sollen klären, wie der Kommunikationsstart und die Fehlererkennung genau ablaufen. &amp;lt;br /&amp;gt; &lt;br /&gt;
Die Displayplatine soll unter anderem ein IN (Menge des gemahlenen Kaffees in Milliliter), ein OUT (Menge des bezogenen Kaffees in Milliliter), ein Time (Bezugsdauer), eine Preinfusion (Zeit) und eine Mischwassertemperatur (Kaffeebezugssystem) enthalten. Dies gilt ebenso für die vorgesehene zweite Brühgruppe.&amp;lt;br /&amp;gt; &lt;br /&gt;
In der Auflistung der Daten des Tokens fehlt der Sollwert des Mischreglers. Eine Touchkoordinate ist möglicherweise nicht nötig. Da das Touchdisplay neu zur Espressomaschine hinzugekommen ist, muss grundsätzlich geklärt werden, wie damit umgegangen wird.&amp;lt;br /&amp;gt;  &lt;br /&gt;
Es soll bis nächste Woche festgelegt werden, wann die Tabelle zum Tokeninhalt fertiggestellt ist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Top 4) Status Mehrkernnutzung==&lt;br /&gt;
Es haben sich keine Neuigkeiten ergeben. Im Projektplan ist ein Zeitraum festzulegen, wann der vorhandene Code zur Mehrkernnutzung abzuarbeiten ist. &lt;br /&gt;
&lt;br /&gt;
==Top 5) Status Verlagerung Füllstandsregler== &lt;br /&gt;
Die Aufgabenanalyse wird besprochen. Die Themen sind das Verhalten bei unzureichendem Füllstand, der Ablauf einer erfolgreichen Befüllung, der Aufbau einer Glasboilermaschine und die Implementierung auf die Basisplatine.&lt;br /&gt;
&lt;br /&gt;
==Top 6) Status Verlagerung Boilerdruckregler== &lt;br /&gt;
Der Boilerdruckregler kann nur bei einem ausreichendem Boilerfüllstand aktiviert werden. Der Glasboiler hat ein Betriebsproblem wegen der Regelung. Der langsam aufheizende Boiler ist druckgeregelt, während der schnell aufheizende Boiler über die Temperatur des langsam aufheizenden Boilers geregelt wird. Der Soll-Wert des letzteren ist der Ist-Wert des ersteren, sonst entsteht die gekoppelte Dampfblase lediglich durch den heißeren Boiler. &lt;br /&gt;
&lt;br /&gt;
==Top 7) Status Integration eines Displays mit Touchfunktion== &lt;br /&gt;
Die Textausgabe auf dem Display funktioniert. Die Touch-Funktion funktioniert noch nicht gut, dieses gibt scheinbar zufällige Werte aus und erkennt keinen Druck. Hierzu gibt Herr Rohnen Lösungshinweise. Bei einem Fortbestand der Fehlfunktion wird möglicherweise ein neues Display-Modell gesucht. welches in diesem Projekt aber nicht mehr eingeführt wird. Für diesen Fall wird auf den Funktionstest verzichtet. Die Funktionalität des Codes ist eigentlich über die 2. Ausgabe MATLAB meets MicroPython [40] abgesichert. &lt;br /&gt;
&lt;br /&gt;
==Top 8) Status Hardware Maschinensimulator== &lt;br /&gt;
Federführend ist Herr Schiebel, da er die Funktionen des Maschinensimulators für die Tests der Regler am dringendsten benötigt. &amp;lt;br /&amp;gt; &lt;br /&gt;
Die Aufgabenanalyse wird besprochen. Der Maschinensimulator ist in den Ring einzuschleifen und zusätzlich wird die Hardware für Testzwecke direkt an die jeweiligen Platinen angeschlossen. Der Heizwert wird manuell variiert, um das Verhalten des Reglers zu prüfen. Die Wassertemperatur und der Boilerdruck sind ineinander umrechenbar. Der Maschinensimulator liest nur im Token-Ring und schreibt nicht.&amp;lt;br /&amp;gt; &lt;br /&gt;
Bis nächste Woche ist festzulegen, wer diesen programmiert. Die Platinen-Hardware wird in den nächsten Wochen fertiggestellt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Top 9) Aufgabenanalyse== &lt;br /&gt;
Die Frist zur Abgabe der Aufgabenanalyse aller Teilnehmer verlängert sich bis zur nächsten Besprechung, da diese noch nicht vollständig sind. Die Entscheidung fällt Herr Rohnen, wobei er auch deutlich macht, dass zukünftig an Tempo zugelegt werden soll. &lt;br /&gt;
&lt;br /&gt;
==Top 10) Zielvereinbarung== &lt;br /&gt;
Alle Mitglieder der Projektgruppe bestätigen die Zielvereinbarung. Im Anschluss widerrufen alle diese Bestätigung, auf Anraten von Herrn Rohnen. Es fehlt die Verwendung des Maschinensimulators (um die Regler zu testen), es fehlen dessen Ziele und die Benennung der benötigten Hardware. Diese Punkte gilt es im Verlauf der folgenden Woche zu formulieren.&amp;lt;br /&amp;gt; &lt;br /&gt;
Es wird vereinbart, dass bis nächste Woche Donnerstag die finale Zielvereinbarung sowie die finalen Aufgabenanalysen von allen Mitgliedern der Projektgruppe eingereicht wird. Der Projektplan ist als GANTT-Diagramm auszuführen. Die einzelnen Punkte darin sollen an die Absätze der Aufgabenanalysen orientiert und nicht zu kleingliedrig ausgeführt sein.&lt;/div&gt;</summary>
		<author><name>Peter Vogginger</name></author>
	</entry>
	<entry>
		<id>http://www.institut-fuer-kaffeetechnologie.de/Wiki/index.php?title=Projektr%C3%BCcksprache_06.11.2025&amp;diff=4741</id>
		<title>Projektrücksprache 06.11.2025</title>
		<link rel="alternate" type="text/html" href="http://www.institut-fuer-kaffeetechnologie.de/Wiki/index.php?title=Projektr%C3%BCcksprache_06.11.2025&amp;diff=4741"/>
		<updated>2025-11-10T19:23:21Z</updated>

		<summary type="html">&lt;p&gt;Peter Vogginger: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Besprechungsprotokoll – Projektrücksprache 06.11.2025=&lt;br /&gt;
Ort: online via ZOOM &lt;br /&gt;
&lt;br /&gt;
Datum: 06.11.2025 &lt;br /&gt;
&lt;br /&gt;
Teilnehmer: Jeremias Kögl, Philipp Schiebel, Peter Vogginger, LfbA Armin Rohnen &lt;br /&gt;
&lt;br /&gt;
Moderator: Jeremias Kögl &lt;br /&gt;
&lt;br /&gt;
Protokollant: Peter Vogginger&lt;br /&gt;
&lt;br /&gt;
Zu Beginn der Besprechung weist Herr Rohnen auf die Einhaltung der Nomenklatur für alle Dateinamen in diesem Projekt hin. Darüber hinaus beschreibt er das Vorgehen bei der Erstellung der Agenda. Die Themenabfrage erfolgt montags und spätestens am Mittwoch liegt die Agenda allen Teilnehmenden vor. Die Agenda wird anhand der Punkte der ToDo-Liste im Wiki, entsprechend ihren Wiedervorlageterminen und den Rückmeldungen der Beteiligten, erstellt.&amp;lt;br /&amp;gt; &lt;br /&gt;
Zudem weist Herr Rohnen auf einen Fehler im Punkt Top 8) hin. Dieser lautet nur „Status Maschinensimulator“. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Top 1) Protokollannahme== &lt;br /&gt;
Das Protokoll wird nicht angenommen, da es noch nicht im Wiki eingepflegt ist. Die Protokollannahme wird auf die nächste Besprechung verlegt.&lt;br /&gt;
&lt;br /&gt;
==Top 2) Status Startprozedur== &lt;br /&gt;
Die Messplatine übernimmt die Initialisierung der Kommunikation. Die Aufgabenanalyse wird besprochen. Die Themen sind die Initialisierung der Systeme, der Aufbau der Kommunikationsstruktur, der Start der Messwerterfassung, der Reglerstart, die Anzeige und die Fehlerausgabe am Display.&lt;br /&gt;
&lt;br /&gt;
==Top 3) Status UART Kommunikation== &lt;br /&gt;
Die Mitglieder der Projektgruppe sollen klären, wie der Kommunikationsstart und die Fehlererkennung genau ablaufen. &amp;lt;br /&amp;gt; &lt;br /&gt;
Die Displayplatine soll unter anderem ein IN (Menge des gemahlenen Kaffees in Milliliter), ein OUT (Menge des bezogenen Kaffees in Milliliter), ein Time (Bezugsdauer), eine Preinfusion (Zeit) und eine Mischwassertemperatur (Kaffeebezugssystem) enthalten. Dies gilt ebenso für die vorgesehene zweite Brühgruppe.&amp;lt;br /&amp;gt; &lt;br /&gt;
In der Auflistung der Daten des Tokens fehlt der Sollwert des Mischreglers. Eine Touchkoordinate ist möglicherweise nicht nötig. Da das Touchdisplay neu zur Espressomaschine hinzugekommen ist, muss grundsätzlich geklärt werden, wie damit umgegangen wird.&amp;lt;br /&amp;gt;  &lt;br /&gt;
Es soll bis nächste Woche festgelegt werden, wann die Tabelle zum Tokeninhalt fertiggestellt ist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Top 4) Status Mehrkernnutzung==&lt;br /&gt;
Es haben sich keine Neuigkeiten ergeben. Im Projektplan ist ein Zeitraum festzulegen, wann der vorhandene Code zur Mehrkernnutzung abzuarbeiten ist. &lt;br /&gt;
&lt;br /&gt;
==Top 5) Status Verlagerung Füllstandsregler== &lt;br /&gt;
Die Aufgabenanalyse wird besprochen. Die Themen sind das Verhalten bei unzureichendem Füllstand, der Ablauf einer erfolgreichen Befüllung, der Aufbau einer Glasboilermaschine und die Implementierung auf die Basisplatine.&lt;br /&gt;
&lt;br /&gt;
==Top 6) Status Verlagerung Boilerdruckregler== &lt;br /&gt;
Der Boilerdruckregler kann nur bei einem ausreichendem Boilerfüllstand aktiviert werden. Der Glasboiler hat ein Betriebsproblem wegen der Regelung. Der langsam aufheizende Boiler ist druckgeregelt, während der schnell aufheizende Boiler über die Temperatur des langsam aufheizenden Boilers geregelt wird. Der Soll-Wert des letzteren ist der Ist-Wert des ersteren, sonst entsteht die gekoppelte Dampfblase lediglich durch den heißeren Boiler. &lt;br /&gt;
&lt;br /&gt;
==Top 7) Status Integration eines Displays mit Touchfunktion== &lt;br /&gt;
Die Textausgabe auf dem Display funktioniert. Die Touch-Funktion funktioniert noch nicht gut, dieses gibt scheinbar zufällige Werte aus und erkennt keinen Druck. Hierzu gibt Herr Rohnen Lösungshinweise. Bei einem Fortbestand der Fehlfunktion wird möglicherweise ein neues Display-Modell gesucht. welches in diesem Projekt aber nicht mehr eingeführt wird. Für diesen Fall wird auf den Funktionstest verzichtet. Die Funktionalität des Codes ist eigentlich über die 2. Ausgabe MATLAB meets MicroPython [40] abgesichert. &lt;br /&gt;
&lt;br /&gt;
==Top 8) Status Hardware Maschinensimulator== &lt;br /&gt;
Federführend ist Herr Schiebel, da er die Funktionen des Maschinensimulators für die Tests der Regler am dringendsten benötigt. &amp;lt;br /&amp;gt; &lt;br /&gt;
Die Aufgabenanalyse wird besprochen. Der Maschinensimulator ist in den Ring einzuschleifen und zusätzlich wird die Hardware für Testzwecke direkt an die jeweiligen Platinen angeschlossen. Der Heizwert wird manuell variiert, um das Verhalten des Reglers zu prüfen. Die Wassertemperatur und der Boilerdruck sind ineinander umrechenbar. Der Maschinensimulator liest nur im Token-Ring und schreibt nicht.&amp;lt;br /&amp;gt; &lt;br /&gt;
Bis nächste Woche ist festzulegen, wer diesen programmiert. Die Platinen-Hardware wird in den nächsten Wochen fertiggestellt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Top 9) Aufgabenanalyse== &lt;br /&gt;
Die Frist zur Abgabe der Aufgabenanalyse aller Teilnehmer verlängert sich bis zur nächsten Besprechung, da diese noch nicht vollständig sind. Die Entscheidung fällt Herr Rohnen, wobei er auch deutlich macht, dass zukünftig an Tempo zugelegt werden soll. &lt;br /&gt;
&lt;br /&gt;
==Top 10) Zielvereinbarung== &lt;br /&gt;
Alle Mitglieder der Projektgruppe bestätigen die Zielvereinbarung. Im Anschluss widerrufen alle diese Bestätigung, auf Anraten von Herrn Rohnen. Es fehlt die Verwendung des Maschinensimulators (um die Regler zu testen), es fehlen dessen Ziele und die Benennung der benötigten Hardware. Diese Punkte gilt es im Verlauf der folgenden Woche zu formulieren.&amp;lt;br /&amp;gt; &lt;br /&gt;
Es wird vereinbart, dass bis nächste Woche Donnerstag die finale Zielvereinbarung sowie die finalen Aufgabenanalysen von allen Mitgliedern der Projektgruppe eingereicht wird. Der Projektplan ist als GANTT-Diagramm auszuführen. Die einzelnen Punkte darin sollen an die Absätze der Aufgabenanalysen orientiert und nicht zu kleingliedrig ausgeführt sein.&lt;/div&gt;</summary>
		<author><name>Peter Vogginger</name></author>
	</entry>
	<entry>
		<id>http://www.institut-fuer-kaffeetechnologie.de/Wiki/index.php?title=Projektr%C3%BCcksprache_06.11.2025&amp;diff=4740</id>
		<title>Projektrücksprache 06.11.2025</title>
		<link rel="alternate" type="text/html" href="http://www.institut-fuer-kaffeetechnologie.de/Wiki/index.php?title=Projektr%C3%BCcksprache_06.11.2025&amp;diff=4740"/>
		<updated>2025-11-10T19:21:17Z</updated>

		<summary type="html">&lt;p&gt;Peter Vogginger: Die Seite wurde neu angelegt: „=Besprechungsprotokoll – Projektrücksprache 06.11.2025= Ort: online via ZOOM   Datum: 06.11.2025   Teilnehmer: Jeremias Kögl, Philipp Schiebel, Peter Vogginger, LfbA Armin Rohnen   Moderator: Jeremias Kögl   Protokollant: Peter Vogginger  Zu Beginn der Besprechung weist Herr Rohnen auf die Einhaltung der Nomenklatur für alle Dateinamen in diesem Projekt hin. Darüber hinaus beschreibt er das Vorgehen bei der Erstellung der Agenda. Die Themenabfrage…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Besprechungsprotokoll – Projektrücksprache 06.11.2025=&lt;br /&gt;
Ort: online via ZOOM &lt;br /&gt;
&lt;br /&gt;
Datum: 06.11.2025 &lt;br /&gt;
&lt;br /&gt;
Teilnehmer: Jeremias Kögl, Philipp Schiebel, Peter Vogginger, LfbA Armin Rohnen &lt;br /&gt;
&lt;br /&gt;
Moderator: Jeremias Kögl &lt;br /&gt;
&lt;br /&gt;
Protokollant: Peter Vogginger&lt;br /&gt;
&lt;br /&gt;
Zu Beginn der Besprechung weist Herr Rohnen auf die Einhaltung der Nomenklatur für alle Dateinamen in diesem Projekt hin. Darüber hinaus beschreibt er das Vorgehen bei der Erstellung der Agenda. Die Themenabfrage erfolgt montags und spätestens am Mittwoch liegt die Agenda allen Teilnehmenden vor. Die Agenda wird anhand der Punkte der ToDo-Liste im Wiki, entsprechend ihren Wiedervorlageterminen und den Rückmeldungen der Beteiligten, erstellt.&amp;lt;br /&amp;gt; &lt;br /&gt;
Zudem weist Herr Rohnen auf einen Fehler im Punkt Top 8) hin. Dieser lautet nur „Status Maschinensimulator“. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Top 1) Protokollannahme== &lt;br /&gt;
Das Protokoll wird nicht angenommen, da es noch nicht im Wiki eingepflegt ist. Die Protokollannahme wird auf die nächste Besprechung verlegt.&lt;br /&gt;
&lt;br /&gt;
==Top 2) Status Startprozedur== &lt;br /&gt;
Die Messplatine übernimmt die Initialisierung der Kommunikation. Die Aufgabenanalyse wird besprochen. Die Themen sind die Initialisierung der Systeme, der Aufbau der Kommunikationsstruktur, der Start der Messwerterfassung, der Reglerstart, die Anzeige und die Fehlerausgabe am Display.&lt;br /&gt;
&lt;br /&gt;
==Top 3) Status UART Kommunikation== &lt;br /&gt;
Die Mitglieder der Projektgruppe sollen klären, wie der Kommunikationsstart und die Fehlererkennung genau ablaufen. &amp;lt;br /&amp;gt; &lt;br /&gt;
Die Displayplatine soll unter anderem ein IN (Menge des gemahlenen Kaffees in Milliliter), ein OUT (Menge des bezogenen Kaffees in Milliliter), ein Time (Bezugsdauer), eine Preinfusion (Zeit) und eine Mischwassertemperatur (Kaffeebezugssystem) enthalten. Dies gilt ebenso für die vorgesehene zweite Brühgruppe.&amp;lt;br /&amp;gt; &lt;br /&gt;
In der Auflistung der Daten des Tokens fehlt der Sollwert des Mischreglers. Eine Touchkoordinate ist möglicherweise nicht nötig. Da das Touchdisplay neu zur Espressomaschine hinzugekommen ist, muss grundsätzlich geklärt werden, wie damit umgegangen wird.&amp;lt;br /&amp;gt;  &lt;br /&gt;
Es soll bis nächste Woche festgelegt werden, wann die Tabelle zum Tokeninhalt fertiggestellt ist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Top 4) Status Mehrkernnutzung==&lt;br /&gt;
Es haben sich keine Neuigkeiten ergeben. Im Projektplan ist ein Zeitraum festzulegen, wann der vorhandene Code zur Mehrkernnutzung abzuarbeiten ist. &lt;br /&gt;
&lt;br /&gt;
==Top 5) Status Verlagerung Füllstandsregler== &lt;br /&gt;
Die Aufgabenanalyse wird besprochen. Die Themen sind das Verhalten bei unzureichendem Füllstand, der Ablauf einer erfolgreichen Befüllung, der Aufbau einer Glasboilermaschine und die Implementierung auf die Basisplatine.&lt;br /&gt;
&lt;br /&gt;
==Top 6) Status Verlagerung Boilerdruckregler== &lt;br /&gt;
Der Boilerdruckregler kann nur bei einem ausreichendem Boilerfüllstand aktiviert werden. Der Glasboiler hat ein Betriebsproblem wegen der Regelung. Der langsam aufheizende Boiler ist druckgeregelt, während der schnell aufheizende Boiler über die Temperatur des langsam aufheizenden Boilers geregelt wird. Der Soll-Wert des letzteren ist der Ist-Wert des ersteren, sonst entsteht die gekoppelte Dampfblase lediglich durch den heißeren Boiler. &lt;br /&gt;
&lt;br /&gt;
==Top 7) Status Integration eines Displays mit Touchfunktion== &lt;br /&gt;
Die Textausgabe auf dem Display funktioniert. Die Touch-Funktion funktioniert noch nicht gut, dieses gibt scheinbar zufällige Werte aus und erkennt keinen Druck. Hierzu gibt Herr Rohnen Lösungshinweise. Bei einem Fortbestand der Fehlfunktion wird möglicherweise ein neues Display-Modell gesucht. welches in diesem Projekt aber nicht mehr eingeführt wird. Für diesen Fall wird auf den Funktionstest verzichtet. Die Funktionalität des Codes ist eigentlich über die 2. Ausgabe MATLAB meets MicroPython [40] abgesichert. &lt;br /&gt;
&lt;br /&gt;
==Top 8) Status Hardware Maschinensimulator== &lt;br /&gt;
Federführend ist Herr Schiebel, da er die Funktionen des Maschinensimulators für die Tests der Regler am dringendsten benötigt. &amp;lt;br /&amp;gt; &lt;br /&gt;
Die Aufgabenanalyse wird besprochen. Der Maschinensimulator ist in den Ring einzuschleifen und zusätzlich wird die Hardware für Testzwecke direkt an die jeweiligen Platinen angeschlossen. Der Heizwert wird manuell variiert, um das Verhalten des Reglers zu prüfen. Die Wassertemperatur und der Boilerdruck sind ineinander umrechenbar. Der Maschinensimulator liest nur im Token-Ring und schreibt nicht.&amp;lt;br /&amp;gt; &lt;br /&gt;
Bis nächste Woche ist festzulegen, wer diesen programmiert. Die Platinen-Hardware wird in den nächsten Wochen fertiggestellt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Top 9) Aufgabenanalyse== &lt;br /&gt;
Die Frist zur Abgabe der Aufgabenanalyse aller Teilnehmer verlängert sich bis zur nächsten Besprechung, da diese noch nicht vollständig sind. Die Entscheidung fällt Herr Rohnen, wobei er auch deutlich macht, dass zukünftig an Tempo zugelegt werden soll. &lt;br /&gt;
&lt;br /&gt;
==Top 10) Zielvereinbarung== &lt;br /&gt;
Alle Mitglieder der Projektgruppe bestätigen die Zielvereinbarung. Im Anschluss widerrufen alle diese Bestätigung, auf Anraten von Herrn Rohnen. Es fehlt die Verwendung des Maschinensimulators (um die Regler zu testen), es fehlen dessen Ziele und die Benennung der benötigten Hardware. Diese Punkte gilt es im Verlauf der folgenden Woche zu formulieren.&lt;/div&gt;</summary>
		<author><name>Peter Vogginger</name></author>
	</entry>
	<entry>
		<id>http://www.institut-fuer-kaffeetechnologie.de/Wiki/index.php?title=Systemsoftware&amp;diff=4736</id>
		<title>Systemsoftware</title>
		<link rel="alternate" type="text/html" href="http://www.institut-fuer-kaffeetechnologie.de/Wiki/index.php?title=Systemsoftware&amp;diff=4736"/>
		<updated>2025-11-10T18:08:24Z</updated>

		<summary type="html">&lt;p&gt;Peter Vogginger: /* ToDo-Liste: MCUs - Verlagerung der Regelkreise aus der MATLAB®-GUI auf die Mikrocontroller der Steuerungselektronik */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;htmltag tagname=&amp;quot;img&amp;quot; src=&amp;quot;http://vg04.met.vgwort.de/na/4531f1734b324b72b2d7e566cdf639f0&amp;quot;  width=&amp;quot;1&amp;quot; height=&amp;quot;1&amp;quot; alt=&amp;quot;&amp;quot;&amp;gt;&amp;lt;/htmltag&amp;gt;&lt;br /&gt;
[[Datei:Breites Logoband.png|mini|zentriert|hochkant=2.5]]&amp;lt;br&amp;gt;&lt;br /&gt;
Die Systemsoftware lässt sich nicht ohne die Beachtung der Systemelektronik erstellen.&lt;br /&gt;
&lt;br /&gt;
Für die Systemsoftware wurde ein mehrstufiger Entwicklungsprozess definiert:&lt;br /&gt;
# Nutzung einer MCU auf der MicroPython verwendet werden kann. Dies ist durch das STM32F411 nucleo Board der Basiselektronik bzw. durch den Raspberry Pi Pico der Multi-MCU-Elektronik gegeben.&lt;br /&gt;
# Auf der MCU werden lediglich die elementaren Grundfunktionen (GPIO schalten und erfassen, Messwert erfassen, PWM Ausgeben, Sollwert ausgeben, etc.) realisiert und über eine MicroPython zu MATLAB® Schnittstelle [41] wird die Funktionalität in einer MATLAB® GUI hergestellt.&lt;br /&gt;
# Die Softwareentwicklung startet mit der labortechnischen Espressomaschine und wird auf die weiteren Projekte schrittweise transportiert. Dazu ist die Maschinenelektronik gleich zu halten und es sind die gleichen Anschluss-Pins zu verwenden.&lt;br /&gt;
# Nach Abschluss der Testphase der MATLAB® Bedienung wird schrittweise die Betriebssoftware in MicroPython auf der MCU implementiert, so dass am Ende dieses Prozessschrittes die MATLAB®-Verbindung lediglich für weiterführende Datenerfassung und grafische Darstellungen verwendet wird, welche nicht mit dem Display der Maschine möglich ist oder dort nicht dargestellt werden soll.&lt;br /&gt;
# Ob eine Portierung des MicroPython-Codes nach Microcontroller C durchgeführt wird, ist derzeit nicht entschieden.&lt;br /&gt;
&lt;br /&gt;
Es wurden mehrere, die Softwareentwicklung vorbereitende FMEAs durchgeführt.  Die hierdurch entstandenen Dokumentation befinden sich in der Dokumentationsauflistung. Im weiteren wurde eine Projektarbeit zur Konzeptfindung für die Badienung durchgeführt. Auch die hierdurch entstandenen, teilweise auf die FMEA aufbauenden Dokumente befinden sich in der Dokumentationsliste.&lt;br /&gt;
&lt;br /&gt;
= Projektdokumentationen und Beschreibungen =&lt;br /&gt;
* [[:Datei:20210228 Konzept Systemelektronik.pdf|Konzeptbeschreibung Systemelektronik]]&lt;br /&gt;
* [[:Datei:20210605 Workflow Embedded Systems.pdf|Workflow Embedded Systems]]&lt;br /&gt;
* [[:Datei:20200521 Bericht1 NerminArbi.pdf|Funktionsanalyse Boilerbefüllung, Tassenwärmung, Milchschäumen]]&lt;br /&gt;
* [[:Datei:20200518 Bericht halbauto Entkalkung Egger Alexander.pdf|Funktionsanalyse zur halbautomatischen Entkalkung]]&lt;br /&gt;
* [[:Datei:20200518 V0 4 Bericht Funktionsanalyse Rückspulung-Spulung Sladoje.pdf|Funktionsanalyse Rückspülung und Spülung]]&lt;br /&gt;
* [[:Datei:20200521 Bericht Espresso-Teewasserbezug Urbin.pdf|Funktionsanalyse Espresso und Teewasserbezug]]&lt;br /&gt;
* [[:Datei:20200522 Bericht Funktionsanalyse Energieeffizienz Egger Alexander.pdf|Funktionsanalyse Energieeffizienz]]&lt;br /&gt;
* [[:Datei:20200521 V2 Bericht Funktionsanalyse Bedienung Sladoje.pdf|Funktionsanalyse Bedienung]]&lt;br /&gt;
* [[:Datei:20200525 Bericht Abbildung aller Maschinen Urbin V2.pdf|Funktionsanalyse Abbildung aller Maschinen]]&lt;br /&gt;
* [[:Datei:20200609 Bericht Fehleranalyse Entschichtung.pdf|Fehleranalyse Entschichtung]]&lt;br /&gt;
* [[:Datei:20200610 Fehleranalyse Dampf Brühgruppe Sladoje.pdf|Fehleranalyse Brühgruppe und Dampfbezug]]&lt;br /&gt;
* [[:Datei:20200613 Bericht Fehleranalyse Mischer;Magnetventile V2.pdf|Fehleranalyse Mischer und Magnetventile]]&lt;br /&gt;
* [[:Datei:20200611 Bericht3 NerminArbi.pdf|Fehleranalyse Boiler]]&lt;br /&gt;
* [[:Datei:20200705 Dichtheitsprüfung.pdf|Dichtheitsprüfung]]&lt;br /&gt;
* [[:Datei:20200704 Massnahmen Urbin.pdf|Prüfkonzepte Magnetventile und Mischer]]&lt;br /&gt;
* [[:Datei:20200701 Maßnahmenanalyse NerminArbi.pdf|Maßnahmen Boiler]]&lt;br /&gt;
* [[:Datei:20200628 Maßnahmen Entschichtung zweiter Stand.pdf|Maßnahmen Entschichtung]]&lt;br /&gt;
* [[:Datei:20200627 Maßnahmenkonzept Brühguppe Dampf Sladoje.pdf|Maßnahmen Brühgruppe und Dampf]]&lt;br /&gt;
* [[:Datei:20200707_FMEA.xlsx|FMEA Tabelle]]&lt;br /&gt;
* [[:Datei:20201207_Bedienkonzept.pptx|PPT Simulation des Bedienkonzeptes]]&lt;br /&gt;
* [[:Datei:20210207_Bedienkonzept_Funktionsliste.xlsx|Bedienkonzept Funktionsliste]]&lt;br /&gt;
* [[:Datei:20210219_Bedienkonzept_Projektdokumentation.pdf|Bedienkonzept Projektdokumentation]]&lt;br /&gt;
* [[:Datei:HMProjektBedienoberflaecheEspresso.zip|MATLAB® GUI]]&lt;br /&gt;
* [[Entwicklung Systemsoftware SoSe2022]]&lt;br /&gt;
* [[Entwicklung Systemsoftware SoSe2023]]&lt;br /&gt;
* [[Mikrocontroller Programmierung in MicroPython WiSe 2025/26]]&lt;br /&gt;
&lt;br /&gt;
= [http://www.institut-fuer-kaffeetechnologie.de/Intern/index.php?title=Programmcode Programmcode] =&lt;br /&gt;
Aktueller Programmcode und Änderungsdokumentation ab Jan 2023&lt;br /&gt;
&lt;br /&gt;
= [http://www.institut-fuer-kaffeetechnologie.de/Intern/index.php?title=Software-Bugs Software-Bugs] =&lt;br /&gt;
&lt;br /&gt;
= ToDo-Liste(n) Systemsoftware =&lt;br /&gt;
&lt;br /&gt;
== Prioritätsangabe ==&lt;br /&gt;
Prio 1 - Abarbeitung zeitnah erforderlich&amp;lt;br&amp;gt;&lt;br /&gt;
Prio 2 - Abarbeitung erforderlich&amp;lt;br&amp;gt;&lt;br /&gt;
Prio 3 - Abarbeitung kann warten&amp;lt;br&amp;gt;&lt;br /&gt;
Prio 99 - Abarbeitung erfordert Vorarbeiten&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Status ==&lt;br /&gt;
10 - Erfasst&amp;lt;br&amp;gt;&lt;br /&gt;
30 - in Bearbeitung&amp;lt;br&amp;gt;&lt;br /&gt;
50 - Lösung definiert&amp;lt;br&amp;gt;&lt;br /&gt;
70 - in Umsetzung&amp;lt;br&amp;gt;&lt;br /&gt;
90 - Umsetzung abgeschlossen&amp;lt;br&amp;gt;&lt;br /&gt;
99 - Abbruch per Beschluss (Dokumentation dazu erforderlich)&amp;lt;br&amp;gt;&lt;br /&gt;
100 - Maßnahme bestätigt&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ToDo-Liste: Mechatronische Inbetriebnahme Glasboilermaschine =&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Arbeitspaket !! Wer !! Prio !! Status !! WV&lt;br /&gt;
|-&lt;br /&gt;
| [[Fehlerbehebungen]] || || 1 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Startprozedure]] || ||  1 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Tankfüllstandsregelung]] || || 1 || 10 ||&lt;br /&gt;
|- &lt;br /&gt;
| [[Boilerfüllstandsregelung]] || || 1 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Boilerdruckregelung]] || || 1 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Mischwassertemperaturregelung]] || || 1 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Durchflussregelung]] || || 1 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Kaffeebezug]] || || 2 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Teebezug]] || || 1 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Temperatureinstellung über Vertikalhebel]] || || 1 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Simulation Handhebelmaschine]] || || 1 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Flush/Rückspülreinigung]] || || 1 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| || || || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= ToDo-Liste: MCUs - Verlagerung der Regelkreise aus der MATLAB®-GUI auf die Mikrocontroller der Steuerungselektronik =&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Arbeitspaket !! Wer !! Prio !! Status !! WV&lt;br /&gt;
|-&lt;br /&gt;
| [[Kommunikation per UART|UART Kommunikation zwischen den einzelnen MCUs]] || Peter Vogginger|| 1 || 30 || 13.11.2025&lt;br /&gt;
|-&lt;br /&gt;
| [[Mehrkernnutzung und/oder Multitasking]] || Peter Vogginger||  1 || 30 ||27.11.2025&lt;br /&gt;
|-&lt;br /&gt;
| [[Startprozedur]]&lt;br /&gt;
|Philipp Schiebel&lt;br /&gt;
|1&lt;br /&gt;
|30&lt;br /&gt;
|06.11.2025&lt;br /&gt;
|-&lt;br /&gt;
| [[Verlagerung des Füllstandsreglers auf das Basisboard]] || Philipp Schiebel|| 1 || 30 || 06.11.2025&lt;br /&gt;
|- &lt;br /&gt;
| [[Verlagerung der Boilerdruckregelung auf die Messplatine]] || Philipp Schiebel|| 1 || 30 ||  	 06.11.2025&lt;br /&gt;
|-&lt;br /&gt;
| [[Verlagerung des Mischtemperaturreglers auf das Basisboard]] || Philipp Schiebel|| 1 || 10 || 13.11.2025&lt;br /&gt;
|-&lt;br /&gt;
| [[Verlagerung des Durchflussreglers auf das Basisboard]] || Philipp Schiebel|| 1 || 10 ||  	 13.11.2025&lt;br /&gt;
|-&lt;br /&gt;
| [[Erstellung der Funktionssteuerung - Preinfusion auf dem Basisboard]] || || 2 || 10 || &lt;br /&gt;
|-&lt;br /&gt;
| [[Erstellung der Funktionssteuerung - Kaffeebezug auf dem Basisboard]] || || 1 || 10 || &lt;br /&gt;
|-&lt;br /&gt;
| [[Erstellung der Funktionssteuerung - Wasserbezug auf dem Basisboard]] || || 1 || 10 || &lt;br /&gt;
|-&lt;br /&gt;
| [[Erstellung der Funktionssteuerung - Dampfbezug auf dem Basisboard]] || || 1 || 10 || 	 &lt;br /&gt;
|-&lt;br /&gt;
| [[Erstellung der Funktionssteuerung - Spülen auf dem Basisboard]] || || 1 || 10 ||  &lt;br /&gt;
|-&lt;br /&gt;
| [[Erstellung der Funktionssteuerung - Grundreinigung auf dem Basisboard]] || || 1 || 10 ||  &lt;br /&gt;
|-&lt;br /&gt;
| [[Integration eines Displays mit Touchfunktion]] || Jeremias Kögl|| 1 || 30 ||  13.11.2025&lt;br /&gt;
|-&lt;br /&gt;
| [[Integration eines Vertikalhebels]] || Jeremias Kögl|| 1 || 30 ||  17.12.2025&lt;br /&gt;
|-&lt;br /&gt;
| [[Visualisierung und Interaktion über die MATLAB®-GUI]] || || 1 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Visualisierung und Interaktion über eine WEB-Anwendung]] || || 1 || 10 ||  &lt;br /&gt;
|-&lt;br /&gt;
| [[Maschinensimulator]] || alle|| 1 || 30 ||13.11.2025&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= ToDo-Liste: Allgemeines =&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Arbeitspaket !! Wer !! Prio !! Status !! WV&lt;br /&gt;
|-&lt;br /&gt;
| [[Sicherheitsfunktionen]] || || 99 || 50 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[ Übersicht über verbaute Aktorik und Sensorik in Tabellenform]] || || 2 || 90 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Stromsparmodus]] || || 99 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| || || || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= ToDo-Liste: MCUs - Hardwarenahe Software =&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Arbeitspaket !! Wer !! Prio !! Status !! WV&lt;br /&gt;
|-&lt;br /&gt;
| [[Grundfunktionen der MCU und mehrere MCUs]] || || || 100 ||&lt;br /&gt;
|-	&lt;br /&gt;
| Basisboard: [[Schalten Magnetventile (Labor) STM32-Basisboard]] MATLAB®GUI || || || 100&lt;br /&gt;
|-&lt;br /&gt;
| Basisboard: [[Pumpenansteuerung Basisboard Multi-MCU]] || || || 100 ||&lt;br /&gt;
|- 	 &lt;br /&gt;
| Basisboard: [[Schrittmotorsteuerungen Basisboard Multi-MCU]] || || || 100 ||&lt;br /&gt;
|-&lt;br /&gt;
| Basisboard: [[Tastenerkennung Basisboard Multi-MCU]] || || 1 || 10 || &lt;br /&gt;
|- 	 &lt;br /&gt;
| Basisboard: [[Füllstandserkennung Basisboard Multi-MCU]] || || || 100 ||&lt;br /&gt;
|- 	 &lt;br /&gt;
| Basisboard: [[Durchflussmessung Basisnoard Multi-MCU]] || || || 100 ||&lt;br /&gt;
|- 	  	 	  	 &lt;br /&gt;
| SSR-Platine: [[Schalten Magnetventile SSR-Platine Multi-MCU]] || || || 100 ||&lt;br /&gt;
|- 	 &lt;br /&gt;
| SSR-Platine: [[Schrittmotorsteuerungen SSR-Platine Multi-MCU]] || || || 100 ||&lt;br /&gt;
|-&lt;br /&gt;
| Messplatine: [[Messdatenerfassung Multi-MCU]] || || || 100 ||&lt;br /&gt;
|-&lt;br /&gt;
| || || || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= ToDo-Liste der Grundlagenprogrammierung - MATLAB®-Funktionen und GUI =&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Arbeitspaket !! Wer !! Prio !! Status !! WV&lt;br /&gt;
|-&lt;br /&gt;
| [[MATLAB®-GUI Start der App]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[MATLAB®-GUI Initialisierung Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[MATLAB®-GUI Schalten Magnetventile]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[MATLAB®-GUI Datensicherung]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Messwerte erfassen Multi-MCU]] || || || ||&lt;br /&gt;
|- &lt;br /&gt;
| [[Pumpenansteuerung Multi-MCU]] || || || ||&lt;br /&gt;
|- &lt;br /&gt;
| [[Füllstandsregler Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Regler Boilerdruck Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Mischregler Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Durchflussregler Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Misch-Durchfluss Kaskadenregelung Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Preinfusion Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[einfacher Kaffeebezug Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Kaffeebezug Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Wasserbezug Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Dampfbezug Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Spülvorgänge Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Grundreinigung Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Tastenbedienung Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Display Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Glasboiler Abtropfwanne]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Schrittmotorensteuerung Bypass]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Schrittmotorensteuerung Mischer]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Schrittmotorensteuerung Brühgruppendrossel]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Adaption an Multi-MCU - Neuprogrammierung MATLAB® GUI]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| Dokumentation der Software mit STM32-Elektronik. &amp;lt;br&amp;gt;Ein Betrieb dieser wird nicht mehr weiter verfolgt. || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Messwerte erfassen (Labor)]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Pumpenansteuerung (Labor)]] || ||  || || &lt;br /&gt;
|-&lt;br /&gt;
| [[Füllstandsregler (Labor)]] || ||  || || &lt;br /&gt;
|-&lt;br /&gt;
| [[Regler Boilerdruck (Labor)]] || ||  || ||  &lt;br /&gt;
|-&lt;br /&gt;
| [[Mischregler (Labor)]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Durchflussregler (Labor)]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[einfacher Kaffeebezug (Labor)]] || ||  || ||  &lt;br /&gt;
|-&lt;br /&gt;
| [[Kaffeebezug (Labor)]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Wasserbezug (Labor)]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Dampfbezug]] || ||  || ||  &lt;br /&gt;
|-&lt;br /&gt;
| [[Spülvorgänge (Labor)]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Tastenbedienung (Labor)]] || || || ||  &lt;br /&gt;
|-&lt;br /&gt;
| [[Anpassungen für Schrittmotorensteuerung]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| || || || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= ToDo-Liste: APP =&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Arbeitspaket !! Wer !! Prio !! Status !! WV&lt;br /&gt;
|-&lt;br /&gt;
| [[APP - Konzept]] || || 2 || 10 || &lt;br /&gt;
|- 	 &lt;br /&gt;
| [[Messwerte erfassen APP]] || || 99 || 10 || &lt;br /&gt;
|-&lt;br /&gt;
| [[Preset / Profilverwaltung]] || || 99 || 10 || &lt;br /&gt;
|-&lt;br /&gt;
| || || || ||&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Peter Vogginger</name></author>
	</entry>
	<entry>
		<id>http://www.institut-fuer-kaffeetechnologie.de/Wiki/index.php?title=Systemsoftware&amp;diff=4735</id>
		<title>Systemsoftware</title>
		<link rel="alternate" type="text/html" href="http://www.institut-fuer-kaffeetechnologie.de/Wiki/index.php?title=Systemsoftware&amp;diff=4735"/>
		<updated>2025-11-10T18:07:34Z</updated>

		<summary type="html">&lt;p&gt;Peter Vogginger: /* ToDo-Liste: MCUs - Verlagerung der Regelkreise aus der MATLAB®-GUI auf die Mikrocontroller der Steuerungselektronik */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;htmltag tagname=&amp;quot;img&amp;quot; src=&amp;quot;http://vg04.met.vgwort.de/na/4531f1734b324b72b2d7e566cdf639f0&amp;quot;  width=&amp;quot;1&amp;quot; height=&amp;quot;1&amp;quot; alt=&amp;quot;&amp;quot;&amp;gt;&amp;lt;/htmltag&amp;gt;&lt;br /&gt;
[[Datei:Breites Logoband.png|mini|zentriert|hochkant=2.5]]&amp;lt;br&amp;gt;&lt;br /&gt;
Die Systemsoftware lässt sich nicht ohne die Beachtung der Systemelektronik erstellen.&lt;br /&gt;
&lt;br /&gt;
Für die Systemsoftware wurde ein mehrstufiger Entwicklungsprozess definiert:&lt;br /&gt;
# Nutzung einer MCU auf der MicroPython verwendet werden kann. Dies ist durch das STM32F411 nucleo Board der Basiselektronik bzw. durch den Raspberry Pi Pico der Multi-MCU-Elektronik gegeben.&lt;br /&gt;
# Auf der MCU werden lediglich die elementaren Grundfunktionen (GPIO schalten und erfassen, Messwert erfassen, PWM Ausgeben, Sollwert ausgeben, etc.) realisiert und über eine MicroPython zu MATLAB® Schnittstelle [41] wird die Funktionalität in einer MATLAB® GUI hergestellt.&lt;br /&gt;
# Die Softwareentwicklung startet mit der labortechnischen Espressomaschine und wird auf die weiteren Projekte schrittweise transportiert. Dazu ist die Maschinenelektronik gleich zu halten und es sind die gleichen Anschluss-Pins zu verwenden.&lt;br /&gt;
# Nach Abschluss der Testphase der MATLAB® Bedienung wird schrittweise die Betriebssoftware in MicroPython auf der MCU implementiert, so dass am Ende dieses Prozessschrittes die MATLAB®-Verbindung lediglich für weiterführende Datenerfassung und grafische Darstellungen verwendet wird, welche nicht mit dem Display der Maschine möglich ist oder dort nicht dargestellt werden soll.&lt;br /&gt;
# Ob eine Portierung des MicroPython-Codes nach Microcontroller C durchgeführt wird, ist derzeit nicht entschieden.&lt;br /&gt;
&lt;br /&gt;
Es wurden mehrere, die Softwareentwicklung vorbereitende FMEAs durchgeführt.  Die hierdurch entstandenen Dokumentation befinden sich in der Dokumentationsauflistung. Im weiteren wurde eine Projektarbeit zur Konzeptfindung für die Badienung durchgeführt. Auch die hierdurch entstandenen, teilweise auf die FMEA aufbauenden Dokumente befinden sich in der Dokumentationsliste.&lt;br /&gt;
&lt;br /&gt;
= Projektdokumentationen und Beschreibungen =&lt;br /&gt;
* [[:Datei:20210228 Konzept Systemelektronik.pdf|Konzeptbeschreibung Systemelektronik]]&lt;br /&gt;
* [[:Datei:20210605 Workflow Embedded Systems.pdf|Workflow Embedded Systems]]&lt;br /&gt;
* [[:Datei:20200521 Bericht1 NerminArbi.pdf|Funktionsanalyse Boilerbefüllung, Tassenwärmung, Milchschäumen]]&lt;br /&gt;
* [[:Datei:20200518 Bericht halbauto Entkalkung Egger Alexander.pdf|Funktionsanalyse zur halbautomatischen Entkalkung]]&lt;br /&gt;
* [[:Datei:20200518 V0 4 Bericht Funktionsanalyse Rückspulung-Spulung Sladoje.pdf|Funktionsanalyse Rückspülung und Spülung]]&lt;br /&gt;
* [[:Datei:20200521 Bericht Espresso-Teewasserbezug Urbin.pdf|Funktionsanalyse Espresso und Teewasserbezug]]&lt;br /&gt;
* [[:Datei:20200522 Bericht Funktionsanalyse Energieeffizienz Egger Alexander.pdf|Funktionsanalyse Energieeffizienz]]&lt;br /&gt;
* [[:Datei:20200521 V2 Bericht Funktionsanalyse Bedienung Sladoje.pdf|Funktionsanalyse Bedienung]]&lt;br /&gt;
* [[:Datei:20200525 Bericht Abbildung aller Maschinen Urbin V2.pdf|Funktionsanalyse Abbildung aller Maschinen]]&lt;br /&gt;
* [[:Datei:20200609 Bericht Fehleranalyse Entschichtung.pdf|Fehleranalyse Entschichtung]]&lt;br /&gt;
* [[:Datei:20200610 Fehleranalyse Dampf Brühgruppe Sladoje.pdf|Fehleranalyse Brühgruppe und Dampfbezug]]&lt;br /&gt;
* [[:Datei:20200613 Bericht Fehleranalyse Mischer;Magnetventile V2.pdf|Fehleranalyse Mischer und Magnetventile]]&lt;br /&gt;
* [[:Datei:20200611 Bericht3 NerminArbi.pdf|Fehleranalyse Boiler]]&lt;br /&gt;
* [[:Datei:20200705 Dichtheitsprüfung.pdf|Dichtheitsprüfung]]&lt;br /&gt;
* [[:Datei:20200704 Massnahmen Urbin.pdf|Prüfkonzepte Magnetventile und Mischer]]&lt;br /&gt;
* [[:Datei:20200701 Maßnahmenanalyse NerminArbi.pdf|Maßnahmen Boiler]]&lt;br /&gt;
* [[:Datei:20200628 Maßnahmen Entschichtung zweiter Stand.pdf|Maßnahmen Entschichtung]]&lt;br /&gt;
* [[:Datei:20200627 Maßnahmenkonzept Brühguppe Dampf Sladoje.pdf|Maßnahmen Brühgruppe und Dampf]]&lt;br /&gt;
* [[:Datei:20200707_FMEA.xlsx|FMEA Tabelle]]&lt;br /&gt;
* [[:Datei:20201207_Bedienkonzept.pptx|PPT Simulation des Bedienkonzeptes]]&lt;br /&gt;
* [[:Datei:20210207_Bedienkonzept_Funktionsliste.xlsx|Bedienkonzept Funktionsliste]]&lt;br /&gt;
* [[:Datei:20210219_Bedienkonzept_Projektdokumentation.pdf|Bedienkonzept Projektdokumentation]]&lt;br /&gt;
* [[:Datei:HMProjektBedienoberflaecheEspresso.zip|MATLAB® GUI]]&lt;br /&gt;
* [[Entwicklung Systemsoftware SoSe2022]]&lt;br /&gt;
* [[Entwicklung Systemsoftware SoSe2023]]&lt;br /&gt;
* [[Mikrocontroller Programmierung in MicroPython WiSe 2025/26]]&lt;br /&gt;
&lt;br /&gt;
= [http://www.institut-fuer-kaffeetechnologie.de/Intern/index.php?title=Programmcode Programmcode] =&lt;br /&gt;
Aktueller Programmcode und Änderungsdokumentation ab Jan 2023&lt;br /&gt;
&lt;br /&gt;
= [http://www.institut-fuer-kaffeetechnologie.de/Intern/index.php?title=Software-Bugs Software-Bugs] =&lt;br /&gt;
&lt;br /&gt;
= ToDo-Liste(n) Systemsoftware =&lt;br /&gt;
&lt;br /&gt;
== Prioritätsangabe ==&lt;br /&gt;
Prio 1 - Abarbeitung zeitnah erforderlich&amp;lt;br&amp;gt;&lt;br /&gt;
Prio 2 - Abarbeitung erforderlich&amp;lt;br&amp;gt;&lt;br /&gt;
Prio 3 - Abarbeitung kann warten&amp;lt;br&amp;gt;&lt;br /&gt;
Prio 99 - Abarbeitung erfordert Vorarbeiten&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Status ==&lt;br /&gt;
10 - Erfasst&amp;lt;br&amp;gt;&lt;br /&gt;
30 - in Bearbeitung&amp;lt;br&amp;gt;&lt;br /&gt;
50 - Lösung definiert&amp;lt;br&amp;gt;&lt;br /&gt;
70 - in Umsetzung&amp;lt;br&amp;gt;&lt;br /&gt;
90 - Umsetzung abgeschlossen&amp;lt;br&amp;gt;&lt;br /&gt;
99 - Abbruch per Beschluss (Dokumentation dazu erforderlich)&amp;lt;br&amp;gt;&lt;br /&gt;
100 - Maßnahme bestätigt&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ToDo-Liste: Mechatronische Inbetriebnahme Glasboilermaschine =&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Arbeitspaket !! Wer !! Prio !! Status !! WV&lt;br /&gt;
|-&lt;br /&gt;
| [[Fehlerbehebungen]] || || 1 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Startprozedure]] || ||  1 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Tankfüllstandsregelung]] || || 1 || 10 ||&lt;br /&gt;
|- &lt;br /&gt;
| [[Boilerfüllstandsregelung]] || || 1 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Boilerdruckregelung]] || || 1 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Mischwassertemperaturregelung]] || || 1 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Durchflussregelung]] || || 1 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Kaffeebezug]] || || 2 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Teebezug]] || || 1 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Temperatureinstellung über Vertikalhebel]] || || 1 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Simulation Handhebelmaschine]] || || 1 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Flush/Rückspülreinigung]] || || 1 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| || || || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= ToDo-Liste: MCUs - Verlagerung der Regelkreise aus der MATLAB®-GUI auf die Mikrocontroller der Steuerungselektronik =&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Arbeitspaket !! Wer !! Prio !! Status !! WV&lt;br /&gt;
|-&lt;br /&gt;
| [[Kommunikation per UART|UART Kommunikation zwischen den einzelnen MCUs]] || Peter Vogginger|| 1 || 30 || 13.11.2025&lt;br /&gt;
|-&lt;br /&gt;
| [[Mehrkernnutzung und/oder Multitasking]] || Peter Vogginger||  1 || 30 ||06.11.2025&lt;br /&gt;
|-&lt;br /&gt;
| [[Startprozedur]]&lt;br /&gt;
|Philipp Schiebel&lt;br /&gt;
|1&lt;br /&gt;
|30&lt;br /&gt;
|06.11.2025&lt;br /&gt;
|-&lt;br /&gt;
| [[Verlagerung des Füllstandsreglers auf das Basisboard]] || Philipp Schiebel|| 1 || 30 || 06.11.2025&lt;br /&gt;
|- &lt;br /&gt;
| [[Verlagerung der Boilerdruckregelung auf die Messplatine]] || Philipp Schiebel|| 1 || 30 ||  	 06.11.2025&lt;br /&gt;
|-&lt;br /&gt;
| [[Verlagerung des Mischtemperaturreglers auf das Basisboard]] || Philipp Schiebel|| 1 || 10 || 13.11.2025&lt;br /&gt;
|-&lt;br /&gt;
| [[Verlagerung des Durchflussreglers auf das Basisboard]] || Philipp Schiebel|| 1 || 10 ||  	 13.11.2025&lt;br /&gt;
|-&lt;br /&gt;
| [[Erstellung der Funktionssteuerung - Preinfusion auf dem Basisboard]] || || 2 || 10 || &lt;br /&gt;
|-&lt;br /&gt;
| [[Erstellung der Funktionssteuerung - Kaffeebezug auf dem Basisboard]] || || 1 || 10 || &lt;br /&gt;
|-&lt;br /&gt;
| [[Erstellung der Funktionssteuerung - Wasserbezug auf dem Basisboard]] || || 1 || 10 || &lt;br /&gt;
|-&lt;br /&gt;
| [[Erstellung der Funktionssteuerung - Dampfbezug auf dem Basisboard]] || || 1 || 10 || 	 &lt;br /&gt;
|-&lt;br /&gt;
| [[Erstellung der Funktionssteuerung - Spülen auf dem Basisboard]] || || 1 || 10 ||  &lt;br /&gt;
|-&lt;br /&gt;
| [[Erstellung der Funktionssteuerung - Grundreinigung auf dem Basisboard]] || || 1 || 10 ||  &lt;br /&gt;
|-&lt;br /&gt;
| [[Integration eines Displays mit Touchfunktion]] || Jeremias Kögl|| 1 || 30 ||  13.11.2025&lt;br /&gt;
|-&lt;br /&gt;
| [[Integration eines Vertikalhebels]] || Jeremias Kögl|| 1 || 30 ||  17.12.2025&lt;br /&gt;
|-&lt;br /&gt;
| [[Visualisierung und Interaktion über die MATLAB®-GUI]] || || 1 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Visualisierung und Interaktion über eine WEB-Anwendung]] || || 1 || 10 ||  &lt;br /&gt;
|-&lt;br /&gt;
| [[Maschinensimulator]] || alle|| 1 || 30 ||13.11.2025&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= ToDo-Liste: Allgemeines =&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Arbeitspaket !! Wer !! Prio !! Status !! WV&lt;br /&gt;
|-&lt;br /&gt;
| [[Sicherheitsfunktionen]] || || 99 || 50 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[ Übersicht über verbaute Aktorik und Sensorik in Tabellenform]] || || 2 || 90 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Stromsparmodus]] || || 99 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| || || || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= ToDo-Liste: MCUs - Hardwarenahe Software =&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Arbeitspaket !! Wer !! Prio !! Status !! WV&lt;br /&gt;
|-&lt;br /&gt;
| [[Grundfunktionen der MCU und mehrere MCUs]] || || || 100 ||&lt;br /&gt;
|-	&lt;br /&gt;
| Basisboard: [[Schalten Magnetventile (Labor) STM32-Basisboard]] MATLAB®GUI || || || 100&lt;br /&gt;
|-&lt;br /&gt;
| Basisboard: [[Pumpenansteuerung Basisboard Multi-MCU]] || || || 100 ||&lt;br /&gt;
|- 	 &lt;br /&gt;
| Basisboard: [[Schrittmotorsteuerungen Basisboard Multi-MCU]] || || || 100 ||&lt;br /&gt;
|-&lt;br /&gt;
| Basisboard: [[Tastenerkennung Basisboard Multi-MCU]] || || 1 || 10 || &lt;br /&gt;
|- 	 &lt;br /&gt;
| Basisboard: [[Füllstandserkennung Basisboard Multi-MCU]] || || || 100 ||&lt;br /&gt;
|- 	 &lt;br /&gt;
| Basisboard: [[Durchflussmessung Basisnoard Multi-MCU]] || || || 100 ||&lt;br /&gt;
|- 	  	 	  	 &lt;br /&gt;
| SSR-Platine: [[Schalten Magnetventile SSR-Platine Multi-MCU]] || || || 100 ||&lt;br /&gt;
|- 	 &lt;br /&gt;
| SSR-Platine: [[Schrittmotorsteuerungen SSR-Platine Multi-MCU]] || || || 100 ||&lt;br /&gt;
|-&lt;br /&gt;
| Messplatine: [[Messdatenerfassung Multi-MCU]] || || || 100 ||&lt;br /&gt;
|-&lt;br /&gt;
| || || || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= ToDo-Liste der Grundlagenprogrammierung - MATLAB®-Funktionen und GUI =&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Arbeitspaket !! Wer !! Prio !! Status !! WV&lt;br /&gt;
|-&lt;br /&gt;
| [[MATLAB®-GUI Start der App]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[MATLAB®-GUI Initialisierung Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[MATLAB®-GUI Schalten Magnetventile]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[MATLAB®-GUI Datensicherung]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Messwerte erfassen Multi-MCU]] || || || ||&lt;br /&gt;
|- &lt;br /&gt;
| [[Pumpenansteuerung Multi-MCU]] || || || ||&lt;br /&gt;
|- &lt;br /&gt;
| [[Füllstandsregler Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Regler Boilerdruck Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Mischregler Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Durchflussregler Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Misch-Durchfluss Kaskadenregelung Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Preinfusion Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[einfacher Kaffeebezug Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Kaffeebezug Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Wasserbezug Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Dampfbezug Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Spülvorgänge Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Grundreinigung Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Tastenbedienung Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Display Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Glasboiler Abtropfwanne]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Schrittmotorensteuerung Bypass]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Schrittmotorensteuerung Mischer]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Schrittmotorensteuerung Brühgruppendrossel]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Adaption an Multi-MCU - Neuprogrammierung MATLAB® GUI]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| Dokumentation der Software mit STM32-Elektronik. &amp;lt;br&amp;gt;Ein Betrieb dieser wird nicht mehr weiter verfolgt. || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Messwerte erfassen (Labor)]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Pumpenansteuerung (Labor)]] || ||  || || &lt;br /&gt;
|-&lt;br /&gt;
| [[Füllstandsregler (Labor)]] || ||  || || &lt;br /&gt;
|-&lt;br /&gt;
| [[Regler Boilerdruck (Labor)]] || ||  || ||  &lt;br /&gt;
|-&lt;br /&gt;
| [[Mischregler (Labor)]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Durchflussregler (Labor)]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[einfacher Kaffeebezug (Labor)]] || ||  || ||  &lt;br /&gt;
|-&lt;br /&gt;
| [[Kaffeebezug (Labor)]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Wasserbezug (Labor)]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Dampfbezug]] || ||  || ||  &lt;br /&gt;
|-&lt;br /&gt;
| [[Spülvorgänge (Labor)]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Tastenbedienung (Labor)]] || || || ||  &lt;br /&gt;
|-&lt;br /&gt;
| [[Anpassungen für Schrittmotorensteuerung]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| || || || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= ToDo-Liste: APP =&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Arbeitspaket !! Wer !! Prio !! Status !! WV&lt;br /&gt;
|-&lt;br /&gt;
| [[APP - Konzept]] || || 2 || 10 || &lt;br /&gt;
|- 	 &lt;br /&gt;
| [[Messwerte erfassen APP]] || || 99 || 10 || &lt;br /&gt;
|-&lt;br /&gt;
| [[Preset / Profilverwaltung]] || || 99 || 10 || &lt;br /&gt;
|-&lt;br /&gt;
| || || || ||&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Peter Vogginger</name></author>
	</entry>
	<entry>
		<id>http://www.institut-fuer-kaffeetechnologie.de/Wiki/index.php?title=Systemsoftware&amp;diff=4700</id>
		<title>Systemsoftware</title>
		<link rel="alternate" type="text/html" href="http://www.institut-fuer-kaffeetechnologie.de/Wiki/index.php?title=Systemsoftware&amp;diff=4700"/>
		<updated>2025-11-01T07:50:11Z</updated>

		<summary type="html">&lt;p&gt;Peter Vogginger: /* ToDo-Liste: MCUs - Verlagerung der Regelkreise aus der MATLAB®-GUI auf die Mikrocontroller der Steuerungselektronik */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;htmltag tagname=&amp;quot;img&amp;quot; src=&amp;quot;http://vg04.met.vgwort.de/na/4531f1734b324b72b2d7e566cdf639f0&amp;quot;  width=&amp;quot;1&amp;quot; height=&amp;quot;1&amp;quot; alt=&amp;quot;&amp;quot;&amp;gt;&amp;lt;/htmltag&amp;gt;&lt;br /&gt;
[[Datei:Breites Logoband.png|mini|zentriert|hochkant=2.5]]&amp;lt;br&amp;gt;&lt;br /&gt;
Die Systemsoftware lässt sich nicht ohne die Beachtung der Systemelektronik erstellen.&lt;br /&gt;
&lt;br /&gt;
Für die Systemsoftware wurde ein mehrstufiger Entwicklungsprozess definiert:&lt;br /&gt;
# Nutzung einer MCU auf der MicroPython verwendet werden kann. Dies ist durch das STM32F411 nucleo Board der Basiselektronik bzw. durch den Raspberry Pi Pico der Multi-MCU-Elektronik gegeben.&lt;br /&gt;
# Auf der MCU werden lediglich die elementaren Grundfunktionen (GPIO schalten und erfassen, Messwert erfassen, PWM Ausgeben, Sollwert ausgeben, etc.) realisiert und über eine MicroPython zu MATLAB® Schnittstelle [41] wird die Funktionalität in einer MATLAB® GUI hergestellt.&lt;br /&gt;
# Die Softwareentwicklung startet mit der labortechnischen Espressomaschine und wird auf die weiteren Projekte schrittweise transportiert. Dazu ist die Maschinenelektronik gleich zu halten und es sind die gleichen Anschluss-Pins zu verwenden.&lt;br /&gt;
# Nach Abschluss der Testphase der MATLAB® Bedienung wird schrittweise die Betriebssoftware in MicroPython auf der MCU implementiert, so dass am Ende dieses Prozessschrittes die MATLAB®-Verbindung lediglich für weiterführende Datenerfassung und grafische Darstellungen verwendet wird, welche nicht mit dem Display der Maschine möglich ist oder dort nicht dargestellt werden soll.&lt;br /&gt;
# Ob eine Portierung des MicroPython-Codes nach Microcontroller C durchgeführt wird, ist derzeit nicht entschieden.&lt;br /&gt;
&lt;br /&gt;
Es wurden mehrere, die Softwareentwicklung vorbereitende FMEAs durchgeführt.  Die hierdurch entstandenen Dokumentation befinden sich in der Dokumentationsauflistung. Im weiteren wurde eine Projektarbeit zur Konzeptfindung für die Badienung durchgeführt. Auch die hierdurch entstandenen, teilweise auf die FMEA aufbauenden Dokumente befinden sich in der Dokumentationsliste.&lt;br /&gt;
&lt;br /&gt;
= Projektdokumentationen und Beschreibungen =&lt;br /&gt;
* [[:Datei:20210228 Konzept Systemelektronik.pdf|Konzeptbeschreibung Systemelektronik]]&lt;br /&gt;
* [[:Datei:20210605 Workflow Embedded Systems.pdf|Workflow Embedded Systems]]&lt;br /&gt;
* [[:Datei:20200521 Bericht1 NerminArbi.pdf|Funktionsanalyse Boilerbefüllung, Tassenwärmung, Milchschäumen]]&lt;br /&gt;
* [[:Datei:20200518 Bericht halbauto Entkalkung Egger Alexander.pdf|Funktionsanalyse zur halbautomatischen Entkalkung]]&lt;br /&gt;
* [[:Datei:20200518 V0 4 Bericht Funktionsanalyse Rückspulung-Spulung Sladoje.pdf|Funktionsanalyse Rückspülung und Spülung]]&lt;br /&gt;
* [[:Datei:20200521 Bericht Espresso-Teewasserbezug Urbin.pdf|Funktionsanalyse Espresso und Teewasserbezug]]&lt;br /&gt;
* [[:Datei:20200522 Bericht Funktionsanalyse Energieeffizienz Egger Alexander.pdf|Funktionsanalyse Energieeffizienz]]&lt;br /&gt;
* [[:Datei:20200521 V2 Bericht Funktionsanalyse Bedienung Sladoje.pdf|Funktionsanalyse Bedienung]]&lt;br /&gt;
* [[:Datei:20200525 Bericht Abbildung aller Maschinen Urbin V2.pdf|Funktionsanalyse Abbildung aller Maschinen]]&lt;br /&gt;
* [[:Datei:20200609 Bericht Fehleranalyse Entschichtung.pdf|Fehleranalyse Entschichtung]]&lt;br /&gt;
* [[:Datei:20200610 Fehleranalyse Dampf Brühgruppe Sladoje.pdf|Fehleranalyse Brühgruppe und Dampfbezug]]&lt;br /&gt;
* [[:Datei:20200613 Bericht Fehleranalyse Mischer;Magnetventile V2.pdf|Fehleranalyse Mischer und Magnetventile]]&lt;br /&gt;
* [[:Datei:20200611 Bericht3 NerminArbi.pdf|Fehleranalyse Boiler]]&lt;br /&gt;
* [[:Datei:20200705 Dichtheitsprüfung.pdf|Dichtheitsprüfung]]&lt;br /&gt;
* [[:Datei:20200704 Massnahmen Urbin.pdf|Prüfkonzepte Magnetventile und Mischer]]&lt;br /&gt;
* [[:Datei:20200701 Maßnahmenanalyse NerminArbi.pdf|Maßnahmen Boiler]]&lt;br /&gt;
* [[:Datei:20200628 Maßnahmen Entschichtung zweiter Stand.pdf|Maßnahmen Entschichtung]]&lt;br /&gt;
* [[:Datei:20200627 Maßnahmenkonzept Brühguppe Dampf Sladoje.pdf|Maßnahmen Brühgruppe und Dampf]]&lt;br /&gt;
* [[:Datei:20200707_FMEA.xlsx|FMEA Tabelle]]&lt;br /&gt;
* [[:Datei:20201207_Bedienkonzept.pptx|PPT Simulation des Bedienkonzeptes]]&lt;br /&gt;
* [[:Datei:20210207_Bedienkonzept_Funktionsliste.xlsx|Bedienkonzept Funktionsliste]]&lt;br /&gt;
* [[:Datei:20210219_Bedienkonzept_Projektdokumentation.pdf|Bedienkonzept Projektdokumentation]]&lt;br /&gt;
* [[:Datei:HMProjektBedienoberflaecheEspresso.zip|MATLAB® GUI]]&lt;br /&gt;
* [[Entwicklung Systemsoftware SoSe2022]]&lt;br /&gt;
* [[Entwicklung Systemsoftware SoSe2023]]&lt;br /&gt;
* [[Mikrocontroller Programmierung in MicroPython WiSe 2025/26]]&lt;br /&gt;
&lt;br /&gt;
= [http://www.institut-fuer-kaffeetechnologie.de/Intern/index.php?title=Programmcode Programmcode] =&lt;br /&gt;
Aktueller Programmcode und Änderungsdokumentation ab Jan 2023&lt;br /&gt;
&lt;br /&gt;
= [http://www.institut-fuer-kaffeetechnologie.de/Intern/index.php?title=Software-Bugs Software-Bugs] =&lt;br /&gt;
&lt;br /&gt;
= ToDo-Liste(n) Systemsoftware =&lt;br /&gt;
&lt;br /&gt;
== Prioritätsangabe ==&lt;br /&gt;
Prio 1 - Abarbeitung zeitnah erforderlich&amp;lt;br&amp;gt;&lt;br /&gt;
Prio 2 - Abarbeitung erforderlich&amp;lt;br&amp;gt;&lt;br /&gt;
Prio 3 - Abarbeitung kann warten&amp;lt;br&amp;gt;&lt;br /&gt;
Prio 99 - Abarbeitung erfordert Vorarbeiten&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Status ==&lt;br /&gt;
10 - Erfasst&amp;lt;br&amp;gt;&lt;br /&gt;
30 - in Bearbeitung&amp;lt;br&amp;gt;&lt;br /&gt;
50 - Lösung definiert&amp;lt;br&amp;gt;&lt;br /&gt;
70 - in Umsetzung&amp;lt;br&amp;gt;&lt;br /&gt;
90 - Umsetzung abgeschlossen&amp;lt;br&amp;gt;&lt;br /&gt;
99 - Abbruch per Beschluss (Dokumentation dazu erforderlich)&amp;lt;br&amp;gt;&lt;br /&gt;
100 - Maßnahme bestätigt&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ToDo-Liste: Mechatronische Inbetriebnahme Glasboilermaschine =&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Arbeitspaket !! Wer !! Prio !! Status !! WV&lt;br /&gt;
|-&lt;br /&gt;
| [[Fehlerbehebungen]] || || 1 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Startprozedure]] || ||  1 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Tankfüllstandsregelung]] || || 1 || 10 ||&lt;br /&gt;
|- &lt;br /&gt;
| [[Boilerfüllstandsregelung]] || || 1 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Boilerdruckregelung]] || || 1 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Mischwassertemperaturregelung]] || || 1 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Durchflussregelung]] || || 1 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Kaffeebezug]] || || 2 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Teebezug]] || || 1 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Temperatureinstellung über Vertikalhebel]] || || 1 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Simulation Handhebelmaschine]] || || 1 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Flush/Rückspülreinigung]] || || 1 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| || || || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= ToDo-Liste: MCUs - Verlagerung der Regelkreise aus der MATLAB®-GUI auf die Mikrocontroller der Steuerungselektronik =&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Arbeitspaket !! Wer !! Prio !! Status !! WV&lt;br /&gt;
|-&lt;br /&gt;
| [[Kommunikation per UART|UART Kommunikation zwischen den einzelnen MCUs]] || Peter Vogginger|| 1 || 30 || 06.11.2025&lt;br /&gt;
|-&lt;br /&gt;
| [[Mehrkernnutzung und/oder Multitasking]] || Peter Vogginger||  1 || 30 ||06.11.2025&lt;br /&gt;
|-&lt;br /&gt;
| [[Startprozedur]]&lt;br /&gt;
|Philipp Schiebel&lt;br /&gt;
|1&lt;br /&gt;
|30&lt;br /&gt;
|30.10.2025&lt;br /&gt;
|-&lt;br /&gt;
| [[Verlagerung des Füllstandsreglers auf das Basisboard]] || Philipp Schiebel|| 1 || 30 || 30.10.2025&lt;br /&gt;
|- &lt;br /&gt;
| [[Verlagerung der Boilerdruckregelung auf die Messplatine]] || Philipp Schiebel|| 1 || 30 ||  	 30.10.2025&lt;br /&gt;
|-&lt;br /&gt;
| [[Verlagerung des Mischtemperaturreglers auf das Basisboard]] || Philipp Schiebel|| 1 || 10 || 13.11.2025&lt;br /&gt;
|-&lt;br /&gt;
| [[Verlagerung des Durchflussreglers auf das Basisboard]] || Philipp Schiebel|| 1 || 10 ||  	 13.11.2025&lt;br /&gt;
|-&lt;br /&gt;
| [[Erstellung der Funktionssteuerung - Preinfusion auf dem Basisboard]] || || 2 || 10 || &lt;br /&gt;
|-&lt;br /&gt;
| [[Erstellung der Funktionssteuerung - Kaffeebezug auf dem Basisboard]] || || 1 || 10 || &lt;br /&gt;
|-&lt;br /&gt;
| [[Erstellung der Funktionssteuerung - Wasserbezug auf dem Basisboard]] || || 1 || 10 || &lt;br /&gt;
|-&lt;br /&gt;
| [[Erstellung der Funktionssteuerung - Dampfbezug auf dem Basisboard]] || || 1 || 10 || 	 &lt;br /&gt;
|-&lt;br /&gt;
| [[Erstellung der Funktionssteuerung - Spülen auf dem Basisboard]] || || 1 || 10 ||  &lt;br /&gt;
|-&lt;br /&gt;
| [[Erstellung der Funktionssteuerung - Grundreinigung auf dem Basisboard]] || || 1 || 10 ||  &lt;br /&gt;
|-&lt;br /&gt;
| [[Integration eines Displays mit Touchfunktion]] || Jeremias Kögl|| 1 || 30 ||  30.10.2025&lt;br /&gt;
|-&lt;br /&gt;
| [[Integration eines Vertikalhebels]] || Jeremias Kögl|| 1 || 10 ||  17.12.2025&lt;br /&gt;
|-&lt;br /&gt;
| [[Visualisierung und Interaktion über die MATLAB®-GUI]] || || 1 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Visualisierung und Interaktion über eine WEB-Anwendung]] || || 1 || 10 ||  &lt;br /&gt;
|-&lt;br /&gt;
| [[Maschinensimulator]] || alle|| 1 || 30 ||06.11.2025&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= ToDo-Liste: Allgemeines =&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Arbeitspaket !! Wer !! Prio !! Status !! WV&lt;br /&gt;
|-&lt;br /&gt;
| [[Sicherheitsfunktionen]] || || 99 || 50 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[ Übersicht über verbaute Aktorik und Sensorik in Tabellenform]] || || 2 || 90 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Stromsparmodus]] || || 99 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| || || || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= ToDo-Liste: MCUs - Hardwarenahe Software =&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Arbeitspaket !! Wer !! Prio !! Status !! WV&lt;br /&gt;
|-&lt;br /&gt;
| [[Grundfunktionen der MCU und mehrere MCUs]] || || || 100 ||&lt;br /&gt;
|-	&lt;br /&gt;
| Basisboard: [[Schalten Magnetventile (Labor) STM32-Basisboard]] MATLAB®GUI || || || 100&lt;br /&gt;
|-&lt;br /&gt;
| Basisboard: [[Pumpenansteuerung Basisboard Multi-MCU]] || || || 100 ||&lt;br /&gt;
|- 	 &lt;br /&gt;
| Basisboard: [[Schrittmotorsteuerungen Basisboard Multi-MCU]] || || || 100 ||&lt;br /&gt;
|-&lt;br /&gt;
| Basisboard: [[Tastenerkennung Basisboard Multi-MCU]] || || 1 || 10 || &lt;br /&gt;
|- 	 &lt;br /&gt;
| Basisboard: [[Füllstandserkennung Basisboard Multi-MCU]] || || || 100 ||&lt;br /&gt;
|- 	 &lt;br /&gt;
| Basisboard: [[Durchflussmessung Basisnoard Multi-MCU]] || || || 100 ||&lt;br /&gt;
|- 	  	 	  	 &lt;br /&gt;
| SSR-Platine: [[Schalten Magnetventile SSR-Platine Multi-MCU]] || || || 100 ||&lt;br /&gt;
|- 	 &lt;br /&gt;
| SSR-Platine: [[Schrittmotorsteuerungen SSR-Platine Multi-MCU]] || || || 100 ||&lt;br /&gt;
|-&lt;br /&gt;
| Messplatine: [[Messdatenerfassung Multi-MCU]] || || || 100 ||&lt;br /&gt;
|-&lt;br /&gt;
| || || || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= ToDo-Liste der Grundlagenprogrammierung - MATLAB®-Funktionen und GUI =&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Arbeitspaket !! Wer !! Prio !! Status !! WV&lt;br /&gt;
|-&lt;br /&gt;
| [[MATLAB®-GUI Start der App]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[MATLAB®-GUI Initialisierung Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[MATLAB®-GUI Schalten Magnetventile]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[MATLAB®-GUI Datensicherung]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Messwerte erfassen Multi-MCU]] || || || ||&lt;br /&gt;
|- &lt;br /&gt;
| [[Pumpenansteuerung Multi-MCU]] || || || ||&lt;br /&gt;
|- &lt;br /&gt;
| [[Füllstandsregler Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Regler Boilerdruck Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Mischregler Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Durchflussregler Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Misch-Durchfluss Kaskadenregelung Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Preinfusion Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[einfacher Kaffeebezug Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Kaffeebezug Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Wasserbezug Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Dampfbezug Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Spülvorgänge Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Grundreinigung Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Tastenbedienung Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Display Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Glasboiler Abtropfwanne]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Schrittmotorensteuerung Bypass]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Schrittmotorensteuerung Mischer]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Schrittmotorensteuerung Brühgruppendrossel]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Adaption an Multi-MCU - Neuprogrammierung MATLAB® GUI]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| Dokumentation der Software mit STM32-Elektronik. &amp;lt;br&amp;gt;Ein Betrieb dieser wird nicht mehr weiter verfolgt. || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Messwerte erfassen (Labor)]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Pumpenansteuerung (Labor)]] || ||  || || &lt;br /&gt;
|-&lt;br /&gt;
| [[Füllstandsregler (Labor)]] || ||  || || &lt;br /&gt;
|-&lt;br /&gt;
| [[Regler Boilerdruck (Labor)]] || ||  || ||  &lt;br /&gt;
|-&lt;br /&gt;
| [[Mischregler (Labor)]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Durchflussregler (Labor)]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[einfacher Kaffeebezug (Labor)]] || ||  || ||  &lt;br /&gt;
|-&lt;br /&gt;
| [[Kaffeebezug (Labor)]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Wasserbezug (Labor)]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Dampfbezug]] || ||  || ||  &lt;br /&gt;
|-&lt;br /&gt;
| [[Spülvorgänge (Labor)]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Tastenbedienung (Labor)]] || || || ||  &lt;br /&gt;
|-&lt;br /&gt;
| [[Anpassungen für Schrittmotorensteuerung]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| || || || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= ToDo-Liste: APP =&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Arbeitspaket !! Wer !! Prio !! Status !! WV&lt;br /&gt;
|-&lt;br /&gt;
| [[APP - Konzept]] || || 2 || 10 || &lt;br /&gt;
|- 	 &lt;br /&gt;
| [[Messwerte erfassen APP]] || || 99 || 10 || &lt;br /&gt;
|-&lt;br /&gt;
| [[Preset / Profilverwaltung]] || || 99 || 10 || &lt;br /&gt;
|-&lt;br /&gt;
| || || || ||&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Peter Vogginger</name></author>
	</entry>
	<entry>
		<id>http://www.institut-fuer-kaffeetechnologie.de/Wiki/index.php?title=Systemsoftware&amp;diff=4686</id>
		<title>Systemsoftware</title>
		<link rel="alternate" type="text/html" href="http://www.institut-fuer-kaffeetechnologie.de/Wiki/index.php?title=Systemsoftware&amp;diff=4686"/>
		<updated>2025-10-27T19:01:07Z</updated>

		<summary type="html">&lt;p&gt;Peter Vogginger: /* ToDo-Liste: MCUs - Verlagerung der Regelkreise aus der MATLAB®-GUI auf die Mikrocontroller der Steuerungselektronik */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;htmltag tagname=&amp;quot;img&amp;quot; src=&amp;quot;http://vg04.met.vgwort.de/na/4531f1734b324b72b2d7e566cdf639f0&amp;quot;  width=&amp;quot;1&amp;quot; height=&amp;quot;1&amp;quot; alt=&amp;quot;&amp;quot;&amp;gt;&amp;lt;/htmltag&amp;gt;&lt;br /&gt;
[[Datei:Breites Logoband.png|mini|zentriert|hochkant=2.5]]&amp;lt;br&amp;gt;&lt;br /&gt;
Die Systemsoftware lässt sich nicht ohne die Beachtung der Systemelektronik erstellen.&lt;br /&gt;
&lt;br /&gt;
Für die Systemsoftware wurde ein mehrstufiger Entwicklungsprozess definiert:&lt;br /&gt;
# Nutzung einer MCU auf der MicroPython verwendet werden kann. Dies ist durch das STM32F411 nucleo Board der Basiselektronik bzw. durch den Raspberry Pi Pico der Multi-MCU-Elektronik gegeben.&lt;br /&gt;
# Auf der MCU werden lediglich die elementaren Grundfunktionen (GPIO schalten und erfassen, Messwert erfassen, PWM Ausgeben, Sollwert ausgeben, etc.) realisiert und über eine MicroPython zu MATLAB® Schnittstelle [41] wird die Funktionalität in einer MATLAB® GUI hergestellt.&lt;br /&gt;
# Die Softwareentwicklung startet mit der labortechnischen Espressomaschine und wird auf die weiteren Projekte schrittweise transportiert. Dazu ist die Maschinenelektronik gleich zu halten und es sind die gleichen Anschluss-Pins zu verwenden.&lt;br /&gt;
# Nach Abschluss der Testphase der MATLAB® Bedienung wird schrittweise die Betriebssoftware in MicroPython auf der MCU implementiert, so dass am Ende dieses Prozessschrittes die MATLAB®-Verbindung lediglich für weiterführende Datenerfassung und grafische Darstellungen verwendet wird, welche nicht mit dem Display der Maschine möglich ist oder dort nicht dargestellt werden soll.&lt;br /&gt;
# Ob eine Portierung des MicroPython-Codes nach Microcontroller C durchgeführt wird, ist derzeit nicht entschieden.&lt;br /&gt;
&lt;br /&gt;
Es wurden mehrere, die Softwareentwicklung vorbereitende FMEAs durchgeführt.  Die hierdurch entstandenen Dokumentation befinden sich in der Dokumentationsauflistung. Im weiteren wurde eine Projektarbeit zur Konzeptfindung für die Badienung durchgeführt. Auch die hierdurch entstandenen, teilweise auf die FMEA aufbauenden Dokumente befinden sich in der Dokumentationsliste.&lt;br /&gt;
&lt;br /&gt;
= Projektdokumentationen und Beschreibungen =&lt;br /&gt;
* [[:Datei:20210228 Konzept Systemelektronik.pdf|Konzeptbeschreibung Systemelektronik]]&lt;br /&gt;
* [[:Datei:20210605 Workflow Embedded Systems.pdf|Workflow Embedded Systems]]&lt;br /&gt;
* [[:Datei:20200521 Bericht1 NerminArbi.pdf|Funktionsanalyse Boilerbefüllung, Tassenwärmung, Milchschäumen]]&lt;br /&gt;
* [[:Datei:20200518 Bericht halbauto Entkalkung Egger Alexander.pdf|Funktionsanalyse zur halbautomatischen Entkalkung]]&lt;br /&gt;
* [[:Datei:20200518 V0 4 Bericht Funktionsanalyse Rückspulung-Spulung Sladoje.pdf|Funktionsanalyse Rückspülung und Spülung]]&lt;br /&gt;
* [[:Datei:20200521 Bericht Espresso-Teewasserbezug Urbin.pdf|Funktionsanalyse Espresso und Teewasserbezug]]&lt;br /&gt;
* [[:Datei:20200522 Bericht Funktionsanalyse Energieeffizienz Egger Alexander.pdf|Funktionsanalyse Energieeffizienz]]&lt;br /&gt;
* [[:Datei:20200521 V2 Bericht Funktionsanalyse Bedienung Sladoje.pdf|Funktionsanalyse Bedienung]]&lt;br /&gt;
* [[:Datei:20200525 Bericht Abbildung aller Maschinen Urbin V2.pdf|Funktionsanalyse Abbildung aller Maschinen]]&lt;br /&gt;
* [[:Datei:20200609 Bericht Fehleranalyse Entschichtung.pdf|Fehleranalyse Entschichtung]]&lt;br /&gt;
* [[:Datei:20200610 Fehleranalyse Dampf Brühgruppe Sladoje.pdf|Fehleranalyse Brühgruppe und Dampfbezug]]&lt;br /&gt;
* [[:Datei:20200613 Bericht Fehleranalyse Mischer;Magnetventile V2.pdf|Fehleranalyse Mischer und Magnetventile]]&lt;br /&gt;
* [[:Datei:20200611 Bericht3 NerminArbi.pdf|Fehleranalyse Boiler]]&lt;br /&gt;
* [[:Datei:20200705 Dichtheitsprüfung.pdf|Dichtheitsprüfung]]&lt;br /&gt;
* [[:Datei:20200704 Massnahmen Urbin.pdf|Prüfkonzepte Magnetventile und Mischer]]&lt;br /&gt;
* [[:Datei:20200701 Maßnahmenanalyse NerminArbi.pdf|Maßnahmen Boiler]]&lt;br /&gt;
* [[:Datei:20200628 Maßnahmen Entschichtung zweiter Stand.pdf|Maßnahmen Entschichtung]]&lt;br /&gt;
* [[:Datei:20200627 Maßnahmenkonzept Brühguppe Dampf Sladoje.pdf|Maßnahmen Brühgruppe und Dampf]]&lt;br /&gt;
* [[:Datei:20200707_FMEA.xlsx|FMEA Tabelle]]&lt;br /&gt;
* [[:Datei:20201207_Bedienkonzept.pptx|PPT Simulation des Bedienkonzeptes]]&lt;br /&gt;
* [[:Datei:20210207_Bedienkonzept_Funktionsliste.xlsx|Bedienkonzept Funktionsliste]]&lt;br /&gt;
* [[:Datei:20210219_Bedienkonzept_Projektdokumentation.pdf|Bedienkonzept Projektdokumentation]]&lt;br /&gt;
* [[:Datei:HMProjektBedienoberflaecheEspresso.zip|MATLAB® GUI]]&lt;br /&gt;
* [[Entwicklung Systemsoftware SoSe2022]]&lt;br /&gt;
* [[Entwicklung Systemsoftware SoSe2023]]&lt;br /&gt;
* [[Mikrocontroller Programmierung in MicroPython WiSe 2025/26]]&lt;br /&gt;
&lt;br /&gt;
= [http://www.institut-fuer-kaffeetechnologie.de/Intern/index.php?title=Programmcode Programmcode] =&lt;br /&gt;
Aktueller Programmcode und Änderungsdokumentation ab Jan 2023&lt;br /&gt;
&lt;br /&gt;
= [http://www.institut-fuer-kaffeetechnologie.de/Intern/index.php?title=Software-Bugs Software-Bugs] =&lt;br /&gt;
&lt;br /&gt;
= ToDo-Liste(n) Systemsoftware =&lt;br /&gt;
&lt;br /&gt;
== Prioritätsangabe ==&lt;br /&gt;
Prio 1 - Abarbeitung zeitnah erforderlich&amp;lt;br&amp;gt;&lt;br /&gt;
Prio 2 - Abarbeitung erforderlich&amp;lt;br&amp;gt;&lt;br /&gt;
Prio 3 - Abarbeitung kann warten&amp;lt;br&amp;gt;&lt;br /&gt;
Prio 99 - Abarbeitung erfordert Vorarbeiten&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Status ==&lt;br /&gt;
10 - Erfasst&amp;lt;br&amp;gt;&lt;br /&gt;
30 - in Bearbeitung&amp;lt;br&amp;gt;&lt;br /&gt;
50 - Lösung definiert&amp;lt;br&amp;gt;&lt;br /&gt;
70 - in Umsetzung&amp;lt;br&amp;gt;&lt;br /&gt;
90 - Umsetzung abgeschlossen&amp;lt;br&amp;gt;&lt;br /&gt;
99 - Abbruch per Beschluss (Dokumentation dazu erforderlich)&amp;lt;br&amp;gt;&lt;br /&gt;
100 - Maßnahme bestätigt&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ToDo-Liste: Mechatronische Inbetriebnahme Glasboilermaschine =&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Arbeitspaket !! Wer !! Prio !! Status !! WV&lt;br /&gt;
|-&lt;br /&gt;
| [[Fehlerbehebungen]] || || 1 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Startprozedure]] || ||  1 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Tankfüllstandsregelung]] || || 1 || 10 ||&lt;br /&gt;
|- &lt;br /&gt;
| [[Boilerfüllstandsregelung]] || || 1 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Boilerdruckregelung]] || || 1 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Mischwassertemperaturregelung]] || || 1 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Durchflussregelung]] || || 1 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Kaffeebezug]] || || 2 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Teebezug]] || || 1 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Temperatureinstellung über Vertikalhebel]] || || 1 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Simulation Handhebelmaschine]] || || 1 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Flush/Rückspülreinigung]] || || 1 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| || || || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= ToDo-Liste: MCUs - Verlagerung der Regelkreise aus der MATLAB®-GUI auf die Mikrocontroller der Steuerungselektronik =&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Arbeitspaket !! Wer !! Prio !! Status !! WV&lt;br /&gt;
|-&lt;br /&gt;
| [[Kommunikation per UART|UART Kommunikation zwischen den einzelnen MCUs]] || Peter Vogginger|| 1 || 30 || WiSe2025/26&lt;br /&gt;
|-&lt;br /&gt;
| [[Mehrkernnutzung und/oder Multitasking]] || Peter Vogginger||  1 || 30 ||WiSe2025/26&lt;br /&gt;
|-&lt;br /&gt;
| [[Startprozedur]]&lt;br /&gt;
|Philipp Schiebel&lt;br /&gt;
|1&lt;br /&gt;
|10&lt;br /&gt;
|WiSe2025/26&lt;br /&gt;
|-&lt;br /&gt;
| [[Verlagerung des Füllstandsreglers auf das Basisboard]] || Philipp Schiebel|| 1 || 30 || WiSe2025/26&lt;br /&gt;
|- &lt;br /&gt;
| [[Verlagerung der Boilerdruckregelung auf die Messplatine]] || Philipp Schiebel|| 1 || 10 ||  	 WiSe2025/26&lt;br /&gt;
|-&lt;br /&gt;
| [[Verlagerung des Mischtemperaturreglers auf das Basisboard]] || Philipp Schiebel|| 1 || 10 || WiSe2025/26&lt;br /&gt;
|-&lt;br /&gt;
| [[Verlagerung des Durchflussreglers auf das Basisboard]] || Philipp Schiebel|| 1 || 10 ||  	 WiSe2025/26&lt;br /&gt;
|-&lt;br /&gt;
| [[Erstellung der Funktionssteuerung - Preinfusion auf dem Basisboard]] || || 2 || 10 || &lt;br /&gt;
|-&lt;br /&gt;
| [[Erstellung der Funktionssteuerung - Kaffeebezug auf dem Basisboard]] || || 1 || 10 || &lt;br /&gt;
|-&lt;br /&gt;
| [[Erstellung der Funktionssteuerung - Wasserbezug auf dem Basisboard]] || || 1 || 10 || &lt;br /&gt;
|-&lt;br /&gt;
| [[Erstellung der Funktionssteuerung - Dampfbezug auf dem Basisboard]] || || 1 || 10 || 	 &lt;br /&gt;
|-&lt;br /&gt;
| [[Erstellung der Funktionssteuerung - Spülen auf dem Basisboard]] || || 1 || 10 ||  &lt;br /&gt;
|-&lt;br /&gt;
| [[Erstellung der Funktionssteuerung - Grundreinigung auf dem Basisboard]] || || 1 || 10 ||  &lt;br /&gt;
|-&lt;br /&gt;
| [[Integration eines Displays mit Touchfunktion]] || Jeremias Kögl|| 1 || 10 ||  WiSe2025/26&lt;br /&gt;
|-&lt;br /&gt;
| [[Integration eines Vertikalhebels]] || Jeremias Kögl|| 1 || 10 ||  WiSe2025/26&lt;br /&gt;
|-&lt;br /&gt;
| [[Visualisierung und Interaktion über die MATLAB®-GUI]] || Spyridon Sidiropoulos|| 1 || 10 ||WiSe2025/26&lt;br /&gt;
|-&lt;br /&gt;
| [[Visualisierung und Interaktion über eine WEB-Anwendung]] || || 1 || 10 ||  &lt;br /&gt;
|-&lt;br /&gt;
| [[Maschinensimulator]] || Peter Vogginger|| 1 || 10 ||WiSe2025/26&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= ToDo-Liste: Allgemeines =&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Arbeitspaket !! Wer !! Prio !! Status !! WV&lt;br /&gt;
|-&lt;br /&gt;
| [[Sicherheitsfunktionen]] || || 99 || 50 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[ Übersicht über verbaute Aktorik und Sensorik in Tabellenform]] || || 2 || 90 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Stromsparmodus]] || || 99 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| || || || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= ToDo-Liste: MCUs - Hardwarenahe Software =&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Arbeitspaket !! Wer !! Prio !! Status !! WV&lt;br /&gt;
|-&lt;br /&gt;
| [[Grundfunktionen der MCU und mehrere MCUs]] || || || 100 ||&lt;br /&gt;
|-	&lt;br /&gt;
| Basisboard: [[Schalten Magnetventile (Labor) STM32-Basisboard]] MATLAB®GUI || || || 100&lt;br /&gt;
|-&lt;br /&gt;
| Basisboard: [[Pumpenansteuerung Basisboard Multi-MCU]] || || || 100 ||&lt;br /&gt;
|- 	 &lt;br /&gt;
| Basisboard: [[Schrittmotorsteuerungen Basisboard Multi-MCU]] || || || 100 ||&lt;br /&gt;
|-&lt;br /&gt;
| Basisboard: [[Tastenerkennung Basisboard Multi-MCU]] || || 1 || 10 || &lt;br /&gt;
|- 	 &lt;br /&gt;
| Basisboard: [[Füllstandserkennung Basisboard Multi-MCU]] || || || 100 ||&lt;br /&gt;
|- 	 &lt;br /&gt;
| Basisboard: [[Durchflussmessung Basisnoard Multi-MCU]] || || || 100 ||&lt;br /&gt;
|- 	  	 	  	 &lt;br /&gt;
| SSR-Platine: [[Schalten Magnetventile SSR-Platine Multi-MCU]] || || || 100 ||&lt;br /&gt;
|- 	 &lt;br /&gt;
| SSR-Platine: [[Schrittmotorsteuerungen SSR-Platine Multi-MCU]] || || || 100 ||&lt;br /&gt;
|-&lt;br /&gt;
| Messplatine: [[Messdatenerfassung Multi-MCU]] || || || 100 ||&lt;br /&gt;
|-&lt;br /&gt;
| || || || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= ToDo-Liste der Grundlagenprogrammierung - MATLAB®-Funktionen und GUI =&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Arbeitspaket !! Wer !! Prio !! Status !! WV&lt;br /&gt;
|-&lt;br /&gt;
| [[MATLAB®-GUI Start der App]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[MATLAB®-GUI Initialisierung Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[MATLAB®-GUI Schalten Magnetventile]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[MATLAB®-GUI Datensicherung]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Messwerte erfassen Multi-MCU]] || || || ||&lt;br /&gt;
|- &lt;br /&gt;
| [[Pumpenansteuerung Multi-MCU]] || || || ||&lt;br /&gt;
|- &lt;br /&gt;
| [[Füllstandsregler Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Regler Boilerdruck Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Mischregler Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Durchflussregler Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Misch-Durchfluss Kaskadenregelung Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Preinfusion Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[einfacher Kaffeebezug Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Kaffeebezug Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Wasserbezug Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Dampfbezug Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Spülvorgänge Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Grundreinigung Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Tastenbedienung Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Display Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Glasboiler Abtropfwanne]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Schrittmotorensteuerung Bypass]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Schrittmotorensteuerung Mischer]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Schrittmotorensteuerung Brühgruppendrossel]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Adaption an Multi-MCU - Neuprogrammierung MATLAB® GUI]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| Dokumentation der Software mit STM32-Elektronik. &amp;lt;br&amp;gt;Ein Betrieb dieser wird nicht mehr weiter verfolgt. || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Messwerte erfassen (Labor)]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Pumpenansteuerung (Labor)]] || ||  || || &lt;br /&gt;
|-&lt;br /&gt;
| [[Füllstandsregler (Labor)]] || ||  || || &lt;br /&gt;
|-&lt;br /&gt;
| [[Regler Boilerdruck (Labor)]] || ||  || ||  &lt;br /&gt;
|-&lt;br /&gt;
| [[Mischregler (Labor)]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Durchflussregler (Labor)]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[einfacher Kaffeebezug (Labor)]] || ||  || ||  &lt;br /&gt;
|-&lt;br /&gt;
| [[Kaffeebezug (Labor)]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Wasserbezug (Labor)]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Dampfbezug]] || ||  || ||  &lt;br /&gt;
|-&lt;br /&gt;
| [[Spülvorgänge (Labor)]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Tastenbedienung (Labor)]] || || || ||  &lt;br /&gt;
|-&lt;br /&gt;
| [[Anpassungen für Schrittmotorensteuerung]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| || || || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= ToDo-Liste: APP =&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Arbeitspaket !! Wer !! Prio !! Status !! WV&lt;br /&gt;
|-&lt;br /&gt;
| [[APP - Konzept]] || || 2 || 10 || &lt;br /&gt;
|- 	 &lt;br /&gt;
| [[Messwerte erfassen APP]] || || 99 || 10 || &lt;br /&gt;
|-&lt;br /&gt;
| [[Preset / Profilverwaltung]] || || 99 || 10 || &lt;br /&gt;
|-&lt;br /&gt;
| || || || ||&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Peter Vogginger</name></author>
	</entry>
	<entry>
		<id>http://www.institut-fuer-kaffeetechnologie.de/Wiki/index.php?title=Projektr%C3%BCcksprache_15.10.2025&amp;diff=4682</id>
		<title>Projektrücksprache 15.10.2025</title>
		<link rel="alternate" type="text/html" href="http://www.institut-fuer-kaffeetechnologie.de/Wiki/index.php?title=Projektr%C3%BCcksprache_15.10.2025&amp;diff=4682"/>
		<updated>2025-10-25T09:25:29Z</updated>

		<summary type="html">&lt;p&gt;Peter Vogginger: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Besprechungsprotokoll – Projektrücksprache 15.10.2025=&lt;br /&gt;
Ort: online via ZOOM &lt;br /&gt;
&lt;br /&gt;
Datum: 15.10.2025 &lt;br /&gt;
&lt;br /&gt;
Teilnehmer: Spyridon Sidiropoulos, Jeremias Kögl, Philipp Schiebel, Peter Vogginger, LfbA Armin Rohnen &lt;br /&gt;
&lt;br /&gt;
Moderator: LfbA Armin Rohnen &lt;br /&gt;
&lt;br /&gt;
Protokollant: Peter Vogginger &lt;br /&gt;
&lt;br /&gt;
==Top 1) Protokollführung==&lt;br /&gt;
Peter Vogginger meldet sich als Protokollant. &lt;br /&gt;
&lt;br /&gt;
==Top 2) Protokollannahme==&lt;br /&gt;
Protokoll wurde von allen Teilnehmenden bestätigt. &lt;br /&gt;
&lt;br /&gt;
==Top 3) Protokolländerung== &lt;br /&gt;
Herr Rohnen äußerte zu mehreren Punkten der vergangenen Woche Kritik, die benannt werden.&amp;lt;br&amp;gt;Es wird nicht genug kommuniziert innerhalb der Gruppe und mit Herrn Rohnen.&amp;lt;br&amp;gt;Als Verbesserungsvorschlag wird genannt, dass in Zukunft mehr kommuniziert werden soll.&amp;lt;br&amp;gt;Die Terminfindung der Teammitglieder muss verbessert werden.&amp;lt;br&amp;gt;Es wird eine Orientierungslosigkeit des Teams festgestellt.&amp;lt;br&amp;gt;Die Herangehensweise, vorzugehen wie bei einer normalen Vorlesung, ist falsch. Es handelt sich um ein reales Projekt.&amp;lt;br&amp;gt;Jedes Teammitglied soll zu den eigenen Schwächen stehen (Wo sind Lücken?). &lt;br /&gt;
&lt;br /&gt;
==Top 4) Organisatorisches ==&lt;br /&gt;
Zur Erstellung der Agenda gilt, derjenige, der die Agenda erstellt, moderiert diese auch.&amp;lt;br&amp;gt;Der Erstellende fragt alle anderen Teammitglieder einschließlich Herrn Rohnen ab, was auf die Agenda soll (basierend auf der ToDo-Liste), und wird spätestens 2 Tage vor der Besprechung an alle gesendet.&amp;lt;br&amp;gt;Der Dateiname soll beachtet werden. Siehe hierzu das Merkblatt. Umlaute und zusätzliche Punkte sind nicht erlaubt.&amp;lt;br&amp;gt;Das Besprechungsprotokoll muss nicht formatiert werden, nur der Text zählt.&amp;lt;br&amp;gt;&#039;&#039;&#039;Es darf niemals der Briefkopf von Herrn Rohnen verwendet werden.&#039;&#039;&#039;&amp;lt;br&amp;gt;Die Agenda kann, muss aber nicht formatiert werden.&amp;lt;br&amp;gt;Es sollten besser keine Abkürzungen verwendet werden, besonders sollen keine neuen erfunden werden.&amp;lt;br&amp;gt;Die Projektplanungshilfe ist auszudrucken und auszufüllen. Diese selbst zu zeichnen ist zu unterlassen. Um das Vorgehen bei der Abgabe zu verdeutlichen, im Folgenden ein Beispiel an der Abgabe am Freitag in der KW42.&amp;lt;br&amp;gt;Es ist eine &#039;&#039;&#039;neu&#039;&#039;&#039; ausgefüllte Projektplanungshilfe abzugeben. In die 1. Zeile kommt was nächste Woche (KW43) abgearbeitet wird und in die 2. Zeile kommt was übernächste Woche (KW44) abgearbeitet werden soll.&amp;lt;br&amp;gt;Zusätzlich wird die Projektplanungshilfe der vorherigen Woche, der KW41, abgegeben, wobei hier zu markieren ist, wie die Planung der Realität entsprochen hat. Dies geschieht entweder mit Haken oder zum Beispiel anhand des Bearbeitungsstandes (75%). Dies ist bei allen Einträgen zu tun.&amp;lt;br&amp;gt;Es sind somit 2 Projektplanungshilfen am Freitag abzugeben.&amp;lt;br&amp;gt;Arbeiten am Wochenende sind dabei grundsätzlich nicht erwünscht. Einerseits wird diese Zeit für die Regeneration benötigt und andererseits soll die Planung nicht auf den letzten Knopf erfolgen (Puffer!). &lt;br /&gt;
&lt;br /&gt;
==Top 5) Teamorganisation==&lt;br /&gt;
Die bisherige Teamorganisation war ungenügend, gemeinsame Teamzeiten sind wichtig.&amp;lt;br&amp;gt;Es fehlt typischerweise die Integration. Hierzu soll ein Masterstudent die Rolle des Integrators übernehmen, ohne die Privilegien der Führungsposition zu erhalten (Weisungsbefugnis). Die Aufgabe ist es, die anderen Teammitglieder anzutreiben und die einzelnen Arbeiten ineinander zu integrieren (damit nicht jeder die Arbeit für sich allein macht)&amp;lt;br&amp;gt;Das Schema der Projektarbeit besteht aus Kommunikation, vorausschauender Planung und daraus, nichts an den Kollegen „vorbeizumogeln“.&amp;lt;br&amp;gt;Beispiele für gute Projektarbeiten sind der Kisselplatz-Tunnel und die Allianz-Arena. Die Planung soll immer mindestens 2 Wochen in der Zukunft erfolgen.&amp;lt;br&amp;gt;Probleme sind anzusprechen. Sollte das Planungsziel von einem Teammitglied nicht erreicht werden, muss dies umgehend den Kollegen und Herrn Rohnen mitgeteilt werden. &lt;br /&gt;
&lt;br /&gt;
==Top 6) ToDo’s==&lt;br /&gt;
Herr Kögl schlägt für die Bearbeitung der Projektarbeit ein Vorgehen aus der Softwareentwicklung vor.&amp;lt;br&amp;gt;Es gilt, zuerst zu verstehen, wie eine Zweikreis-Espressomaschine funktioniert. Die Hilfe von KI ist grundsätzlich zu nutzen, aber auch im Wahrheitsgehalt zu hinterfragen. &lt;br /&gt;
Der Druck im Kessel wird mittels eines Sensors erfasst.&amp;lt;br&amp;gt;Wenn etwas nicht verstanden wurde, SOFORT melden und nicht bis zur nächsten Besprechung warten.&amp;lt;br&amp;gt;Gemeinsam soll überprüft werden, wie die bisherigen Abläufe funktionieren, insbesondere wie die aktuelle Ablauf-GUI in MATLAB aufgebaut ist und welche Teile künftig verlagert werden sollen. In diesem Zusammenhang wird auch das PDF-Dokument „Verlagerung der Regelkreise“ erneut betrachtet.&amp;lt;br&amp;gt;Herr Rohnen erwartet einen E-Mail-Austausch von etwa zehn Nachrichten pro Woche.&amp;lt;br&amp;gt;Die spezifischen Details und Unterschiede der im Labor verwendeten Espressomaschine sind derzeit nicht im Wiki dokumentiert; einzig Herr Rohnen verfügt über dieses Wissen.&amp;lt;br&amp;gt;Darüber hinaus muss Herr Rohnen stets informiert sein, woran jedes Teammitglied arbeitet und welche Programmierungen vorgenommen werden.&amp;lt;br&amp;gt;Herr Rohnen hat am Donnerstag von 13:30-15:00 Uhr Vorlesung, es soll frühzeitig Bescheid gegeben werden, wenn Laborzeit benötigt wird.&amp;lt;br&amp;gt;Es soll immer Herrn Rohnen Bescheid gegeben werden, wann das Labor genutzt werden möchte, auch ohne dessen Anwesenheit. Hierzu ist spätestens am Freitag davor Bescheid zu geben.&amp;lt;br&amp;gt;Die Hochschule schließt um 22:00 – 22:30 Uhr. Es ist besser, eine Stunde vorher zu gehen, da sonst das Sicherheitspersonal nachfragen wird.&lt;br /&gt;
&lt;br /&gt;
==Top 7) Nächster Besprechungstermin==&lt;br /&gt;
Noch nicht festgelegt, wird über E-Mail-Austausch evaluiert.  &lt;br /&gt;
&lt;br /&gt;
==Top 8) Verabschiedung==&lt;/div&gt;</summary>
		<author><name>Peter Vogginger</name></author>
	</entry>
	<entry>
		<id>http://www.institut-fuer-kaffeetechnologie.de/Wiki/index.php?title=Systemsoftware&amp;diff=4678</id>
		<title>Systemsoftware</title>
		<link rel="alternate" type="text/html" href="http://www.institut-fuer-kaffeetechnologie.de/Wiki/index.php?title=Systemsoftware&amp;diff=4678"/>
		<updated>2025-10-23T16:29:55Z</updated>

		<summary type="html">&lt;p&gt;Peter Vogginger: /* ToDo-Liste: MCUs - Verlagerung der Regelkreise aus der MATLAB®-GUI auf die Mikrocontroller der Steuerungselektronik */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;htmltag tagname=&amp;quot;img&amp;quot; src=&amp;quot;http://vg04.met.vgwort.de/na/4531f1734b324b72b2d7e566cdf639f0&amp;quot;  width=&amp;quot;1&amp;quot; height=&amp;quot;1&amp;quot; alt=&amp;quot;&amp;quot;&amp;gt;&amp;lt;/htmltag&amp;gt;&lt;br /&gt;
[[Datei:Breites Logoband.png|mini|zentriert|hochkant=2.5]]&amp;lt;br&amp;gt;&lt;br /&gt;
Die Systemsoftware lässt sich nicht ohne die Beachtung der Systemelektronik erstellen.&lt;br /&gt;
&lt;br /&gt;
Für die Systemsoftware wurde ein mehrstufiger Entwicklungsprozess definiert:&lt;br /&gt;
# Nutzung einer MCU auf der MicroPython verwendet werden kann. Dies ist durch das STM32F411 nucleo Board der Basiselektronik bzw. durch den Raspberry Pi Pico der Multi-MCU-Elektronik gegeben.&lt;br /&gt;
# Auf der MCU werden lediglich die elementaren Grundfunktionen (GPIO schalten und erfassen, Messwert erfassen, PWM Ausgeben, Sollwert ausgeben, etc.) realisiert und über eine MicroPython zu MATLAB® Schnittstelle [41] wird die Funktionalität in einer MATLAB® GUI hergestellt.&lt;br /&gt;
# Die Softwareentwicklung startet mit der labortechnischen Espressomaschine und wird auf die weiteren Projekte schrittweise transportiert. Dazu ist die Maschinenelektronik gleich zu halten und es sind die gleichen Anschluss-Pins zu verwenden.&lt;br /&gt;
# Nach Abschluss der Testphase der MATLAB® Bedienung wird schrittweise die Betriebssoftware in MicroPython auf der MCU implementiert, so dass am Ende dieses Prozessschrittes die MATLAB®-Verbindung lediglich für weiterführende Datenerfassung und grafische Darstellungen verwendet wird, welche nicht mit dem Display der Maschine möglich ist oder dort nicht dargestellt werden soll.&lt;br /&gt;
# Ob eine Portierung des MicroPython-Codes nach Microcontroller C durchgeführt wird, ist derzeit nicht entschieden.&lt;br /&gt;
&lt;br /&gt;
Es wurden mehrere, die Softwareentwicklung vorbereitende FMEAs durchgeführt.  Die hierdurch entstandenen Dokumentation befinden sich in der Dokumentationsauflistung. Im weiteren wurde eine Projektarbeit zur Konzeptfindung für die Badienung durchgeführt. Auch die hierdurch entstandenen, teilweise auf die FMEA aufbauenden Dokumente befinden sich in der Dokumentationsliste.&lt;br /&gt;
&lt;br /&gt;
= Projektdokumentationen und Beschreibungen =&lt;br /&gt;
* [[:Datei:20210228 Konzept Systemelektronik.pdf|Konzeptbeschreibung Systemelektronik]]&lt;br /&gt;
* [[:Datei:20210605 Workflow Embedded Systems.pdf|Workflow Embedded Systems]]&lt;br /&gt;
* [[:Datei:20200521 Bericht1 NerminArbi.pdf|Funktionsanalyse Boilerbefüllung, Tassenwärmung, Milchschäumen]]&lt;br /&gt;
* [[:Datei:20200518 Bericht halbauto Entkalkung Egger Alexander.pdf|Funktionsanalyse zur halbautomatischen Entkalkung]]&lt;br /&gt;
* [[:Datei:20200518 V0 4 Bericht Funktionsanalyse Rückspulung-Spulung Sladoje.pdf|Funktionsanalyse Rückspülung und Spülung]]&lt;br /&gt;
* [[:Datei:20200521 Bericht Espresso-Teewasserbezug Urbin.pdf|Funktionsanalyse Espresso und Teewasserbezug]]&lt;br /&gt;
* [[:Datei:20200522 Bericht Funktionsanalyse Energieeffizienz Egger Alexander.pdf|Funktionsanalyse Energieeffizienz]]&lt;br /&gt;
* [[:Datei:20200521 V2 Bericht Funktionsanalyse Bedienung Sladoje.pdf|Funktionsanalyse Bedienung]]&lt;br /&gt;
* [[:Datei:20200525 Bericht Abbildung aller Maschinen Urbin V2.pdf|Funktionsanalyse Abbildung aller Maschinen]]&lt;br /&gt;
* [[:Datei:20200609 Bericht Fehleranalyse Entschichtung.pdf|Fehleranalyse Entschichtung]]&lt;br /&gt;
* [[:Datei:20200610 Fehleranalyse Dampf Brühgruppe Sladoje.pdf|Fehleranalyse Brühgruppe und Dampfbezug]]&lt;br /&gt;
* [[:Datei:20200613 Bericht Fehleranalyse Mischer;Magnetventile V2.pdf|Fehleranalyse Mischer und Magnetventile]]&lt;br /&gt;
* [[:Datei:20200611 Bericht3 NerminArbi.pdf|Fehleranalyse Boiler]]&lt;br /&gt;
* [[:Datei:20200705 Dichtheitsprüfung.pdf|Dichtheitsprüfung]]&lt;br /&gt;
* [[:Datei:20200704 Massnahmen Urbin.pdf|Prüfkonzepte Magnetventile und Mischer]]&lt;br /&gt;
* [[:Datei:20200701 Maßnahmenanalyse NerminArbi.pdf|Maßnahmen Boiler]]&lt;br /&gt;
* [[:Datei:20200628 Maßnahmen Entschichtung zweiter Stand.pdf|Maßnahmen Entschichtung]]&lt;br /&gt;
* [[:Datei:20200627 Maßnahmenkonzept Brühguppe Dampf Sladoje.pdf|Maßnahmen Brühgruppe und Dampf]]&lt;br /&gt;
* [[:Datei:20200707_FMEA.xlsx|FMEA Tabelle]]&lt;br /&gt;
* [[:Datei:20201207_Bedienkonzept.pptx|PPT Simulation des Bedienkonzeptes]]&lt;br /&gt;
* [[:Datei:20210207_Bedienkonzept_Funktionsliste.xlsx|Bedienkonzept Funktionsliste]]&lt;br /&gt;
* [[:Datei:20210219_Bedienkonzept_Projektdokumentation.pdf|Bedienkonzept Projektdokumentation]]&lt;br /&gt;
* [[:Datei:HMProjektBedienoberflaecheEspresso.zip|MATLAB® GUI]]&lt;br /&gt;
* [[Entwicklung Systemsoftware SoSe2022]]&lt;br /&gt;
* [[Entwicklung Systemsoftware SoSe2023]]&lt;br /&gt;
* [[Mikrocontroller Programmierung in MicroPython WiSe 2025/26]]&lt;br /&gt;
&lt;br /&gt;
= [http://www.institut-fuer-kaffeetechnologie.de/Intern/index.php?title=Programmcode Programmcode] =&lt;br /&gt;
Aktueller Programmcode und Änderungsdokumentation ab Jan 2023&lt;br /&gt;
&lt;br /&gt;
= [http://www.institut-fuer-kaffeetechnologie.de/Intern/index.php?title=Software-Bugs Software-Bugs] =&lt;br /&gt;
&lt;br /&gt;
= ToDo-Liste(n) Systemsoftware =&lt;br /&gt;
&lt;br /&gt;
== Prioritätsangabe ==&lt;br /&gt;
Prio 1 - Abarbeitung zeitnah erforderlich&amp;lt;br&amp;gt;&lt;br /&gt;
Prio 2 - Abarbeitung erforderlich&amp;lt;br&amp;gt;&lt;br /&gt;
Prio 3 - Abarbeitung kann warten&amp;lt;br&amp;gt;&lt;br /&gt;
Prio 99 - Abarbeitung erfordert Vorarbeiten&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Status ==&lt;br /&gt;
10 - Erfasst&amp;lt;br&amp;gt;&lt;br /&gt;
30 - in Bearbeitung&amp;lt;br&amp;gt;&lt;br /&gt;
50 - Lösung definiert&amp;lt;br&amp;gt;&lt;br /&gt;
70 - in Umsetzung&amp;lt;br&amp;gt;&lt;br /&gt;
90 - Umsetzung abgeschlossen&amp;lt;br&amp;gt;&lt;br /&gt;
99 - Abbruch per Beschluss (Dokumentation dazu erforderlich)&amp;lt;br&amp;gt;&lt;br /&gt;
100 - Maßnahme bestätigt&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ToDo-Liste: Mechatronische Inbetriebnahme Glasboilermaschine =&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Arbeitspaket !! Wer !! Prio !! Status !! WV&lt;br /&gt;
|-&lt;br /&gt;
| [[Fehlerbehebungen]] || || 1 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Startprozedure]] || ||  1 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Tankfüllstandsregelung]] || || 1 || 10 ||&lt;br /&gt;
|- &lt;br /&gt;
| [[Boilerfüllstandsregelung]] || || 1 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Boilerdruckregelung]] || || 1 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Mischwassertemperaturregelung]] || || 1 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Durchflussregelung]] || || 1 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Kaffeebezug]] || || 2 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Teebezug]] || || 1 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Temperatureinstellung über Vertikalhebel]] || || 1 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Simulation Handhebelmaschine]] || || 1 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Flush/Rückspülreinigung]] || || 1 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| || || || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= ToDo-Liste: MCUs - Verlagerung der Regelkreise aus der MATLAB®-GUI auf die Mikrocontroller der Steuerungselektronik =&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Arbeitspaket !! Wer !! Prio !! Status !! WV&lt;br /&gt;
|-&lt;br /&gt;
| [[Kommunikation per UART|UART Kommunikation zwischen den einzelnen MCUs]] || Peter Vogginger|| 1 || 10 || WiSe2025/26&lt;br /&gt;
|-&lt;br /&gt;
| [[Mehrkernnutzung und/oder Multitasking]] || Peter Vogginger||  1 || 10 ||WiSe2025/26&lt;br /&gt;
|-&lt;br /&gt;
| [[Startprozedur]]&lt;br /&gt;
|Philipp Schiebel&lt;br /&gt;
|1&lt;br /&gt;
|10&lt;br /&gt;
|WiSe2025/26&lt;br /&gt;
|-&lt;br /&gt;
| [[Verlagerung des Füllstandsreglers auf das Basisboard]] || Philipp Schiebel|| 1 || 10 || WiSe2025/26&lt;br /&gt;
|- &lt;br /&gt;
| [[Verlagerung der Boilerdruckregelung auf die Messplatine]] || Philipp Schiebel|| 1 || 10 ||  	 WiSe2025/26&lt;br /&gt;
|-&lt;br /&gt;
| [[Verlagerung des Mischtemperaturreglers auf das Basisboard]] || Philipp Schiebel|| 1 || 10 || WiSe2025/26&lt;br /&gt;
|-&lt;br /&gt;
| [[Verlagerung des Durchflussreglers auf das Basisboard]] || Philipp Schiebel|| 1 || 10 ||  	 WiSe2025/26&lt;br /&gt;
|-&lt;br /&gt;
| [[Erstellung der Funktionssteuerung - Preinfusion auf dem Basisboard]] || || 2 || 10 || &lt;br /&gt;
|-&lt;br /&gt;
| [[Erstellung der Funktionssteuerung - Kaffeebezug auf dem Basisboard]] || || 1 || 10 || &lt;br /&gt;
|-&lt;br /&gt;
| [[Erstellung der Funktionssteuerung - Wasserbezug auf dem Basisboard]] || || 1 || 10 || &lt;br /&gt;
|-&lt;br /&gt;
| [[Erstellung der Funktionssteuerung - Dampfbezug auf dem Basisboard]] || || 1 || 10 || 	 &lt;br /&gt;
|-&lt;br /&gt;
| [[Erstellung der Funktionssteuerung - Spülen auf dem Basisboard]] || || 1 || 10 ||  &lt;br /&gt;
|-&lt;br /&gt;
| [[Erstellung der Funktionssteuerung - Grundreinigung auf dem Basisboard]] || || 1 || 10 ||  &lt;br /&gt;
|-&lt;br /&gt;
| [[Integration eines Displays mit Touchfunktion]] || Jeremias Kögl|| 1 || 10 ||  WiSe2025/26&lt;br /&gt;
|-&lt;br /&gt;
| [[Integration eines Vertikalhebels]] || Jeremias Kögl|| 1 || 10 ||  WiSe2025/26&lt;br /&gt;
|-&lt;br /&gt;
| [[Visualisierung und Interaktion über die MATLAB®-GUI]] || Spyridon Sidiropoulos|| 1 || 10 ||WiSe2025/26&lt;br /&gt;
|-&lt;br /&gt;
| [[Visualisierung und Interaktion über eine WEB-Anwendung]] || || 1 || 10 ||  &lt;br /&gt;
|-&lt;br /&gt;
| [[Maschinensimulator]] || Peter Vogginger|| 1 || 10 ||WiSe2025/26&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= ToDo-Liste: Allgemeines =&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Arbeitspaket !! Wer !! Prio !! Status !! WV&lt;br /&gt;
|-&lt;br /&gt;
| [[Sicherheitsfunktionen]] || || 99 || 50 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[ Übersicht über verbaute Aktorik und Sensorik in Tabellenform]] || || 2 || 90 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Stromsparmodus]] || || 99 || 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| || || || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= ToDo-Liste: MCUs - Hardwarenahe Software =&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Arbeitspaket !! Wer !! Prio !! Status !! WV&lt;br /&gt;
|-&lt;br /&gt;
| [[Grundfunktionen der MCU und mehrere MCUs]] || || || 100 ||&lt;br /&gt;
|-	&lt;br /&gt;
| Basisboard: [[Schalten Magnetventile (Labor) STM32-Basisboard]] MATLAB®GUI || || || 100&lt;br /&gt;
|-&lt;br /&gt;
| Basisboard: [[Pumpenansteuerung Basisboard Multi-MCU]] || || || 100 ||&lt;br /&gt;
|- 	 &lt;br /&gt;
| Basisboard: [[Schrittmotorsteuerungen Basisboard Multi-MCU]] || || || 100 ||&lt;br /&gt;
|-&lt;br /&gt;
| Basisboard: [[Tastenerkennung Basisboard Multi-MCU]] || || 1 || 10 || &lt;br /&gt;
|- 	 &lt;br /&gt;
| Basisboard: [[Füllstandserkennung Basisboard Multi-MCU]] || || || 100 ||&lt;br /&gt;
|- 	 &lt;br /&gt;
| Basisboard: [[Durchflussmessung Basisnoard Multi-MCU]] || || || 100 ||&lt;br /&gt;
|- 	  	 	  	 &lt;br /&gt;
| SSR-Platine: [[Schalten Magnetventile SSR-Platine Multi-MCU]] || || || 100 ||&lt;br /&gt;
|- 	 &lt;br /&gt;
| SSR-Platine: [[Schrittmotorsteuerungen SSR-Platine Multi-MCU]] || || || 100 ||&lt;br /&gt;
|-&lt;br /&gt;
| Messplatine: [[Messdatenerfassung Multi-MCU]] || || || 100 ||&lt;br /&gt;
|-&lt;br /&gt;
| || || || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= ToDo-Liste: MATLAB®-Funktionen und GUI =&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Arbeitspaket !! Wer !! Prio !! Status !! WV&lt;br /&gt;
|-&lt;br /&gt;
| [[MATLAB®-GUI Start der App]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[MATLAB®-GUI Initialisierung Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[MATLAB®-GUI Schalten Magnetventile]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[MATLAB®-GUI Datensicherung]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Messwerte erfassen Multi-MCU]] || || || ||&lt;br /&gt;
|- &lt;br /&gt;
| [[Pumpenansteuerung Multi-MCU]] || || || ||&lt;br /&gt;
|- &lt;br /&gt;
| [[Füllstandsregler Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Regler Boilerdruck Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Mischregler Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Durchflussregler Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Misch-Durchfluss Kaskadenregelung Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Preinfusion Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[einfacher Kaffeebezug Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Kaffeebezug Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Wasserbezug Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Dampfbezug Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Spülvorgänge Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Grundreinigung Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Tastenbedienung Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Display Multi-MCU]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Glasboiler Abtropfwanne]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Schrittmotorensteuerung Bypass]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Schrittmotorensteuerung Mischer]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Schrittmotorensteuerung Brühgruppendrossel]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Adaption an Multi-MCU - Neuprogrammierung MATLAB® GUI]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| Dokumentation der Software mit STM32-Elektronik. &amp;lt;br&amp;gt;Ein Betrieb dieser wird nicht mehr weiter verfolgt. || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Messwerte erfassen (Labor)]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Pumpenansteuerung (Labor)]] || ||  || || &lt;br /&gt;
|-&lt;br /&gt;
| [[Füllstandsregler (Labor)]] || ||  || || &lt;br /&gt;
|-&lt;br /&gt;
| [[Regler Boilerdruck (Labor)]] || ||  || ||  &lt;br /&gt;
|-&lt;br /&gt;
| [[Mischregler (Labor)]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Durchflussregler (Labor)]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[einfacher Kaffeebezug (Labor)]] || ||  || ||  &lt;br /&gt;
|-&lt;br /&gt;
| [[Kaffeebezug (Labor)]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Wasserbezug (Labor)]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Dampfbezug]] || ||  || ||  &lt;br /&gt;
|-&lt;br /&gt;
| [[Spülvorgänge (Labor)]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Tastenbedienung (Labor)]] || || || ||  &lt;br /&gt;
|-&lt;br /&gt;
| [[Anpassungen für Schrittmotorensteuerung]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| || || || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= ToDo-Liste: APP =&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Arbeitspaket !! Wer !! Prio !! Status !! WV&lt;br /&gt;
|-&lt;br /&gt;
| [[APP - Konzept]] || || 2 || 10 || &lt;br /&gt;
|- 	 &lt;br /&gt;
| [[Messwerte erfassen APP]] || || 99 || 10 || &lt;br /&gt;
|-&lt;br /&gt;
| [[Preset / Profilverwaltung]] || || 99 || 10 || &lt;br /&gt;
|-&lt;br /&gt;
| || || || ||&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Peter Vogginger</name></author>
	</entry>
	<entry>
		<id>http://www.institut-fuer-kaffeetechnologie.de/Wiki/index.php?title=Projektr%C3%BCcksprache_15.10.2025&amp;diff=4670</id>
		<title>Projektrücksprache 15.10.2025</title>
		<link rel="alternate" type="text/html" href="http://www.institut-fuer-kaffeetechnologie.de/Wiki/index.php?title=Projektr%C3%BCcksprache_15.10.2025&amp;diff=4670"/>
		<updated>2025-10-19T10:01:52Z</updated>

		<summary type="html">&lt;p&gt;Peter Vogginger: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Besprechungsprotokoll – Projektrücksprache 15.10.2025=&lt;br /&gt;
Ort: online via ZOOM &lt;br /&gt;
&lt;br /&gt;
Datum: 15.10.2025 &lt;br /&gt;
&lt;br /&gt;
Teilnehmer: Spyridon Sidiropoulos, Jeremias Kögl, Philipp Schiebel, Peter Vogginger, LfbA Armin Rohnen &lt;br /&gt;
&lt;br /&gt;
Moderator: LfbA Armin Rohnen &lt;br /&gt;
&lt;br /&gt;
Protokollant: Peter Vogginger &lt;br /&gt;
&lt;br /&gt;
==Top 1) Protokollführung==&lt;br /&gt;
Peter Vogginger meldet sich als Protokollant. &lt;br /&gt;
&lt;br /&gt;
==Top 2) Protokollannahme==&lt;br /&gt;
Protokoll wurde von allen Teilnehmenden bestätigt. &lt;br /&gt;
&lt;br /&gt;
==Top 3) Protokolländerung== &lt;br /&gt;
Herr Rohnen äußerte zu mehreren Punkten der vergangenen Woche Kritik, die benannt werden. Es wird nicht genug kommuniziert innerhalb der Gruppe und mit Herrn Rohnen. Als Verbesserungsvorschlag wird genannt, dass in Zukunft mehr kommuniziert werden soll. Die Terminfindung der Teammitglieder muss verbessert werden. Es wird eine Orientierungslosigkeit des Teams festgestellt. Die Herangehensweise, vorzugehen wie bei einer normalen Vorlesung, ist falsch. Es handelt sich um ein reales Projekt. Jedes Teammitglied soll zu den eigenen Schwächen stehen (Wo sind Lücken?). &lt;br /&gt;
&lt;br /&gt;
==Top 4) Organisatorisches==&lt;br /&gt;
Zur Erstellung der Agenda gilt, derjenige, der die Agenda erstellt, moderiert diese auch. Der Erstellende fragt alle anderen Teammitglieder einschließlich Herrn Rohnen ab, was auf die Agenda soll (basierend auf der ToDo-Liste), und wird spätestens 2 Tage vor der Besprechung an alle gesendet. Der Dateiname soll beachtet werden. Siehe hierzu das Merkblatt. Umlaute und zusätzliche Punkte sind nicht erlaubt. Das Besprechungsprotokoll muss nicht formatiert werden, nur der Text zählt. Es darf niemals der Briefkopf von Herrn Rohnen verwendet werden. Die Agenda kann, muss aber nicht formatiert werden. Es sollten besser keine Abkürzungen verwendet werden, besonders sollen keine neuen erfunden werden. Die Projektplanungshilfe ist auszudrucken und auszufüllen. Diese selbst zu zeichnen ist zu unterlassen. Um das Vorgehen bei der Abgabe zu verdeutlichen, im Folgenden ein Beispiel an der Abgabe am Freitag in der KW42. Es ist eine neu ausgefüllte Projektplanungshilfe abzugeben. In die 1. Zeile kommt was nächste Woche (KW43) abgearbeitet wird und in die 2. Zeile kommt was übernächste Woche (KW44) abgearbeitet werden soll. Zusätzlich wird die Projektplanungshilfe der vorherigen Woche, der KW41, abgegeben, wobei hier zu markieren ist, wie die Planung der Realität entsprochen hat. Dies geschieht entweder mit Haken oder zum Beispiel anhand des Bearbeitungsstandes (75%). Dies ist bei allen Einträgen zu tun. Es sind somit 2 Projektplanungshilfen am Freitag abzugeben. Arbeiten am Wochenende sind dabei grundsätzlich nicht erwünscht. Einerseits wird diese Zeit für die Regeneration benötigt und andererseits soll die Planung nicht auf den letzten Knopf erfolgen (Puffer!). &lt;br /&gt;
&lt;br /&gt;
==Top 5) Teamorganisation==&lt;br /&gt;
Die bisherige Teamorganisation war ungenügend, gemeinsame Teamzeiten sind wichtig. Es fehlt typischerweise die Integration. Hierzu soll ein Masterstudent die Rolle des Integrators übernehmen, ohne die Privilegien der Führungsposition zu erhalten (Weisungsbefugnis). Die Aufgabe ist es, die anderen Teammitglieder anzutreiben und die einzelnen Arbeiten ineinander zu integrieren (damit nicht jeder die Arbeit für sich allein &lt;br /&gt;
macht) Das Schema der Projektarbeit besteht aus Kommunikation, vorausschauender Planung und daraus, nichts an den Kollegen „vorbeizumogeln“. &lt;br /&gt;
Beispiele für gute Projektarbeiten sind der Kisselplatz-Tunnel und die Allianz-Arena. Die Planung soll immer mindestens 2 Wochen in der Zukunft erfolgen. Probleme sind anzusprechen. Sollte das Planungsziel von einem Teammitglied nicht erreicht werden, muss dies umgehend den Kollegen und Herrn Rohnen mitgeteilt werden. &lt;br /&gt;
&lt;br /&gt;
==Top 6) ToDo’s==&lt;br /&gt;
Herr Kögl schlägt für die Bearbeitung der Projektarbeit ein Vorgehen aus der Softwareentwicklung vor. Es gilt, zuerst zu verstehen, wie eine Zweikreis-Espressomaschine funktioniert. Die Hilfe von KI ist grundsätzlich zu nutzen, aber auch im Wahrheitsgehalt zu hinterfragen. &lt;br /&gt;
Der Druck im Kessel wird mittels eines Sensors erfasst. Wenn etwas nicht verstanden wurde, SOFORT melden und nicht bis zur nächsten &lt;br /&gt;
Besprechung warten. Gemeinsam soll überprüft werden, wie die bisherigen Abläufe funktionieren, insbesondere wie die aktuelle Ablauf-GUI in MATLAB aufgebaut ist und welche Teile künftig verlagert werden sollen. In diesem Zusammenhang wird auch das PDF-Dokument „Verlagerung der Regelkreise“ erneut betrachtet. Herr Rohnen erwartet einen E-Mail-Austausch von etwa zehn Nachrichten pro Woche. Die spezifischen Details und Unterschiede der im Labor verwendeten Espressomaschine sind derzeit nicht im Wiki dokumentiert; einzig Herr Rohnen verfügt über dieses Wissen. &lt;br /&gt;
Darüber hinaus muss Herr Rohnen stets informiert sein, woran jedes Teammitglied arbeitet und welche Programmierungen vorgenommen werden. &lt;br /&gt;
Herr Rohnen hat am Donnerstag von 13:30-15:00 Uhr Vorlesung, es soll frühzeitig Bescheid gegeben werden, wenn Laborzeit benötigt wird. &lt;br /&gt;
Es soll immer Herrn Rohnen Bescheid gegeben werden, wann das Labor genutzt werden möchte, auch ohne dessen Anwesenheit. Hierzu ist spätestens am Freitag davor Bescheid zu geben. Die Hochschule schließt um 22:00 – 22:30 Uhr. Es ist besser, eine Stunde vorher zu gehen, da sonst das Sicherheitspersonal nachfragen wird.&lt;br /&gt;
&lt;br /&gt;
==Top 7) Nächster Besprechungstermin==&lt;br /&gt;
Noch nicht festgelegt, wird über E-Mail-Austausch evaluiert.  &lt;br /&gt;
&lt;br /&gt;
==Top 8) Verabschiedung==&lt;/div&gt;</summary>
		<author><name>Peter Vogginger</name></author>
	</entry>
	<entry>
		<id>http://www.institut-fuer-kaffeetechnologie.de/Wiki/index.php?title=Projektr%C3%BCcksprache_15.10.2025&amp;diff=4669</id>
		<title>Projektrücksprache 15.10.2025</title>
		<link rel="alternate" type="text/html" href="http://www.institut-fuer-kaffeetechnologie.de/Wiki/index.php?title=Projektr%C3%BCcksprache_15.10.2025&amp;diff=4669"/>
		<updated>2025-10-19T10:00:49Z</updated>

		<summary type="html">&lt;p&gt;Peter Vogginger: Die Seite wurde neu angelegt: „=Besprechungsprotokoll – Projektrücksprache 15.10.2025= Ort: online via ZOOM   Datum: 15.10.2025   Teilnehmer: Spyridon Sidiropoulos, Jeremias Kögl, Philipp Schiebel, Peter Vogginger, LfbA Armin Rohnen   Moderator: LfbA Armin Rohnen   Protokollant: Peter Vogginger   ==Top 1) Protokollführung== Peter Vogginger meldet sich als Protokollant.   ==Top 2) Protokollannahme== Protokoll wurde von allen Teilnehmenden bestätigt.   ==Top 3) Protokolländerung==…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Besprechungsprotokoll – Projektrücksprache 15.10.2025=&lt;br /&gt;
Ort: online via ZOOM &lt;br /&gt;
&lt;br /&gt;
Datum: 15.10.2025 &lt;br /&gt;
&lt;br /&gt;
Teilnehmer: Spyridon Sidiropoulos, Jeremias Kögl, Philipp Schiebel, Peter Vogginger, LfbA Armin Rohnen &lt;br /&gt;
&lt;br /&gt;
Moderator: LfbA Armin Rohnen &lt;br /&gt;
&lt;br /&gt;
Protokollant: Peter Vogginger &lt;br /&gt;
&lt;br /&gt;
==Top 1) Protokollführung==&lt;br /&gt;
Peter Vogginger meldet sich als Protokollant. &lt;br /&gt;
&lt;br /&gt;
==Top 2) Protokollannahme==&lt;br /&gt;
Protokoll wurde von allen Teilnehmenden bestätigt. &lt;br /&gt;
&lt;br /&gt;
==Top 3) Protokolländerung== &lt;br /&gt;
Herr Rohnen äußerte zu mehreren Punkten der vergangenen Woche Kritik, die benannt werden. Es wird nicht genug kommuniziert innerhalb der Gruppe und mit Herrn Rohnen. Als Verbesserungsvorschlag wird genannt, dass in Zukunft mehr kommuniziert werden soll. Die Terminfindung der Teammitglieder muss verbessert werden. Es wird eine Orientierungslosigkeit des Teams festgestellt. Die Herangehensweise, vorzugehen wie bei einer normalen Vorlesung, ist falsch. Es handelt sich um ein reales Projekt. Jedes Teammitglied soll zu den eigenen Schwächen stehen (Wo sind Lücken?). &lt;br /&gt;
&lt;br /&gt;
==Top 4) Organisatorisches==&lt;br /&gt;
Zur Erstellung der Agenda gilt, derjenige, der die Agenda erstellt, moderiert diese auch. Der Erstellende fragt alle anderen Teammitglieder einschließlich Herrn Rohnen ab, was auf die Agenda soll (basierend auf der ToDo-Liste), und wird spätestens 2 Tage vor der Besprechung an alle gesendet. Der Dateiname soll beachtet werden. Siehe hierzu das Merkblatt. Umlaute und zusätzliche Punkte sind nicht erlaubt. Das Besprechungsprotokoll muss nicht formatiert werden, nur der Text zählt. Es darf niemals der Briefkopf von Herrn Rohnen verwendet werden. Die Agenda kann, muss aber nicht formatiert werden. Es sollten besser keine Abkürzungen verwendet werden, besonders sollen keine neuen erfunden werden. Die Projektplanungshilfe ist auszudrucken und auszufüllen. Diese selbst zu zeichnen ist zu unterlassen. Um das Vorgehen bei der Abgabe zu verdeutlichen, im Folgenden ein Beispiel an der Abgabe am Freitag in der KW42. Es ist eine neu ausgefüllte Projektplanungshilfe abzugeben. In die 1. Zeile kommt was nächste Woche (KW43) abgearbeitet wird und in die 2. Zeile kommt was übernächste Woche (KW44) abgearbeitet werden soll. Zusätzlich wird die Projektplanungshilfe der vorherigen Woche, der KW41, abgegeben, wobei hier zu markieren ist, wie die Planung der Realität entsprochen hat. Dies geschieht entweder mit Haken oder zum Beispiel anhand des Bearbeitungsstandes (75%). Dies ist bei allen Einträgen zu tun. Es sind somit 2 Projektplanungshilfen am Freitag abzugeben. Arbeiten am Wochenende sind dabei grundsätzlich nicht erwünscht. Einerseits wird diese Zeit für die Regeneration benötigt und andererseits soll die Planung nicht auf den letzten Knopf erfolgen (Puffer!). &lt;br /&gt;
&lt;br /&gt;
==Top 5) Teamorganisation==&lt;br /&gt;
Die bisherige Teamorganisation war ungenügend, gemeinsame Teamzeiten sind wichtig. Es fehlt typischerweise die Integration. Hierzu soll ein Masterstudent die Rolle des Integrators übernehmen, ohne die Privilegien der Führungsposition zu erhalten (Weisungsbefugnis). Die Aufgabe ist es, die anderen Teammitglieder anzutreiben und die einzelnen Arbeiten ineinander zu integrieren (damit nicht jeder die Arbeit für sich allein &lt;br /&gt;
macht) Das Schema der Projektarbeit besteht aus Kommunikation, vorausschauender Planung und daraus, nichts an den Kollegen „vorbeizumogeln“. &lt;br /&gt;
Beispiele für gute Projektarbeiten sind der Kisselplatz-Tunnel und die Allianz-Arena. Die Planung soll immer mindestens 2 Wochen in der Zukunft erfolgen. Probleme sind anzusprechen. Sollte das Planungsziel von einem Teammitglied nicht erreicht werden, muss dies umgehend den Kollegen und Herrn Rohnen mitgeteilt werden. &lt;br /&gt;
&lt;br /&gt;
==Top 6) ToDo’s==&lt;br /&gt;
Herr Kögl schlägt für die Bearbeitung der Projektarbeit ein Vorgehen aus der Softwareentwicklung vor. Es gilt, zuerst zu verstehen, wie eine Zweikreis-Espressomaschine funktioniert. Die Hilfe von KI ist grundsätzlich zu nutzen, aber auch im Wahrheitsgehalt zu hinterfragen. &lt;br /&gt;
Der Druck im Kessel wird mittels eines Sensors erfasst. Wenn etwas nicht verstanden wurde, SOFORT melden und nicht bis zur nächsten &lt;br /&gt;
Besprechung warten. Gemeinsam soll überprüft werden, wie die bisherigen Abläufe funktionieren, insbesondere wie die aktuelle Ablauf-GUI in MATLAB aufgebaut ist und welche Teile künftig verlagert werden sollen. In diesem Zusammenhang wird auch das PDF-Dokument „Verlagerung der Regelkreise“ erneut betrachtet. Herr Rohnen erwartet einen E-Mail-Austausch von etwa zehn Nachrichten pro Woche. Die spezifischen Details und Unterschiede der im Labor verwendeten Espressomaschine sind derzeit nicht im Wiki dokumentiert; einzig Herr Rohnen verfügt über dieses Wissen. &lt;br /&gt;
Darüber hinaus muss Herr Rohnen stets informiert sein, woran jedes Teammitglied arbeitet und welche Programmierungen vorgenommen werden. &lt;br /&gt;
Herr Rohnen hat am Donnerstag von 13:30-15:00 Uhr Vorlesung, es soll frühzeitig Bescheid gegeben werden, wenn Laborzeit benötigt wird. &lt;br /&gt;
Es soll immer Herrn Rohnen Bescheid gegeben werden, wann das Labor genutzt werden möchte, auch ohne dessen Anwesenheit. Hierzu ist spätestens am Freitag davor Bescheid zu geben. Die Hochschule schließt um 22:00 – 22:30 Uhr. Es ist besser, eine Stunde vorher zu gehen, da sonst das Sicherheitspersonal nachfragen wird.&lt;br /&gt;
&lt;br /&gt;
==Top 7) Nächster Besprechungstermin==&lt;br /&gt;
 Noch nicht festgelegt, wird über E-Mail-Austausch evaluiert.  &lt;br /&gt;
&lt;br /&gt;
==Top 8) Verabschiedung==&lt;/div&gt;</summary>
		<author><name>Peter Vogginger</name></author>
	</entry>
	<entry>
		<id>http://www.institut-fuer-kaffeetechnologie.de/Wiki/index.php?title=Kommunikation_per_UART&amp;diff=4666</id>
		<title>Kommunikation per UART</title>
		<link rel="alternate" type="text/html" href="http://www.institut-fuer-kaffeetechnologie.de/Wiki/index.php?title=Kommunikation_per_UART&amp;diff=4666"/>
		<updated>2025-10-19T09:26:41Z</updated>

		<summary type="html">&lt;p&gt;Peter Vogginger: /* Peter Vogginger, xx.10.2025 - NUCLEO_H743ZI2 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Peter Vogginger,19.10.2025 - NUCLEO_H743ZI2 =&lt;br /&gt;
Kommunikation als Token-Ring oder in Stern-Topologie &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der Wechsel der Kommunikation von dem geplanten Token-Ring-Verfahren, hin zur Stern-&lt;br /&gt;
&lt;br /&gt;
Topologie erfordert 3 serielle Schnittstellen. Dies ist mit der aktuellen Konstellation, 4 MCUs &lt;br /&gt;
&lt;br /&gt;
(Basisplatine, SSR-Platine, Messplatine und Displayplatine) mit jeweils einem Raspberry Pi &lt;br /&gt;
&lt;br /&gt;
Pico RP2040, nicht möglich. An einem RP2040 stehen 2 serielle Schnittstellen zur Verfügung. &lt;br /&gt;
&lt;br /&gt;
Der Wechsel hin zu einem größeren Board, dem NUCLEO-H743ZI2 MCU-Board mit einer &lt;br /&gt;
&lt;br /&gt;
STM32H7 MCU. Der Wechsel würde Vorteile bieten:  &lt;br /&gt;
&lt;br /&gt;
• weniger Elektronik in der Peripherie &lt;br /&gt;
&lt;br /&gt;
• ADCs ausreichend am Board &lt;br /&gt;
&lt;br /&gt;
• DACs ausreichend am Board &lt;br /&gt;
&lt;br /&gt;
• 8 serielle Schnittstellen &lt;br /&gt;
&lt;br /&gt;
• viel mehr nutzbare PINs &lt;br /&gt;
&lt;br /&gt;
Die Vielzahl an Anschlüssen bietet die Möglichkeit, von aktuell 3 Platinen (und 3 MCUs) auf 1 &lt;br /&gt;
&lt;br /&gt;
Platine mit einem MCU-Board zu reduzieren. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Allerdings bietet diese Umstellung nicht nur Vorteile.  &lt;br /&gt;
&lt;br /&gt;
Nachteilig wäre, dass bei jedem MicroPython Update ein eigenes Derivat erstellt werden &lt;br /&gt;
&lt;br /&gt;
müsste, da default die ADC auf 12-Bit Auflösung in MicroPython definiert sind. &lt;br /&gt;
&lt;br /&gt;
Aktuell existiert ein Derivat mit 16-Bit ADC Konfiguration (NUCLEO_H743ZI2_v1-27-&lt;br /&gt;
&lt;br /&gt;
0_ADC_16BIT.hex), dies basiert auf der MicroPython Version v1-27-0. &lt;br /&gt;
&lt;br /&gt;
Allerdings ist die Verfügbarkeit von NUCLEO-Boards immer zeitweise nicht gegeben. &lt;br /&gt;
&lt;br /&gt;
Diesbezüglich wäre ein Platinenlayout inkl. den Bauelementen für MCU und der direkten &lt;br /&gt;
&lt;br /&gt;
Peripherie erforderlich. Was aber erst nach der Inbetriebnahme der beiden Prototypen-&lt;br /&gt;
&lt;br /&gt;
Maschinen sinnvoll erscheint. Die Kosten dieser externen Entwicklung werden auf 50 t€ bis &lt;br /&gt;
&lt;br /&gt;
100 t€ geschätzt. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Aufgrund der aktuellen Situation wird bis auf Weiteres die Verwendung von Raspberry Pi &lt;br /&gt;
&lt;br /&gt;
Pico verfolgt. &lt;br /&gt;
&lt;br /&gt;
= Armin Rohnen, 16.10.2025 =&lt;br /&gt;
Im Zuge der Analyse für die zweite Auflage von MATLAB® meets MicroPython ist das Thema der UART-Kommunikation tiefer betrachtet worden. &lt;br /&gt;
&lt;br /&gt;
Die Kommunikation ist mit Sorgfalt zu programmieren. Durch Lesen und Schreiben auf die UART-Schnittstelle kann die MCU blockiert und dauerhaft an der Ausführung anderer Programmteile gehindert werden. Die Problematik ist in Abschnitt 3.13 der 2. Auflage MATLAB® meets MicroPython beschrieben.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Armin Rohnen, 11.04.2024 =&lt;br /&gt;
[[Datei:20250322 Konzept.png|thumb|900px|gerahmt|zentriert|alternativtext=Armin Rohnen, Kommunikationskonzept mit Token|Armin Rohnen, Kommunikationskonzept mit Token]]&lt;br /&gt;
Seitens des Platinenlayouts für die Steuerungselektronik wurden die jeweiligen PINs der ersten UARTSchnittstelle für die spätere Inter-Kommunikation der Steuerung herausgelegt. Die Raspberry Pi Pico MCU verfügt über einen jeweils 32 Byte großen Eingangs- bzw. Ausgangspuffer für die UART-Schnittstelle. Dieser soll genutzt werden um die Kommunikation zu ermöglichen. Die jeweilige Kommunikation selbst wird dadurch auf diese 32 Byte begrenzt. Hardwareseitig ist es Denkbar, dass je MCU zwei weitere PINs für die Kommunikation verwendet werden. Lediglich auf der SSR-Platine ist dazu ein Eingriff ins Platinenlayout erforderlich. Dieser kann bei einem Prototypen handwerklich durchgeführt werden. Die zwei zusätzlichen PINs für die Kommunikation (GP04, GP05 auf der Basisplatine, GP03, GP04 auf der SSR-Platine, GP06, GP07 auf der Messplatine) fungieren als eingehender und ausgehender Interrupt, so dass die Kommunikation als ISR programmiert werden kann.&lt;br /&gt;
&lt;br /&gt;
Angelehnt an das 1984 von IBM eingeführte Token Ring Network soll eine „im Kreis laufende“ Kommunikation aufgebaut werden. Ausgehend von der Messplatine wird ein Token über die einzelnen Platinen durchgereicht (Abbildung). Unter Berücksichtigung der Kommunikationsregeln können so eine beliebige Anzahl an Steuerungsplatinen in den Kommunikationsring eingebunden werden. Allerdings sollte dabei die Reihenfolge beachtet werden.&lt;br /&gt;
&lt;br /&gt;
Die Messplatine sendet über UART am Ende jedes gültigen Messwertsatzes einen oder mehrere Token an die Basisplatine. In den Token befinden sich die aktuellen Messwerte und alle anderen „im Kreis laufende“ Daten. Beim ersten Senden werden hier u.u. 0-Werte verwendet, bis dass der erste Token wieder bei der Messplatine angekommen ist. Ggf. unterbricht die Messplatine auch das Senden des Token bzw. der ersten Token-Serie, bis zum ersten Eintreffen eines Tokens. Die Messplatine ist damit der Taktgeber der Kommunikation. Konkret erfolgt dies in Abhängigkeit der Abtastrate des AD-Wandlers.Wenn ein Token versendet ist, wechselt die Messplatine den Logikzustand des ausgehenden Interrupt-PINs. Bevor der nächste Token versendet wird, wird wieder der Ausgangslogikzustand des Interrupt-PINs hergestellt. Sobald die Messplatine auch einen Token empfangen hat wird auch der PWM-Stellwert für das Boilerheizelement (aus Regler Boilerdruck) und für den Tassenwärmer im Token übermittelt.&lt;br /&gt;
&lt;br /&gt;
Von der Messplatine erhält die Basisplatine den Token. Die UART-Schnittstelle wird ausgelesen, wenn am eingehenden Interrupt-PIN der Logikzustand wechselt. Die Basisplatine tauscht im Token die Daten für die eigenen Messwerte, die Schaltzustände der Tasten, die Schaltzustände der Magnetventile usw. aus und sendet den Token an die SSR-Platine weiter. Ist der Token versendet, wechselt die Basisplatine den Logikzustand des ausgehenden Interrupt-PINs und arbeitet in gleicher Logik weiter wie die Messplatine.&lt;br /&gt;
&lt;br /&gt;
Die SSR-Platine bekommt von der Basisplatine den Token durchgereicht. Die SSR-Platine wertet den Token lediglich aus, nimmt keine Veränderungen darin vor und reicht diesen dann weiter. Nach der SSR-Platine kann eine Display-Platine nachgeschaltet werden. Diese wertet die Informationen im Token aus und visualisiert diese bzw. stellt die Informationen über WLAN zur Verfügung. Im Falle eines Touch-Displays werden die Bytes für die Schaltzustände der Tasten ausgetauscht. Abschließend erhält die Messplatine wieder den Token und übernimmt die relevanten Informationen daraus in den neu zu sendenden Token.&lt;br /&gt;
&lt;br /&gt;
Anstelle des eingehenden und ausgehenden Interrupt-PINs kann u.u. auch die MicroPython-Funktionalität uart.irq verwendet werden. Diese ruft eine ISR auf, sobald Daten im EIngangspuffer der UART-Schnittstelle eingegangen sind.&lt;br /&gt;
&lt;br /&gt;
Das Konzept ist auszugestalten und der bzw. die Token sind exakt zu definieren. Dabei ist auch zu definieren (und zu erproben) wie die dann übergeordnete MATLAB®-GUI die Daten für die Visualisierung erhält. Der einzelne Token darf aufgrund der Limitierung durch den UART-Puffer des Raspberry Pi Picos 32 Byte nicht überschreiten. Als maximale Datenrate sind 115200 Baud möglich, was unter Berücksichtigung von START / STOP-Bits und Paritätsbit eine maximale Kommunikationsrate von 11520 Byte je Sekunde ergibt. Damit wären 360 jeweils 32 Byte lange Token in der Kommunikation möglich. Nach aktuellem Stand der Recherchen überschreitet die Datenmenge für die Kommunikation die 32 Byte Grenze, so dass mit mehreren Token gearbeitet werden muss. Jeder Token weist im ersten Byte eine Token-Nr auf, so dass der Token zweifelsfrei identifiziert werden kann. Alle Token müssen die gleiche Länge in Bytes aufweisen. Für zukünftige Erweiterungen sind Leer-Bytes in den Token vorhanden. Jeder der 4 Token muss die gleiche Länge in Bytes aufweisen.&lt;br /&gt;
&lt;br /&gt;
Getaktet wird die Kommunikation durch die Datenerfassung der Messplatine. Aufgrund der jeweils ungültigen ersten Wandlung eines Messkanals ist eine maximale Abtastrate von 430 Messwerten je Sekunde aufgeteilt auf acht Messkanäle, was ca. 53 Datensätze je Sekunde ergibt. Bei einer Abtastrate von 475 SPS ergeben sich 30 gültige Messdatensätze je Sekunde.Wird nach jedem zweiten gültigen Messkanal ein 27 Byte langer Token von der Messplatine gesendet, dann ergibt dies eine Inter-Kommunikation zwischen den MCUs von 120 Token bzw. 3240 Byte je Sekunde, was unter der als Maximum angesehenen Datenrate liegt. Selbst bei einer Verlängerung der Token auf 32 Byte würde lediglich 1/3 des theoretisch möglichen Datentransfers durchgeführt.&lt;br /&gt;
&lt;br /&gt;
== Definition der Token ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Text der Überschrift&lt;br /&gt;
|-&lt;br /&gt;
! Byte !! Token 1 !! Token 2 !! Token 3 !! Token 4&lt;br /&gt;
!Token 5&lt;br /&gt;
!Token 6&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Messwerttoken BG 1 || Stelllgrößentoken BG 1 || Messwerttoken BG 2 || Stelllgrößentoken BG 2&lt;br /&gt;
|Messwerttoken BG 3&lt;br /&gt;
|Stelllgrößentoken BG 3&lt;br /&gt;
|-&lt;br /&gt;
| 1 (Highbyte) || Leitwert || Magnetventil 9-16 || ||&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 2 (Lowbyte) || Leitwert || Magnetventil 1-8 || ||&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 3 (Highbyte) || Boilerdruck || Sollwert Flowrate || ||&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 4 (Lowbyte) || Boilerdruck || Sollwert Flowrate || ||&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 5 (Highbyte) || Brühgruppendruck || Stellwert Pumpe || ||&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 6 (Lowbyte) || Brühgruppendruck || Stellwert Pumpe || ||&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 7 (Highbyte) || Leitungsdruck || Mischer T-Soll || ||&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 8 (Lowbyte) || Leitungsdruck || Mischer T-Soll || ||&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 9 (Highbyte) || T-Boiler || Stellwert Dosierventil || ||&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 10 (Lowbyte) || T-Boiler || Stellwert Dosierventil || ||&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 11 (Highbyte) || T-Tassen || Sollwert Boilerdruck || ||&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 12 (Lowbyte) || T-Tassen || Sollwert Boilerdruck || ||&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 13 (Highbyte) || T-Mischer || Stellwert Heizung || ||&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 14 (Lowbyte) || T-Mischer || Stellwert Heizung || ||&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 15 (Highbyte) || T-Brühgruppe || Sollwert Tassenwärmer || ||&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 16 (Lowbyte) || T-Brühgruppe || Sollwert Tassenwärmer || ||&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 17 (Highbyte) || inc. Flowmeter || Stellwert Tassenwärmer || ||&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 18 (Lowbyte) || inc. Flowmeter || Stellwert Tassenwärmer || ||&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 19 (Highbyte) || Flowrate || || ||&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 20 (Lowbyte) || Flowrate || || ||&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 21 (Highbyte) || || || ||&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 22 (Lowbyte) || || || ||&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 23 (Highbyte) || || || ||&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 24 (Lowbyte) || || || ||&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 25 (Highbyte) || || || ||&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 26 (Lowbyte) || || || ||&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|27 (Highbyte)&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|28 (Lowbyte)&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|29 (Highbyte)&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|30 (Lowbyte)&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|31 (Highbyte)&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|(Lowbyte)&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Peter Vogginger</name></author>
	</entry>
</feed>