Sicherheitsfunktionen

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

Florian Todenhagen, 13.12.2022

Als Sicherheitsfunktion gegenüber zu hohem Druck der von der Pumpe ausgeht, soll die automatische Öffnung der Drossel am Pumpen-Bypass in die Systemsoftware implementiert werden. Die Drossel findet sich in [64] wieder.


Jan Budnick, 07.06.2022 (Abschlussbemerkung)

Die Sicherheitsanforderungen und Implementierungen haben sich seit dem Manuellen Modus geändert und sollen demnach nochmal erklärt werden:

Im Vorhinein ist zu erläutern, dass derzeit mit experimenteller Software gearbeitet wird. Unter anderem aufgrund der vielen Änderungen ist diese nicht ausgiebig getestet, es kann demnach zu Bugs und unerwarteten Verhalten kommen. Besonders da der Großteil der Sicherheiten über die App verwirklicht sind ist eines der größten Sicherheitsbedenken die Fehlkommunikation.

Die genaue Entstehung dieser Kommunikationsprobleme ist nicht bekannt. Möglich sind fehlerhafte Kommunikation der seriellen Schnittstelle, Probleme bei der Annahme der Kommunikation durch die MCU oder Probleme beim Senden durch die APP. Das letztere erscheint am wahrscheinlichsten, da MATLAB® auf einem Thread läuft und das Senden somit z.B. durch Interrupts unterbrochen werden könnte. Da die genaue Abarbeitung der REPL in MicroPython nicht verstanden ist wäre es auch möglich, dass die Probleme auch durch Interrupts auf der MCU entstehen.

Unabhängig der Entstehung der Fehlkommunikation kann man diese in 2 Kategorien aufteilen. Unterbrochene Befehle, die mit einem Befehl beendet werde. Das sind solche, wo z.B. das Senden eines Befehles unterbrochen wird, demnach wird der nächste angehängt, oder es fehlen Teile des Befehls mitten im Befehl. Diese Art des Fehlers führt dazu, dass die letzten 1 bis 2 Befehle nicht ausgeführt werden, sind aber weiter nicht gefährlich. Die 2. Art des Befehls ist wesentlich gefährlicher, es ist die Unterbrechung eines Befehls durch die Messwerte. Dies Führt zum Anzeigen von „…“, einer Eingabeaufforderung, die die Ausführung weiterer Befehle blockiert. Es kommt somit zu einem Deadlock, welcher, wenn er nicht gelöst werden kann, einen Neustart erzwingt. Bei niedriger Frequenz kann dieses Problem durch senden einer „)“+CR/LF gelöst werden, verursacht dann jedoch eine Fehlermeldung. Desto höher die Frequenz (vom Messwerttimer) geht, desto wahrscheinlicher ist es, dass der Fehler nicht gelöst werden kann, da die Kommunikation irgendwann nicht mehr hinterherkommt.

Es wurden verschiedenste Methoden versucht um diese Kommunikationsproblem zu verhindern, von statischem pausieren, bis hin zu warten durch while-Schleifen und Ausführen nur einzelner Befehle durch return. Keines der Methoden konnte das Problem gänzlich beheben.

Auch das Senden aller Befehle über eine einzige Zeil wurde probiert. Auch dies konnte das Problem nicht gänzlich beheben, jedoch macht es das Stellen von vielen Aktoren auf einmal einfach, sodass bei Erkennung von Fehlern einfach alle Aktoren nochmal gestellt werden können. Somit liegt ein gesicherter Zustand vor.

Des Weiteren stellt der Druck im System eine nennenswerte Gefahr dar. Laut bereits durchgeführten Messungen dürfte die Pumpe keinen Druck über 16 bar erzeugen. Eine Wiederholmessung wurde bisher nicht durchgeführt an der Labormaschine ist bisher auch nur ein Druck bis 16 bar messbar. Es wurde bereits Druck jenseits 14 bar im Betrieb gemessen. Dabei ist zu beachten, dass die Ventile nur bis 12 bar gesichert sind und besonders die Komponenten im Warmwasser ebenfalls empfindlich gegenüber hohem Druck sind. Es muss somit immer auf die Pumpendrehzahl geachtet werden, damit der Druck nicht zu hoch wird. Dies wird derzeit noch nicht überwacht. Am günstigsten wäre hier ein Überdruckventil, welches ab 12 bar öffnet und die Flüssigkeit von hinter der Pumpe wieder vor die Pumpe leitet.

