Kommunikation per UART

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

Armin Rohnen, 11.04.2024

Armin Rohnen, Kommunikationskonzept mit Token
Armin Rohnen, Kommunikationskonzept mit Token

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.

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.

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.

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.

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.

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.

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.

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.

Definition der Token

Text der Überschrift
Byte Token 1 Token 2 Token 3 Token 4
0 Token Nr - 1 Token Nr - 2 Token Nr - 3 Token Nr - 4
1 (Highbyte) Leitwert BG-Drossel-1 BG-Drossel-2 BG-Drossel-3
2 (Lowbyte) Leitwert BG-Drossel-1 BG-Drossel-2 BG-Drossel-3
3 (Highbyte) Brühgruppendruck-1 Boilertemperatur-1 Mischtemperatur-1 T-Brühgruppe-1
4 (Lowbyte) Brühgruppendruck-1 Boilertemperatur-1 Mischtemperatur-1 T-Brühgruppe-1
5 (Highbyte) Brühgruppendruck-2 Boilertemperatur-2 Mischtemperatur-2 T-Brühgruppe-2
6 (Lowbyte) Brühgruppendruck-2 Boilertemperatur-2 Mischtemperatur-2 T-Brühgruppe-2
7 (Highbyte) Brühgruppendruck-3 Boilertemperatur-3 Mischtemperatur-3 T-Brühgruppe-3
8 (Lowbyte) Brühgruppendruck-3 Boilertemperatur-3 Mischtemperatur-3 T-Brühgruppe-3
9 (Highbyte) Boilerdruck Leitungsdruck T-Tassenwärmer Dampfhahn
10 (Lowbyte) Boilerdruck Leitungsdruck T-Tassenwärmer Dampfhahn
11 Tasten 1 bis 8 Magnetventil 1 - 8 Magnetventil 25 - 32 Füllstand 1 - 8
12 Tasten 9 bis 16 Magnetventil 9 - 16 Magnetventil 33 - 40 0 - frei
13 Tasten 17 bis 24 Magnetventil 17 - 24 Magnetventil 41 - 48 0 - frei
14 (Highbyte) Inc-Flowmeter-1 Inc-Flowmeter-2 Inc-Flowmeter-3 PWM-Tassenwärmer
15 (Lowbyte) Inc-Flowmeter-1 Inc-Flowmeter-2 Inc-Flowmeter-3 PWM-Tassenwärmer
16 (Highbyte) Dosierventil-1 Dosierventil-2 Dosierventil-3 TSoll-Mischer-1
17 (Lowbyte) Dosierventil-1 Dosierventil-2 Dosierventil-3 TSoll-Mischer-1
18 (Highbyte) PWM-Heizelement-1 PWM-Heizelement-2 PWM-Heizelement-3 TSoll-Mischer-2
19 (Lowbyte) PWM-Heizelement-1 PWM-Heizelement-2 PWM-Heizelement-3 TSoll-Mischer-2
20 (Highbyte) U-Pumpe-1 U-Pumpe-2 U-Pumpe-3 TSoll-Mischer-3
21 (Lowbyte) U-Pumpe-1 U-Pumpe-2 U-Pumpe-3 TSoll-Mischer-3
22 (Highbyte) Flow-Soll-1 Flow-Soll-2 Flow-Soll-3 0 - frei
23 (Lowbyte) Flow-Soll-1 Flow-Soll-2 Flow-Soll-3 0 - frei
24 0 - frei 0 - frei 0 - frei 0 - frei
25 0 - frei 0 - frei 0 - frei 0 - frei
26 0 - frei 0 - frei 0 - frei 0 - frei