Wiederverwendungskonzepte in der Automatisierungstechnik
Mitarbeiter des Forschungsgebiets
Beschreibung des Forschungsgebiets
Die Automatisierungstechnik ist eine Schlüsseltechnologie, die auch in Zukunft wesentlich die wirtschaftliche Entwicklung in unserem Land beeinflussen wird. Während bisher vor allem die Anlagenautomatisierung in der industriellen Produktion, im Verkehr, in der Energieversorgung und in der Medizin eine wichtige Rolle gespielt hat, hat in den letzten Jahren die Bedeutung der Produktautomatisierung bei industriellen Geräten, bei Haushalts- und Freizeitgeräten und im Kfz-Elektronikbereich sehr stark zugenommen [2][3]. Gleichzeitig hat sich das Verhältnis zwischen Hardware- und Softwareanteilen drastisch in Richtung Software verschoben. So wird im Bericht der Zukunftskommission Wirtschaft 2000 festgestellt, dass "die Software wettbewerbsentscheidend wird als wesentlicher Wertschöpfungsanteil und Kaufgrund von Produkten mit elektronischer Steuerung".
Probleme der klassischen Softwareentwicklung

Abbildung 1
Zwar wurden in den letzten 20 Jahren erhebliche wirtschaftliche Anstrengungen unternommen, die Entwicklung von Softwaresystemen durch Vorgehensmodelle, Entwicklungsmethoden und Softwarewerkzeuge ähnlich wie in anderen Ingenieurdisziplinen zu unterstützen, um die Qualität, die Produktivität und die Wirtschaftlichkeit zu verbessern, aber in der Praxis zeigt sich, dass die erzielten Fortschritte auf dem Gebiet der Softwaretechnik und der industriellen und universitären Ausbildung nicht ausreichen, um das Problem der Softwareentwicklung in den Griff zu bekommen. Es gibt immer noch nicht "die" Programmiersprache, Entwicklungsmethoden und Softwarewerkzeuge kommen und gehen und die Probleme haben sich aufgrund der gewachsenen Bedeutung von Software und der rasanten Fortschritte auf dem Hardwaresektor eher noch verschärft.

Abbildung 2
Die Hauptursachen für nicht termingerechte Fertigstellung, geringe Qualität, hohe Entwicklungs- und Wartungskosten liegen in der Komplexität von Softwaresystemen. Bei der klassischen Softwareentwicklung werden Softwaresysteme Top-Down so lange zerlegt, bis man sie in Form von Kleinstbausteinen, d.h. in den Anweisungen einer Programmiersprache, realisieren kann. Wie Abbildung 1 zeigt, nimmt mit jeder Zerlegungsebene die Komplexität des Gesamtsystems bezogen auf die verwendeten Softwareteile um den Faktor 10 zu.
Man erkennt in Abbildung 2, dass komplexe Systeme in den klassischen Ingenieurdisziplinen in ähnlicher Weise wie Softwaresysteme zerlegt werden, dass aber durch die Verwendung von Komponenten, die Produktcharakter haben und mit dem Ziel der Mehrfachverwendung entwickelt wurden, die Komplexität in der Zerlegungstiefe erheblich eingeschränkt wird.
Die Schlussfolgerungen, die man aus diesen Erkenntnissen ziehen kann, sind folgende:
- Die individuelle Neuentwicklung von Software ist äußerst aufwendig und wettbewerbsmäßig nicht mehr bezahlbar.
- Der Entwicklungsprozess von Software muss umgestellt werden mit dem Ziel der Mehrfachverwendung von Softwarekomponenten.
- Softwarekomponenten werden als Mittelweg zwischen Individualentwicklung und Standardsoftware benötigt.
Softwarekomponenten
Der ökonomische Anstoß für die Wiederverwendung von Software ist derselbe wie der für die Verwendung von genormten Teilen im Auto- oder Flugzeugdesign. Normteile sind billiger, zuverlässiger und in der Regel leichter zu reparieren oder zu ersetzen, wenn Fehler auftreten. Die zentrale Leitidee lautet "buy, don't build", d.h. wie in Abbildung 3 skizziert, werden komplexe Systeme aus Softwarekomponenten mittels Auswahl, Konfigurierung und Verknüpfung zu einer Applikation zusammengebaut.

