Die Geschichte der Echtzeitprogrammiersprache PEARL

Die einzige deutsche genormte Echtzeitprogrammiersprache PEARL gibt es nun seit rund 50 Jahren. Genau der richtige Zeitpunkt, sie anhand ihrer Entwicklung über die Jahre hinweg wieder in Erinnerung zu rufen.

Sprachen  –  49 Kommentare

Die Entwicklung der deutschen Echtzeitprogrammiersprache PEARL (Process and Experiment Automation Realtime Language) geht auf den Wunsch zurück, automatisierungs- und kerntechnische Anwendungen angemessen und mit hoher Produktivität formulieren zu können. Schon um das Jahr 1967 herum nahmen deshalb Ingenieure und Physiker von Firmen und Forschungsstellen die Arbeit an der Sprachspezifikation auf, die im April 1973 dann als erster Forschungsbericht des vom Bund geförderten Programms Prozeßdatenverarbeitung (PDV) veröffentlicht wurde.

Unmittelbar danach wurden erste Übersetzer gebaut und getestet. Ebenfalls begann die Normung von PEARL, wozu 1974 der Arbeitskreis DIN/FNI AK 5.8 gegründet wurde. Aus seinen Arbeiten gingen eine einfache und eine recht komplexe Version der Sprache hervor, die in den Teilen 1 und 2 der DIN 66253 als Basic PEARL 1981 und als Full PEARL 1982 genormt wurden. Daran schloss sich 1989 der Teil 3 Mehrrechner-PEARL an – eine Sprache mit konzeptioneller Klarheit und Eleganz, die ein von anderen bisher unerreichtes Muster zur Strukturierung und Programmierung verteilter Systeme darstellt. So gibt es beispielsweise keine andere Sprache, die dynamische Rekonfiguration verteilter Systeme im Fehlerfalle explizit unterstützt.

Abgrenzung zu anderen Programmiersprachen

Von anderen höheren Programmiersprachen unterscheidet sich PEARL besonders durch die explizite Unterstützung des Zeitbegriffs. Die beiden Datentypen CLOCK für Zeitpunkte und DURATION für Zeitdauern stehen zusammen mit entsprechenden arithmetischen Operationen zur Verfügung.

Während beispielsweise die Programmiersprache Ada als einzigen Zeitbezug nur die inhärent ungenaue Verzögerung des Ablaufs von Tasks kennt, die diese innerhalb ihrer Rümpfe selbst verwalten müssen, werden die Aktivierungen von PEARL-Tasks im Hauptprogramm problemorientiert eingeplant: einerseits als sporadische Reaktionen auf ankommende Unterbrechungssignale, auf Erreichen absoluter Zeitpunkte oder auf Verstreichen von Wartezeiten beziehungsweise andererseits periodisch mit in verschiedenen Formen anzugebenden Frequenzen und Geltungsdauern. Um in PEARL die periodische Aktivierung einer Task einzuplanen, reicht eine auch für Nichtfachleute verständliche und selbstdokumentierende Anweisung wie:

AT 12:00:00 ALL 1 SEC UNTIL 12:00:10 ACTIVATE Task1 PRIORITY 5;

aus. Genau wegen der Nähe von PEARL-Code zu Klartext eignet sich die Sprache nicht nur zur eigentlichen Programmierung, sondern auch zur Spezifikation von Automatisierungsanwendungen und insbesondere für die Lehre. In PEARL-Darstellung lassen sich Denkweise und Konzepte der Echtzeitprogrammierung einfach vermitteln und verstehen. Das hat positive Konsequenzen auf Qualität und Sicherheit der später von den Absolventen erstellten Systeme.

Mit PEARL hatte die deutsche Informationstechnik in den 1970er-Jahren auf dem Gebiet der Echtzeitsysteme eine international führende Stellung erreicht. Denn die Sprache ist ihren Konkurrenten wegen der Klarheit und geringen Komplexität ihrer Konstrukte sowie ihrer die funktionale Sicherheit fördernden leichten Lesbarkeit und Verständlichkeit technisch überlegen. Deshalb standen ihre Konzepte auch bei der Standardisierung einer Unterprogrammbibliothek zur Erweiterung von Fortran um Echtzeitfähigkeit zu Industrial Real-Time Fortran durch den International Purdue Workshop on Industrial Computer Systems Pate. Allein das französische LTR reichte an PEARL heran, ist jedoch leider verschwunden.

Auf dem Weltmarkt ist als einzige mit PEARL konkurrierende Sprache Ada verblieben, die komplex ist und deren Echtzeitfähigkeiten nur schwach ausgeprägt sind. Alle anderen Echtzeitsprachen werden nicht mehr gepflegt, meistens sogar seit mehreren Jahrzehnten nicht mehr. Und die sonst in diesem Bereich verwendeten Sprachen wie C und ihre Derivate besitzen keine originären Echtzeitkonstrukte, weshalb zur Programmierung viele explizite Betriebssystemaufrufe erforderlich sind.

