Startseite Über EasyKit Über EasyLab Produkte Partner Downloads Kontakt Suche

Modellierung

Über EasyLabDokumentation für Endbenutzer → Modellierung

Dieses Kapitel gibt einen Überblick darüber, wie Programme beschrieben werden können und stellt dabei die Konzepte der textbasierten Programmierung und der grafischen Modellierung vor.

Weitere Themen auf dieser Seite:
  1. Traditionelle Herangehensweise: Textbasierte Programmierung
  2. Moderne Herangehensweise: Grafische Modellierung

1. Traditionelle Herangehensweise: Textbasierte Programmierung

Textbasierte Programmierung
Textbasierte Programmierung
Die traditionelle Herangehensweise zur Programmierung von eingebetteten Systemen ist eine "händische" Umsetzung des Programms. Dabei kommen meist Programmiersprachen zum Einsatz, die die Systeme auf relativ niedriger Ebene ansprechen. Beispiele für solche Sprachen sind:
  • C: Textuelle Programmiersprache, die eine sehr hohe Flexibilität erlaubt und bei eingebetteten Systemen sehr weit verbreitet ist. Da der Code nicht direkt von einem Mikrocontroller interpretiert werden kann, muss vor der Ausführung eine Übersetzung in Maschinencode erfolgen. Dazu wird ein Compiler-Programm benötigt. Der Compiler übernimmt noch weitere Aufgaben wie beispielsweise die Optimierung des Maschinencodes bezüglich Ausführungszeit und Speicherverbrauch. C-Compiler sind für eine große Zahl an Mikrocontroller-Architekturen verfügbar. Trotz der Tatsache, dass der Compiler dem Benutzer bereits viele Aufgaben abnimmt, ist für ungeübte Benutzer trotzdem ein relativ hoher Aufwand notwendig, um sich in die Programmierung einzuarbeiten.
  • Assembler: Textuelle Programmiersprache, bei der die durch den Mikrocontroller auszuführenden Befehle direkt aufgeschrieben werden. Der Nachteil dieser Technik ist, dass der Programmierer sich genau mit den Funktionen des jeweiligen Mikrocontrollers auseinandersetzen muss und der geschriebene Code oft nicht portabel ist, d.h. er kann oft nicht ohne Weiteres auf eine andere Mikrocontrollerplattform übertragen werden. Die Übersetzung von Assembler-Code in Maschinencode ist sehr einfach, jedoch muss der Programmierer sich in der Regel um die Optimierung seines Programmcodes selbst kümmern. Es ist ein sehr viel Wissen und Erfahrung notwendig, um ein eingebettetes System effizient in Assembler programmieren zu können. Jedoch stehen für manche (meist wenig mächtige) Mikrocontroller-Architekturen ausschließlich Assembler als Programmiersprache zur Verfügung.
  • C++: Textuelle Programmiersprache, die die Funktionen von C mit einigen weiteren Funktionen verbindet. Die in C++ vorhandene Objektorientierung macht es noch einfacher, komplexe Programme zu strukturieren. Jedoch ist die Verwendung von C++ nur auf mächtigeren Mikrocontroller-Architekturen zu empfehlen, da die erweiterte Funktionalität oft durch größeren und damit langsameren Code erkauft wird. Es ist aber möglich, auf bestimmte erweiterte Funktionen von C++ zu verzichten, um einen guten Kompromiss zu finden. C++-Compiler sind nicht für alle Mikrocontroller-Architekturen verfügbar, weshalb C++-Code oft nicht ohne Weiteres portabel ist.

Kompromiss zwischen Aufwand und Portabilität


Die Programmiersprache C ist ein guter Kompromiss zwischen Einarbeitungsaufwand und Portabilität und ist unter anderem daher die vorherrschende Sprache bei der traditionellen Programmierung von Mikrocontrollersystemen. Dennoch ist die Lernkurve relativ flach und es wird oft Expertenwissen benötigt, um Programme auf eingebetteten Systemen umzusetzen.

Übertragen von Lösungsideen auf Implementierungen