Abbildung 3
Unter einer Softwarekomponente versteht man dabei nicht zwangsläufig ausführbaren Code. Eine Softwarekomponente kann auch eine Beschreibung sein, aus der Code generiert werden kann, bzw. jedes wesentliche Ergebnis des Software-Lifecycles, wie z.B. eine Requirement-Spezifikation, Testfälle usw. [4].
Um Softwaresysteme durch Konstruktion aus Komponenten aufbauen zu können, benötigen Softwarekomponenten eine Reihe von Eigenschaften. Eine Softwarekomponente muss eine in sich abgeschlossene funktionale Einheit mit vollständig spezifizierten Schnittstellen bilden, sie muss gut dokumentiert, qualitativ hochwertig und unverändert mehrfach verwendbar sein. Zusätzlich soll eine Softwarekomponente unabhängig von anderen Softwarekomponenten sein, an eine gegebene Aufgabenstellung anpassbar und bezüglich bestimmter Eigenschaften konfigurierbar sein [5].
Komponentenbasierte Softwareentwicklung für Automatisierungssysteme
Im Gegensatz zu kommerziellen Anwendungen, wo die Verwendung von Softwarekomponenten in vielen Bereichen bereits begonnen hat [6], bereitet der Einsatz in Automatisierungssystemen Schwierigkeiten. Automatisierungssysteme sind Echtzeitsysteme, bei denen neben den funktionalen Anforderungen, zeitliche Anforderungen, Anforderungen an die Zuverlässigkeit und die Sicherheit realisiert werden müssen, wobei zusätzlich ein hoher Kostendruck vor allem bei der Produktautomatisierung auftritt.
Aufgrund dieser Anforderungen sind die Komponentenkonzepte aus der kommerziellen Datenverarbeitung nicht direkt auf Automatisierungssysteme anwendbar. Man benötigt Systemarchitekturen, die es ermöglichen, Softwarekomponenten, die bestimmte zeitliche Anforderungen erfüllen, zu Gesamtsystemen zu integrieren, ohne die Zeiteigenschaften zu beeinträchtigen. Neben der funktionalen Kapselung von Komponenten spielt deshalb auch die zeitliche Kapselung von Komponenten eine wichtige Rolle. Die Gewährleistung des Zeitverhaltens lässt sich nur dann erreichen, wenn einerseits die Zeiteigenschaften einzelner Komponenten eindeutig festgelegt sind, und wenn andererseits bei der Komposition von Komponenten nur Mechanismen angewendet werden, die das Zeitverhalten des so erzeugten Gesamtsystems bestimmbar machen.
Der Entwickler von Softwarekomponenten für Automatisierungssysteme steht vor einem Dilemma. Auf der einen Seite weiß er, dass die Herstellung von Softwarekomponenten einen Mehraufwand bedeutet, der sich nur dann lohnt, wenn die Komponenten wiederverwendet werden können. Für den Nutzer müssen sie deshalb eine ausreichende Attraktivität ihrer Anwendung offerieren, d.h. eine interessante Funktionalität mit einer Reihe von Freiheitsgraden. Auf der anderen Seite ist vor allem aus der Produktautomatisierung bekannt, dass aufgrund der großen Stückzahl äußerst sparsam mit Speicherplatz und Laufzeit umgegangen werden muss. Konkrete Softwarekomponenten, d.h. Softwarekomponenten in Codeform haben hier den Nachteil, dass eine mächtige Funktionalität mit Freiheitsgraden gleichzeitig auch entsprechende Ressourcen zur Laufzeit benötigt. Aus diesem Grund reichen konkrete binäre Komponenten nicht aus. Man benötigt Komponenten auf Modellebene, die durch Parametrierung und Konfigurierung an die gegebene Aufgabenstellung angepasst werden können.
Forschung am IAS
Die Forschung auf dem Gebiet komponentenbasierte Entwicklung von Automatisierungssystemen befindet sich derzeit im Aufbruch. Es gibt zwar für ausgewählte Gebiete in der Leittechnik, bei der Steuerung von Fertigungsanlagen und bei der Steuerung von Werkzeugmaschinen erste Ansätze - eine komponentenbasierte Entwicklungsmethode und Entwicklungswerkzeuge für die Komposition von Komponenten, vergleichbar mit CAD-Werkzeugen, sind derzeit noch nicht verfügbar.
Die Forschungsarbeiten am IAS auf dem Gebiet komponentenbasierte Entwicklung von Automatisierungssystemen beschäftigen sich sowohl mit der Bereitstellung von Komponenten für Automatisierungssysteme als auch mit der Integration von Komponenten zum Aufbau von Automatisierungssystemen und sind in folgenden Themen gegliedert:
- Domain-Engineering für die Entwicklung von Automatisierungssystemen
- Komponentenbasierte Entwicklung eingebetteter Systeme
- Management von Softwarekomponenten
- Synchrone Software-Komponenten für verteilte Echtzeitsysteme
- Unterstützung bei der Instanziierung von Frameworks in der Automatisierungstechnik
- Validierung komponentenbasierter Software für Echtzeitsysteme
- Zeitanalyse von Echtzeitsoftwaresystemen