Dass viele andere Sprachen heute bekannter sind, liegt nach Ansicht der Autoren außerdem darin begründet, dass sich die Sprachschöpfer zu wenig für ihr Produkt stark gemacht haben und etwa Ada in militärischen Projekten vorgeschrieben ist. Auch dass Projektmanager oft Vorgaben aufgrund nichttechnischer Kriterien machen, mag ein Grund sein.

Die im Laufe von 30 Jahren gemachten Erfahrungen fanden 1998 in der Norm DIN 66253-2 PEARL90 ihren Niederschlag, die die Teile 1 und 2 der DIN 66253 ablöste.

Geprüfter und nachgewiesener fehlerfreier Echtzeitbetrieb

Für den Einsatz in eingebetteten Systemen mit hohen Verlässlichkeitsanforderungen besonders hervorzuheben ist das konzeptionell auf unmittelbare Unterstützung der Echtzeitkonstrukte von PEARL zugeschnittene Realzeitbetriebssystem RTOS-UH des Instituts für Regelungstechnik der Leibniz-Universität Hannover, für das der Status der Betriebsbewährtheit durch Nachweis von über neun Millionen Stunden fehlerfreien Betriebs 18 exemplarischer Anwendungen erlangt werden konnte.

Die Gesamtzahl industrieller Einsatzfälle unterschiedlicher Couleur von PEARL dürfte im oberen fünfstelligen Bereich liegen. Vorwiegend eingesetzt werden PEARL und auch RTOS-UH von auf Automatisierungstechnik spezialisierten mittelständischen Firmen und Ingenieurbüros, die mit den Werkzeugen der Sprache ihren Wettbewerbs- und Produktivitätsvorsprung realisieren wollen. Um auch das für die Automatisierungstechnik so wichtige Gebiet der speicherprogrammierbaren Steuerungen abzudecken, wurde mit PEARL-PLC eine Abbildung der Funktionsplansprache gemäß der Norm IEC 61131-3 nach PEARL realisiert.

Jüngere Entwicklungen im Kontext der Sicherheitsintegritätsstufen

2012 begann ein Arbeitskreis des gemeinsamen Fachausschusses Echtzeitsysteme der Gesellschaft
für Informatik (GI), der VDI/VDE-Gesellschaft für Mess- und Automatisierungstechnik (GMA) sowie der Informationstechnischen Gesellschaft (ITG) im VDE, einen auf der PEARL90-Sprachnorm basierenden Übersetzer OpenPEARL zu entwickeln, der zusammen mit einem passenden Laufzeitsystem für Linux-Systeme frei erhältlich ist.

Im Zuge dieser Arbeiten wurde die Norm kritisch gesichtet, was zur Aufdeckung von Widersprüchen und nicht eindeutigen Formulierungen sowie in der Folge zu zahlreichen Präzisierungen und Vereinfachungen der Sprache führte, die dann in OpenPEARL Einzug hielten. Erfahrungsgemäß höchst selten eingesetzte oder technisch obsolet gewordene Konstrukte wurden ebenso aus ihr entfernt wie solche, die zu fehlerträchtigen, unstrukturierten, schwer analysierbaren und nicht modular aufgebauten Programmen mit
nichtdeterministischem Laufzeitverhalten führen und strenge Datentypisierung behindern.

Darauf aufbauend wurde unter dem Namen SafePEARL durch Zusammenfügung und Modifikation von OpenPEARL und Mehrrechner-PEARL eine auf Sicherheit ausgerichtete Grundsprache zur Echtzeitprogrammierung sowie darin für jede der vier Sicherheitsintegritätsstufen nach der internationalen Norm IEC 61508 eine wegen der Beschränkung auf das Notwendigste leicht verständliche und somit inhärent sichere Teilsprache definiert. Deren Syntax erzwingt die Einhaltung der jeweils geltenden Einschränkungen.

Die den beiden oberen Sicherheitsstufen SIL4 und SIL3 zugeordneten Teilsprachen für Ursache-/Wirkungstabellen beziehungsweise Funktions- und Ablaufpläne auf der Grundlage verifizierter Bibliotheken sind die weltweit einzigen, die hohen Sicherheitsanforderungen genügende Programme derzeit einfach und wirtschaftlich zu verifizieren gestatten.

Für die unteren Sicherheitsstufen wurden textuelle Teilsprachen definiert, und zwar für SIL2 eine formaler Programmverifikation zugängliche Sprache und für SIL1 eine statische Sprache mit sicheren Konstrukten zum Einsatz im asynchronen Mehrprozessbetrieb.