Außerdem ist die Transformation von theoretischen Lösungen auf praktische Implementierungen oftmals nicht einfach. Insbesondere mathematische Berechnungen, wie sie beispielsweise in der Regelungstechnik benötigt werden, sind durch numerische Beschränkungen der Mikrocontroller nur mit beschränkter Genauigkeit möglich. Es reicht also oft nicht aus, die entsprechende (mathematisch korrekte) Formel in einer Programmiersprache aufzuschreiben, sondern es ist viel Wissen über die interne Darstellung und Verarbeitung von Zahlen in einem Mikrocontroller nötig, damit das Ergebnis eine hinreichende Qualität hat. Es ist also auch hierfür Expertenwissen notwendig. Aus diesen Gründen ist es wünschenswert, den traditionellen Entwicklungsprozess von Software für eingebettete Systeme zu vereinfachen und auch Nicht-Experten zugänglich zu machen.

Wiederverwendbarkeit


Ein weiteres Problem ist die Wiederverwendbarkeit von Komponenten. Gerade im kommerziellen Einsatzbereich ist es essenziell, einmal investierte Arbeit möglichst oft wiederzuverwenden. Erfolgt die Programmierung jedoch auf niedriger Ebene, wie es beispielsweise bei Assembler der Fall ist, so wird die Wiederverwendbarkeit stark eingeschränkt:
  • Der Code wird oft für die Lösung eines ganz bestimmten Anwendungsfalls geschrieben. Aufgrund der niedrigen Ebene und der fehlenden Struktur ist es schwierig, Teile des Codes für andere Projekte wiederzuverwenden.
  • Oftmals ist der Code aufgrund Zeitmangels schlecht dokumentiert. Enthält der Code unklare Abschnitte, muss später viel Zeit investiert werden, um die Motive des Autors nachzuvollziehen.
  • Durch die mangelnde Portabilität auf niedriger Ebene ist die Wiederverwendung vorhandenen Codes auf einer anderen Zielplattform eingeschränkt.
Es ist also wünschenswert, die Wiederverwendbarkeit durch geeignete Maßnahmen zu fördern.

Co-Design


Die Entwicklung von Prototypen eingebetteter Systeme verlief in der Vergangenheit nach dem folgenden Schema: Zunächst wurde die Hardware entworfen, die für die Lösung der Aufgabe erforderlich ist. Erst nachdem das Design der Hardware feststand und diese möglicherweise bereits konkret vorlag, wurde mit der Entwicklung der Software begonnen. Dieser Ansatz hat mehrere Nachteile:
  • Durch die mangelnde Parallelisierung der Hardware- und Softwareentwicklung dauert die Entwicklung einer neuen Produkts relativ lange.
  • Die Software wird meist spezifisch auf die Lösung der speziellen Aufgabe hin entworfen, die mit der Hardware gelöst werden soll. Neben der schlechten Wiederverwendbarkeit erhöht sich dadurch auch der Dokumentations- und Wartungsaufwand.
  • Wird bei der Software-Entwicklung ein Design-Fehler bei der Hardware aufgedeckt (z.B. das zu entwerfende Programm benötigt mehr Ressourcen, als von der Hardware zur Verfügung gestellt werden), so muss der Prozess wieder von vorne beginnen. Man läuft Gefahr, in diesem Fall die spezifisch entwickelte Software zumindest teilweise nicht mehr verwenden zu können, da die neu zu wählende Hardware neue Eigenschaften hat.

Das Teilgebiet des Co-Design befasst sich damit, den Entwicklungsprozess von Hardware und Software zu parallelisieren und damit die oben genannten Probleme zu umgehen oder zumindest deren Konsequenzen zu mildern. Beim Co-Design kann die Software bereits entworfen werden, wenn die Hardware noch nicht konkret feststeht. Dies erfordert die Verwendung von so genannter abstrakter Hardware, d.h. man verwendet statt der konkreten durch eine Hardware vorgegebenen Funktionen (z.B. Eingänge oder Ausgänge eines Mikrocontrollers) abstrakte Elemente, die erst in einer späteren Phase auf eine konkrete Hardware abgebildet werden. Kurz gesagt: Man entwirft bei der Software-Entwicklung zuerst ein abstraktes Verhaltensmodell, das noch völlig unabhängig ist und somit auf beliebigen Hardwareplattformen lauffähig wäre. So lange man sich auf dieser Ebene befindet, ist eine Änderung der zu verwendenden Hardwareplattform relativ einfach möglich.

