Feuerungsautomat
Mitarbeit bei der Entwicklung einer Steuerung für Gas- und Öl-Brenner bis zu 20MW innerhalb eines mittelgroßen Teams
Analyse und Entwurf in UML, Programmierung in C++, Betriebssystemprogrammierung in ARM-Assembler, hardwarenahe Programmierung in C++ und HET-Assembler, statische Code-Analyse, Test, Review
Zur Brennkammer führen mehrere Leitungen für Brennstoffe, Luft und eventuell Abgasrückführung. In den Leitungen für gasförmige Stoffe sind drehbare Klappen. In den Leitungen für Luft können Gebläse sein. Die Steuerung ist auf mehrere Geräte verteilt, die über CAN verbunden sind. Jedes enthält einen Prozessor der RM4x-Familie mit ARM Cortex-R-Kern. Das Betriebssystem ist SCIOPTA. Alle Geräte außer der Benutzerkommunikation haben den SIL3.
Analysiert und entworfen wurde in UML mit Enterprise Architect. Alle Software-Schichten sind in C++ programmiert. Der C++Text wurde mit der Axivion Bauhaus Suite statisch analysiert. Die Konfiguration der internen Peripherie der RM4x und der N2HETs wurde mit dem grafischen Werkzeug HalCoGen definiert. Getestet wurde auf Komponentenebene mit CxxTest und auf dem Gerät.
Die Projektsteuerung erfolgte mit SAFe in PIs von drei Monaten und die feine Projektsteuerung mit Scrum in Sprints von zwei Wochen. Als Planungswerkzeug kam IBM Jazz, speziell Rational Team Concert zum Einsatz.
-
-
Verantwortung für die Drehwinkelmessung des Stellantriebs
Ein Schrittmotor treibt über ein Getriebe die Welle an, auf der die Klappe sitzt. Vor der Welle befindet sich ein berührungsloser Drehwinkelsensor AS5261. Die Steuerungssoftware läuft auf einem RM42. Der AS5261 codiert den Drehwinkel und eventuelle Fehlermeldungen in ein PWM Signal, das in den N2HET des RM42 eingespeist wird.
Ich analysierte ob der HET das Rechtecksignal genau genug abtasten kann und legte seine Betriebsart fest. Ich programmierte ihn in seiner eigenen Assembler-Sprache. Das Programm misst mit zwei PCNT-Befehlen die Dauer der Low- und der High-Phase des Rechtecksignals.
Dem Asynchron-Synchron-Übergang dient ein Wechselpuffer, der im Interrupthandler die Dauer und Polarität der neuesten Phase aufnimmt. Die Applikationsschicht fasst die gespeicherten Phasen als PWM auf und errechnet aus dem Verhältnis anhand einer Parametrierung einen Winkel bzw. eine Fehlermeldung.
Ich entwarf alle Software-Schichten als UML-Modell mit Klassen- Kollaborations- und Sequenzdiagrammen und programmierte die Applikationsschicht in C++. Den Interrupthandler und den Wechselpuffer programmierte ein Mitarbeiter anhand meines UML-Modells.
Als Sicherheitsmaßnahme ist die Drehwinkelmessung doppelt ausgelegt. Der AS5261 enthält zwei Sensoren, von denen jeder ein eigenes PWM Signal ausgibt. Die beiden PWMs sind gegenläufig. Den Datenweg bis zur Applikationsschicht bilden zwei separate Objektnetze. Der einzige Knoten ist der HET da der RM42 nur einen hat. In der Applikationsschicht werden die PWM Signale zuerst einzeln geprüft und es wird unterschieden, ob sie einen Winkel oder eine Fehlermeldung tragen. Danach werden sie gegeneinander geprüft. Die Algorithmik hat parametrierbare Schwellen und Toleranzen um die Abwägung Sicherheit gegen Verfügbarkeit zu erleichtern.
Ich spezifizierte die Algorithmik mit UML-Sequenzdiagrammen und Text und ein Mitarbeiter programmierte sie in C++. Eine Portierung auf den RM44 und die Nutzung seiner beiden HETs bereitete ich vor.
-
-
-
Mitarbeit an der Ansteuerung des Schrittmotors des Stellantriebs
Ich analysierte die Abhängigkeit der Schrittmotor-Regelung von der Drehwinkelmessung und dokumentierte sie in einem UML-Nutzungsfalldiagramm. Später prüfte ich das Konzept und den Softwareentwurf der Schrittmotor-Regelung im Rahmen der Design Review.
-
-
-
Mitarbeit an der Messung der Drehzahl des Gebläses
Auf der Welle des Ventilators sitzt eine Scheibe mit verschieden breiten Zacken, die an einem Näherungssensor vorbeilaufen. Die Steuerungssoftware läuft auf einem RM48. Der Näherungssensor erzeugt ein Rechtecksignal, das in einen N2HET des RM48 eingespeist wird.
Die Software-Schichtung ist wie bei der Drehwinkelmessung des Stellantriebs. Die Applikationsschicht entscheidet, ob der Ventilator steht oder sich dreht, ermittelt die Drehrichtung und berechnet die Drehzahl. Die Algorithmik ist parametrierbar, um z.B. Freiheit bei der Anzahl und Breite der Zacken zu haben.
Ich entwarf die Applikationsschicht als UML-Modell mit einem Klassendiagramm, spezifizierte die Algorithmik mit Text und programmierte sie in C++.
-
-
-
Entwicklung einer Laufzeitmessung für Interrupthandler und Prozesse
Der Process Swap Hook von SCIOPTA wird genutzt um Auswertefunktionen von SEGGER SystemView aufzurufen und mit benötigten Werten, z.B. Prozessnummer und Zeitstempel zu beschicken. SystemView misst damit die Durchlaufzeiten der synchronen Funktionen und zeigt sie auf einem angeschlossenen PC grafisch an.
Die verwendete Version von SCIOPTA bot keine entsprechende Möglichkeit für Interrupthandler. Deshalb wurde der zentrale Interrupthandler von SCIOPTA so erweitert, dass er die Auswertefunktionen von SEGGER SystemView aufruft und mit benötigten Werten, z.B. Interruptvektor und Zeitstempel beschickt.
Ich entwickelte die komplette Laufzeitmessung von der Modifikation des SCIOPTA-Interrupthandlers in ARM-Assembler bis zur Inbetriebnahme von SEGGER SystemView auf dem PC. Ich dokumentierte sie und beriet die Anwender.
-