Simulink und C - und dazu auch noch objektorientiert

Simulink und C - und dazu auch noch objektorientiert

Inhalt


Topic:.Smlk_de.C_ObjO.

Last changed: 2017-12-10

C ist für Embedded Applikationen der Standard schlechthin. Die Gründe liegen in der Hardwarenähe und der Flexibilität für verschiedene Hardware-Anforderungen. Applikationen werden aber mehr und mehr komplex, entsprechend der steigenden Leistungsfähigkeit von Prozessoren und Boards und der gestiegenen Anforderungen an die Software-Applikationen. Die Softwaretechnologie muss schritthalten, sonst geht der Überblick über die Software verloren.

Daher ist eine grafische Programmierung wünschenswert. Zweidimensional lässt sich mehr Überblick gewinnen. Die Informationen sind mit Bild-Darstellungen aufbereitbar - Funktionalitäten sind aufgrund eines Bildes viel schneller auffindbar und verstehbar.


Bild: Programmierung in Facetten

Man kann hier soweit gehen, dass die Programmierung in C oder C++ nichts in der Anwenderschicht zu suchen hat. Die Denkschemen - Pointer, malloc, dangling, exception, <Template> - sind zu weit weg von den eigentlichen Problemen.

Andererseits: Die letztliche Realität ist die funktionsfähige Software in der Hardwareplattform. Diese wird in C exakt beschrieben. Datenabbildungen - in Telegrammen - gehören dazu.

Wichtig: Simulation der gefundenen Algorithmen der Anwenderprogrammierung in einer realistisch simulierten Umgebung.


1 Mathworks Simulink

Topic:.Smlk_de.C_ObjO..

Es gibt Tools für die grafische Programmierung, bei denen das Hinabsteigen in die C-Ebene vollkommen überflüssig wird. Damit braucht der Anwender nicht mehr C zu können oder lernen. Auch Operationen bis auf Bit-Ebene werden grafisch unterstützt. Mit Mathworks Simulink ist dies möglich.

Ein Hauptgrund für die Verwendung von Simulink als zentrales Tool der Softwareentwicklung dürfte die Möglichkeit der Simulation der Software einschließlich der Umgebung in Simulink sein. Simulink dient also vordergründig nicht als Hilfstool zur Softwareerstellung sondern als Gesamt-Tool zur Lösungsfindung mit anschließender Implementierungsgenerierung. Mathworks bietet dazu für Simulink eine Reihe Toolboxes an, beispielsweise zur Simulation elektrischer Netzwerke (Simscape Power Systems) aber auch mechanischer Komponenten. Der Vorteil: Simulink verfügt von haus aus über viel eingebautes Knowhow zur numerischen Berechnung von Differenzialgleichungssystemen. Würde man dies manuell ausprogrammieren müssen, oder jeweils für den Test ein mechanisches Modell beistellen müssen - viel Aufwand.


2 Simulink & C

Topic:.Smlk_de.C_ObjO..

Simulink leistet die Generierung von C aus dem Modell für ein Target-System, auch mit Unterstützung spezieller Prozessoren (Embedded Coder) für optimale Laufzeit und Speicherausnutzung. In Simulink ist es aber auch möglich, mittels sogenannter S-Funktionen C-Code sowohl im Simulationslauf am PC einzubinden als auch in gleicher oder adaptierter Form (Hardwareanbindung) für das Target nutzen.

Die Einbindung von C in Teilmodule der grafischen Programmierung bringt folgende Vorteile mit sich:

Die unbestrittenen Vorteile der grafischen Programmierung sind:

Möchte man aus eigener Intension C und Simulink miteinander zweckmäßig verbinden, dann bietet sich folgende Herangehensweise an:

Kommt man aus der Ecke der reinen C-Programmierung, möglicherweise mit Seitenblick auf das noch nicht ganz so verbreitete aber mit besserem Ruf versehene C++, dann stellt sich mit Nutzung von Simulink die Welt ganz anders dar: Anstelle der Planung der Softwarestruktur etwa mit UML-Tools und doch wieder Handcodierung der Einzelfunktionen tritt die vollkommen grafisch zweidimensional besser dargestellte Übersicht über die Software. Insbesondere auch aus Sicht der umfassenden Möglichkeiten der Simulation mit Umgebung, damit Test der Software am PC wird hier der Rat gegeben: Simulink anschauen, als Trial testen, Informationen einholen, kaufen und einsetzen.


3 Objektorientierung und UML

Topic:.Smlk_de.C_ObjO..