Co-Design, konkret Hardware-Software-Co-Design ermöglicht also eine Effizienzsteigerung im Entwicklungsprozess von prototypischen eingebetteten Systemen. Die Entwicklungszeit wird reduziert, während gleichzeitig die Wiederverwendbarkeit gesteigert wird.

2. Moderne Herangehensweise: Grafische Modellierung

Grafische Modellierung
Grafische Modellierung
Ein bewährtes Mittel, wie man Nicht-Experten den Zugang zu komplexen Systemen ermöglichen kann, ist die so genannte visuelle Programmierung. Dabei werden die textbasierten Programmierkonzepte nahezu vollständig durch grafische Programmiermodelle ersetzt. Der Hintergrund ist dabei, dass Menschen sich grafische Zusammenhänge leichter erschließen können. Es wird dadurch also eine intuitivere Art der Programmierung ermöglicht.

Ein weiterer wichtiger Vorteil der grafischen Programmierung ist das Vorhandensein von vorgefertigten Komponenten in visueller Form, die miteinander kombiniert werden können. Der Benutzer sieht dadurch leichter, welche Elemente ihm zur Verfügung stehen, als dies bei einem leeren Textfeld im Fall textueller Programmiersprachen der Fall wäre. Dadurch werden die ersten Schritte und damit der Einstieg in die Programmierung stark erleichtert.

Programmierung, Modellierung und Parametrierung


Das Wort "Programmierung" wird oft mit dem konkreten manuellen Vorgang verbunden, ein konfigurierbares System so einzustellen, dass es eine bestimmte Aufgabe erfüllt. Obwohl dies auch für die visuellen Konzepte zutrifft, wird hierbei mehr von Modellierung gesprochen. Gemeint ist dabei, dass der Benutzer sich nicht mit den Details der Umsetzung beschäftigen muss, wie es bei der traditionellen Herangehensweise der Fall wäre. Vielmehr "modelliert" er aus vorhandenen grafischen Komponenten durch Kombination und Parametrierung die Funktionalität.

Wird die Wiederverwendbarkeit gefördert, ist es oftmals sogar möglich, eine Anwendung komplett wiederzuverwenden und nur einige so genannte Systemparameter zu modifizieren. Dies ist insbesondere in der industriellen Produktion von Vorteil, wo häufig Produktreihen mit sehr ähnlicher Software ausgestattet werden, die sich im Wesentlichen durch relativ wenige Parameterwerte unterscheidet. In diesem Fall reicht also eine Parametrierung im Gegensatz zur Programmierung aus.

Modellierung in EasyLab


EasyLab nutzt das Konzept der grafischen Modellierung, um auch Nicht-Experten die einfache Programmierung von eingebetteten Systemen zu ermöglichen. Gleichzeitig hat es aber auch den Anspruch, flexibel genug zu sein, um erfahreneren Benutzern die Gestaltung komplexerer Programme zu gestatten. Daher ist EasyLab einerseits sehr erweiterbar gehalten und lehnt sich in seinen "Modellierungssprachen" an bekannte Industriestandards an, so dass sich Ingenieure nicht komplett umstellen müssen.

Hardware-Modell und Software-Modell


Grundsätzlich ist zwischen zwei verschiedenen Modellen zu unterscheiden:
  • Das Hardware-Modell beschäftigt sich mit dem Aufbau des zu programmierenden Systems. Hier werden Schnittstellen definiert, über die das System mit der Umgebung interagieren kann. Außerdem wird die Art der Mikrocontroller-Architektur spezifiziert. Nur mit diesen Informationen ist eine Abbildung der Software auf die konkrete Einsatzumgebung möglich.
  • Das Software-Modell dagegen legt fest, wie sich das System verhalten soll und wie es auf Änderungen der Umgebung reagieren soll. Dabei kommen die folgenden grafischen Programmiersprachen zum Einsatz: Zusätzlich wird noch eine Reihe von weiteren Konzepten eingeführt: