download - SPES 2020
download - SPES 2020
download - SPES 2020
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
<strong>SPES</strong><br />
Software Plattform Embedded Systems <strong>2020</strong><br />
Zentralprojekt<br />
<strong>SPES</strong>-Aut / Embedded4You e.V.<br />
Domänenübergreifende Gegenüberstellung<br />
von<br />
Hardware-Abstraktionskonzepten<br />
Beginn 17.10.2011<br />
Stand 17.10.2011
Dokumentenüberblick<br />
Förderkennzeichen 01IS08045A<br />
Deliverable N/A<br />
Author (<strong>SPES</strong>-<br />
Partner)<br />
Author (<strong>SPES</strong>-<br />
Partner)<br />
Kurzdarstellung<br />
Urs Gleim<br />
E-Mail: urs.gleim@siemens.com<br />
Telefon: +49 89 636-45117<br />
Robert Schachner<br />
E-Mail: rschachner@rst-automation.de<br />
Telefon: +49 89 9616018-14<br />
Dieses Dokument dient als Arbeitspapier zur Diskussion von Hardware-Abstraktionskonzepten, wie sie in Embedded-<br />
Systemen verschiedener Domänen zu finden sind.<br />
Die verschiedenen Konzepte sollen auf Basis der Anforderungen in Verschienen Domänen bewertet und miteinander<br />
verglichen werden.<br />
Diese vorliegende Version des Dokuments enthält zunächst einige grundsätzlichen Überlegungen und eine erste<br />
Sammlung existierende Abstraktionsmodelle.<br />
- 2 -
Inhaltsverzeichnis<br />
Dokumentenüberblick ...................................................................................................................................................... - 2 -<br />
Kurzdarstellung ................................................................................................................................................................ - 2 -<br />
1 Motivation ....................................................................................................................................................................... 4<br />
2 Wer braucht Abstraktion? ............................................................................................................................................... 4<br />
3 Was wird abstrahiert? ..................................................................................................................................................... 5<br />
4 Wie wird Abstrahiert? ..................................................................................................................................................... 6<br />
4.1 Datenzentrisches Modell ....................................................................................................................................... 6<br />
4.2 Logische Pfade ..................................................................................................................................................... 6<br />
4.3 Service-orientierte Ansätze ................................................................................................................................... 6<br />
5 Vorteile dieser Herangehensweise ................................................................................................................................ 7<br />
5.1 Wiederverwendbarkeit der Komponenten innerhalb des Abstraktion Layers (Blick von unten) ........................... 7<br />
5.2 Plattform Unabhängigkeit der Applikation (Blick von Oben) ................................................................................. 7<br />
5.3 Verwendung von Domänenspezifischen Werkzeugen auf einer Abstraktionsschicht .......................................... 7<br />
6 Beispiele ......................................................................................................................................................................... 7<br />
6.1 GAMMA ................................................................................................................................................................. 7<br />
6.1.1 Allgemein .......................................................................................................................................................... 7<br />
6.1.2 Funktionsweise ................................................................................................................................................. 7<br />
6.2 ACE ....................................................................................................................................................................... 9<br />
6.3 Corba .................................................................................................................................................................. 10<br />
6.4 ICE ...................................................................................................................................................................... 10<br />
6.5 Epics ................................................................................................................................................................... 11<br />
6.5.1 Allgemein ........................................................................................................................................................ 11<br />
6.5.2 Input/Output-Controller ................................................................................................................................... 11<br />
7 Referenzen ................................................................................................................................................................... 12<br />
- 3 -
1 Motivation<br />
Bei der Entwicklung komplexer Systeme, die über viele Jahre im Einsatz sind und gepflegt werden müssen, liegt das<br />
Know-How – auch im Embedded-Bereich – mehr und mehr in der Applikationssoftware. Die darunterliegende Hardware<br />
wird von Generation zu Generation leistungsfähiger und kostengünstiger. Damit die Anwendungen nicht für jede Hardware-Generation<br />
neu angepasst werden müssen, sind geeignete Abstraktionskonzepte notwendig. Bei Neuentwicklung<br />
von Systemen kann durch Standardkomponenten auf Software-Seite, unterstützt durch Werkzeuge, Entwicklungszeit<br />
und damit Kosten gespart werden. Darüber hinaus erhält man bessere Qualität durch Wiederverwendung getesteter<br />
Komponenten. Um Standardkomponenten in der Breite einsetzen zu können, müssen sie gegen einen Hardwareunabhängigen<br />
Abstraktionslayer entwickelt werden, der auf aktuelle und zukünftige Hardware-Plattformen anpassbar ist.<br />
2 Wer braucht Abstraktion?<br />
Betrachtet man ein System aus dem Blickwinkel der beteiligten Software-Entwickler (Abbildung 1) haben wir auf unterster<br />
Ebene die System-Entwicklung. Diese beinhaltet Betriebssystem, Treiber und Basisdienste wie Persistenz, Diagnose,<br />
Logging, Tracing, Debugging-Support, Software-Updates, usw.. Auf dieser Ebene wird typerscherweise in C, seltener<br />
in C++, programmiert. Die Implementierungen sind in Teilen hardwareabhängig. Der Systemlayer stellt die unterste<br />
Ebene der Abstraktion dar (einmal abgesehen davon, dass wir einen Compiler verwenden…). Typische Schnittstellen<br />
sind die System-API des Betriebsysstems mit systemnahen Bibliotheken (Win32, POSIX) sowie nicht selten proprietäre<br />
Schnittstellen für domänenspezifische Basisdienste.<br />
Der nächste Layer implementiert die Produkt-Software bzw. die Software-Plattform, je nachdem in welcher Domäne<br />
wir uns befinden und ob es um Produkt- oder Lösungsgeschäft geht. In der Industrie-Automatisierung wäre hier z.B. die<br />
SIMATIC S7 Firmware angesiedelt, im Lösungsgeschäft eher eine Software-Plattform, die applikationsübergreifend<br />
notwendige Komponenten implementiert, wie z.B. eine generische Business-Logik, ein HMI-Framework, ein Bilderkennungsframework<br />
mit den entsprechenden Algorithmen, usw..<br />
Den Applikationslayer implementieren OEMs, Maschinenbauer und teilweise auch Endkunden. Im Lösungsgeschäft ist<br />
das die Kundenspezifische Software. Im Produktgeschäft enthält der Applikationslayer die Ausprägungen verschiedener<br />
Produkte einer Produktlinie.<br />
Darüber finden sich aus Entwicklersicht weitere Abstraktionslayer, die in der Software-Architektur allerdings vorwiegend<br />
im Rahmen des Produkt-Software / Plattform Layers implementiert sein sollten. Zum einen kann das eine Schnittstelle<br />
zur Erweiterung um einzelne Komponenten (Plug-Ins, Skripts) sein, zum anderen werden generische Komponenten<br />
applikationsspezifisch parametrisiert.<br />
Parametrisierung<br />
Erweiterungen<br />
(Plug-Ins, Skripts)<br />
Applikationen<br />
Produkt / Software-Plattform<br />
(Firmware+Standardapps.)<br />
System<br />
(OS, Hardwareanbindung)<br />
- 4 -<br />
Komponentenentwickler,<br />
Zulieferer<br />
Abbildung 1: Systemsichten<br />
OEM<br />
Endanwender
3 Was wird abstrahiert?<br />
Entwickler auf jedem der genannten Layer erwarten ein anderes Abstraktionsniveau. In den unteren Schichten ist es<br />
noch relativ einfach. Der Systementwickler kennt noch die HW/SW-Schnittstelle der Hardware. Der Produkt- und Plattformentwickler<br />
arbeitet gegen die bekannten Betriebssystem-APIs, kennt aber noch die Struktur der darunterliegenden<br />
Hardware: mit welchen Geräten kommuniziere ich, über welche Netzwerke/Busse, welche Speichermedien habe ich zur<br />
Verfügung, usw..<br />
Interessant wird es an der Schnittstelle zur Applikation. Wie kann ich dem Applikationsentwicker eine genaue Kenntnis<br />
der Hardware ersparen. Und genau hier setzten viele Abstraktionslayer an.<br />
Anknüpfend an [1] könnte man die Schnittstelle der Applikation nach unten aus Sicht der Modellierung als Schnittstelle<br />
zwischen Technical Layer und Logical Layer sehen (Abbildung 2). Allerdings lassen sich die anderen Layer nicht 1:1<br />
zuordnen. Der Functional Layer ist eine Black-Box-Sicht auf das System und hilft bei der Modellierung der Applikation<br />
sowie bei der Erstellung der Tests. Functional Layer und Logical Layer können somit bei der Modellierung aller Layer –<br />
außer vielleicht der Parametrisierung – zum Einsatz kommen.<br />
Abbildung 2: Abstraktionslayer aus [1].<br />
Bleiben wir bei der Schnittstelle Plattform/Applikation. Der Abstraktionsentwickler wünscht sich eine Abstraktion der<br />
folgenden Themen, d.h. er möchte sich nach Möglichkeit nicht beschäftigen mit:<br />
Persistenz:<br />
was wird wo gespeichert.<br />
Wie erfolgt die Kommunikation zwischen Applikation und Abstractionlayer (serialisiert oder objektrelational)<br />
I/O:<br />
über welche Hardware-Schnittstellen ist I/O realisiert.<br />
Netzwerk:<br />
über welche Netzwerke sind Systemkomponenten gekoppelt.<br />
Parallele Hardware:<br />
Verteilung der Ausführung über mehrere CPUs oder mehrere Prozessor-Kerne.<br />
Datenformat:<br />
Marshalling zw. versch. Datentypen; Endianess, …<br />
Betriebssystem Abstraktion Versionierung<br />
5
4 Wie wird Abstrahiert?<br />
4.1 Datenzentrisches Modell<br />
Das datenzentrische Modell entspricht einem Abstraction Layer, der sich zwischen der Anwendung und der darunter<br />
Hardware befindet.<br />
Damit entspricht es in etwa dem Interface zwischen dem logical- und technical Layer. Zur Applikation hin werden folgende<br />
Funktionen abstrahiert.<br />
- Prozessvariablen mit entsprechenden Zugriffsrechten im lokalen System<br />
- Prozessvariablen verteilt in einem Multicore- Multiprozessing und vernetzten Betrieb<br />
- I/O Funktionen über lokale I/O Karten und Feldbusse<br />
- Betriebssystem Funktionen<br />
All diese Funktionen werden über einheitliche Methoden erreichbar:<br />
- Zugriffsfunktionen auf Prozessvariablen<br />
- Message Kommunikation über Ports<br />
- Synchronisationsmechanismen<br />
- Subscribe Funktionen (Signale, Semaphoren)<br />
Unterstützt wird die Applikationsentwicklung durch eine Simulationsschnittstelle, und Datenlogging. Sie dient bereits<br />
einigen Testsystem Umgebungen als Basis Schnittstelle.<br />
Anwendung findet Gamma vorwiegend im Echtzeit Umfeld. Damit eignet sich die Software für Leistungsfähige Automatisierungsaufgaben<br />
auch im sicherheitskritischen Umfeld.<br />
4.2 Logische Pfade<br />
Ressourcenzugriff über URLs: Dateien, Netzwerke, etc.<br />
Über eine separate Konfiguration (z.B. Konfigurationsdateien oder explizite Anmeldung einzelner Komponenten) werden<br />
die logischen Pfade auf physikalische abgebildet.<br />
Beispiele:<br />
POSIX<br />
J2ME Generic Connection Framework<br />
Persistenzmechanismen mit Baumstruktur bei den Teilbäume an verschiedenen Stellen abgelegt werden<br />
(z.B. eine Registry mit Teilbereichen in RAM, NAND Flash, oder NOR Flash)<br />
4.3 Service-orientierte Ansätze<br />
Kapselung von Funktionalität in Diensten. Dienste werden nicht absolut adressiert, sondern anhand ihrer Eigenschaften<br />
bei einer Service-Registry angefragt, die dann eine direkte Referenz auf den konkreten Dienst zurückgibt.<br />
Abstrahiert wird hier …<br />
Beispiele:<br />
Web-Services<br />
UPnP<br />
CORBA<br />
Epics<br />
6
5 Vorteile dieser Herangehensweise<br />
5.1 Wiederverwendbarkeit der Komponenten innerhalb des Abstraktion Layers (Blick von<br />
unten)<br />
Bei einer konsequenten Umsetzung der gesamten Applikation mit Hilfe eines Abstraction layers befinden sich im<br />
technical Layer keine applikationsspezifischen Software Funktionen mehr. Damit wird dieser Layer universal für<br />
unterschiedlichste Anwendungen wieder verwertbar.<br />
5.2 Plattform Unabhängigkeit der Applikation (Blick von Oben)<br />
Die Abstraktionsschicht reduziert Aufrufe an den technical Layer mit einheitlichen Funktionen, die sich nicht mehr<br />
auf die Hardware Gegebenheiten abstützen müssen. Die Applikation reduziert sich auf den reinen logischen<br />
Code. Dies bietet folgende Vorteile:<br />
- Der Code wird wesentlich einfacher und damit verständlicher, kürzer und billiger<br />
- Die Portierung auf neue Hardware kann ohne Änderungen erfolgen<br />
- Die Anforderungen an das Know How des Entwicklers reduziert sich dramatisch<br />
5.3 Verwendung von Domänenspezifischen Werkzeugen auf einer Abstraktionsschicht<br />
Gerade bei Modellbasierter Entwicklung war es notwendig die Abstraktionsschicht manuell in das Tool zu implementieren.<br />
Dies kann jetzt entfallen. Durch die Verwendung von Application Layern wird die modellbasierte Entwicklung<br />
durchgängig.<br />
Geht man noch einen Schritt weiter und passt domänenübergreifend die Werkzeuge auf den Abstraction Layer<br />
an. So können unterschiedlichste Werkzeuge (Applikationsentwicklung und Test) ohne spezifische Anpassung<br />
auf einer Hardware arbeiten ohne sich zu behindern, Einheitliche Tools wären dann nicht mehr nötig. Je nach Anforderung<br />
werden die Tools kombiniert. Damit wäre das vorrangige Entwicklungsziel von <strong>SPES</strong><strong>2020</strong> erfüllt.<br />
6 Beispiele<br />
In diesem Abschnitt werden beispielhaft einige konkrete Implementierung von Abstraktionslayern gelistet. Die Aufzählung<br />
erhebt (in dieser Fassung des Dokuments) keinen Anspruch auf Vollständigkeit und stellt eine erste Sammlung dar,<br />
auf deren Basis zu einem späteren Zeitpunkt ein detaillierter Vergleich folgen soll.<br />
6.1 GAMMA<br />
6.1.1 Allgemein<br />
GAMMA ist ein Framework der RST-Automation GmbH, das es ermöglicht, plattformübergreifende Applikationen für<br />
Test- und Steuersysteme in einer Entwicklungsumgebung zu erstellen und auf verschiedensten Zielsystemen – auch<br />
über Architekturgrenzen hinweg – einzusetzen. Im Gegensatz zu allen anderen Methoden erfolgt bei Gamma nur teilweise<br />
die Kommunikation über eine Client Server Architektur. Dadurch ist die Software extrem schnell (
Betriebssystem<br />
Simulation von Variablen<br />
Logging<br />
6.1.2.1 Das Datenmodell<br />
Im Zentrum der Betrachtung steht das datenzentrische Modell. Es ist hierarchisch organisiert und verfügt über eine<br />
symbolische Adressierungsmethode. Die Variable selbst kann mit verschiedenen Methoden angesprochen werden und<br />
verfügt über konfigurierbare Eigenschaften:<br />
- Unterschiedliche Datentypen<br />
- Grenzbetrachtung<br />
- Simulation<br />
- Logging<br />
6.1.2.2 I/O<br />
- Verlinkung mit Hardware<br />
- Metadaten (Beschreibungstexte)<br />
- Versionierung<br />
Bereits vorgefertigte Hardware kann grafische zusammengesteckt und verlinkt werden. Fehlende Hardware wird einfach<br />
über die Hardware Integrationsschnittstelle erweitert. I/O Bibliotheken können einfach Firmenübergreifend gemeinsam<br />
verwendet werden. Durch die Verlinkung mit einer Variable erhält diese die zusätzliche Hardware Funktionalität. Dies<br />
ermöglicht den Aufbau von Bibliotheken, die Firmenübergreifend genutzt werden können.<br />
6.1.2.2.1 Betriebssystem Abstraktion<br />
Zur Vereinheitlichung der Software können (nicht müssen) die wichtigsten Funktionen der jeweiligen Betriebssysteme<br />
abstrahiert werden. Das erleichtert die Software Pflege in heterogenen Rechner Architekturen.<br />
6.1.2.3 Multitasking, Multiprozessing, Vernetzung<br />
Datenmodelle können so gebaut werden, dass für die Applikation eine einheitliche Zugriffsmethodik entsteht. Das Datenmodell<br />
wählt intern je nach Hardware Struktur die optimale Zugriffsmethode. Multiprozessing, Multicore, Vernetzte<br />
Systeme mit unterschiedlichen Betriebssystemen werden dabei berücksichtigt.<br />
6.1.2.4 Applikationsentwicklung und Test<br />
Gamma eignet sich hervorragend für Applikationsentwicklung und Test. Damit wird es möglich eine Applikation, die mit<br />
einem beliebigen Werkzeug erstellt wurde, durch ein anderes Werkzeug zu testen. Austauschformate entfallen. Tests<br />
können im laufenden Betrieb statt finden.<br />
8
6.2 ACE<br />
ACE besitzt eine Client Server Architektur. Das bietet hohe Sicherheit aber relativ langsame Reaktionszeiten.<br />
ACE bietet folgende APIs (siehe auch Abbildung 3):<br />
OS Adaption Layer<br />
Nebenläufigkeit und Synchronisation<br />
Interprozess Kommunikation, Shared Memory<br />
Synchrone und Asynchrone Ereignis Handler<br />
Dateisystem Zugriffe<br />
OS Adaption Layer<br />
C++ Wrapper Fassaden<br />
Framework zu Netzwerkprogrammierung<br />
Distributed Services and Components<br />
Higher-level Distributed Computing Middleware Components<br />
9
6.3 Corba<br />
Abbildung 3 – ACE Schlüsselkomponenten<br />
Laut Wikipedia ist Corba ist ein relativ abstraktes Konzept, was den intuitiven Zugang erschwert. Das Konzept selbst ist<br />
innovativ und hat großes Potential. Von den konzipierten Methoden wurde leider nur wenig umgesetzt. Deshalb bleibt<br />
man häufig an die Programmiersprachen Java und C# gebunden. Ebenso wie ACE und ICE funktioniert Corba nur über<br />
ein Client Server Modell, was die Zugriffsgeschwindigkeit erheblich reduziert. Die Reaktionszeiten von Zugriffsmethoden<br />
bewegen sich im Bereich von mehr als 200µs.<br />
Corba abstrahiert:<br />
Betriebsystem<br />
Programmiersprache (der Kommunikationspartner)<br />
Deployment, Verteilung der Komponenten auf verschiedenen Knoten<br />
Typische Latency Zeiten sind bei Corba etwa bei 25µs für lokale Kommunikation und etwa 1 µs bei Kommunikation über<br />
TCP/IP.<br />
6.4 ICE<br />
Neuentwicklung auf Basis der Erfahrungen mit CORBA. Heraus stechende Unterschiede sind geringere Komplexität,<br />
bessere Performance (etwa Faktor 2 gegenüber Corba), Durch die Client Server Architektur ist das System sehr sicher.<br />
Im Gegensatz zu Corba unterstützt das Framework auch Versionierung.<br />
10
6.5 Epics<br />
6.5.1 Allgemein<br />
EPICS (für Experimental Physics and Industrial Control System) ist eine Softwareumgebung, um verteilte Kontrollsysteme<br />
für Großexperimente wie Teilchenbeschleuniger oder Teleskope zu entwickeln und zu realisieren.<br />
EPICS verwendet Client-Server- und Publish-Subscribe-Methoden für die Kommunikation zwischen den verschiedenen<br />
verwendeten Computern. Eine Sorte von Computern, die Input/Output-Controller (IOC), sammelt dabei in Echtzeit über<br />
die angeschlossenen Messinstrumente Experiment- und Kontrolldaten. Über ein spezielles Netzwerkprotokoll namens<br />
Channel Access (CA) werden diese Informationen an eine weitere Rechnersorte, die Clients, weitergegeben. CA unterstützt<br />
dabei weiche Echtzeit-Anforderungen, wie sie in wissenschaftlichen Experimenten anfallen.<br />
6.5.2 Input/Output-Controller<br />
Bei den IOCs handelt es sich entweder um handelsübliche PC‘s oder Standard-VME-Prozessoren, die bestimmte Module<br />
(etwa GPIB oder RS232) verwalten, die wiederum mit Kontrollsystem-Instrumenten (Oszilloskope, Netzwerkanalysatoren)<br />
und -Geräten (Motoren, Thermoelemente, Schalter und so weiter) in Verbindung stehen.<br />
Auf dem IOC läuft eine Datenbank mit Records, die entweder Geräte oder Eigenschaften der zu steuernden Geräte<br />
repräsentieren. IOC-Software für harte Echtzeitbedingungen verwendet normalerweise RTEMS oder VxWorks, wenngleich<br />
an einer Portierung auf weitere Systeme gearbeitet wird. IOC-Software für weiche Echtzeitbedingungen läuft<br />
manchmal auf Linux- oder Windows-Systemen.<br />
Weitere Rechner im Netzwerk können mit den IOC über das Konzept der Channels kommunizieren. Als Beispiel diene<br />
ein Teilchenbeschleuniger mit Ventilen zwischen einzelnen Abschnitten. Zu einem Ventil gäbe es typischerweise mehrere<br />
Channels: Einen Ausgabe-Channel, um das Ventil ferngesteuert zu öffnen oder zu schließen; einen Eingabe-<br />
Channel, um den Zustand des Ventils abzufragen (z. B. geschlossen, offen, in Bewegung); und vielleicht weitere analoge<br />
Eingabe-Channels, die Druck und Temperatur auf jeder Seite des Ventils repräsentieren.<br />
Häufig wird auf den Clients ein GUI-Paket wie EDM (Editor/Display Manager) oder MEDM (Motif EDM) eingesetzt. Diese<br />
ermöglichen die Erzeugung und Verwendung von Skalen, Zeigern, Textboxen, einfachen Animationen usw.<br />
11
7 Referenzen<br />
1. Feilkas et al. 2009<br />
Martin Feilkas, Alexander Harhurin, Judith Hartmann, Daniel Ratui und Wolfgang Schweizer. Abstraction Layers –<br />
Motivation and Introduction of a System of Abstraction Layers for Embedded Systems. TU München im Rahmen von<br />
<strong>SPES</strong> <strong>2020</strong>, 2009, Wikipedia<br />
12