Zu den eigentlichen Sicherheiten in den Programmen:

  1. Es wurde sich bemüht möglichst viel Sicherheit zu implementieren, jedoch muss auch immer überlegt werden was sinnvoll mit den verfügbaren Ressourcen abgedeckt werden kann und wie wird die Handlungsfähigkeit des Nutzers möglichst wenig eingeschränkt, während trotzdem gute Sicherheit gewährleistet wird. Vor allem aus diesem Grund ist der Manuelle Modus wesentlich weniger abgesichert als der Automatische, besonders der Manual Overwrite.
  2. Im Codeablauf läuft erst der Füllregler, dann der Heizregler und erst dann die Programme. Dies bedeutet die Reihenfolge ist nach Sicherheitsrelevanz gestaffelt. Damit die wichtigsten Funktionen zuerst Zugriff auf die Sperrvariablen haben.
  3. Der Füllregler kann nicht Messen während geheizt wird oder Dampf bezogen wird, da das Ergebnis womöglich verfälscht würde. Außerdem wäre es gefährlich, wenn der Regler mitten in einem Programm versucht nachzufüllen. Aus diesem Grund gibt es die „fuellenErlaubt" Variable, die verhindert, dass der Füllstand gemessen wird während ein Programm läuft oder geheizt wird. Gleichzeitig gibt es eine Variable „nachfuellungErfolgt“, die verhindert, dass Programme oder Heizung beim Nachfüllen laufen.
  4. Der Heizvorgang wird durch die Programme nicht eingeschränkt, es darf demnach jeder Zeit geheizt werden. Dafür muss der Regler prüfen, ob der Füllregler an ist und nicht nachfüllt. Sollte dies gegeben sein muss der Füllstand auch ausreichend sein. Ein Bedenken hierbei ist, dass der Füllstand nur vom Füllregler gemessen wird, während kein Programm läuft oder geheizt wird. Sollte der Füllstand während des Heizens oder eines Programms fallen, wird dies erst nach Ende des Heizens und Programms auffallen. Im Fehlerfall, dass sich kein Druck im Boiler aufbauen kann, etwa leerlaufen oder öffnen des Boilers wird der Solldruck nie erreicht. Aus diesem Grund wird der Füllstand beim Heizen wieder geprüft. Dies bietet noch keine absolute Sicherheit, da es beim Heizen zu Fehlauslesung des Füllstandes kommen kann. Die weitere Sicherheit des Heizreglers ist seine Funktionalität. Er hört beim Erreichen des Solldrucks auf zu Heizen. Sollte es hier zu einem Kommunikationsfehler kommen ist auf der MCU im Timer eine Zeile, welche bei Überschreiten von 1700 mbar das Heizelement ausschaltet.
  5. Aufgrund des geringeren Volumens kann die 1,8 L nicht so stark überfüllt werden und leert sich schneller bei Dampfbezug. Dies gekoppelt mit instabiler Füllstandsmessung bei Heizen bedeutet, dass der Heizregler nicht nur den letzten Füllstand betrachtet, sondern heizen darf, solang einer der letzten 5 Messwerte 1 war.
  6. Zur zusätzlichen Sicherheit, dass nicht aus Versehen eine Mischung an Ventilen und Aktoren geschalten werden, werden durch Regler und Programme immer alle Aktoren überschrieben, sodass immer nur der Input des letzten Zugangs zählt.
  7. Um Druckanstiege zu vermeiden wird bei vielen Vorgängen die Ventilschaltung verzögert um die Pumpe in einen sicheren Zustand bringen. Dieser Zustand kann in der Variablen „geringstePumpenleistung“ festgelegt werden. Diese dient gleichzeitig dem Druckaufbau vor Öffnung von Ventilen, um den Dampfdruck zu kompensieren. Es gibt bisher nur 2 Zustände in dem dies nicht erfolgt: 1. Wasserwendel "Entlüftung", hier wird stattdessen der Festwasserdruck verwendet. 2. Ende eines Bezuges: Da in Zukunft die Bezugsmenge möglicherweise möglichst genau eingestellt werden soll, kann die Pumpe hier nicht eine Weile nachlaufen. Stattdessen wird Y07 sofort geschlossen und Y11 geöffnet. Bisher hat dieses Vorgehen noch zu keinen Problemen geführt.
  8. Um zu verhindern, dass Überdruck in der Wasserwendel entsteht, wird diese beim Aufheizen und nach einem Bezug entlüftet. Mehr dazu unter Magnetventile schalten.
  9. Es wird bei Schalten eines Schalters fast immer erst geprüft, ob ein gesicherter Zustand vorliegt (im manuellen Modus weniger) und wenn nicht, darf nicht umgeschaltet werden. Der Sicherste Zustand ist program=0. Dies bedeutet alle Ausgleichsvorgänge sind durch, das erste Aufheizen ist durch und es findet gerade kein Bezug statt. Im Automatischen Modus darf nur bei diesem Zustand der Boiler entleert und die Maschine ausgeschaltet werden. Darüber hinaus gibt es noch den Zustand Bezug beenden (program=2) oder Ausgleich abwarten (program=9), aus diesem Zustand kann ein weiterer Bezug sicher durchgeführt werden.
  10. Sollte der Druck in der Brühgruppe über 12 bar gehen, versucht die MCU die Pumpe auszuschalten, wenn die APP weiter an ist, kann diese jedoch versuchen die Pumpe wieder einzuschalten. Außerdem lässt die MCU, das Stellen der Pumpe in diesem Zustand nicht zu.
  11. Falls beim Ausschalten des Heizreglers etwas schiefgehen sollte wird program=0 auch dafür verwendet die Heizung auszumachen.
  12. Sollte die Heizregler ausgemacht werden, wird die Funktion Boilerregler weiterhin aufgerufen und setzt den Heizsollwert auf 0.
  13. Sollte der Füllregler beim Füllen deaktiviert werden, wird die Reglerfunktion weiter aufgerufen, sodass die Füllung langsam beendet wird. Da dies nach Ausschalten der Maschine nicht mehr geht, ist ein Ausschalten im Automatischen Modus nur dann möglich, wenn nicht gerade nachgefüllt wird.

