1
© 2003, IAS Universität Stuttgart 401
PA1
§ 6 Programmiersprachen für dieProzessautomatisierung
6.1 Grundbegriffe
6.2 Höhere Programmiersprachen für die Prozessautomatisierung
6.3 Programmierung von speicherprogrammierbaren Steuerungen (SPS)
6.4 Die Echtzeitprogrammiersprache Ada 95
6.5 Die Programmiersprachen C und C++
6.6 Die Programmierumgebung Java
© 2003, IAS Universität Stuttgart 402
PA1
– Die Vorgehensweisen bei der Erstellung von Prozessautomatisierungs-programmen kennen
– Programmiersprachen nach Sprachhöhe unterscheiden können
– Die Programmiersprachen für SPSen kennen
– Einfache Beispiele in SPS-Sprachen programmieren können
– Die wichtigsten Echtzeit-Konzepte für Programmiersprachen kennen
– Wissen, wie Echtzeit-Konzepte in Ada 95 umgesetzt sind
– Ein Echtzeit-Programm in Ada 95 entwerfen können
– C/C++ bezüglich Echtzeit einschätzen können
– Wissen, worauf die Portabilität von Java beruht
– Die Echtzeit-Erweiterungen von Java verstanden haben
Kapitel 6 - Lernziele
Kapitel 6: Programmiersprachen für die Prozessautomatisierung
2
© 2003, IAS Universität Stuttgart 403
PA1
§ 6 Programmiersprachen für dieProzessautomatisierung
6.1 Grundbegriffe
6.1.1 Vorgehensweise bei der Erstellung der Programme
6.1.2 Arten von Programmiersprachen
6.2 Höhere Programmiersprachen für die Prozessautomatisierung
6.3 Programmierung von speicherprogrammierbaren Steuerungen (SPS)
6.4 Die Echtzeitprogrammiersprache Ada 95
6.5 Die Programmiersprachen C und C++
6.6 Die Programmierumgebung Java
© 2003, IAS Universität Stuttgart 404
PA1
Vorgehensweisen bei der Erstellung der Programme
Speicherprogrammierbare Steuerungen
– textuelle Programmiersprachen– graphische Programmiersprachen
Mikrocontroller– Assembler
– niedere maschinenunabhängige Programmiersprachen
PC und IPC
– Softwarepakete– universelle Echtzeitprogrammiersprache
Prozessleitsysteme
– Funktionsbausteintechnologie
6.1.1 Vorgehensweisen bei der Erstellung der Programme
3
© 2003, IAS Universität Stuttgart 405
PA1
Klassifikation nach Art der Notation– textuelle Programmiersprachen Ada, C, SPS-Anweisungsliste– graphische Programmiersprache SPS-Kontaktplan
Klassifikation nach dem Programmiersprachenparadigma– prozedurale Programmiersprachen C, Ada 83– funktionale Programmiersprachen LISP– logische Programmiersprachen PROLOG– objektorientierte Programmiersprachen C++, Smalltalk, Ada 95
Klassifikation nach der Sprachhöhe– hoch: an der Verstehbarkeit durch den Menschen orientiert– nieder: an den Hardware-Eigenschaften eines
Computers orientiert
Arten von Programmiersprachen
6.1.2 Arten von Programmiersprachen
© 2003, IAS Universität Stuttgart 406
PA1
Klassifizierung nach der “Sprachhöhe”
Programm-Generatoren
AnwendungsspezifischeProgrammiersprachen
Universelle Programmier-sprachen
Makroassemblersprachen
Assemblersprachen
Maschinensprachen
Mikroprogrammsprachen
Maschinen-unabhängigeProgrammier-sprachen
Maschinen-orientierteProgrammier-sprachen
Maschinen-sprachen
"Spr
achh
öhe"
6.1.2 Arten von Programmiersprachen
4
© 2003, IAS Universität Stuttgart 407
PA1
Mikroprogrammsprachen
– Realisierung der Ablaufsteuerungen zur Ausführung derMaschinenbefehle
• fest verdrahtete Verknüpfungsglieder• Mikroprogramme
– Mikroprogramme (Firmware)• Speicherung in schnellen Schreib-/Lesespeicher
(RAM’s) oder in Festwertspeicher (ROM’s)• nicht zugänglich für Anwenderprogrammierung
– Maschinensprachen• Sprachelemente:
• Zusammenfassung als Oktal-bzw. Hexadezimalzahl• mühsame Handhabung• nicht für Anwendungsprogrammierung
Befehle und Daten in Formvon Bitmustern
6.1.2 Arten von Programmiersprachen
© 2003, IAS Universität Stuttgart 408
PA1
Assemblersprachen
Ziel:Vermeidung der mühsamen Handhabung der Maschinensprachen unterBeibehaltung der Eigenschaften der Maschinenbefehle
– Ersetzung der oktalen/hexadezimalen Schreibweise desOperationsteils der Befehle durch symbolische, mnemotechnischgünstige Buchstabenabkürzungen
– Einführung eines symbolischen Namens anstelle der zahlenmäßigenDarstellung des Adressteils
– Eindeutige Zuordnung zwischen den Befehlen der Assemblerspracheund den Befehlen der Maschinensprache
– Abhängigkeit von gerätetechnischen Eigenschaften der jeweiligen Rechenanlage
6.1.2 Arten von Programmiersprachen
5
© 2003, IAS Universität Stuttgart 409
PA1
Makroassemblersprachen (Makrosprachen)
– weiteres Hilfsmittel zur einfacheren Handhabung: Makros
– Unterscheidung• Makrodefinition• Makroaufruf• Makroexpansion
– Aufbau einer MakrodefinitionMAKRO Makroname (P1, P2, ...., PN)
MakrokörperEndzeichen
MakroaufrufMakroname (A1, A2, ..., AN)
– Eindeutige Zuordnung von Makroassemblerbefehlen zu Befehlender Maschinensprache
– Einem Makrobefehl entsprechen mehrere Maschinenbefehle
Makro: Abkürzung für eine bestimmte Befehlsfolge
6.1.2 Arten von Programmiersprachen
© 2003, IAS Universität Stuttgart 410
PA1
Beispiel Makro Dreiadressadd
Makrodefinition: MAKRO Dreiadressadd (P1, P2, P3)LADE P1ADDIERE P2SPEICHERE P3ENDE
Makroaufruf: Dreiadressadd (A,B, SUMME)
Makroexpansion: ...LADE AADDIERE BSPEICHERE SUMME...
6.1.2 Arten von Programmiersprachen
6
© 2003, IAS Universität Stuttgart 411
PA1
Unterschied zwischen Unterprogramm-Aufrufen und Makros
– Unterprogramm wird nur einmal gespeichert, kann mehrfachaufgerufen und verwendet werden
– Makro wird an jeder Stelle an der es aufgerufen wird, expandiert
Klassifizierung von Makros
– Standardmakros: fest vorgegeben
– Anwendermakros: vom Anwender selbst definierbare Makrosfür häufig vorkommende Befehlsfolgen
6.1.2 Arten von Programmiersprachen
© 2003, IAS Universität Stuttgart 412
PA1
Universelle Programmiersprachen
universell = nicht auf ein Anwendungsgebiet ausgerichtet
universelle niedere Programmiersprachen– Zweck: Erstellung von Systemprogrammen
• Compiler• Editoren• Betriebssysteme• Treiberprogramme
– Ziel: 1. Ausnutzung der Hardwareeigenschaften2. Portabilität
– Beispiel: C
universelle höhere Programmiersprachen– Zweck: Erstellung von allgemeinen Programmen– Ziel: 1. einfache Formulierbarkeit
2. umfangreiche Compilerprüfungen3. Portabilität
– Beispiel: Ada, Java, Smalltalk
Systemprogrammier-sprachen
6.1.2 Arten von Programmiersprachen
7
© 2003, IAS Universität Stuttgart 413
PA1
Anwendungsspezifische Sprachen
Unterscheidung zu prozeduralen Sprachen
– keine Beschreibung des Lösungsverfahrens, sondernBeschreibung der Problemstellung selbst
– Einschränkung auf bestimmtes Anwendungsgebiet
Bsp.: FUP FunktionsplanKOP KontaktplanAWL AnweisungslisteEXAPT für WerkzeugmaschinensteuerungenATLAS für automatische Prüfsysteme
Vorteile/Nachteile:
Deskripitive Sprachen, nicht-prozedurale höhere Sprachen,very high level languages
+ bequeme, anwendungsspezifische Ausdrucksweise
- Inflexibilität
6.1.2 Arten von Programmiersprachen
© 2003, IAS Universität Stuttgart 414
PA1
Programm-Generatoren (Fill-in-the-blanks-Sprachen)
– Formulierungsverfahren für Programme
– Beantwortung von Fragen in Form von Menues am Bildschirm
durch den Anwender (Konfigurierung)
– Umsetzung der Antworten durch den Programm-Generator in ein
ausführbares Programm
– Vorteil: keine Programmierkenntnisse notwendig
– Nachteil:• Einengung auf bestimmtes Anwendungsgebiet
• Abhängigkeit von einem bestimmten Hersteller
6.1.2 Arten von Programmiersprachen
8
© 2003, IAS Universität Stuttgart 415
PA1
Anwendungsgebiete von Programm-Generatoren im BereichProzessautomatisierung
– Leittechniksysteme in der Energie-und Verfahrenstechnik
• TELEPERM-M (Siemens)
• PROCONTROL-B (ABB)
• CONTRONIC-P (Hartmann & Braun)
– Speicherprogrammierbare Steuerungen in Form von
Anweisungsliste oder Kontaktplan
• SIMATIC (Siemens)
6.1.2 Arten von Programmiersprachen
© 2003, IAS Universität Stuttgart 416
PA1
§ 6 Programmiersprachen für dieProzessautomatisierung
6.1 Grundbegriffe
6.2 Höhere Programmiersprachen für die Prozessautomatisierung
6.2.1 Problematik der Echtzeitprogrammierung
6.2.2 Vor- und Nachteile der Assemblerprogrammierung
6.2.3 Entwicklungsrichtungen zur Anwendung maschinenunabhängiger, universeller Echtzeit-programmiersprachen
6.3 Programmierung von speicherprogrammierbaren Steuerungen (SPS)
6.4 Die Echtzeitprogrammiersprache Ada 95
6.5 Die Programmiersprachen C und C++
6.6 Die Programmierumgebung Java
9
© 2003, IAS Universität Stuttgart 417
PA1
Problematik der Echtzeit-Programmierung
– Höhere Programmiersprachen wie BASIC, FORTRAN, COBOL,PASCAL sind für Echtzeit-Programmierung ungeeignet
• keine Echtzeitsprachmittel• keine Einzelbitoperationen• keine Befehle für Prozess-Ein-/Ausgabe
– Einsatz von höheren Programmiersprachen im Vergleich zuAssemblersprachen bringt Erhöhung von Speicherbedarf undRechenzeit mit sich
• Produktautomatisierung: Speicherplatz und Rechenzeitkritisch
• Anlagenautomatisierung: Rechenzeit unter Umständen kritisch
Verfügbarkeit • Compiler für Zielrechner
• Echtzeit-Betriebssystem
6.2.1 Problematik der Echtzeitprogrammierung
© 2003, IAS Universität Stuttgart 418
PA1
Vergleich der Verwendung höherer Programmiersprachen
Höhere Program-miersprachen fürdie Prozessauto-matisierungA
ntei
l der
Anw
endu
nghö
here
r Pro
gram
mie
rspr
ache
n
100%
0%
1950 1960 1970 1980 1990t
Höhere Programmier-sprachen für technisch-wissenschaftliche undkommerzielleAnwendungen
2000
6.2.1 Problematik der Echtzeitprogrammierung
10
© 2003, IAS Universität Stuttgart 419
PA1
Vor- und Nachteile der Assemblerprogrammierung
+ Speicher- und Rechenzeit-Effizienz
- höhere Programm-Entwicklungskosten
- geringe Wartbarkeit
- Probleme mit der Zuverlässigkeit
- schlechte Lesbarkeit, geringer Dokumentationswert
- fehlende Portabilität
Einsatz von Assemblersprachen
ja: Automatisierung von Geräten oder Maschinen, wo es um Serien-oder Massenanwendungen geht, kleine Programme
nein: langlebige, große zu automatisierende Prozesse
6.2.2 Vor- und Nachteile der Assemblerprogrammierung
© 2003, IAS Universität Stuttgart 420
PA1
Legende:ObjektorientierteProgrammiersprache
Echtzeit Programmiersprache
Höhere Programmiersprache
CAda
Smalltalk 80
Mehrrech-ner PEARL
PEARL
Simula ALGOL 68
PL/1CORAL 66
ALGOL60
Pascal
BASIC
C++ Eiffel
Java Ada95
COBOL
FORTRAN
PEARL 901990
1985
1980
1975
1970
1965
1960
1955
1995
2000
6.2.3 Entwicklungsrichtungen
11
© 2003, IAS Universität Stuttgart 421
PA1
§ 6 Programmiersprachen für dieProzessautomatisierung
6.1 Grundbegriffe
6.2 Höhere Programmiersprachen für die Prozessautomatisierung
6.3 Programmierung von speicherprogrammierbaren
Steuerungen (SPS)
6.4 Die Echtzeitprogrammiersprache Ada 95
6.5 Die Programmiersprachen C und C++
6.6 Die Programmierumgebung Java
© 2003, IAS Universität Stuttgart 422
PA1
– Keine feste Programmiersprache für SPS-Systeme
– Unterschiedliche Arten der Programmierung, auch abhängig vom Hersteller
– IEC 1131 definiert grafische und textuelle Grundsprachen
– IEC 1131 definiert keine Befehle!
sowohl deutsche als auch englische Bezeichner für Operatoren
Programmiersprachen für SPS-Systeme (1)
6.3 Programmiersprachen für SPS-Systeme
Eingabesprachen Speicherprogrammierbarer Steuerungen (IEC 1131-1/3)
alphanumerische Darstellung graphische Darstellung
Ablauf-orientiertZustands-orientierte
FunktionsplanFUP
&
>=1
E5.3
E2.6
A2.4
A2.1
M23.1
KontaktplanKOP
( )
M23.1
A2.1
A2.4E5.3 E2.6
AblaufsprachenAS
S1
S2 S8
T1
T2
T8
T9
StrukturierterText ST
IF A&B = 1THEN ...ELSE ...
AnweisungslisteAWL
U E 5.3U E 2.6O A 2.1ON M 23.1= A 2.4
12
© 2003, IAS Universität Stuttgart 423
PA1
– Basis aller Programmiersprachen sind Logikverknüpfungen
– Erweiterung um Möglichkeiten der Zeitverarbeitung
Einführungsbeispiel:Ausgang 1( A1) und Ausgang 2 (A2) sind nur dann gesetzt, wenn entwederEingang 3 (E3) gesetzt ist oder wenn die beiden Eingänge1 (E1) und 2 (E2) gleichzeitig gesetzt sind.
Programmiersprachen für SPS-Systeme (2)
6.3 Programmiersprachen für SPS-Systeme
– Darstellungsart je nach Aufgabenstellung unterschiedlich geeignet
• Zustandsorientierte Programmteile besser in FUP oder KOP
• Ablauforientierte Programmteile besser in AWL oder AS
– Darstellungsarten lassen sich ineinander überführen
ABER:
Bestimmte Operationen nur in AWL programmierbar (Bit-Schiebeoperationen)
© 2003, IAS Universität Stuttgart 424
PA1
Anweisungsliste (AWL)/Instruction List (IL)
Umsetzung des Beispiels in AWL (Tafelanschrieb)
Start: U( E1U E2 )O E3= A1= A2
6.3 Programmiersprachen für SPS-Systeme
– Assemblerähnliche Programmiersprache
– Alle Funktionen einer SPS uneingeschränkt programmierbar
– Einheitlicher Aufbau einer BefehlszeileMarke(opt.): Operator Operand Kommentar(opt.)
– Programmierung durch Verknüpfung von Signalen
13
© 2003, IAS Universität Stuttgart 425
PA1
Strukturierter Text (ST)
A1 := E3 OR (E1 AND E2);A2 := A1;
6.3 Programmiersprachen für SPS-Systeme
– Höhere, Pascal-ähnliche Sprache• Zuweisungen z.B.: alarm := ein AND aus;• Unterprogrammaufrufe z.B.: alarmleuchte(S:=ein, R:=aus);• Kontrollanweisungen
z.B.: IF alarm THEN alarmleuchte(S:=ein, R:=aus);END_IF;
Umsetzung des Beispiels in ST (Tafelanschrieb)
– Zusätzliche Sprachmittel für Zeitverarbeitung und Prozessdatenzugriff
– Für die Programmierung umfangreicher Systeme geeignet
© 2003, IAS Universität Stuttgart 426
PA1
Kontaktplan (KOP) / Ladder Diagramm (LD)
E1 E2
E3
A1
A2
– Einfache Darstellung– Lehnt sich an Stromlaufplan der Relaistechnik an– Symbole für „Schließer“, „Öffner“, und „Relaisspule“
6.3 Programmiersprachen für SPS-Systeme
Nachteil: Komplexe mathematische Funktionen schlecht darstellbar
Schließer Öffner Verknüpfungsergebnis(Spule)
– Symbolisierter Stromfluss von links nach rechts– I/O-Zustände werden auf Schalterzustände abgebildet– Programm wird von oben nach unten gelesen
Umsetzung des Beispiels in KOP (Tafelanschrieb)
14
© 2003, IAS Universität Stuttgart 427
PA1
Funktionsbausteinsprache (FBS)/ Funktionsplan (FUP)
6.3 Programmiersprachen für SPS-Systeme
– Lehnt sich an bekannte Symbole für Funktionsbausteine (DIN40900) an
– Symbolumfang nicht auf logische Grundelemente beschränkt
– I/O-Zustände werden direkt als Ein-/Ausgangssignale verwendet– Übersichtliche Darstellung
Umsetzung des Beispiels in FUP (Tafelanschrieb)
&
1>–
E1E2
E3A1
A2
Merker, Zähler, Zeitgeber und frei definierbare Blöcke möglich
© 2003, IAS Universität Stuttgart 428
PA1
§ 6 Programmiersprachen für dieProzessautomatisierung
6.1 Grundbegriffe
6.2 Höhere Programmiersprachen für die Prozessautomatisierung
6.3 Programmierung von speicherprogrammierbaren Steuerungen (SPS)
6.4 Die Echtzeitprogrammiersprache Ada 95
6.4.1 Entstehungsgeschichte von Ada
6.4.2 Sprachkonstrukte für die algorithmische Programmierung
6.4.3 Sprachkonstrukte für die Echtzeitprogrammierung
6.4.4 Spracherweiterung in Ada 95
6.5 Die Programmiersprachen C und C++
6.6 Die Programmierumgebung Java
15
© 2003, IAS Universität Stuttgart 429
PA1
Entstehungsgeschichte von Ada
Ada Name der 1. ProgrammiererinZu Ehren der MathematikerinAugusta Ada Byron, Countess ofLovelace, Tochter von LordByron benannt. Ada Lovelace(1815- 1851) arbeitete mitCharles Babbage an seiner“Difference-and Analytic-Engine”.Auf Ada Lovelace geht die Ideezurück, diese Maschine mitLochkarten zu programmieren.
6.4.1 Entstehungsgeschichte von Ada
© 2003, IAS Universität Stuttgart 430
PA1
1975 Gründung von HOLWG zur Entwicklung einerProgrammiersprache für das DOD (USA) für“embedded systems”
1980 Festschreibung der Sprachdefinition, Ada 80
1983 ANSI Ada Standard, Ada 83
1987 ISO-Norm für Ada
1988 DIN-Norm (DIN 66268)
1995 Festschreibung von Ada9X zu Ada95, Spracherweiterungenzur Unterstützung der objektorientierten Programmierung
Entwicklung von Ada
6.4.1 Entstehungsgeschichte von Ada
16
© 2003, IAS Universität Stuttgart 431
PA1
Eigenschaften von Ada
– Eignung für sehr umfangreiche Softwaresysteme bis über 107 Zeilen
– Modularisierungskonzept, das eine koordinierte, parallele Entwicklung ermöglicht
– “State of the art”-Sprachkonzepte zur Unterstützung von Überprüfungen zur Übersetzungszeit
– Wiederverwendbarkeit von Softwarekomponenten
– Sichere, moderne und effiziente Echtzeit-Konzepte
– Durchgängiges Fehlerbehandlungskonzept mit Laufzeitüberprüfungen
– Vereinbarkeit der Portierbarkeit mit Maschinennähe
– Internationale Normung von Syntax und Semantik
– Prüfung jedes Ada-Compilers in einer umfangreichenValidierungsprozedur auf die Einhaltung der Norm(mehrere tausend Testprogramme)
6.4.1 Entstehungsgeschichte von Ada
© 2003, IAS Universität Stuttgart 432
PA1
Programmstruktur
– Übersetzbare Einheiten• Unterprogramme
- Funktionen- Prozeduren
• Pakete (Module)– Aufbau von Übersetzungseinheiten
• Vereinbarungen• Anweisungen• Pragmas zur Steuerung des Übersetzungsvorgangs
6.4.2 Sprachkonstrukte für die algorithmische Programmierung
17
© 2003, IAS Universität Stuttgart 433
PA1
Bibliotheksbezogene Programmgenerierung
Ada-Quelle
Ada-Übersetzer
Ausgabeliste
Montageaufforderung
Ada-Programmbibliothek
ausführbaresObjekt
6.4.2 Sprachkonstrukte für die algorithmische Programmierung
© 2003, IAS Universität Stuttgart 434
PA1
Programmeinheiten
– Pakete (Module)
– Tasks (Rechenprozesse)
– protected units (Monitore)
– generische Einheiten(parametrisierte Module und Unterprogramme)
Aufbau von Programmeinheiten
– Spezifikation: Schnittstelle nach außen
– Rumpf: Realisierung der Programmeinheit
6.4.2 Sprachkonstrukte für die algorithmische Programmierung
18
© 2003, IAS Universität Stuttgart 435
PA1
Paketvereinbarung, Paketrumpf und ihre Benutzer
Benutzer Benutzer Benutzer
Paketvereinbarung
Paketrumpf
6.4.2 Sprachkonstrukte für die algorithmische Programmierung
© 2003, IAS Universität Stuttgart 436
PA1
Aufbau einesPakets PACKAGE paket_name IS
Vereinbarungen(Typen, Objekte,Unterprogrammm-Vereinbarung...)
PRIVATE
privater Teil(Vereinbarungen)
END paket_name;
Paketvereinbarung (package declaration)
PACKAGE BODY paket_name IS
Weitere Vereinbarungen
Unterprogramm-Rümpfe
BEGIN
Anweisungen(werden bei derAbarbeitung desPaketrumpfesausgeführt)
END paket_name;
Paketrumpf (package body)
Verein-barungen
Anweisungen
sichtbarerTeil
nachaußennicht
sichtbar
6.4.2 Sprachkonstrukte für die algorithmische Programmierung
19
© 2003, IAS Universität Stuttgart 437
PA1
Beispiel eines Ada-Programms
PACKAGE Stack ISPROCEDURE Push (X: REAL);FUNCTION Pop RETURN REAL;
END;
PACKAGE BODY stack ISMax: CONSTANT:=100;S: ARRAY (1..Max) OF REAL;Ptr: INTEGER RANGE 0..Max;PROCEDURE Push (X:REAL)IS
BEGINPtr:= Ptr + 1S (Ptr):= X;
END Push;FUNCTION Pop RETURN REAL IS
BEGINPtr:= Ptr - 1RETURN S (Ptr + 1);
END pop;BEGIN
Ptr:= oEND Stack;
Aufruf Stack.Push (Y):...A:= Stack.Pop ();
6.4.2 Sprachkonstrukte für die algorithmische Programmierung
© 2003, IAS Universität Stuttgart 438
PA1
Tasks
– Tasks sind keine Übersetzungseinheiten
– Ablauf autonom und nur lose an den Ablauf anderer
Ablaufeinheiten gebunden
– Vereinbarung erfolgt im Vereinbarungsteil eines Blocks, eines
Unterprogramms, eines Paketrumpfs oder einer anderen Task
Beispiel:
PROCEDURE Arrive_at_Airport isTASK Rent_a_Car;TASK BODY Rent_a_Car is...END;
BEGINBook_Hotel;
END Arrive_at_Airport
6.4.2 Sprachkonstrukte für die algorithmische Programmierung
20
© 2003, IAS Universität Stuttgart 439
PA1
Algorithmik
Für die algorithmische Programmierung stehen unter Ada 95 die gängigenSprachkonstrukte zur Verfügung. Dazu gehören:
– Vereinbarungen (z.B. PI: CONSTANT:=3.141_159)
– Datentypen (z.B. INTEGER, REAL, STRING ...)
– Typedefinitionen (z.B. ARRAY, RECORD, ACCESS...)
– Selektion (z.B. IF, CASE...)
– Schleifen und Sprunganweisungen (z.B. LOOP, FOR, EXIT, GOTO...)
6.4.2 Sprachkonstrukte für die algorithmische Programmierung
© 2003, IAS Universität Stuttgart 440
PA1
Ausnahmesituationen
– vordefinierte Ausnahmesituationen• Constraint-Error
Bsp.: Division durch Null• RAISE Constraint-Error
– Behandlung von AusnahmesituationenEXCEPTION
When Constraint-Error => Ueberlauf:= TRUE
Ein-/ Ausgabe
– nicht explizit definiert– Paket mit Standard E/ A-Funktionen wird bereitgestellt– Bsp.: Get, Put_line, Page, New_Line
6.4.2 Sprachkonstrukte für die algorithmische Programmierung
21
© 2003, IAS Universität Stuttgart 441
PA1
Sprachkonstrukte für die Echtzeitprogrammierung
– TasksAktivierung durch Eintritt in die Umgebung
– VerzögerungsanweisungDELAY 3.0;
– TaskabbruchABORT
– Synchronisierung• Rendezvous-Konzept
ENTRYACCEPT auf Empfängerseite
• selektive SynchronisierungSELECT
EingangsaufrufOR
Eingangsaufruf• zeitbedingtes Warten
SELECT...OR DELAY
6.4.3 Sprachkonstrukte für die Echtzeitprogrammierung
© 2003, IAS Universität Stuttgart 442
PA1
Rendezvous-Konzept (1)
Handshake-Verfahren
– Beide Partner müssen warten
– Aus der Sicht des Aufrufers hat das Rendezvous die Gestalteines Prozeduraufrufs
AufrufvereinbarungENTRY
AufrufpunktACCEPT
6.4.3 Sprachkonstrukte für die Echtzeitprogrammierung
22
© 2003, IAS Universität Stuttgart 443
PA1
Rendezvous-Konzept (2)
ggf. Datentransfer
ggf. Datentransfer
Aufrufer Empfänger
6.4.3 Sprachkonstrukte für die Echtzeitprogrammierung
© 2003, IAS Universität Stuttgart 444
PA1
Erzeuger-Verbraucher-Problem (1)
task buffer istype line_bf is array (1..80) of character;entry send (line: in line-bf);entry receice (char: out character);
end buffer; task body buffer is
char_line: line_bf;position : integer;
beginloop
accept send (line :in line_bf) do char_line := line;end send;for position in 1..80 loop accept receive (char: out character) do char := char_line [position]; end receive;end loop;
end loop;end buffer;
6.4.3 Sprachkonstrukte für die Echtzeitprogrammierung
23
© 2003, IAS Universität Stuttgart 445
PA1
task producer;task body producer is
use buffer;input_line : line_bf;
beginloop ... (* Eine Zeile vom Eingabegerät in input_line lesen *) buffer.send(inout_line);end loop;
end producer;
task consumer;task body consumer is
use buffer;input_char : character;
beginloop buffer.receive(input_char); ... (* Das eingelesene Zeichen bearbeiten *)end loop;
end consumer;
Erzeuger-Verbraucher-Problem (2)
6.4.3 Sprachkonstrukte für die Echtzeitprogrammierung
© 2003, IAS Universität Stuttgart 446
PA1
MöglicherAblaufeinesMehrtask-programms
Rendez-vous
Rendez-vous
Rendez-vous
Rendez-vous
Start
Read line frominput device
buffer.send (line);
Read line forminput device
wartend
buffer.send (line);
Send line
Read line forminput device
buffer.send (line);
wartend
Start
accept send (line: ...)
wartend
accept receive(char: ...)
dochar_line :=line [1];end receive;accept receive(char: ...)
wartend
dochar_line :=line [2];end receive;
dochar_line:=line[80];
end receive;
accept send (line: ...)dochar_line :=line;end send;accept receive(char: ...)dochar_line :=line [1];
end receive;
Start
buffer.receive (char);
wartend
Receive characterin char
Process char
buffer.receive (char);
Receive characterin char
buffer.receive (char);Receive character
in char
Process char
buffer.receive (char);
Receive characterin char
Rendez-vous dochar_line :=line;end send;
Rendez-vous
Producer Buffer Consumer
6.4.3 Sprachkonstrukte für die Echtzeitprogrammierung
24
© 2003, IAS Universität Stuttgart 447
PA1
Geschützte Typen
Monitor zur Sequenzialisierung von Zugriffen
Mon
itor
Einsatz sog. „Protected Types“
6.4.3 Sprachkonstrukte für die Echtzeitprogrammierung
© 2003, IAS Universität Stuttgart 448
PA1
Beispiel
PACKAGE Fifo_Puffer_Verwaltung IS
PROTECTED TYPE Fifo_Puffer IS
ENTRY Deponiere (N:IN Info_Type);
ENTRY Gib_Frei (N:OUT Info_Type);
END Fifo_Puffer;
END Fifo_Puffer_Verwaltung
6.4.3 Sprachkonstrukte für die Echtzeitprogrammierung
25
© 2003, IAS Universität Stuttgart 449
PA1
Spracherweiterungen in Ada 95
Objektorientierte Programmierung
– Deklaration neuer Typen, die ähnliche Eigenschaften
haben wie der Elterntyp, Klassen, Objekte
– Vererbung, Modifikation, Hinzufügen von Komponenten
der Datenstruktur bzw. der darauf definierten
Operationen
6.4.4 Spracherweiterung in Ada 95
© 2003, IAS Universität Stuttgart 450
PA1
Girokonto
Privatkonto
Mitarbeiter-konto
Firmenkonto
type Geldtyp is ...;type Girokonto is tagged
record Inhaber: String( 1...40); Nummer: Positive; Stand: Geldtyp;end record;
type Privatkonto is newGirokonto
with record Dispolimit:Geldtyp; end record;
type Firmenkonto is newGirokonto with record
Branche: String(1..10);Eigenkapital: Geldtyp;end record;
type Mitarbeiterkonto is newFirmenkonto with record
Abteilung: String (1...5);Position: String (1... 10);end record;
6.4.4 Spracherweiterung in Ada 95
26
© 2003, IAS Universität Stuttgart 451
PA1
Erweiterungen für die Echtzeitverarbeitung
– Dynamische Prioritäten
– Beeinflussung der Bearbeitung von Warteschlangen
– Beeinflussung des Abbruchverhaltens von Tasks
– Veränderungen des Taskzustandsmodells
– Festlegung des Zeitbegriffs und Beeinflussung der Zeitgebung
6.4.4 Spracherweiterung in Ada 95
© 2003, IAS Universität Stuttgart 452
PA1
Spracherweiterungen in Ada 95
6.4.4 Spracherweiterung in Ada 95
Kernsprache +Basisbibliothek
Systempro-grammie-
rung
Echtzeit-verarbeitung
VerteilteSysteme
Informations-system Numerik Sicherheit
Inline-Maschinen-spracheInterrupts....
FlexiblesScheduling,flexiblePrioritäten,flexibleWarte-schlangen....
PartitionenInter-Partitions-Kommunikation,statische unddynamischeRPCs....
DezimaleDarstellung"PIC"-Darstellung....
Kontrolle überdie internenumerischeDarstellung,komplexeZahlen....
Coderevisionund -inspektionEinschränkungder verfügbarenSprachkonstrukte....
Dynamische ZeichenkettenSchnittstellen zu anderen PSI/O
27
© 2003, IAS Universität Stuttgart 453
PA1
§ 6 Programmiersprachen für dieProzessautomatisierung
6.1 Grundbegriffe
6.2 Höhere Programmiersprachen für die Prozessautomatisierung
6.3 Programmierung von speicherprogrammierbaren Steuerungen (SPS)
6.4 Die Echtzeitprogrammiersprache Ada 95
6.5 Die Programmiersprachen C und C++
6.5.1 Entstehungsgeschichte von C und C++
6.5.2 Sprachkonzepte von C
6.5.3 Sprachkonzepte von C++
6.5.4 Eignung von C und C++ für die Echtzeitprogrammierung
6.6 Die Programmierumgebung Java
© 2003, IAS Universität Stuttgart 454
PA1
1978 Entwicklung des Betriebssystems UNIX durch Dennis Richie in der
Programmiersprache C
1986 Erweiterung von C für die objektorientierte Programmierung zur
Programmiersprache C++
Entstehungsgeschichte von C und C++
6.5.1 Entstehungsgeschichte von C und C++
28
© 2003, IAS Universität Stuttgart 455
PA1
Entwicklungsziele von C und C++
C: – Maschinennahe effiziente Systemprogrammiersprache– flexibel wie Assembler– Kontrollflussmöglichkeiten höherer Programmiersprachen– universelle Verwendbarkeit– begrenzter Sprachumfang
C++: – Erweiterung von C um Objektorientierung– Beibehaltung der Effizienz von C– Verbesserung der Produktivität und Qualität
Hybride Programmiersprache
Concurrent C: Erweiterung von C um Konzepte zur Echtzeitverarbeitung
6.5.1 Entstehungsgeschichte von C und C++
© 2003, IAS Universität Stuttgart 456
PA1
Sprachkonzepte von C
– Vier Datentypen: char, int, float, double
– Zusammenfassung von Daten: Vektoren, Strukturen
– Kontrollstrukturen: if, switch, while, do-while, for,continue, break, exit, goto
– Ein-/Ausgabe: Bibliotheksfunktionen
– große Vielfalt an Bit-Manipulationsmöglichkeiten
– schwaches Typkonzept
– getrennte Kompilierbarkeit von Sourcefiles
– schwaches Exception-Handling
– keine expliziten Möglichkeiten für Parallelverarbeitung
6.5.2 Sprachkonzepte von C
29
© 2003, IAS Universität Stuttgart 457
PA1
Programmaufbau
Einfügen bestimmter Bibliotheken bzw. DateienFestlegen der Namen für Konstanten und Makros
Deklaration von globalen Variablen;
main ( ){
Variablen, die innerhalb der Funktion main bekannt sind,müssen deklariert werden;Anweisungen;
}
Funktionstype Funktionsname (Liste der Parameter){
Variablen, die innerhalb der Funktion bekannt sind, müssen hierdeklariert werden;verschiedene Anweisungen;return (Wert);
}
6.5.2 Sprachkonzepte von C
© 2003, IAS Universität Stuttgart 458
PA1
Beispiel
#include <stdio.h> // Standard-Ein-/Ausgabebibliothek
main ( ) // Kennzeichnung des Programm-
{ // anfangs
printf („Mein erstes Programm/n“) // Ausgabeanweisung
}
6.5.2 Sprachkonzepte von C
30
© 2003, IAS Universität Stuttgart 459
PA1
Sprachkonzepte von C++
– Klasse (class)• Datenstruktur mit Daten und Methoden
(memberfunction)
– Konstruktor (constructor)• Anlegen einer Instanz einer Klasse (Objekt)
– Destruktor (destructor)• Freigabe von Klassenobjekten
– Überladen von Funktionen (Overloading)
– Datenkapselung (encapsulation)
– Vererbung (inheritance)
– Polymorphismus• Auslösung unterschiedlicher Verarbeitungsschritte durch
Botschaften
6.5.3 Sprachkonzepte von C++
© 2003, IAS Universität Stuttgart 460
PA1
Struktur eines C++-Programms
Klasseclass W_maschine{
};
Memberint Drehzahl1, Drehzahl2; float Leistung;
Daten
void rechne(Drehzahl1, Drehzahl2);void schreibe(float);
Methoden
W_maschine Trommel; Objekt
6.5.3 Sprachkonzepte von C++
31
© 2003, IAS Universität Stuttgart 461
PA1
Eignung von C und C++ für die Echtzeitprogrammierung (1)
– C und C++ enthalten keine Echtzeit-Sprachmittel
– Einsatz von Echtzeit-Betriebssystemen zur Realisierung von Echtzeitsystemen
Aufruf von Betriebssystemfunktionen im C-Programm
– Bereitstellung von Bibliotheken
6.5.4 Eignung von C und C++ für die Echtzeitprogrammierung
© 2003, IAS Universität Stuttgart 462
PA1
Eignung von C und C++ für die Echtzeitprogrammierung (2)
Programmiersprachen C und C++Am häufigsten verwendete Programmiersprache fürEchtzeit-Anwendungen
• große Anzahl und Vielfalt an Unterstützungswerkzeugen
• gut ausgebaute Programmierumgebungen
• für die meisten Mikroprozessoren sind Compiler verfügbar
• Anschluss an Echtzeitbetriebssysteme wieQNX, OS9, RTS, VxWorks
Vorsicht bei objektorientierten Sprachmitteln - nicht-deterministisches Laufzeitverhalten - schlechte Speicherplatzausnutzung
6.5.4 Eignung von C und C++ für die Echtzeitprogrammierung
32
© 2003, IAS Universität Stuttgart 463
PA1
§ 6 Programmiersprachen für dieProzessautomatisierung
6.1 Grundbegriffe
6.2 Höhere Programmiersprachen für die Prozessautomatisierung
6.3 Programmierung von speicherprogrammierbaren Steuerungen (SPS)
6.4 Die Echtzeitprogrammiersprache Ada 95
6.5 Die Programmiersprachen C und C++
6.6 Die Programmierumgebung Java
6.6.1 Entstehungsgeschichte von Java
6.6.2 Sprachkonzepte von Java
6.6.3 Eignung von Java für die Entwicklung von Echtzeitsystemen
6.6.4 Real-Time Java
© 2003, IAS Universität Stuttgart 464
PA1
Entstehungsgeschichte von Java
1990 Konzept der Programmiersprache Java durch die Fa. Sun
(James Gosling, Bill Joy)
Ziel: Programmiersprache für die Unterhaltungselektronik
(interaktives Fernsehen)
Namensgebung nach der Kaffeesorte Java
1995 Neuorientierung der Entwicklungsrichtung zu einer Sprache,
um Programme im World Wide Web zu übertragen und
auszuführen
Frei verfügbar für nicht-kommerzielle Zwecke
6.6.1 Entstehungsgeschichte von Java
33
© 2003, IAS Universität Stuttgart 465
PA1
– Objektorientierte Konzepte
– Interpretierung des Codes
• schneller Entwicklungszyklus
• schlechtes Laufzeitverhalten und hoher Speicherplatzbedarf
• höhere Portabilität
– Bereitstellung eines Speichermanagers
– Verzicht auf herkömmliche Zeigertechnik
– Strikte Typprüfung zur Kompilier- und Laufzeit
– Leichtgewichtsprozesse
– GUI-Klassenbibliothek
Sprachkonzepte von Java
6.6.2 Sprachkonzepte von Java
© 2003, IAS Universität Stuttgart 466
PA1
Die Portabilität von Java wird durch zweistufiges Übersetzungsverfahren erreicht.
Übersetzungs-Rechner Ziel-Rechner 2
Java-Compiler
Quell-programm
(Java-Code)
Java-Byte-Code
Ziel-Rechner 1
Ziel-Rechner n
Übersetzer für denZielrechner n
Übersetzer für denZielrechner 2
Übersetzer für denZielrechner 1
Aus-gabe
Aus-gabe
Aus-gabe
Zweite Stufe der ÜbersetzungErste Stufe der Übersetzung
Portabilität
6.6.2 Sprachkonzepte von Java
34
© 2003, IAS Universität Stuttgart 467
PA1
Unterschiede zu C++
– Keine Preprozessoranweisungen wie #define oder #include– keine typedef-Klauseln– Structures und Unions in Form von Klassen– keine Funktionen– keine Mehrfachvererbung– kein goto– kein Überladen von Operatoren– umfangreiche Klassenbibliothek
• Basisklassen (Object, Float, Integer)• GUI-Klassen• Klassen für Ein-und Ausgabe• Klassen für Netzwerkunterstützung
6.6.2 Sprachkonzepte von Java
© 2003, IAS Universität Stuttgart 468
PA1
Eignung von Java für die Entwicklung von Echtzeitsystemen
Anwendungsfelder
– rapid prototyping im Client/Server-Bereich
– multimediale Darstellungen (Video, Sound, Animation)
– Intranetapplikationen
– Echtzeitanwendungen
Speicherverwaltung (garbage collection)
hoher Speicherbedarf
schlechtes Laufzeitverhalten
6.6.3 Eignung von Java für die Entwicklung von Echtzeitsystemen
35
© 2003, IAS Universität Stuttgart 469
PA1
Echtzeitsprachmittel in Java
– Eingabe und Ausgabe von Prozesswerten• vergleichbar mit C/ C++
– Parallelität• keine Prozessunterstützung• Leichtgewichtsprozesse• Zeitscheibenverfahren
– Synchronisierung• Monitore• Semaphorvariablen
– Interprozesskommunikation• nur für Leichtgewichtsprozesse über gemeinsame Daten
– Bitoperationen• vergleichbar mit C/ C++
6.6.3 Eignung von Java für die Entwicklung von Echtzeitsystemen
© 2003, IAS Universität Stuttgart 470
PA1
Java-Beispiele
Java Applikation class HelloWorldApplication{
public static void main(String argv[ ]){
System.out.println(„Hello World!“);}
}
Java Applet import java.applet.*;import java.awt.Graphics;public class HelloWorldApplet extends Applet{
public void paint(Graphics g){
g.drawString(„Hello World!“),5,25);}
}
6.6.3 Eignung von Java für die Entwicklung von Echtzeitsystemen
36
© 2003, IAS Universität Stuttgart 471
PA1
Entwicklungsgeschichte
– parallele und unkoordinierte Anstrengungen Java Echtzeit-fähig zu machen
Sun
IBM
NIST
– Gründung der „Real-Time Java“ Organisation (1998)
„Real-Time Java“ Organisation
– Arbeitsgruppe veröffentlicht die Anforderungen für Real-Time Java (1999)
Req.
Java ist „von Haus aus“ nicht Echtzeit-fähig, dies wird aber vielfach benötigt.
Notwendigkeit einer Spracherweiterung
Spec.
– Verabschiedung der Echtzeit-Spezifikation für Java (RTSJ) durch den „Java Community Process“
6.6.4 Real-Time Java
© 2003, IAS Universität Stuttgart 472
PA1
Die RTSJ beinhaltet Spracherweiterungen sowie Erweiterungen der JavaVirtual Machine (JVM) um Java Threads erzeugen zu können, derenKorrektheits-Bedingungen auch Rechtzeitigkeits-Vorgaben enthalten.
Insgesamt gibt es 8 Problembereiche mit erweiterter Sprachsemantik
Der Schwerpunkt der Erweiterungen liegt dabei im Bereich
Real-Time Specification for Java (RTSJ)
– des Speicherzugriff und der Speicherverwaltung
– der Behandlung von asynchronen Ereignissen
6.6.4 Real-Time Java
37
© 2003, IAS Universität Stuttgart 473
PA1
Erweiterungen (1)
– 1. SchedulingSicherstellung, dass Sequenzen von eingeplanten Objekten rechtzeitigund berechenbar ausgeführt werden
– 2. SpeichermanagementErweiterung des Speichermodells um Echtzeitanwendungen deterministisches Verhalten zu ermöglichen
– 3. SynchronisationSpezifikation der Zuteilungsalgorithmen mit Unterstützung der „priorityinheritance“ und „priority ceiling“-Methoden und unter Vermeidung desProblems der Prioritäteninversion
– 4. Asynchrone Ereignis-BehandlungGewährleistung, dass das Programm mit einer großen Anzahl gleichzeitiger Ereignisse (bis zu mehreren 10000) umgehen kann.
6.6.4 Real-Time Java
© 2003, IAS Universität Stuttgart 474
PA1
– 5. Asynchrone Ausführungsunterbrechung (ATC)Möglichkeit der Ausführungsunterbrechung eines Threads bei Eintreffeneines asynchronen Ereignisses (z.B. Timerablauf)
– 6. Asynchrone Thread-TerminierungGewährleistung einer planmäßigen Terminierung und Speicherfreigabevon Threads ohne Deadlockgefahr
– 7. Physikalischer SpeicherzugriffSpezielle API (Application Programming Interface) für einen direktenSpeicherzugriff
– 8. ExceptionsDefinition von neuen Exceptions (Ausnahmen) und neuer Behandlung vonExceptions im Zusammenhang mit ATC und Speicherreservierung
Erweiterungen (2)
6.6.4 Real-Time Java
38
© 2003, IAS Universität Stuttgart 475
PA1
Frage zu Kapitel 6.2
Antwort
Kapitel 6: Programmiersprachen für die Prozessautomatisierung
Für die Steuerung der Zentralverriegelung in einem Kfz soll einSteuergerät mit einem Mikrocontroller eingesetzt werden.
Erläutern Sie, warum es vorteilhaft sein kann, die Software in einerAssemblersprache zu erstellen.
Der erzeugte Code aus einem Assemblerprogramm ist effizienter undbenötigt weniger Speicherplatz.
Dadurch können die Kosten für die Serienproduktion (eventuell) geringerausfallen, da ein billigerer Mikrocontroller und weniger Speicher benötigtwerden.
Bei großen Stückzahlen fällt dies wesentlich mehr ins Gewicht als diehöheren Entwicklungskosten, die durch die Programmierung in einerAssemblersprache anfallen.
© 2003, IAS Universität Stuttgart 476
PA1
Frage zu Kapitel 6.4
Kapitel 6: Programmiersprachen für die Prozessautomatisierung
Nennen Sie einige wesentliche Unterschiede zwischen der Echtzeit-programmiersprache Ada 95 und der SPS-Sprache FBS in Hinblick auf
Notation Sprachhöhe
Einsetzbarkeit
Echtzeiteigenschaften
FBSAda
textuelle Sprache grafische SpracheUniverselle höhere
SpracheSprache vor allem für
SteuerungenGeeignet für große
ProjekteGeeignet für kleine
Projekte
Umfassende Echtzeit-Spracheigenschaften
Nur eingeschränkteSpracheigenschaften für
dieEchtzeitprogrammierung
Antwort
39
© 2003, IAS Universität Stuttgart 477
PA1
Frage zu Kapitel 6.4
Ada 95 wird auf Grund einiger seiner Spracheigenschaften als Echtzeit-Progammiersprache angesehen. Warum ist Ada besonders Echtzeit-tauglich? Da.....
Antwort
Kapitel 6: Programmiersprachen für die Prozessautomatisierung
Ada keine Objekt-Orientierung besitzt.
Ada Rechenprozesse unterstützt.
Ada schneller wie andere Programmiersprachen ist.
Ada interpretiert wird.
Ada eine hybride Programmiersprache ist.
Ada ein Rendevous-Konzept bietet.
Ada über Methoden für Laufzeitüberprüfungen und eineAusnahmebehandlung verfügt.
f
f
f
f
© 2003, IAS Universität Stuttgart 478
PA1
Frage zu Kapitel 6.4
Kapitel 6: Programmiersprachen für die Prozessautomatisierung
Folgender Ablauf soll in Ada in Form zweier Tasks implementiert werden:
Ein Passant wartet auf ein Taxi und fährt mit diesem zur Kirche. Danachbezahlt er die Fahrt und geht seines Weges.
Nachfolgend finden Sie 3 Codeauszüge für dieses Problem. Welcher istder Richtige und was machen die anderen?
40
© 2003, IAS Universität Stuttgart 479
PA1
Frage zu Kapitel 6.4 - Codeauszüge
Kapitel 6: Programmiersprachen für die Prozessautomatisierung
task passant;
task body passant is begin -- do something taxi.drive; -- do something end passant;
task taxi is entry drive; end taxi;
task body taxi is begin -- do something accept drive; drive.to(church); -- drive away end taxi;
Variante 1 task passant;
task body passant is begin -- do something taxi.drive; -- do something end passant;
task taxi is entry drive; end taxi;
task body taxi is begin -- do something accept drive do drive.to(church); end drive; -- drive awayend taxi;
Variante 2 task passant is entry taxi; end passant;
task body passant is begin -- do something accept taxi; -- do something end passant;
task taxi is entry passant; end taxi;
task body taxi is begin -- do something accept passant; drive.to(church); -- drive away end taxi;
Variante 3
Variante 2 ist die richtige Umsetzung für das beschriebene Problem!
© 2003, IAS Universität Stuttgart 480
PA1
Kreuzworträtsel zu Kapitel 6
1 2 3
4
5
6
7 8
9
41
© 2003, IAS Universität Stuttgart 481
PA1
Kreuzworträtsel zu Kapitel 6
Waagerecht1 Grundlage für die Plattformunabhängigkeit von Java (3)4 Echtzeit-Programmiersprache (3)6 Ada-Konzept zur Synchronisierung (10)8 Schaltplan-ähnliche Darstellung für SPS-Programme (11)9 Maschinennahe Programmiersprache (9)
Senkrecht2 Hilfsmittel zur Vereinfachung der Maschinensprache (5)3 Engl. Bezeichnung für eine gemeinsame Ausführung eines
Programmstücks auf Empfängerseite (9)5 Paket in Ada (5)7 Abkürzung für eine Blockschaltbild-orientierte SPS-
Programmiersprache (3)