C# auch auf Embedded Devices verwenden – mit dem nanoFramework zeigen wir sowohl den Weg als auch dessen Vorteile auf.
Einleitung
C# wird heute hauptsächlich in der Applikationsentwicklung eingesetzt, doch würde eine einheitliche Programmiersprache für verschiedene Plattformen - Embedded Devices miteingeschlossen - nicht die Entwicklung vereinfachen? Das Open Source Projekt «nanoFramework» als Nachfolger vom .NET Microframework verfolgt genau dieses Ziel. Es bietet die Möglichkeit, managed Code wie z.B. C# auf einem Mikrocontroller mit begrenzten Ressourcen auszuführen.
CSA Engineering AG hat das nanoFramework für die eigene universelle Embedded Plattform portiert und in Betrieb genommen. Diese Plattform basiert auf einem STM32F4 Mikrocontroller und wird von Kunden im industriellen Umfeld eingesetzt.
Vorteile einer Vereinheitlichung der Programmiersprache
Oft bestehen Anwendungen im Industriebereich aus einem Embedded Device z.B. einem kleinen Sensor, einem Aktor oder einer sonstigen Elektronikeinheit mit einem Mikrocontroller sowie einer zentrale Auswertungs- / Steuereinheiten in Form einer Industrie-PC Lösung oder Cloud Anwendung. Beide Bereiche verwenden normalerweise unterschiedliche Programmiersprachen, Betriebssysteme und Entwicklungsumgebungen. Für die Entwicklung solcher Anwendungen muss somit Wissen in unterschiedlichen Technologien und Tools vorhanden sein. Der Wartungsaufwand der verschiedenen Toolchains ist dabei nicht zu unterschätzen. Eine Reduktion der Tools und Programmiersprachen durch eine Vereinheitlichung mit Hilfe eines Frameworks würde viele Vorteile mit sich bringen:
- Bündelung von Know-How: Mitarbeiter können flexibler für beide Bereiche eingesetzt werden.
- Beschleunigung der Entwicklung: Durch die einheitliche Toolchain, Programmiersprache und das Framework resultiert ein einheitlicher Systemaufbau und eine gemeinsame Rahmenstruktur über mehrere Teams.
- Erhöhte Wiederverwendbarkeit und Stabilität: Softwaremodule müssen nicht mehr redundant für beide Bereiche erstellt werden, sondern können universell eingesetzt werden.
- Vereinfachung der Wartung: Durch die Vereinheitlichung und dadurch Reduktion von Tools und der Codebasis resultiert ein kleinerer Wartungsaufwand.
Aufbau nanoFramework
Das Open Source Projekt nanoFramework setzt die erwähnten Vorteile anhand der Programmiersprache C# um. Dadurch ermöglicht es die Programmierung, das Debugging und das Deploying eines Embedded Devices direkt aus Microsoft Visual Studio. Das wird durch eine Extension für Microsoft Visual Studio und der Integration einer reduzierten und für Embedded Devices mit begrenzten Ressourcen ausgelegte Version der .NET Common Language Runtime (CLR) im nanoFramework erreicht. Dem Entwickler steht dadurch ein Subset der .NET Standard und UWP Klassen sowie vergleichbare Annehmlichkeiten bei der Entwicklung, wie sie aus der PC-Applikationsentwicklung bekannt sind, zur Verfügung.
Die Vorteile des nanoFrameworks liegen auf der Hand:
- Komplette Hardwareabstraktion und dadurch ein plattformunabhängiger Zugriff auf die üblichen Schnittstellen wie UART, SPI, I2C, USB und Ethernet.
- Multithreading
- Automatisiertes Memorymanagement durch einen Garbage Collector.
- Ausführung von «unmanaged» Code und somit die Möglichkeit zur Ausführung von optimiertem C oder C++ Code.
- Open Source Strategie ermöglicht die Erweiterung der .NET Klassen oder die Ergänzung von eigenen Methoden.
- MIT-Lizenz erlaubt unveröffentlichte Codeänderungen
Das nanoFramework ist in verschiedenen Layern aufgebaut. Die Verwendung eines Echtzeitbetriebsystems ist dabei nicht zwingend nötig. Das nanoFramework kann auch direkt auf dem Mikrocontroller betrieben werden. Wir haben auf Grund der für STM32 Mikrocontroller optimierten und umfangreichen HAL vom ChibiOS die Variante via Echtzeitbetriebssystem gewählt. Das nanoFramework besteht wiederum aus zwei Teilen. Einerseits aus dem nanoBooter, welcher für den korrekten Start des Frameworks zuständig ist und andererseits aus der bereits erwähnten .NET Common Language Runtime, genannt nanoCLR. Diese Aufteilung ermöglicht ein weiteres Feature des nanoFrameworks: Das nanoCLR sowie die C# Benutzeranwendung können während dem Betrieb aktualisiert werden. Somit können Erweiterungen der .NET Klassen oder neue Features in der C# Benutzeranwendung fortlaufend ergänzt werden. Die Layer HAL, RTOS und nanoFramework sind nur während der Portierung auf die gewünschte Hardwareplattform oder Erweiterungen der .NET Klassen zu bearbeiten. In der eigentlichen Anwendungsentwicklung kann sich der Entwickler dann ausschliesslich auf seine C# Anwendung konzentrieren, welche auf dem obersten Layer zu liegen kommt.
Fazit
Das nanoFramework bietet in unseren Augen ein umfangreiches Funktionsset für Anwendungen im Bereich von drahtgebundenen Sensoren, Ansteuer- und Auswertungselektronik oder für Rapid-Prototyping. Auch als Einstieg in die Embedded Welt kann sich das nanoFramework eignen, da sich der Entwickler nicht vorgängig mit Mikrocontroller Konfigurationen, Registern, Memoryzugriffen, usw. beschäftigen muss. Für eine erfolgreiche Portierung des nanoFrameworks auf die eigene Plattform ist vertieftes Embedded Wissen jedoch zwingend nötig. Durch das komplexe Konstrukt des gesamten Frameworks empfiehlt es sich zudem, auf einen Partner mit entsprechender Erfahrung zurückzugreifen. Wir haben das nanoFramework für unsere eigene M4MCU Plattform portiert und kennen nun dessen Herausforderungen. Eingesetzt wird das nanoFramework auf dieser M4MCU Plattform in Kombination mit einem Azure basierten Backend zur Kommunikation und Steuerung einer LED-Matrix ein. Der eingangs erwähnte Kunde verwendet das nanoFramework in Kombination mit der M4MCU Plattform als smarter Gateway zur Analyse und Steuerung von Blockheizkraftwerken.
Haben Sie Fragen oder eine konkrete Vorstellung?
Dann kontaktieren Sie uns, damit wir auch Sie bei Ihrem Vorhaben unterstützen können.