To-Do: Grund der Fehlkommunikation finden und beheben (womöglich anders programmieren) + Sicherheiten aus den FMEA's einarbeiten.

Jan Budnick, 17.04.2022

Für den Manuellen Modus und den Darin enthaltenen Manuellen Wasser und Kaffeebezug wurden mehrere grundlegende Sicherheitsfunktionen bereits impleentiert.

  • Das beheizen des Boilers ist nur möglich, wenn der Füllregler an ist und nicht gerade am nachfüllen ist. Da der Füllregler zuerst aufgerufen wird bedeutet dies des Weiteren, dass der Boiler erst gefüllt wird bevor der Boiler Beheizt werden kann. Außerdem ist ein Heizen nicht möglich während Dampf bezogen wird. Da während des Aufheizens unter 98 bzw 95°C Entlüftet und umgepumpt wird, ist das Ausführen von Programmen in dieser Zeit untersagt.
  • Das Befüllen des Boilers des Boilers ist nur möglich wenn nicht geheizt wird und kein anderes Programm (z.B Wasserbezug läuft), da diese entweder die Pumpe verwenden oder eine Füllstandsabfrage währenddessen nicht möglich ist.
  • Generell werden bei allen Reglern und Programmen immer alle Aktoren gesetzt um zu verhindern, dass durch mehrere Regler und Programme es zu einem Mischzustand kommt.
  • Der Aufruf von Teilen der Regler und alle Programme werden über eine Switch Anweisung realisiert, dies ermöglicht ein einfaches erweitern der Funktionalität und stellt sicher, dass immer nur ein Programm gleichzeitig läuft. Außerdem spart es Rechenzeit, da nicht immer wieder If-Statements abgearbeitet werden müssen. Trotzdem wird in den meisten Programmen abgefragt, ob der Boiler nachgefüllt wird und ob der Boiler bereits mit der Initialen Aufheizung fertig ist. Die Zahlen 0-9 werden für Grundfunktionen verwendet. 10-19 für den manuellen Modus und 20-29 für den automatischen Kaffeebezug.
  • Im Datenblatt der Pumpe wird darauf hingewiesen, dass bei Schalten von Magnetventilen die Pumpe einen gefährlichen Überdruck entwickeln kann. Aus diesem Grund wird die Pumpe in den Meisten fällen erst etwa 1 Sekunde auf 500 mV Ansteuerungsspannung gebracht bevor Ventile geschlossen werden.
  • Um zu verhindern, dass die Ausdehnung von Wasser die neuen Magnetventile vor und hinter der Wasserwendel beschädigt, wird die Wasserwendel und der Boiler in Verschiedenen Situationen ins Gleichgewicht gebracht. Dies erfolgt nach jeden Bezug von Wasser und bleibt etwa 5 Sekunden. Außerdem erfolgt dies bis zum erreichen der 98°C bzw 95°C und bleibt auch dann einige Sekunden weiterhin offen.
  • Um sicherzugehen, dass in der Wasserwendel kein Dampf entsteht wird die Pumpe mit etwa 500 mV eine Sekunde vor Öffnen des Ventils betrieben.
  • Der Modus "Manual Overwrite" ist nur sehr vorsichtig zu verwenden, da die meisten Sicherheitsfunktionen hier nicht abgebildet sind. Bevor dieser Modus startet und beendet wird, werden jedoch alle Aktoren zurückgesetzt. Das Befüllen des Boiler muss z.B. per Hand gemacht werden. Ein Heizen während der Boilerstand zu niedrig ist, sollte trotzdem nicht möglich sein.

Jan Budnick, 21.02.2022

Sicherheitsfunktionen implementieren: Überdruck/Übertemperatur, Heizung aus bei niedrigen Füllstand, keine Füllstandsmessung bei Dampfentnahme, weitere Sicherheitsaspekte sollten zum Implementierungszeitpunkt abgestimmt werden.