Software ohne Hardware entwickeln?

In der embedded Entwicklung tritt das Dilemma häufig auf. Die Software-Entwicklung muss starten, aber:

  • es ist noch keine Zielhardware vorhanden
  • die zu steuernde "Maschine" ist auch noch nicht bereit
  • die Benutzerschnittstelle ist unklar, viele Partien sind involviert: Marketing, Management, Software, Hardware, Mechanik, Industrial Design

Hardware und Mechanik aus dem PC: Simulation

Anstatt auf die reale Welt zu warten und dabei viel Zeit zu verlieren, lässt sich die Elektronik und Mechanik auf einem PC simulieren, der Ansatz ist im Chip-Design als virtuelle Plattform bekannt.

Wie geht das?

Solcept hat ein Framework, basierend auf .NET/ C#/ managed C++ entwickelt. Es dient dazu, die der Applikation zugrunde liegenden Betriebssysteme, Treiber, Hardware (bis zum Register der Mikrocontroller) und die Physik der zu steuernden Maschine zu simulieren.

Die Simulation erfolgt so genau wie nötig und so einfach wie möglich. Das heisst, dass z.B. physikalische Vorgänge, welche sich auf einen Reglerentwurf stark auswirken genau modelliert werden. Andere Elemente, z.B. Ventile werden nur digital (Durchgang/ kein Durchgang) simuliert.

Resultate

Die folgenden Resultate konnten in mehreren Projekten dank Simulation erreicht werden:

  • Integration von Software und Hardware wird in einem Tag durchgeführt (die Treiber wurden vorher auf Evaluations-Boards implementiert und getestet)
  • Einfacheres Testen führt zu besserer Testabdeckung und besserer Softwarequalität (z.B. da Fehler einfach injiziert werden können, da die Zeit in der Simulation verlangsamt und beschleunigt werden kann)
  • Der Kunde bekommt „genau die Bedienschnittstelle die wir haben wollten“ (die PC-Simulation des Systems kann von allen Beteiligen früh beurteilt werden, was einen iterative/ agile Entwicklungsstil ermöglicht)
  • Der Industrial Designer sieht das Zusammenspiel des mechanischen Teils (z.B. Tasten)  der Bedienschnittstelle mit dem Software-Teil schon sehr früh im Projekt

Vorteile

Für die Ingenieure entsteht von Anfang an ein besseres Verständnis für die zu steuernde Maschine, beziehungsweise deren Physik. Für die Implementation und das Debugging lassen sich die PC-Entwicklungsumgebungen verwenden, welche immer noch mehr Möglichkeiten bieten als die meisten embedded Werkzeuge. Ein gut programmierter Simulator erlaubt die Extraktion von Logs, Call-Chains und stellt andere Funktionen wie veränderbare Ausführungsgeschwindigkeit bis zum kompletten Anhalten zu jedem Zeitpunkt zur Verfügung. Zusammen mit der vollständigen Reproduzierbarkeit, welche die reale Welt selten bietet, lässt sich sehr effizient embedded Software entwickeln.

Im Test lassen sich sehr einfach Fehlerbedingungen generieren, welche an einer realen Maschine schwierig oder gar nicht (z.B. wegen zu grosser Gefährlichkeit) erzeugt werden können. Auch lassen sich automatische Tests ohne Modifikation (z.B. Testzugriffs-Ports, Benutzer-Simulation durch Roboter) des Zielsystems durchführen, da dieses ja simuliert wird.

Der vermeintlich grosse Nachteil ist natürlich der erhöhte Aufwand. Gemäss unserer Erfahrung zahlt er sich aber über die Projektdauer aus, wenn mehr als drei Software Testzyklen nötig sind.

Bringt das für mich zum Laufen!