Weniger sichere Sprachmerkmale werden schrittweise zu höheren Sicherheitsstufen hin zur Programmformulierung nicht mehr zugelassen. Deshalb muss nicht für jede Stufe eine neue Sprache gelernt werden und Übersetzer können prüfen, ob Programme bestimmte Sicherheitsauflagen erfüllen. Das Prinzip, Teilmengen einer Sprache für kritische Anwendungen zu definieren, gestattet es, Programme nach bestimmten Sicherheitsanforderungen zu entwickeln und Codeabschnitte für sicherheitskritische und
-unkritische Systemteile miteinander zu verbinden. Je sicherheitskritischer ein System ist, desto restriktivere Methoden sind einzusetzen.

Zu ihrer Durchsetzung wird mit Übersetzerdirektiven das jeweils gewünschte Sicherheitsniveau vorgegeben, sodass sich alle notwendigen Prüfungen zur Übersetzungszeit durchführen lassen. In einem Codeabschnitt sind nur Konstrukte der Sprachteilmenge der bezeichneten und der höheren Sicherheitsniveaus zulässig. Codeabschnitte mit unterschiedlichen Sicherheitsanforderungen sind schachtelbar, um so transparent miteinander verbunden werden zu können.

Mit SafePEARL und seinen ineinander geschachtelten, spezifischen Teilmengen für die vier Sicherheitsintegritätsstufen nach IEC 61508 entstand eine Sprache zur Programmierung eingebetteter, verteilter Echtzeitsysteme, die die bekannten Sprachmittel zur Förderung funktionaler Sicherheit in sich vereinigt und sich an der menschlichen Verständnisfähigkeit orientiert. Leitmotiv ihrer Formulierung war das Streben nach größtmöglicher Korrektheit, Konsistenz und Genauigkeit der Darstellung bei geringstmöglichem Umfang. Deshalb wurden die vier den Sicherheitsintegritätsstufen zugeordneten Teilsprachen nicht einzeln beschrieben, sondern durch untenstehende Tabelle definiert. Sie gibt an, welche Konstrukte der Grundsprache auf den Sicherheitsstufen SIL1 bis SIL4 jeweils verwendet werden dürfen. Gemäß Beschluss des DIN-Normenausschusses "NA 043-01-22 AA Programmiersprachen" ersetzt SafePEARL seit 2018 die älteren Versionen nach DIN 66253 Teil 3 und DIN 66253-2.

Anweisung/Klausel SIL0 SIL1 SIL2 SIL3 SIL4
GOTO, EXIT + - - - -
(bedingte) Anweisungen und Ausdrücke + + + - -
bedingte Anweisungen und Anweisungsauswahl + + + - -
Angabe physikalischer Einheiten + + + + +
Ursache-Wirkungstabellen + + + + +
sequentielle Ablaufpläne + + + + -
Synchronisierung mit SEMA- und BOLT-Variablen + - - - -
Synchronisierung mit LOCK- und TIMEOUT-Klausel + + + - -
Verwendung interner Signale + + + - -
Verwendung von Unterbrechungssignalen + + + - -
Verwendung von Tasks + + + - -
mit Prioritäten + + - - -
mit Fristenangaben und Zeitüberwachung + + + - -
(Funktions-)Prozeduraufrufe + + + + -
Wiederholungen + + - - -
mit MAXLOOP-Klausel + + + - -
Verwendung von Zeigern und Referenzen + - - - -
PUT/GET, READ/WRITE, CONVERT + + + - -
TAKE/SEND + + + + +
verteilte Systeme + + + + +
dynamische Rekonfiguration + + + + -
Botschaftenaustausch + + + - -

Gepflegt wird PEARL durch den Fachausschuss Echtzeitsysteme, der unter anderem zweimal jährlich die Zeitschrift "EchtZeit – der Rundbrief" herausgibt und jährlich im November die Fachtagung Echtzeitsysteme durchführt. Deren Tagungsbände erscheinen im Springer-Verlag in der Reihe "Informatik aktuell". Für aktuelle Informationen zu PEARL und RTOS-UH sei auf den Internet-Auftritt des Fachausschusses verwiesen. Dort findet sich auch zur freien Verfügung ein PEARL-Sprachreport in englischer Sprache für den internationalen Markt und ein Verweis auf den frei verfügbaren OpenPEARL-Übersetzer. (ane)

Prof. Dr. Dr. Wolfgang A. Halang
hatte bis zu seiner Pensionierung den Lehrstuhl für Informationstechnik, insbesondere Realzeitsysteme, an der Fernuniversität in Hagen inne. Er beschäftigt sich mit dem Gebiet seit 1973 und ist Autor des 2018 in dritter Auflage im Springer-Verlag erschienenen Kompendiums "Sicherheitsgerichtete Echtzeitsysteme".

Dipl.-Inform. (Univ.) Marcel Schaible
beschäftigt sich seit 1984 mit Compilerbau und trug maßgeblich zur DIN-Norm für SafePEARL bei. Daneben arbeitet er als Freiberufler in der Industrie und als wissenschaftlicher Mitarbeiter an der Fernuniversität in Hagen.

Onlinequellen