Die Objektorientierte Programmierung (OOP) ist eine feste Größe in der Softwaretechnologie. Objektorientierung im Kern bedeutet, dass Daten gemeinsam mit ihren Operationen, Methoden oder Funktionen betrachtet werden. Nicht-Objektorientierung liegt vor, wenn Funktionen ohne direkte Zuordnung zu Daten definiert werden und Daten nicht zusammengebunden dargestellt werden. Weitere Eigenschaften der Objektorientierten Programmierung wie Abstraktion, Vererbung, überladene Operationen sind ergänzend und im Gesamtsystem zweckmäßig, aber kein grundsätzliches Kennzeichen. Überladene Operationen (overridden operations, virtual methods) sind teilweise notwendig.

Objektorientierung wird zuerst mit den bekannten objektorientierten Sprachen wie C++ und Java in Verbindung gebracht. C-Entwickler sind oft und traditionell der Meinung, dass C dafür nicht geeignet sei. Daher wird oft nicht objektorientiert gedacht, sondern Einzelfunktionen geschrieben, die mit globalen Daten arbeiten. In Simulink kommt die Objektorientierung deshalb eher nicht vor, weil dort datenflussorientiert gedacht wird. Die Zusammenfassung zu Modulen ist noch keine Objektorientierung.


Bild: Object-FB und Operation-FB

Sowohl in C als auch in Simulink ist aber eine Objektorientierung zweckmäßig. Die Objektorientierung ist nicht primär eine Eigenschaft einer Sprache, sondern eine Herangehensweise der Programmierung. Man könnte, wenn man so wollte, auch in Assembler objektorientiert programmieren, in dem man Daten zweckmäßig zusammenfasst, bei Assemblerfunktionen jeweils den Zeiger auf den zugehörigen Datenbereich mit übergibt und für overridden methods eine Adresstabelle nutzt, die in den Daten geeignet verzeigert ist (Das ist die vtable in C++). C verfügt nun über einige Sprachmittel, um objektorientiert heranzugehen:

Im Grunde genommen muss man nur etwas mehr schreiben als in C++, hat aber die selben Maschinencodes. Die Nicht-Objektorientierte Programmierung in C, das heißt lose globale Daten, Funktionen, die möglichst intern nicht sichtbar auf globale Daten zugreifen, sollte man als negative oder Anti-Pattern benennen.

Die UML ist eine Beschreibungssprache zur Objektorientierung, geeignet um die Softwarestrukturen aufzuzeigen. UML-Tools sind verbreitete und spezifisch leistungsstark, sie sollten verwendet werden.


4 Objektorientierung in Simulink

Topic:.Smlk_de.C_ObjO..

Simulink-Blöcke als S-Funktionen werden aufgeteilt in

Damit hält auch die Objektorientierung Einzug in die Simulink-Welt und Architektur-Denkweisen wachsen zusammen.


5 Generierung der S-Funktionen aus Informationen in Headerfiles

Topic:.Smlk_de.C_ObjO..

Mathworks-Simulink bietet für die Erstellung von S-Funktionen, also Aufrufe von C-Anteilen im Simulink, 3 Wege an:

Der letzte Punkt bietet alle Möglichkeiten. Das sind sehr viele, beispielsweise die Nutzung dynamischer (vom Modell bestimmter) Port-Eigenschaften, mehrere Abtastzeiten in einem Block, beliebige Parameter. Das manuelle Erstellen ist aber aufwändig. Insbesondere bei vielen kleinen S-Funktionen ist das erheblich.

Daher hat der Verfasser einen Generator erstellt, der S-Funktion-Wrapper und tlc-File aus Zusatzinformationen im Headerfile erstellt. Das dazu nötige Script kann mehrere Headerfiles verarbeiten und damit eine Vielzahl meist kleiner S-Funktionen erstellen ('Kerne in C') und muss nicht angepasst werden, wenn sich Operationen im Header ändern. Der Generator arbeitet wie folgt:

Die Tools zum Generieren sind Open-Source, nicht aber die genannten Script-Files. Diese enthalten wesentliches Knowhow der S-Funktion-Technik des Mathworks-Simulink und schon von daher notwendigerweise geschützt. Mit vorhandener Simulink-Lizenz und entsprechender Anfangsbetreuung können diese Scripts dann vom Kunden genutzt und auch angepasst werden.

mailto: simulink@vishia.org

oder Mathworks anfragen.


6 Weiterführende Informationen / Download

Topic:.Smlk_de.C_ObjO..