7 Programmiersprachen für die Automatisierungstechnik
7 Programmiersprachen für die Automatisierungstechnik
7 Programmiersprachen für die Automatisierungstechnik
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
Kapitel 7: <strong>Programmiersprachen</strong> <strong>für</strong> <strong>die</strong> <strong>Automatisierungstechnik</strong><br />
AT1<br />
§ 7 <strong>Programmiersprachen</strong> <strong>für</strong> <strong>die</strong><br />
<strong>Automatisierungstechnik</strong><br />
Lernziele:<br />
– Die Vorgehensweisen bei der Erstellung von Automatisierungsprogrammen<br />
kennen<br />
– Die <strong>Programmiersprachen</strong> <strong>für</strong> SPSen kennen<br />
– Die wichtigsten Echtzeit-Konzepte <strong>für</strong> <strong>Programmiersprachen</strong> kennen<br />
– Wissen, wie Echtzeit-Konzepte in Ada 95 umgesetzt sind<br />
– Ein Echtzeit-Programm in Ada 95 entwerfen können<br />
© 2013, IAS Universität Stuttgart 408
AT1<br />
§ 7 <strong>Programmiersprachen</strong> <strong>für</strong> <strong>die</strong><br />
<strong>Automatisierungstechnik</strong><br />
7.1 Grundbegriffe<br />
7.2 Programmierung von speicherprogrammierbaren Steuerungen (SPS)<br />
7.3 Universelle <strong>Programmiersprachen</strong> <strong>für</strong> <strong>die</strong> <strong>Automatisierungstechnik</strong><br />
7.4 Die Echtzeitprogrammiersprache Ada 95<br />
© 2013, IAS Universität Stuttgart 409
7.1 Grundbegriffe<br />
AT1<br />
Vorgehensweisen bei der Erstellung der Programme<br />
Speicherprogrammierbare Steuerungen<br />
– textuelle <strong>Programmiersprachen</strong><br />
– graphische <strong>Programmiersprachen</strong><br />
Mikrocontroller<br />
– Assembler<br />
– niedere maschinenunabhängige <strong>Programmiersprachen</strong><br />
PC und IPC<br />
– Softwarepakete<br />
– universelle Echtzeitprogrammiersprachen<br />
Prozessleitsysteme<br />
– Funktionsbausteintechnologie<br />
© 2013, IAS Universität Stuttgart 410
7.1 Grundbegriffe<br />
AT1<br />
Arten von <strong>Programmiersprachen</strong><br />
Klassifikation nach Art der Notation<br />
– textuelle <strong>Programmiersprachen</strong> Ada, C, SPS-Anweisungsliste<br />
– graphische Programmiersprache SPS-Kontaktplan<br />
Klassifikation nach dem <strong>Programmiersprachen</strong>paradigma<br />
– prozedurale <strong>Programmiersprachen</strong> C, Ada 83<br />
– funktionale <strong>Programmiersprachen</strong> LISP<br />
– logische <strong>Programmiersprachen</strong> PROLOG<br />
– objektorientierte <strong>Programmiersprachen</strong> C++, Smalltalk, Ada 95<br />
Klassifikation nach der Sprachhöhe<br />
– hoch: an der Verstehbarkeit durch den Menschen orientiert<br />
– nieder: an den Hardware-Eigenschaften eines<br />
Computers orientiert<br />
© 2013, IAS Universität Stuttgart 411
„Sprachhöhe“<br />
7.1 Grundbegriffe<br />
AT1<br />
Klassifizierung nach der “Sprachhöhe”<br />
Programm-Generatoren<br />
Anwendungsspezifische<br />
<strong>Programmiersprachen</strong><br />
Universelle<br />
<strong>Programmiersprachen</strong><br />
Maschinenunabhängige<br />
<strong>Programmiersprachen</strong><br />
Makroassemblersprachen<br />
Assemblersprachen<br />
Maschinenorientierte<br />
<strong>Programmiersprachen</strong><br />
Maschinensprachen<br />
Mikroprogrammsprachen<br />
Maschinensprachen<br />
© 2013, IAS Universität Stuttgart 412
7.1 Grundbegriffe<br />
AT1<br />
Mikroprogrammsprachen<br />
– Realisierung der Ablaufsteuerungen zur Ausführung der<br />
Maschinenbefehle<br />
fest verdrahtete Verknüpfungsglieder<br />
Mikroprogramme (Firmware)<br />
Maschinensprachen<br />
– Befehle und Daten in Form von Bitmustern zur direkten<br />
Ausführung auf der Hardware des AT-Computers<br />
nicht <strong>für</strong><br />
Anwendungsprogrammierung<br />
Assemblersprachen<br />
– Ersetzung der Bitmuster des Operationsteils der Befehle der<br />
Maschinensprache durch symbolische Buchstabenabkürzungen<br />
– Einführung eines symbolischen Namens anstelle der zahlenmäßigen<br />
Darstellung des Adressteils<br />
– Abhängigkeit von gerätetechnischen Eigenschaften der jeweiligen<br />
Rechenanlage<br />
© 2013, IAS Universität Stuttgart 413
7.1 Grundbegriffe<br />
AT1<br />
Makroassemblersprachen (Makrosprachen)<br />
– weiteres Hilfsmittel zur einfacheren Handhabung: Makros<br />
Makro: Abkürzung <strong>für</strong> eine bestimmte Befehlsfolge<br />
– Unterscheidung<br />
Makrodefinition<br />
Makroaufruf<br />
Makroexpansion<br />
– Eindeutige Zuordnung von Makroassemblerbefehlen zu Befehlen der<br />
Maschinensprache<br />
– Einem Makrobefehl entsprechen mehrere Maschinenbefehle<br />
– Makro wird an jeder Stelle, an der es aufgerufen wird, expan<strong>die</strong>rt<br />
Klassifizierung von Makros<br />
– Standardmakros: fest vorgegeben<br />
– Anwendermakros: vom Anwender selbst definierbare Makros<br />
<strong>für</strong> häufig vorkommende Befehlsfolgen<br />
© 2013, IAS Universität Stuttgart 414
7.1 Grundbegriffe<br />
AT1<br />
Vor- und Nachteile der Assemblerprogrammierung<br />
+ Speicher- und Rechenzeit-Effizienz<br />
- höhere Programm-Entwicklungskosten<br />
- geringe Wartbarkeit<br />
- Probleme mit der Zuverlässigkeit<br />
- schlechte Lesbarkeit, geringer Dokumentationswert<br />
- fehlende Portabilität<br />
Einsatz von Assemblersprachen<br />
ja:<br />
nein:<br />
- Automatisierung von Geräten oder Maschinen, wo es um Serienoder<br />
Massenanwendungen geht<br />
- kleinste Programme<br />
- direkter Zugriff auf sehr spezifische Hardware<br />
- langlebige, große zu automatisierende Prozesse<br />
- umfangreichere Programme<br />
© 2013, IAS Universität Stuttgart 415
7.1 Grundbegriffe<br />
AT1<br />
Universelle <strong>Programmiersprachen</strong><br />
Universell nicht auf ein Anwendungsgebiet ausgerichtet<br />
universelle niedere <strong>Programmiersprachen</strong><br />
– Zweck: Erstellung von Systemprogrammen<br />
• Compiler<br />
• Editoren<br />
• Betriebssysteme<br />
• Treiberprogramme<br />
– Ziel: 1. Ausnutzung der Hardwareeigenschaften<br />
2. Portabilität<br />
– Beispiel: C<br />
universelle höhere <strong>Programmiersprachen</strong><br />
– Zweck: Erstellung von allgemeinen Programmen<br />
– Ziel: 1. einfache Formulierbarkeit<br />
2. umfangreiche Compilerprüfungen<br />
3. Portabilität<br />
– Beispiel: Ada, Java, Smalltalk<br />
Systemprogrammiersprachen<br />
© 2013, IAS Universität Stuttgart 416
7.1 Grundbegriffe<br />
AT1<br />
Entwicklungslinien<br />
2005<br />
Java 2<br />
Ada2005<br />
2000<br />
C#<br />
1995<br />
Java<br />
Ada95<br />
Ruby<br />
1990<br />
PEARL 90<br />
1985<br />
C++<br />
Eiffel<br />
1980<br />
C<br />
Ada<br />
Small<br />
talk 80<br />
Mehrrechner<br />
PEARL<br />
1975<br />
PEARL<br />
1970<br />
Pascal<br />
Simula<br />
ALGOL 68<br />
1965<br />
1960<br />
1955<br />
BASIC<br />
FORTRAN<br />
PL/1<br />
COBOL<br />
CORAL 66<br />
ALGOL60<br />
Legende:<br />
Objektorientierte<br />
Programmiersprache<br />
Echtzeit Programmiersprache<br />
Höhere Programmiersprache<br />
© 2013, IAS Universität Stuttgart 417
7.1 Grundbegriffe<br />
AT1<br />
Anwendungsspezifische Sprachen<br />
Synonyme: Deskripitive Sprachen, nicht-prozedurale höhere Sprachen,<br />
very high level languages<br />
Unterscheidung zu prozeduralen Sprachen<br />
– keine Beschreibung des Lösungsverfahrens, sondern<br />
Beschreibung der Problemstellung selbst<br />
– Einschränkung auf bestimmtes Anwendungsgebiet<br />
Bsp.: FUP Funktionsplan<br />
KOP Kontaktplan<br />
AWL Anweisungsliste<br />
EXAPT <strong>für</strong> Werkzeugmaschinensteuerungen<br />
ATLAS <strong>für</strong> automatische Prüfsysteme<br />
Vorteile/Nachteile:<br />
+ bequeme, anwendungsspezifische Ausdrucksweise<br />
- Inflexibilität<br />
© 2013, IAS Universität Stuttgart 418
7.1 Grundbegriffe<br />
AT1<br />
Programm-Generatoren (Fill-in-the-blanks-Sprachen)<br />
– Formulierungsverfahren <strong>für</strong> Programme<br />
– Beantwortung von Fragen in Form von Menüs am Bildschirm durch den<br />
Anwender (Konfigurierung)<br />
– Umsetzung der Antworten durch den Programm-Generator in ein<br />
ausführbares Programm<br />
– Vorteil: keine Programmierkenntnisse notwendig<br />
– Nachteil: Einengung auf bestimmtes Anwendungsgebiet<br />
Abhängigkeit von einem bestimmten Hersteller<br />
Anwendung in <strong>Automatisierungstechnik</strong><br />
– Leitsysteme in der Energie-und Verfahrenstechnik<br />
© 2013, IAS Universität Stuttgart 419
7.1 Grundbegriffe<br />
AT1<br />
Problematik der Echtzeit-Programmierung<br />
– Höhere <strong>Programmiersprachen</strong> wie FORTRAN, COBOL, PASCAL, Java,<br />
C# sind ohne Erweiterungen <strong>für</strong> Echtzeit-Programmierung ungeeignet<br />
keine Echtzeitsprachmittel<br />
keine Einzelbitoperationen<br />
keine Befehle <strong>für</strong> Prozess-Ein-/Ausgabe<br />
– Einsatz von höheren <strong>Programmiersprachen</strong> im Vergleich zu<br />
Assemblersprachen bringt i.d.R. Erhöhung von Speicherbedarf und<br />
Rechenzeit mit sich<br />
Produktautomatisierung: Speicherplatz und Rechenzeit<br />
kritisch<br />
Anlagenautomatisierung: Rechenzeit unter Umständen<br />
kritisch<br />
Voraussetzung<br />
Compiler <strong>für</strong> Zielrechner<br />
Echtzeit-Betriebssystem<br />
© 2013, IAS Universität Stuttgart 420
Anteil der Anwendung<br />
höherer <strong>Programmiersprachen</strong><br />
7.1 Grundbegriffe<br />
AT1<br />
Vergleich der Verwendung höherer <strong>Programmiersprachen</strong><br />
100%<br />
Höhere <strong>Programmiersprachen</strong><br />
<strong>für</strong> technischwissenschaftliche<br />
und<br />
kommerzielle<br />
Anwendungen<br />
Höhere <strong>Programmiersprachen</strong><br />
<strong>für</strong><br />
<strong>die</strong> Prozessautomatisierung<br />
0%<br />
1950 1960 1970 1980 1990<br />
2000<br />
t<br />
© 2013, IAS Universität Stuttgart 421
7.1 Grundbegriffe<br />
AT1<br />
Frage zu Kapitel 7.1<br />
Mit welchen der folgenden Aussagen über <strong>die</strong> unterschiedlichen<br />
“Sprachhöhen” stimmen Sie überein?<br />
Antwort<br />
f Maschinensprachen sind gut geeignet <strong>für</strong> <strong>die</strong> Anwendungsprogrammierung.<br />
<br />
Die Programmiersprache C ist eine universelle Programmiersprache.<br />
f Der Kontaktplan (KOP) der SPS-Programmierung ist eine Maschinensprache.<br />
f Programmgeneratoren verlangen ausgeprägte Programmierkenntnisse.<br />
<br />
<strong>Programmiersprachen</strong> mit niedriger “Sprachhöhe” fokussieren Hardware-<br />
<br />
Charakteristiken eines Computers.<br />
Mit universellen <strong>Programmiersprachen</strong> können maschinen-unabhängige<br />
Programme erstellt werden.<br />
© 2013, IAS Universität Stuttgart 422
AT1<br />
§ 7 <strong>Programmiersprachen</strong> <strong>für</strong> <strong>die</strong><br />
<strong>Automatisierungstechnik</strong><br />
7.1 Grundbegriffe<br />
7.2 Programmierung von speicherprogrammierbaren Steuerungen (SPS)<br />
7.3 Universelle <strong>Programmiersprachen</strong> <strong>für</strong> <strong>die</strong> <strong>Automatisierungstechnik</strong><br />
7.4 Die Echtzeitprogrammiersprache Ada 95<br />
© 2013, IAS Universität Stuttgart 423
7.2 Programmierung von speicherprogrammierbaren Steuerungen (SPS)<br />
AT1<br />
<strong>Programmiersprachen</strong> <strong>für</strong> SPS-Systeme (1)<br />
– Keine feste Programmiersprache <strong>für</strong> SPS-Systeme<br />
– Unterschiedliche Arten der Programmierung, auch abhängig vom Hersteller<br />
– IEC 61131 definiert grafische und textuelle Grundsprachen<br />
Eingabesprachen Speicherprogrammierbarer Steuerungen (IEC 61131-1/3)<br />
alphanumerische Darstellung<br />
graphische Darstellung<br />
Zustands-orientierte<br />
Ablauf-orientiert<br />
Anweisungsliste<br />
AWL<br />
U E 5.3<br />
U E 2.6<br />
O A 2.1<br />
ON M 23.1<br />
= A 2.4<br />
Strukturierter<br />
Text<br />
ST<br />
IF A&B = 1<br />
THEN ...<br />
ELSE ...<br />
E5.3<br />
Funktionsplan<br />
FUP<br />
E2.6<br />
A2.1<br />
M23.1<br />
&<br />
>=1<br />
A2.4<br />
Kontaktplan<br />
KOP<br />
E5.3 E2.6 A2.4<br />
( )<br />
A2.1<br />
M23.1<br />
Ablaufsprachen<br />
AS<br />
S1<br />
T1<br />
T2<br />
S2<br />
T8<br />
T9<br />
S8<br />
– IEC 61131 definiert keine Befehle!<br />
sowohl deutsche als auch englische Bezeichner <strong>für</strong> Operatoren<br />
© 2013, IAS Universität Stuttgart 424
7.2 Programmierung von speicherprogrammierbaren Steuerungen (SPS)<br />
AT1<br />
<strong>Programmiersprachen</strong> <strong>für</strong> SPS-Systeme (2)<br />
– Basis aller <strong>Programmiersprachen</strong> sind Logikverknüpfungen<br />
– Erweiterung um Möglichkeiten der Zeitverarbeitung<br />
– Darstellungsart je nach Aufgabenstellung unterschiedlich geeignet<br />
• Zustandsorientierte Programmteile besser in FUP oder KOP<br />
• Ablauforientierte Programmteile besser in AWL oder AS<br />
– Darstellungsarten lassen sich ineinander überführen<br />
ABER:<br />
Bestimmte Operationen nur in AWL programmierbar (Bit-Schiebeoperationen)<br />
Einführungsbeispiel:<br />
Ausgang 1( A1) und Ausgang 2 (A2) sind nur dann gesetzt, wenn entweder<br />
Eingang 3 (E3) gesetzt ist oder wenn <strong>die</strong> beiden Eingänge1 (E1)<br />
und 2 (E2) gleichzeitig gesetzt sind.<br />
© 2013, IAS Universität Stuttgart 425
7.2 Programmierung von speicherprogrammierbaren Steuerungen (SPS)<br />
AT1<br />
Anweisungsliste<br />
(AWL)/Instruction List (IL)<br />
– Assemblerähnliche Programmiersprache<br />
– Alle Funktionen einer SPS uneingeschränkt programmierbar<br />
– Einheitlicher Aufbau einer Befehlszeile<br />
Marke(opt.): Operator Operand Kommentar(opt.)<br />
– Programmierung durch Verknüpfung von Signalen<br />
Umsetzung des Beispiels in AWL<br />
Start: U( E1<br />
U E2<br />
)<br />
O E3<br />
= A1<br />
= A2<br />
© 2013, IAS Universität Stuttgart 426
7.2 Programmierung von speicherprogrammierbaren Steuerungen (SPS)<br />
AT1<br />
Strukturierter Text (ST)<br />
– Höhere, Pascal-ähnliche Sprache<br />
• Zuweisungen<br />
z.B.: alarm := ein AND aus;<br />
• Unterprogrammaufrufe<br />
z.B.: alarmleuchte(S:=ein, R:=aus);<br />
• Kontrollanweisungen<br />
z.B.: IF alarm<br />
THEN alarmleuchte(S:=ein, R:=aus);<br />
END_IF;<br />
– Zusätzliche Sprachmittel <strong>für</strong> Zeitverarbeitung und Prozessdatenzugriff<br />
– Für <strong>die</strong> Programmierung umfangreicher Systeme geeignet<br />
Umsetzung des Beispiels in ST<br />
A1 := E3 OR (E1 AND E2);<br />
A2 := A1;<br />
© 2013, IAS Universität Stuttgart 427
7.2 Programmierung von speicherprogrammierbaren Steuerungen (SPS)<br />
AT1<br />
Kontaktplan (KOP) / Ladder Diagramm (LD)<br />
– Einfache Darstellung<br />
– Lehnt sich an Stromlaufplan der Relaistechnik an<br />
– Symbole <strong>für</strong> „Schließer“, „Öffner“, und „Relaisspule“<br />
Schließer Öffner Verknüpfungsergebnis<br />
(Spule)<br />
– Symbolisierter Stromfluss von links nach rechts<br />
– I/O-Zustände werden auf Schalterzustände abgebildet<br />
– Programm wird von oben nach unten gelesen<br />
Nachteil: Komplexe mathematische Funktionen schlecht darstellbar<br />
Umsetzung des Beispiels in KOP<br />
E1<br />
E2<br />
A1<br />
E3<br />
A2<br />
© 2013, IAS Universität Stuttgart 428
7.2 Programmierung von speicherprogrammierbaren Steuerungen (SPS)<br />
AT1<br />
Funktionsbausteinsprache (FBS)/ Funktionsplan (FUP)<br />
– Lehnt sich an bekannte Symbole <strong>für</strong> Funktionsbausteine (DIN40900) an<br />
– Symbolumfang nicht auf logische Grundelemente beschränkt<br />
Merker, Zähler, Zeitgeber und frei definierbare Blöcke möglich<br />
– I/O-Zustände werden direkt als Ein-/Ausgangssignale verwendet<br />
– Übersichtliche Darstellung<br />
Umsetzung des Beispiels in FUP<br />
E1<br />
E2<br />
&<br />
E3<br />
><br />
– 1<br />
A1<br />
A2<br />
Video: SPS-Programmierung<br />
© 2013, IAS Universität Stuttgart 429
7.2 Programmierung von speicherprogrammierbaren Steuerungen (SPS)<br />
AT1<br />
Frage zu Kapitel 7.2<br />
Bei der Programmierung von Speicherprogrammierbaren Steuerungen<br />
(SPS) werden so genannte Programmiergeräte verwendet. Warum sind<br />
<strong>die</strong>se notwendig?<br />
Antwort<br />
Notwendige Programmierumgebung kann nicht auf der SPS selbst<br />
ausgeführt werden.<br />
Programmierung auf „Host Computer“, dann Laden des Programmcodes<br />
auf SPS.<br />
© 2013, IAS Universität Stuttgart 430
AT1<br />
§ 7 <strong>Programmiersprachen</strong> <strong>für</strong> <strong>die</strong><br />
<strong>Automatisierungstechnik</strong><br />
7.1 Grundbegriffe<br />
7.2 Programmierung von speicherprogrammierbaren Steuerungen (SPS)<br />
7.3 Universelle <strong>Programmiersprachen</strong> <strong>für</strong> <strong>die</strong> <strong>Automatisierungstechnik</strong><br />
7.4 Die Echtzeitprogrammiersprache Ada 95<br />
© 2013, IAS Universität Stuttgart 431
7.3 Universelle <strong>Programmiersprachen</strong> <strong>für</strong> <strong>die</strong> <strong>Automatisierungstechnik</strong><br />
AT1<br />
C und C++ als universelle <strong>Programmiersprachen</strong><br />
C: – Maschinennahe effiziente Systemprogrammiersprache<br />
– flexibel wie Assembler<br />
– Kontrollflussmöglichkeiten höherer <strong>Programmiersprachen</strong><br />
– universelle Verwendbarkeit<br />
– begrenzter Sprachumfang<br />
C++: – Erweiterung von C um Objektorientierung<br />
– Beibehaltung der Effizienz von C<br />
– Verbesserung der Produktivität und Qualität<br />
Hybride Programmiersprache<br />
Concurrent C:<br />
Erweiterung von C um Konzepte zur Echtzeitverarbeitung<br />
© 2013, IAS Universität Stuttgart 432
7.3 Universelle <strong>Programmiersprachen</strong> <strong>für</strong> <strong>die</strong> <strong>Automatisierungstechnik</strong><br />
AT1<br />
Sprachkonzepte von C<br />
– Vier Datentypen: char, int, float, double<br />
– Zusammenfassung von Daten: Vektoren, Strukturen<br />
– Kontrollstrukturen: if, switch, while, do-while, for,<br />
continue, break, exit, goto<br />
– Ein-/Ausgabe: Bibliotheksfunktionen<br />
– große Vielfalt an Bit-Manipulationsmöglichkeiten<br />
– schwaches Typkonzept<br />
– getrennte Kompilierbarkeit von Sourcefiles<br />
– keine expliziten Möglichkeiten <strong>für</strong> Parallelverarbeitung<br />
© 2013, IAS Universität Stuttgart 433
7.3 Universelle <strong>Programmiersprachen</strong> <strong>für</strong> <strong>die</strong> <strong>Automatisierungstechnik</strong><br />
AT1<br />
Sprachkonzepte von C++<br />
– Klasse (class)<br />
Datenstruktur mit Daten und Methoden<br />
(memberfunction)<br />
– Konstruktor (constructor)<br />
Anlegen einer Instanz einer Klasse (Objekt)<br />
– Destruktor (destructor)<br />
Freigabe von Klassenobjekten<br />
– Überladen von Funktionen (overloading)<br />
– Datenkapselung (encapsulation)<br />
– Vererbung (inheritance)<br />
– Polymorphismus<br />
Auslösung unterschiedlicher Verarbeitungsschritte durch<br />
Botschaften<br />
© 2013, IAS Universität Stuttgart 434
7.3 Universelle <strong>Programmiersprachen</strong> <strong>für</strong> <strong>die</strong> <strong>Automatisierungstechnik</strong><br />
AT1<br />
Eignung von C und C++ <strong>für</strong> <strong>die</strong> Echtzeitprogrammierung (1)<br />
– C und C++ enthalten keine Echtzeit-Sprachmittel<br />
– Einsatz von Echtzeit-Betriebssystemen zur Realisierung<br />
von Echtzeitsystemen<br />
Aufruf von Betriebssystemfunktionen im C-Programm<br />
– Bereitstellung von Bibliotheken<br />
© 2013, IAS Universität Stuttgart 435
7.3 Universelle <strong>Programmiersprachen</strong> <strong>für</strong> <strong>die</strong> <strong>Automatisierungstechnik</strong><br />
AT1<br />
Eignung von C und C++ <strong>für</strong> <strong>die</strong> Echtzeitprogrammierung (2)<br />
<strong>Programmiersprachen</strong> C und C++<br />
Am häufigsten verwendete Programmiersprache <strong>für</strong> Echtzeit-Anwendungen<br />
– große Anzahl und Vielfalt an Unterstützungswerkzeugen<br />
– gut ausgebaute Programmierumgebungen<br />
– <strong>für</strong> <strong>die</strong> meisten Mikroprozessoren sind Compiler verfügbar<br />
– Anschluss an Echtzeitbetriebssysteme wie QNX, OS9, RTS, VxWorks<br />
Vorsicht bei objektorientierten Sprachmitteln:<br />
– nicht-deterministisches Laufzeitverhalten<br />
– schlechte Speicherplatzausnutzung<br />
© 2013, IAS Universität Stuttgart 436
7.3 Universelle <strong>Programmiersprachen</strong> <strong>für</strong> <strong>die</strong> <strong>Automatisierungstechnik</strong><br />
AT1<br />
Java als universelle Programmiersprache<br />
– Objektorientierte Konzepte<br />
– Interpretierung des Codes<br />
schneller Entwicklungszyklus<br />
schlechtes Laufzeitverhalten und hoher Speicherplatzbedarf<br />
höhere Portabilität<br />
– Bereitstellung eines Speichermanagers<br />
– Verzicht auf herkömmliche Zeigertechnik<br />
– Strikte Typprüfung zur Kompilier- und Laufzeit<br />
– Leichtgewichtsprozesse<br />
– GUI-Klassenbibliotheken<br />
© 2013, IAS Universität Stuttgart 437
7.3 Universelle <strong>Programmiersprachen</strong> <strong>für</strong> <strong>die</strong> <strong>Automatisierungstechnik</strong><br />
AT1<br />
Unterschiede zu C++<br />
– Keine Preprozessoranweisungen wie #define oder #include<br />
– keine typedef-Klauseln<br />
– Structures und Unions in Form von Klassen<br />
– keine Funktionen<br />
– keine Mehrfachvererbung<br />
– kein goto<br />
– kein Überladen von Operatoren<br />
– umfangreiche Klassenbibliothek<br />
Basisklassen (Object, Float, Integer)<br />
GUI-Klassen<br />
Klassen <strong>für</strong> Ein-und Ausgabe<br />
Klassen <strong>für</strong> Netzwerkunterstützung<br />
© 2013, IAS Universität Stuttgart 438
7.3 Universelle <strong>Programmiersprachen</strong> <strong>für</strong> <strong>die</strong> <strong>Automatisierungstechnik</strong><br />
AT1<br />
Ausführung von Java-Programmen (1)<br />
Java Quellcode<br />
Java Class Compiler<br />
Java C<br />
Compiler<br />
C Code<br />
Java Bytecode<br />
AOT Compiler<br />
C Compiler<br />
Objektcode<br />
Objektcode<br />
Applikation<br />
Applikation<br />
Applikation<br />
Java API<br />
JVM<br />
OS<br />
Zielsystem<br />
Java API<br />
JIT Compiler<br />
OS<br />
Zielsystem<br />
Java API<br />
Java OS<br />
Java<br />
Zielsystem<br />
Applikation<br />
inkl. Laufzeitumg.<br />
OS<br />
Zielsystem<br />
Applikation<br />
inkl. Laufzeitumg.<br />
OS<br />
Zielsystem<br />
JVM – Java Virtual Machine JIT – Just-In-Time-Compiler AOT – Ahead-Of-Time-Compiler<br />
© 2013, IAS Universität Stuttgart 439
7.3 Universelle <strong>Programmiersprachen</strong> <strong>für</strong> <strong>die</strong> <strong>Automatisierungstechnik</strong><br />
AT1<br />
Ausführung von Java-Programmen (2)<br />
Zweistufiges Übersetzungsverfahren:<br />
1. Stufe: Auf Entwicklungssystem<br />
2. Stufe Auf Zielsystem Auf Entwicklungssystem<br />
- Interpretation<br />
- Just-in-time Compilierung<br />
- direkte Ausführung auf<br />
Java Hardware<br />
- Ahead-of-time<br />
Compilierung<br />
- Übersetzung nach C<br />
Portabilität:<br />
Speicherbedarf:<br />
Laufzeitbedarf:<br />
auf Bytecode-Ebene<br />
Interpreter / JIT Compiler<br />
gesamte Klassenbibliotheken<br />
> 1 Mb<br />
Interpretation / Just-in-time<br />
Compilierung hoch<br />
auf Quellcodeebene<br />
Laufzeitumgebung<br />
benötigte Klassenbibliotheken<br />
> 150 kb<br />
direkte Ausführung<br />
gering<br />
© 2013, IAS Universität Stuttgart 440
7.3 Universelle <strong>Programmiersprachen</strong> <strong>für</strong> <strong>die</strong> <strong>Automatisierungstechnik</strong><br />
AT1<br />
Eignung von Java <strong>für</strong> <strong>die</strong> Entwicklung von Echtzeitsystemen<br />
Anwendungsfelder<br />
– rapid prototyping im Client/Server-Bereich<br />
– multimediale Darstellungen (Video, Sound, Animation)<br />
– Intranetapplikationen<br />
– Echtzeitanwendungen<br />
<br />
<br />
<br />
Speicherverwaltung (garbage collection)<br />
hoher Speicherbedarf<br />
schlechtes Laufzeitverhalten<br />
© 2013, IAS Universität Stuttgart 441
7.3 Universelle <strong>Programmiersprachen</strong> <strong>für</strong> <strong>die</strong> <strong>Automatisierungstechnik</strong><br />
AT1<br />
Echtzeitsprachmittel in Java<br />
– Eingabe und Ausgabe von Prozesswerten<br />
vergleichbar mit C/ C++<br />
– Parallelität<br />
keine Prozessunterstützung<br />
Leichtgewichtsprozesse<br />
Zeitscheibenverfahren<br />
– Synchronisierung<br />
Monitore<br />
Semaphorvariablen<br />
– Interprozesskommunikation<br />
nur <strong>für</strong> Leichtgewichtsprozesse über gemeinsame Daten<br />
– Bitoperationen<br />
vergleichbar mit C/ C++<br />
© 2013, IAS Universität Stuttgart 442
7.3 Universelle <strong>Programmiersprachen</strong> <strong>für</strong> <strong>die</strong> <strong>Automatisierungstechnik</strong><br />
AT1<br />
Real-Time Java<br />
Erweiterungen der Sprache Java, um Echtzeiteigenschaften<br />
Echtzeitanforderungen realisieren zu können.<br />
Erweiterungen<br />
– 1. Scheduling<br />
Sicherstellung, dass Sequenzen von eingeplanten Objekten rechtzeitig<br />
und berechenbar ausgeführt werden<br />
– 2. Speichermanagement<br />
Erweiterung des Speichermodells um <strong>für</strong> Echtzeitanwendungen<br />
deterministisches Verhalten zu ermöglichen<br />
– 3. Synchronisation<br />
Spezifikation der Zuteilungsalgorithmen mit Unterstützung der „priority<br />
inheritance“ und „priority ceiling“-Methoden und unter Vermeidung des<br />
Problems der Prioritäteninversion<br />
– 4. Asynchrone Ereignis-Behandlung<br />
Gewährleistung, dass das Programm mit einer großen Anzahl<br />
gleichzeitiger Ereignisse (bis zu mehreren 10000) umgehen kann.<br />
© 2013, IAS Universität Stuttgart 443
7.3 Universelle <strong>Programmiersprachen</strong> <strong>für</strong> <strong>die</strong> <strong>Automatisierungstechnik</strong><br />
AT1<br />
Erweiterungen (2)<br />
– 5. Asynchrone Ausführungsunterbrechung (ATC)<br />
Möglichkeit der Ausführungsunterbrechung eines Threads bei Eintreffen<br />
eines asynchronen Ereignisses (z.B. Timerablauf)<br />
– 6. Asynchrone Thread-Terminierung<br />
Gewährleistung einer planmäßigen Terminierung und Speicherfreigabe<br />
von Threads ohne Deadlockgefahr<br />
– 7. Physikalischer Speicherzugriff<br />
Spezielle API (Application Programming Interface) <strong>für</strong> einen direkten<br />
Speicherzugriff<br />
– 8. Exceptions<br />
Definition von neuen Exceptions (Ausnahmen) und neuer Behandlung von<br />
Exceptions im Zusammenhang mit ATC und Speicherreservierung<br />
© 2013, IAS Universität Stuttgart 444
7.3 Universelle <strong>Programmiersprachen</strong> <strong>für</strong> <strong>die</strong> <strong>Automatisierungstechnik</strong><br />
AT1<br />
Frage zu Kapitel 7.3<br />
Welche C++-Sprachmittel sind problematisch <strong>für</strong> ein deterministisches<br />
Laufzeitverhalten eines Programms?<br />
Antwort<br />
f Zeiger-Arithmetik<br />
<br />
Polymorphismus<br />
<br />
Exceptions<br />
f Kapselung<br />
© 2013, IAS Universität Stuttgart 445
7.3 Universelle <strong>Programmiersprachen</strong> <strong>für</strong> <strong>die</strong> <strong>Automatisierungstechnik</strong><br />
AT1<br />
Frage zu Kapitel 7.3<br />
Welchen Aussagen bezüglich des Java-Garbage-Collector-Mechanismus<br />
stimmen Sie zu?<br />
Antwort<br />
f Der Ausführungszeitpunkt des Garbage Collectors muss manuell festgelegt<br />
werden.<br />
f Belegte Ressourcen sollten im Destruktor einer Klasse freigegeben werden.<br />
<br />
Durch den Garbage Collector führen identische Systembedingungen zu<br />
unterschiedlichem zeitlichem Verhalten.<br />
© 2013, IAS Universität Stuttgart 446
AT1<br />
§ 7 <strong>Programmiersprachen</strong> <strong>für</strong> <strong>die</strong><br />
<strong>Automatisierungstechnik</strong><br />
7.1 Grundbegriffe<br />
7.2 Programmierung von speicherprogrammierbaren Steuerungen (SPS)<br />
7.3 Universelle <strong>Programmiersprachen</strong> <strong>für</strong> <strong>die</strong> <strong>Automatisierungstechnik</strong><br />
7.4 Die Echtzeitprogrammiersprache Ada 95<br />
© 2013, IAS Universität Stuttgart 447
7.4 Die Echtzeitprogrammiersprache Ada 95<br />
AT1<br />
Lady Ada Lovelace<br />
Ada<br />
Name der 1. Programmiererin<br />
Zu Ehren der Mathematikerin<br />
Augusta Ada Byron, Countess of<br />
Lovelace, Tochter von Lord<br />
Byron benannt. Ada Lovelace<br />
(1815- 1851) arbeitete mit<br />
Charles Babbage an seiner<br />
“Difference-and Analytic-Engine”.<br />
Auf Ada Lovelace geht <strong>die</strong> Idee<br />
zurück, <strong>die</strong>se Maschine mit<br />
Lochkarten zu programmieren.<br />
© 2013, IAS Universität Stuttgart 448
7.4 Die Echtzeitprogrammiersprache Ada 95<br />
AT1<br />
Eigenschaften von Ada<br />
– Eignung <strong>für</strong> sehr umfangreiche Softwaresysteme bis über 10 7 Zeilen<br />
• Modularisierungskonzept<br />
• Trennung von Spezifikation und Implementierung<br />
• Unterstützung der Wiederverwendung von Softwarekomponenten<br />
• Fehlerbehandlungskonzepte als Teil des Modul-Codes<br />
– Echtzeit-spezifische Eigenschaften<br />
• Unterstützung absoluter und relativer Zeitanforderungen<br />
• Ausführung paralleler Abläufe<br />
• Priorisierung und Scheduling von parallelen Abläufen<br />
– Umfangreiche Prüfung jedes Ada-Compilers auf <strong>die</strong> Einhaltung der Norm<br />
• Mehrere tausend Testprogramme<br />
© 2013, IAS Universität Stuttgart 449
7.4 Die Echtzeitprogrammiersprache Ada 95<br />
AT1<br />
Ada95 Programmeinheiten<br />
– Unterprogramme<br />
Durch Aufruf ausführbare Anweisungsreihenfolge<br />
Funktionen (function) und Prozeduren (procedure)<br />
– Rechenprozesse<br />
Abgeschlossene, parallel ausführbare Programmteile<br />
Rechenprozesse (tasks)<br />
– Gemeinsam genutzte Betriebsmittel mit synchronisiertem Zugriff<br />
Datenstrukturen mit Zugriffskontrolle durch Monitore<br />
Geschützte Variable (protected variable)<br />
– Wiederverwendbare Bibliotheken<br />
Zusammenstellung unterschiedlicher, sachlich zusammengehöriger<br />
Unterprogramme, Tasks und geschützten Typen<br />
Pakete (packages)<br />
© 2013, IAS Universität Stuttgart 450
7.4 Die Echtzeitprogrammiersprache Ada 95<br />
AT1<br />
Aufbau von Ada95-Programmen<br />
Ada-Programm<br />
Hauptroutine<br />
procedure main is<br />
begin<br />
...<br />
end main;<br />
Bibliotheken<br />
package A is<br />
begin<br />
...<br />
end A;<br />
protected PT;<br />
task T;<br />
function F;<br />
procedure P;<br />
. . .<br />
– Kein explizites Hauptprogramm<br />
Bestimmung eines Unterprogramms als Hauptroutine<br />
– Aufruf von Programmeinheiten aus der Hauptroutine heraus<br />
– Programmeinheiten in Bibliotheken abgelegt oder direkt deklariert<br />
© 2013, IAS Universität Stuttgart 451
7.4 Die Echtzeitprogrammiersprache Ada 95<br />
AT1<br />
Aufbau von Ada95-Programmeinheiten<br />
– Spezifikation<br />
– Rumpf<br />
= Schnittstelle nach außen<br />
= Realisierung der Programmeinheit<br />
Paketspezifikation (package declaration)<br />
package package_name is<br />
nach außen<br />
sichtbarer Teil<br />
Vereinbarungen<br />
(Types, Unterprogramme,Tasks,...)<br />
private<br />
privater Teil (Vereinbarungen)<br />
Vereinbarungen<br />
end package_name;<br />
nach außen<br />
nicht<br />
sichtbar<br />
Paketrumpf (package body)<br />
package body package_name is<br />
weitere Vereinbarungen,<br />
Unterprogramm-Rümpfe,<br />
begin<br />
Anweisungen<br />
end package_name;<br />
Anweisungen<br />
© 2013, IAS Universität Stuttgart 452
7.4 Die Echtzeitprogrammiersprache Ada 95<br />
AT1<br />
Beispiel: Realisierung von Programmeinheiten<br />
– Trennung von Spezifikation und Implementierung in separaten Dateien<br />
Spezifikation (Datei General.ads)<br />
package General is<br />
protected Variable is<br />
function read return Float;<br />
private<br />
protectedData: Float:= 0.0;<br />
end Variable;<br />
...<br />
end General;<br />
von außen<br />
sichtbar<br />
Nach außen<br />
nicht sichtbar<br />
Implementierung (Datei General.adb)<br />
package body General is<br />
protected body Variable is<br />
function read return Float is<br />
begin<br />
return protectedData;<br />
end read;<br />
end Variable;<br />
...<br />
end General;<br />
Implementierung<br />
der Anweisungen<br />
© 2013, IAS Universität Stuttgart 453
7.4 Die Echtzeitprogrammiersprache Ada 95<br />
AT1<br />
Konzepte der Parallelprogrammierung<br />
– Notwendigkeit auf gleichzeitig stattfindende Ereignisse reagieren zu können<br />
Konzept „paralleler“ Rechenprozesse zur Bearbeitung paralleler Abläufe<br />
– Direkte Unterstützung von Rechenprozesses in Ada durch eigenes<br />
Sprachmittel “Task”<br />
Programmeinheit “Task”<br />
– Task als parallel ablaufende, abgeschlossene Befehlssequenz<br />
– Task als gekapselte Einheit<br />
Deklarationen innerhalb einer Task sind nicht nach außen sichtbar<br />
– Kommunikation zwischen Tasks unterschiedlich realisierbar<br />
„message passing“ und „shared variables“<br />
© 2013, IAS Universität Stuttgart 454
7.4 Die Echtzeitprogrammiersprache Ada 95<br />
AT1<br />
Realisierung von Tasks<br />
– Spezifikation und Implementierung von Tasks in Unterprogrammen oder in<br />
Paketen möglich<br />
– Taskeinplanung sobald „begin“ der übergeordneten Einheit erreicht wird<br />
– Ausführungsende und Terminierung wenn “end”-Anweisung der Task erreicht<br />
package package_name is<br />
task T1;<br />
task T2;<br />
end package_name;<br />
package body package_name is<br />
task body T1 is<br />
begin<br />
...<br />
end T1;<br />
task body T2 is<br />
begin<br />
...<br />
end T2;<br />
end package_name;<br />
Einplanung<br />
von T3<br />
with package_name; use package_name;<br />
procedure main_procedure_name is<br />
task T3;<br />
task body T3 is<br />
...<br />
end T3;<br />
begin<br />
...<br />
end main_procedure_name;<br />
© 2013, IAS Universität Stuttgart 455
7.4 Die Echtzeitprogrammiersprache Ada 95<br />
AT1<br />
Task-Typen und Task-Objekte<br />
– Task-Typen definieren Vorlagen <strong>für</strong> <strong>die</strong> Instanziierung von Task-Objekten<br />
– Tasks des selben Typs besitzen ähnliche Eigenschaften und Funktionalität<br />
– Individuelle Task-Objekte durch Parametrierung bei der Instanziierung<br />
package General is<br />
task type monitorValue(X: Integer);<br />
task body monitorValue(X: Integer) is<br />
begin<br />
-- Implementierung<br />
...<br />
end monitorValue;<br />
end General;<br />
Task-Typ<br />
Spezifikation /<br />
Implementierung<br />
Einbindung des<br />
Pakets „General“<br />
With General; use General;<br />
procedure main is<br />
M1 : monitorValue(1);<br />
M2 : monitorValue(2);<br />
M3 : monitorValue(3);<br />
begin<br />
-- Programmcode<br />
...<br />
end main;<br />
Deklaration von<br />
Task-Objekten<br />
© 2013, IAS Universität Stuttgart 456
7.4 Die Echtzeitprogrammiersprache Ada 95<br />
AT1<br />
Synchronisierung von Tasks<br />
Synchronisierungskonzepte in Ada95<br />
– Logische Synchronisierung<br />
Definition einer Ablaufreihenfolge der Tasks<br />
Rendez-Vous-Konzept<br />
– Betriebsmittel-orientierte Synchronisierung<br />
Regeln <strong>für</strong> den Zugriff auf gemeinsam genutzte Betriebsmittel<br />
Geschützte Betriebsmittel (protected units)<br />
© 2013, IAS Universität Stuttgart 457
7.4 Die Echtzeitprogrammiersprache Ada 95<br />
AT1<br />
Rendezvous-Konzept (1)<br />
– Handshake-Verfahren<br />
• Festlegung zeitlicher Synchronisierungspunkte zwischen Tasks<br />
• Beiderseitiges Warten der Tasks<br />
– Rendezvous hat aus Aufrufersicht <strong>die</strong> Gestalt eines Prozeduraufrufs<br />
– Definition von Aufrufvereinbarung (entry) und Aufrufpunkt (accept)<br />
Aufrufer<br />
Empfänger<br />
Receiver.entryName;<br />
Ggf. Datentransfer<br />
Ggf. Datentransfer<br />
accept entryName do<br />
end entryName;<br />
Rendezvous<br />
© 2013, IAS Universität Stuttgart 458
7.4 Die Echtzeitprogrammiersprache Ada 95<br />
AT1<br />
Rendezvous-Konzept (2)<br />
– Deklaration der Aufrufvereinbarung in Task-Spezifikation<br />
– Aufrufe und Aufrufpunkte im Task-Rumpf implementiert<br />
– Funktionsprinzip: Task ruft Aufrufpunkt einer anderen Task auf<br />
Aufrufvereinbarung<br />
task T1 is<br />
entry sync;<br />
end T1;<br />
task body T1 is<br />
begin<br />
loop<br />
...<br />
T2.sync;<br />
accept sync;<br />
endloop;<br />
end T1;<br />
task T2 is<br />
entry sync;<br />
end T2;<br />
task body T2 is<br />
begin<br />
loop<br />
accept sync;<br />
...<br />
T3.sync;<br />
endloop;<br />
end T2;<br />
Aufrufpunkt<br />
task T3 is<br />
entry sync;<br />
end T3;<br />
task body T3 is<br />
begin<br />
loop<br />
accept sync;<br />
...<br />
T1.sync;<br />
endloop;<br />
end T3;<br />
Aufruf eines anderen<br />
Aufrufpunkts<br />
Beispiel realisiert Ablaufreihenfolge T1, T2, T3, T1….<br />
© 2013, IAS Universität Stuttgart 459
7.4 Die Echtzeitprogrammiersprache Ada 95<br />
AT1<br />
Beispielablauf<br />
T1<br />
T2<br />
T3<br />
accept sync;<br />
accept sync;<br />
Waiting<br />
Waiting<br />
T2.sync;<br />
accept sync;<br />
Waiting<br />
T3.sync;<br />
T1.sync;<br />
© 2013, IAS Universität Stuttgart 460
7.4 Die Echtzeitprogrammiersprache Ada 95<br />
AT1<br />
Select-Anweisung<br />
– Realisierung alternativer Abläufe mittels “select”<br />
• Selektive Synchronisierung<br />
• Zeitbedingtes Warten<br />
select<br />
accept entryName1;<br />
or<br />
accept entryName2;<br />
...<br />
else<br />
-- Alternative code<br />
end select;<br />
Selektive Synchronisierung<br />
Ausführung, wenn<br />
kein Aufruf vorliegt<br />
Sofortige Ausführung wenn<br />
kein Aufruf möglich<br />
select<br />
Receiver.entryName;<br />
else<br />
-- Alternative code<br />
end select;<br />
select<br />
accept entryName1;<br />
or<br />
accept entryName2;<br />
...<br />
or<br />
delay time_out;<br />
-- Alternative code<br />
end select;<br />
Zeitbedingtes Warten<br />
Ausführung wenn kein Aufruf<br />
innerhalb “time_out”<br />
Ausführung wenn kein<br />
Rendezvous innerhalb<br />
“time_out” möglich<br />
select<br />
Receiver.entryName;<br />
or<br />
delay time_out;<br />
-- Alternative code<br />
end select;<br />
© 2013, IAS Universität Stuttgart 461
7.4 Die Echtzeitprogrammiersprache Ada 95<br />
AT1<br />
Geschützte Betriebsmittel (1)<br />
– Problem: Zugriff auf gemeinsam genutzte Betriebsmittel<br />
– Monitor-Konzept <strong>für</strong> exklusiven Zugriff<br />
Geschützte<br />
Anweisung<br />
Anfrage<br />
einer Task<br />
…<br />
– Schnittstelle als geschützte<br />
Anweisung<br />
– Zugriff auf gemeinsames<br />
Betriebsmittel durch internen<br />
Monitor geregelt<br />
Geschützte Anweisungen<br />
werden nicht parallel<br />
ausgeführt<br />
Monitor<br />
Gemeinsames<br />
Betriebsmittel<br />
Sequenzielle Abarbeitung von<br />
gleichzeitigen Anfragen<br />
Exklusiver Zugriff auf<br />
gemeinsame Betriebsmittel<br />
© 2013, IAS Universität Stuttgart 462
7.4 Die Echtzeitprogrammiersprache Ada 95<br />
AT1<br />
Geschützte Betriebsmittel (2)<br />
protected S is<br />
entry P;<br />
procedure V;<br />
function G return Boolean;<br />
private<br />
Sem : Boolean := True;<br />
end S;<br />
protected body S is<br />
entry P when Sem = True is<br />
Sem := False;<br />
end P;<br />
procedure V is<br />
begin<br />
Sem := True;<br />
end V;<br />
...<br />
end S;<br />
Geschützte<br />
Anweisungen<br />
Aufrufbedingung<br />
– Geschützte Anweisungen schließen sich<br />
gegenseitig aus<br />
– Alle Variablen von geschützten Einheiten<br />
müssen als „private“ deklariert werden<br />
– Eine Prozedur kann gemeinsames<br />
Betriebsmittel beliebig verändern<br />
Funktionen besitzen nur Lesezugriff<br />
– Aufrufpunkte als geschützte Anweisungen<br />
© 2013, IAS Universität Stuttgart 463
7.4 Die Echtzeitprogrammiersprache Ada 95<br />
AT1<br />
Kommunikation zwischen Tasks (1)<br />
– Synchrone Kommunikation<br />
• Erweiterung der Rendezvous-Synchronisierung um Datenaustausch<br />
Gegenseitiges Warten<br />
Datenaustausch im Zuge des Rendezvous<br />
Daten nur innerhalb des Rendezvous gültig<br />
Beispiel einer synchronen Kommunikation<br />
task body T1 is<br />
begin<br />
T2.entryName(I:Integer);<br />
end T1;<br />
Entry-Aufruf mit<br />
Datentransfer<br />
Prinzip des “message passing”<br />
task body T2 is<br />
begin<br />
accept entryName(I:Integer)do<br />
...<br />
end entryName;<br />
end T2;<br />
T1 während des<br />
Rendezvous blockiert<br />
© 2013, IAS Universität Stuttgart 464
7.4 Die Echtzeitprogrammiersprache Ada 95<br />
AT1<br />
Kommunikation zwischen Tasks (2)<br />
– Asynchrone Kommunikation<br />
• Datenaustausch mittels gemeinsamer Variablen<br />
Geschützte Operationen <strong>für</strong> Zugriff<br />
Kein Warten/Blockieren bei Kommunikation<br />
Beispiel einer asynchronen Kommunikation<br />
protected body M is<br />
procedure write(I:Integer);<br />
function read return Integer;<br />
private<br />
Val:Integer;<br />
end M;<br />
task body T1 is<br />
begin<br />
M.write(I:Integer);<br />
end T1;<br />
task body T2 is<br />
temp: Integer;<br />
begin<br />
temp := M.read;<br />
...<br />
end T2;<br />
“shared variable” und “protected operations”<br />
© 2013, IAS Universität Stuttgart 465
7.4 Die Echtzeitprogrammiersprache Ada 95<br />
AT1<br />
Zeitoperationen<br />
– Verzögerung des Ablaufs<br />
• Bis zu einem bestimmten Zeitpunkt<br />
• Für eine feste Zeitdauer<br />
– Ada-Befehle: “delay” bzw. “delay until”<br />
– Zeiteinheiten und Operationen im Standardpaket definiert<br />
• Zeiteinheiten <strong>für</strong> Standard-Anwendungen: Sekunden (seconds)<br />
• Zeiteinheiten <strong>für</strong> Echtzeit-Anwendungen: ms, μs, ns<br />
• Operationen<br />
Addition und Subtraktion von Zeitvariablen<br />
Auslesen der Systemzeit<br />
– Während einer Verzögerung führt der Prozessor eine andere Task aus<br />
– Nach Ablauf einer Verzögerung evtl. weitere Verzögerungen bis zur<br />
erneuten Prozessorzuteilung<br />
Ausführungsunterbrechung durch höherpriore Task<br />
© 2013, IAS Universität Stuttgart 466
7.4 Die Echtzeitprogrammiersprache Ada 95<br />
AT1<br />
Beispiele <strong>für</strong> Zeitoperationen<br />
task T1 is<br />
ms: Duration := 0.001;<br />
begin<br />
loop<br />
read_sensor;<br />
delay 10*ms;<br />
end loop;<br />
end T1;<br />
Task T1<br />
laufend<br />
blockiert<br />
Ausführungsdauer<br />
nicht<br />
konstant<br />
Ausführung von<br />
read_sensor<br />
5 15<br />
22 32<br />
task T2 is<br />
ms: Duration := 0.001;<br />
next_call: Time;<br />
begin<br />
aktuelle Zeit<br />
loop<br />
next_call := Clock + 10*ms;<br />
read_sensor;<br />
delay until next_call;<br />
end loop;<br />
end T2;<br />
– Aufruf von “read_sensor” durch Task T1 10ms nach der letzten Ausführung<br />
Zeit zwischen Aufrufen hängt von der Ausführungsdauer ab<br />
– Aufruf von “read_sensor” alle 10 ms durch Task T2<br />
Unterprogramm wird zu festen Zeitpunkten aufgerufen<br />
© 2013, IAS Universität Stuttgart 467<br />
t
7.4 Die Echtzeitprogrammiersprache Ada 95<br />
AT1<br />
Modularisierte Ausnahmebehandlung<br />
– Ausnahmefehler auf Grund irregulärer Operationen möglich<br />
Ausnahmebehandlung (exception handling)<br />
“Exception Handling” Konzept in Ada95<br />
– Ausführung eines “Exception Handling Block” bei Auftreten einer Exception<br />
– Exception Handling Blocks direkt in der Programmeinheit implementiert<br />
– Mehrere Exceptions können in einem Handling Block behandelt werden<br />
– Nicht behandelte Exceptions werden an übergeordnete Einheit übergeben<br />
– Exceptions durch Laufzeitumgebung oder Programmcode ausgelöst<br />
Laufzeitumgebung: vordefinierte Exceptions<br />
Programmcode: Anwender-definierte Exceptions<br />
© 2013, IAS Universität Stuttgart 468
7.4 Die Echtzeitprogrammiersprache Ada 95<br />
AT1<br />
Beispiel <strong>für</strong> “Exception Handling”<br />
procedure main is<br />
begin<br />
A:= readSensor(1);<br />
B:= readSensor(2);<br />
rate:= A/B;<br />
-- Could be a division by 0<br />
exception<br />
when Constraint_Exception =><br />
-- Handles divisions by 0<br />
...<br />
when others =><br />
-- Handles all other exceptions<br />
...<br />
end main;<br />
function readSensor (X:Integer)<br />
return Float is<br />
begin<br />
temp := read(X);<br />
if (temp < 0.0) then<br />
raise Sensor_Exception;<br />
-- Custom defined exception<br />
else<br />
return temp;<br />
end if;<br />
exception<br />
when Sensor_Exception =><br />
-- Handles sensor exceptions<br />
...<br />
end readSensor;<br />
– Spezifische Blöcke mit implementierten “Exception Handler”<br />
“Sensor Exceptions” werden innerhalb der Funktion behandelt, andere<br />
werden übergeben<br />
Ausführung von speziellem Code bei Auftreten einer „Constraint_Exception“<br />
Vorhersagbares Systemverhalten auch bei Ausnahmefällen<br />
© 2013, IAS Universität Stuttgart 469
7.4 Die Echtzeitprogrammiersprache Ada 95<br />
AT1<br />
Echtzeiterweiterungen in Ada95 (1)<br />
– Tasks mit dynamischen Prioritäten<br />
Basispriorität wird auf Basis der Spezifikation festgelegt<br />
Tatsächliche Priorität kann davon abweichen<br />
Bsp. bestimmt durch “Priority inheritance protocol”<br />
– Hinweis: In Ada bedeutet eine niedrigere Zahl eine niedrigere Priorität!<br />
Spezifikation<br />
Implementierung<br />
task T1 is<br />
pragma Priority(10);<br />
end T1;<br />
task T2 is<br />
pragma Priority(1);<br />
entry sync;<br />
end T1;<br />
T1 ruft T2 auf<br />
Basispriorität<br />
Dynamischer<br />
Prioritätswechsel<br />
task body T1 is<br />
begin<br />
T2.sync;<br />
end T1;<br />
task body T2 is<br />
begin<br />
accept sync do<br />
...<br />
end sync;<br />
T2 wird mit der<br />
Priorität von<br />
T1 ausgeführt<br />
Set_Priority(20);<br />
end T2;<br />
© 2013, IAS Universität Stuttgart 470
7.4 Die Echtzeitprogrammiersprache Ada 95<br />
AT1<br />
Echtzeiterweiterungen in Ada95 (2)<br />
– Scheduling-Verfahren<br />
Scheduling-Verfahren kann frei festgelegt werden<br />
<br />
<br />
Pragma-Anweisung “Task_Dispatching_Policy”<br />
Standard-Verfahren: Feste Prioritäten, FIFO bei gleicher Priorität<br />
Weitere Verfahren können implementiert und dann verwendet werden<br />
– Zugriff auf geschützte Einheiten per “Priority Ceiling Protocol”<br />
Prioritätsschranke von geschützten Einheiten kann in deren<br />
Spezifikation definiert werden<br />
<br />
Default-Wert: Höchste Systempriorität<br />
Prioritätsvererbung garantiert Deadlock-Freiheit!<br />
© 2013, IAS Universität Stuttgart 471
7.4 Die Echtzeitprogrammiersprache Ada 95<br />
AT1<br />
Spracherweiterungen in Ada 95<br />
Kernsprache +<br />
Basisbibliothek<br />
Dynamische Zeichenketten<br />
Schnittstellen zu anderen PS<br />
I/O<br />
Systemprogrammierung<br />
Echtzeitverarbeitung<br />
Verteilte<br />
Systeme<br />
Informationssystem<br />
Numerik<br />
Sicherheit<br />
Inline-<br />
Maschinensprache<br />
Interrupts<br />
....<br />
Flexibles<br />
Scheduling,<br />
flexible<br />
Prioritäten,<br />
flexible<br />
Warteschlangen<br />
....<br />
Partitionen<br />
Inter-<br />
Partitions-<br />
Kommunikation,<br />
statische und<br />
dynamische<br />
RPCs<br />
....<br />
Dezimale<br />
Darstellung<br />
"PIC"-<br />
Darstellung<br />
....<br />
Kontrolle über<br />
<strong>die</strong> interne<br />
numerische<br />
Darstellung,<br />
komplexe<br />
Zahlen<br />
....<br />
Coderevision<br />
und -inspektion<br />
Einschränkung<br />
der verfügbaren<br />
Sprachkonstrukte<br />
....<br />
© 2013, IAS Universität Stuttgart 472
7.4 Die Echtzeitprogrammiersprache Ada 95<br />
AT1<br />
Frage zu Kapitel 7.4<br />
Ada 95 wird auf Grund einiger seiner Spracheigenschaften als Echtzeit-<br />
Progammiersprache angesehen. Warum ist Ada besonders Echtzeittauglich?<br />
Da.....<br />
Antwort<br />
f Ada keine Objekt-Orientierung besitzt.<br />
<br />
Ada Rechenprozesse unterstützt.<br />
f Ada schneller als andere <strong>Programmiersprachen</strong> ist.<br />
f Ada interpretiert wird.<br />
f Ada eine hybride Programmiersprache ist.<br />
<br />
Ada ein Rendezvous-Konzept bietet.<br />
<br />
Ada über Methoden <strong>für</strong> Laufzeitüberprüfungen und eine<br />
Ausnahmebehandlung verfügt.<br />
© 2013, IAS Universität Stuttgart 473
7.4 Die Echtzeitprogrammiersprache Ada 95<br />
AT1<br />
Frage zu Kapitel 7.4<br />
Folgender Ablauf soll in Ada in Form zweier Tasks implementiert werden:<br />
Ein Passant wartet auf ein Taxi und fährt mit <strong>die</strong>sem zur Kirche. Danach<br />
bezahlt er <strong>die</strong> Fahrt und geht seines Weges.<br />
Nachfolgend finden Sie 3 Codeauszüge <strong>für</strong> <strong>die</strong>ses Problem. Welcher ist<br />
der Richtige und was machen <strong>die</strong> anderen?<br />
© 2013, IAS Universität Stuttgart 474
7.4 Die Echtzeitprogrammiersprache Ada 95<br />
AT1<br />
Frage zu Kapitel 7.4 - Codeauszüge<br />
Variante 1<br />
task passant;<br />
task body passant is<br />
begin<br />
-- do something<br />
taxi.drive;<br />
-- do something<br />
end passant;<br />
task taxi is<br />
entry drive;<br />
end taxi;<br />
task body taxi is<br />
begin<br />
-- do something<br />
accept drive;<br />
drive.to(church);<br />
-- drive away<br />
end taxi;<br />
f - Realisiert nur zeitliche<br />
Synchronisierung ohne<br />
gemeinsame Codeausführung<br />
Variante 2<br />
task passant is<br />
entry taxi;<br />
end passant;<br />
task body passant is<br />
begin<br />
-- do something<br />
accept taxi;<br />
-- do something<br />
end passant;<br />
task taxi is<br />
entry passant;<br />
end taxi;<br />
task body taxi is<br />
begin<br />
-- do something<br />
accept passant;<br />
drive.to(church);<br />
-- drive away<br />
end taxi;<br />
f - Realisiert keine gegenseitige<br />
Synchronisierung<br />
Variante 3<br />
task passant;<br />
task body passant is<br />
begin<br />
-- do something<br />
taxi.drive;<br />
-- do something<br />
end passant;<br />
task taxi is<br />
entry drive;<br />
end taxi;<br />
task body taxi is<br />
begin<br />
-- do something<br />
accept drive do<br />
drive.to(church);<br />
end drive;<br />
-- drive away<br />
end taxi;<br />
- Realisiert Synchronisierung<br />
mit gemeinsamer<br />
Codeausführung<br />
© 2013, IAS Universität Stuttgart 475
Kapitel 7: Vorbereitungsfrage<br />
AT1<br />
Vorbereitungsfrage zu Kapitel 7<br />
Frage 1: Ada (SS 2007)<br />
In einem Ada-Programm sollen mehrere Tasks auf ein gemeinsames Array<br />
bestehend aus 10 Integer-Werten zugreifen. Die Zeitpunkte und Art des<br />
Zugriffs (schreibend oder lesend) können nicht bei der Entwicklung<br />
vorhergesehen werden. Daher soll der Zugriff über einen geschützten Bereich<br />
Shared_Array erfolgen. Es muss je eine Zugriffsfunktion/-prozedur <strong>für</strong> das<br />
Lesen und das Schreiben vorhanden sein.<br />
Welches Konzept liegt den geschützten Bereichen in Ada zu Grunde?<br />
Geben Sie <strong>die</strong> Spezifikation des geschützten Bereichs Shared_Array an.<br />
© 2013, IAS Universität Stuttgart 476
AT1<br />
Kreuzworträtsel<br />
1 2<br />
F E L D B U S<br />
3 4 5 6<br />
M K O N T A K T P L A N I C O D E S C H E I B E<br />
7<br />
O O F P H<br />
8 9 10 11 12<br />
D E A D L I N E W K O M P A R A T O R A I M I N I S L O T<br />
U N E R E E<br />
13<br />
L T R A B M S<br />
14 15<br />
F E L I V E L O C K L E A E<br />
16 17 18<br />
L R I A S S E M B L E R P P Q<br />
19 20 21 22<br />
A I R E D U N D A N Z E I E E R A H U<br />
23<br />
R P E U K C K L G O K O E<br />
24<br />
B R S P F H R I Z T R N<br />
25 26<br />
D I V E R S I T A E T T P R O Z E S S G E K O P P E L T<br />
27 28<br />
T M B H R I Z C T S R T<br />
29<br />
R P I L E P E O E S E S I<br />
30 31<br />
I N T E L L I G E N T N A C H R I C H T E N F A H R P L A N T E<br />
E I D R D T T E U L<br />
32 33 34<br />
R V M I T T E L W E R T U M S E T Z E R S C H N I T T S T E L L E<br />
U E O Z A Y O T C<br />
N<br />
35 36 37<br />
T D L V S E N S O R G L E I C H Z E I T I G K E I T<br />
38<br />
G I I D E A D L O C K T L B P<br />
39 40<br />
M A R U S T U E T Z S T E L L E N V E R F A H R E N<br />
41<br />
D E Z E N T R A L S E M C R N O<br />
42 43 44<br />
R F N M T H R E C H E N P R O Z E S S<br />
45 46<br />
J I Z A M A S T E R E I<br />
V L K D S M<br />
47 48 49 50<br />
A U T O M A T I S I E R U N G S G R A D U T P R O F I B U S U<br />
D E O L O B E L<br />
51 52<br />
A S Y N C H R O N R E C H T Z E I T I G K E I T S T<br />
53<br />
N E C S M A<br />
54 55<br />
E I N P L A N U N G H A N D S H A K E N<br />
© 2013, IAS Universität Stuttgart 477
AT1<br />
Kreuzworträtsel<br />
Senkrecht<br />
1 Stapelverarbeitung in der Reihenfolge des Eintreffens (4)<br />
2 Prinzip der Datenübertragung beim Interbus-S (15)<br />
3 Paket in Ada (5)<br />
5 Realisierung des Industrial Ethernets mit synchronem Sendebereich und Master-<br />
Slave-Kommunikation (9)<br />
7 Gleichzeitige Datenübertragung auf mehreren Leitungen (8)<br />
9 Unterbrechungsanforderung (9)<br />
12 Synchronierungs-Konstrukt (9)<br />
13 Bez. <strong>für</strong> Aktionen, <strong>die</strong> in bestimmter Reihenfolge angeordnet sind (12)<br />
14 Darstellung, ähnlich Blockbild (10)<br />
17 Ein-Chip-Computer (15)<br />
18 Automatisierungstechnisches Analogon zur "Taktischen Ebene" (16)<br />
19 Verfahren zur Kollisionsvermeidung beim Buszugriff (12)<br />
21 Bezeichnung <strong>für</strong> Systeme bei denen <strong>die</strong> Verarbeitung der Programme zeitlich mit den<br />
in externen Systemen ablaufenden Vorgängen Schritt hält (14)<br />
22 „Muskeln“ des Automatisierungssystem (7)<br />
23 Unterbrechende Prozessorzuteilung (8)<br />
24 Erhalt der Funktionsfähigkeit trotz Auftreten eines Fehlers (14)<br />
27 Ada-Konzept zur Synchronisierung (10)<br />
28 Abkürzung <strong>für</strong> Rechner, <strong>die</strong> speziell auf ein industrielles Einsatzfeld ausgelegt sind (3)<br />
29 Alternative Bezeichnung <strong>für</strong> objektbezogene Prozesse (14)<br />
32 Nichtlinearer Filteralgorithmus (12)<br />
33 Menge aller von einem Scheduler verwalteter Taks (7)<br />
35 Taktgeber (5)<br />
40 Vergabe von Prozessorrescourcen an ablaufbereite Prozesse (10)<br />
42 Hilfsmittel zur Vereinfachung der Maschinensprache (5)<br />
44 Bezeichnung <strong>für</strong> zwei Aktoren eines Rechenprozesses, <strong>die</strong> gleichzeitig ausgeführt<br />
werden können (8)<br />
45 Grundlage <strong>für</strong> <strong>die</strong> Plattformunabhängigkeit von Java (3)<br />
47 Echtzeit-Programmiersprache (3)<br />
48 Spezifische Nachricht <strong>für</strong> Senderechtserteilung (5)<br />
50 Abkürzung <strong>für</strong> eine Blockschaltbild-orientierte SPS-Programmiersprache (3)<br />
Waagerecht<br />
1 Kommunikationssystem in unmittelbarer Anlagennähe (7)<br />
4 Schaltplan-ähnliche Darstellung <strong>für</strong> SPS-Programme (11)<br />
6 Realisierung zur Umwandlung des nichtelektrischen Signals einer Drehbewegung in<br />
ein digitales Signal (11)<br />
8 Spätester Abgabezeitpunkt einer Task (8)<br />
10 Schaltung zum Spannungsvergleich (10)<br />
11 Zuordnung der Sendeberechtigung zum Busteilnehmer in dynamischen Segment bei<br />
FlexRay (8)<br />
15 Permanente Blockierung (8)<br />
16 Maschinennahe Programmiersprache (9)<br />
20 Mehrfaches Vorhandensein von Hardware <strong>für</strong> <strong>die</strong> gleiche Aufgabe (9)<br />
25 Verschiedenartigkeit von Software bei gleicher Funktion (11)<br />
26 Bezeichnung <strong>für</strong> <strong>die</strong> direkte Verbindung von Rechnersystemen mit einer Anlage (16)<br />
30 Bezeichnung <strong>für</strong> Sensoren/Aktoren mit integrierter Busankopplung (11)<br />
31 Spezifikation des Nachrichtenaustauschs in zeitgesteuerten Bussystemen (19)<br />
32 Langsamer Analog-Digital-Umsetzer (18)<br />
34 Verbindung zwischen Systemen (13)<br />
36 Messwertaufnahmeeinrichtung (6)<br />
37 Fähigkeit, auf mehrere Dinge gleichzeitig zu reagieren (16)<br />
38 Verklemmung (8)<br />
39 Verfahren zur Signalanpassung bei Sensoren mit nicht-linearer Kennlinie (22)<br />
41 Örtlich verteilt (9)<br />
43 Von Echtzeit-OS gesteuerter Vorgang der Abarbeitung eines sequenziellen<br />
Programms (13)<br />
46 Kommunikationssteuernde Einheit bei deterministischen Buszugriffsverfahren (6)<br />
47 Bezeichnung <strong>für</strong> den Umfang einer Automatisierung (20)<br />
49 Bussystem mit hybrider Kommunikation (8)<br />
51 Organisation des zeitlichen Ablaufs während der Programmausführung (9)<br />
52 Fähigkeit zur richtigen Zeit zu reagieren (15)<br />
53 Verfahren mit zufälligen Buszugriff (4)<br />
54 Übergang vom Prozesszustand "ruhend" in den Zustand "bereit" (10)<br />
55 Engl. Bezeichnung <strong>für</strong> eine gemeinsame Ausführung eines Programmstücks auf<br />
Empfängerseite (9)<br />
© 2013, IAS Universität Stuttgart 478
AT1<br />
Index (1)<br />
ABK<br />
accept<br />
Adress-Arbitrierung<br />
Aktor<br />
Aktor-Sensor-Ebene<br />
alternierende Puls-Modulation<br />
Analog-Digital-Umsetzung<br />
Anlagenautomatisierung<br />
Anpassung<br />
Anschaffungskosten<br />
Anweisungsliste<br />
Anzeige- und Be<strong>die</strong>nkomponente<br />
APM<br />
Arbitrierung<br />
AS<br />
AS i<br />
AS-Interface<br />
Assemblerprogrammierung<br />
Assemblersprache<br />
Asynchrone Kommunikation<br />
asynchrone Programmierung<br />
98<br />
458<br />
223<br />
*166*<br />
212<br />
215<br />
187<br />
*35*, 41, 420<br />
192, 193<br />
114<br />
*426*<br />
98, *100*<br />
215<br />
227<br />
425<br />
212<br />
210<br />
*415*<br />
413<br />
317, 465<br />
271, *282*, 287, 295, 365<br />
© 2013, IAS Universität Stuttgart 479
AT1<br />
Index (2)<br />
Ausführbarkeitstest<br />
automatisiertes Gesamtsystem<br />
Automatisierungs-Computer<br />
Automatisierungs-Hierarchie<br />
Automatisierungs-Softwaresystem<br />
Automatisierungsfunktionen<br />
Automatisierungsgrad<br />
Automatisierungsstrukturen<br />
AWL<br />
Betriebsmittel<br />
Betriebssystem<br />
Bit stuffing<br />
Bus-Struktur<br />
Bus-Zugriffsverfahren<br />
Cache-Speicher<br />
CAN<br />
Counter<br />
CPU<br />
CSMA-Verfahren<br />
*336*<br />
*19*, 21<br />
152<br />
124, 128<br />
50<br />
56<br />
*28*, 41<br />
107, *112*, *117*<br />
425<br />
*345*<br />
*343*<br />
228<br />
132<br />
216<br />
355<br />
210, *226*<br />
90<br />
90<br />
221<br />
© 2013, IAS Universität Stuttgart 480
AT1<br />
Index (3)<br />
CSMA/CA-Verfahren<br />
CSMA/CD-Verfahren<br />
Datenkapselung<br />
Datenkommunikation<br />
deadlock<br />
Deadlock<br />
delay<br />
Destruktor<br />
Determiniertheit<br />
dezentrale Anordnung<br />
Dialogsystem<br />
Digital-Analog-Umsetzer<br />
dispatching table<br />
Diversität<br />
Doppelrechner-Struktur<br />
dynamisches Scheduling<br />
Earliest-Deadline-First-Verfahren<br />
Echtzeit-Betriebssysteme<br />
Echtzeit-Kernel<br />
223, 227<br />
222<br />
434<br />
316<br />
*304*<br />
358, 471<br />
466<br />
434<br />
*265*<br />
109<br />
267<br />
*200*<br />
322<br />
145<br />
140<br />
322<br />
332, 337<br />
347<br />
346<br />
© 2013, IAS Universität Stuttgart 481
AT1<br />
Index (4)<br />
Echtzeit-Programmierung<br />
Echtzeit-System<br />
Echtzeit-UNIX<br />
Echtzeitbetrieb<br />
Echtzeitsprachmittel<br />
EIB<br />
Eingebettete Systeme<br />
Einplanung<br />
Engineering-Tool<br />
entry<br />
EPROM<br />
ereignisgesteuerte Architektur<br />
EtherCAT<br />
Exception Handling<br />
Fabrik-Bus<br />
FBS<br />
Fehlertoleranz<br />
Feldbereich<br />
Feldbuskonzepte<br />
Feldbussysteme<br />
*252*<br />
266<br />
346<br />
*22*<br />
420<br />
210<br />
*257*<br />
*294*<br />
98<br />
458<br />
90<br />
287<br />
247<br />
468<br />
48<br />
*429*<br />
127<br />
*209*<br />
*211*<br />
207, *209*<br />
© 2013, IAS Universität Stuttgart 482
AT1<br />
Index (5)<br />
Feldgeräte<br />
FIFO - Scheduling<br />
Filterung<br />
FIP<br />
FlexRay<br />
Funktionsbausteinsprache<br />
Funktionsplan<br />
FUP<br />
garbage collection<br />
Geschützte Betriebsmittel<br />
Gleichzeitigkeit<br />
Glättung<br />
Hardware-Redundanz<br />
Harte Echtzeitsysteme<br />
Honeywell<br />
hybride Programmiersprache<br />
IEC 1131<br />
Industrial Ethernet<br />
*209*<br />
*325*<br />
194, 195<br />
210<br />
*234*<br />
*429*<br />
*429*<br />
425, *429*<br />
441<br />
457, *462*<br />
23, *263*<br />
194<br />
139<br />
*258*<br />
104<br />
432<br />
80, 424<br />
244<br />
© 2013, IAS Universität Stuttgart 483
AT1<br />
Index (6)<br />
Industrie-PC<br />
Ingress Protection<br />
Interbus-S<br />
INTERBUS-S<br />
Interrupt<br />
Interrupt Service Routine<br />
Interrupt-Verwaltung<br />
IPC<br />
isochron<br />
kleinster Spielraum<br />
Kommunikation<br />
Konstruktor<br />
Kontaktplan<br />
kooperatives Scheduling<br />
KOP<br />
Ladder Diagramm<br />
laxity<br />
LD<br />
least laxity<br />
91<br />
93<br />
*238*<br />
210<br />
90<br />
353<br />
350, *353*<br />
91, 410<br />
246<br />
*334*<br />
*315*<br />
434<br />
*428*<br />
323<br />
425, *428*<br />
428<br />
298<br />
428<br />
*334*<br />
© 2013, IAS Universität Stuttgart 484
AT1<br />
Index (7)<br />
Leiternetzwerk<br />
Leitsystemhersteller<br />
livelock<br />
logische Synchronisierung<br />
Makro<br />
Makroassemblersprache<br />
Manchesterco<strong>die</strong>rung<br />
Maschinensprache<br />
Massenprodukte<br />
Master/Slave-Verfahren<br />
Mikrocomputer<br />
Mikrocontroller<br />
Mikroprogrammsprachen<br />
Mikroprozessor<br />
Mikrosegmentierung<br />
Minislot<br />
Mittelwertumsetzer<br />
Modularisierung<br />
Momentanwertumsetzer<br />
Monitor-Konzept<br />
202<br />
104<br />
*304*<br />
307<br />
*414*<br />
414<br />
215<br />
413<br />
88<br />
217<br />
89<br />
*88*, 89, 410<br />
413<br />
89<br />
245<br />
*235*<br />
189<br />
449<br />
189<br />
*462*<br />
© 2013, IAS Universität Stuttgart 485
AT1<br />
Index (8)<br />
Monitore<br />
Nachrichtenfahrplan<br />
nebenläufig<br />
Netz-Struktur<br />
nicht-preemptives Scheduling<br />
Notation<br />
Örtliche Struktur<br />
packages<br />
parallel<br />
Parallele Busse<br />
Parallelprogrammierung<br />
PNK<br />
Polymorphismus<br />
Powerlink<br />
preemptives Scheduling<br />
Priority Ceiling Protocol<br />
Prioritätsvergabe<br />
Produktautomatisierung<br />
442<br />
233<br />
301<br />
132<br />
323<br />
411<br />
107<br />
450<br />
301<br />
133<br />
271<br />
98<br />
434<br />
246<br />
323<br />
471<br />
296<br />
*35*, 37, 420<br />
© 2013, IAS Universität Stuttgart 486
AT1<br />
Index (9)<br />
PROFIBUS<br />
Profinet IRT<br />
Programm-Generatoren<br />
<strong>Programmiersprachen</strong>paradigma<br />
protected variables<br />
prozedurale Sprachen<br />
Prozess-Signale<br />
Prozess-Signalerfassung<br />
Prozessführungsebenen<br />
prozessgekoppelt<br />
Prozessgrößen<br />
Prozessgrößenebene<br />
Prozessinformatik<br />
Prozessleitebene<br />
Prozessleitsystem<br />
Prozessnahe Komponente<br />
quasi parallel<br />
RAM<br />
Rate-Monotonic<br />
210, *236*<br />
246<br />
*419*<br />
411<br />
450<br />
418<br />
*153*<br />
154<br />
121<br />
28<br />
*59*<br />
55<br />
21<br />
55<br />
21, 97, 410<br />
98, *101*<br />
264<br />
90<br />
*330*, 338<br />
© 2013, IAS Universität Stuttgart 487
AT1<br />
Index (10)<br />
ratenmonotones Scheduling<br />
Reaktive Systeme<br />
Rechenprozess<br />
Rechtzeitigkeit<br />
Redundanz<br />
Rendez-Vous-Konzept<br />
Reserveauslegung<br />
Ring-Struktur<br />
Round-Robin-Verfahren<br />
Rumpf<br />
schedulability test<br />
Scheduling<br />
Scheduling-Verfahren<br />
Schieberegister<br />
select<br />
Semaphore<br />
Semaphorkonzept<br />
Semaphoroperation<br />
Semaphorvariable<br />
Semaphorvariablen<br />
*330*<br />
*257*<br />
*291*, 450<br />
23, *259*, 267, 286<br />
136<br />
308, 457<br />
114<br />
132<br />
326<br />
452<br />
*336*<br />
*321*<br />
*324*<br />
240<br />
461<br />
308<br />
*309*<br />
309<br />
309<br />
442<br />
© 2013, IAS Universität Stuttgart 488
AT1<br />
Index (11)<br />
Sensor<br />
Sensorelement<br />
Sensorsystem<br />
sequenziell<br />
Serielle Busse<br />
shared memory<br />
Signaldurchschaltung<br />
Simatic<br />
simultan<br />
Software-Redundanz<br />
Speicherhierarchie<br />
speicherprogrammierbare Steuerung<br />
Speicherverwaltung<br />
Spezifikation<br />
Spielraum<br />
Sprachhöhe<br />
SPS<br />
SPS-Sprachen<br />
ST<br />
statisches Scheduling<br />
Stellglied<br />
46, *157*<br />
*158*<br />
161<br />
301<br />
133<br />
316<br />
172, 173, 183<br />
104<br />
301<br />
144<br />
355<br />
410<br />
355<br />
452<br />
298<br />
411<br />
79<br />
80<br />
427<br />
322<br />
46<br />
© 2013, IAS Universität Stuttgart 489
AT1<br />
Index (12)<br />
Stern-Struktur<br />
strukturierter Text<br />
Synchrone Kommunikation<br />
synchrone Programmierung<br />
Synchronisierung<br />
Synchronisierungsverfahren<br />
Synchronität<br />
Task<br />
Task-Typ<br />
TDMA-Verfahren<br />
technischer Prozess<br />
Technisches System<br />
Theorem von Liu und Layland<br />
Thread<br />
Token-Passing-Verfahren<br />
Überladen<br />
Unternehmensführungsebene<br />
Verarbeitungsleistung<br />
132<br />
*427*<br />
317, 464<br />
271, *273*, 287<br />
304, *307*, *315*<br />
308<br />
302<br />
*291*<br />
456<br />
219<br />
*14*, *16*<br />
17<br />
337<br />
292<br />
218<br />
434<br />
55<br />
122<br />
© 2013, IAS Universität Stuttgart 490
AT1<br />
Index (13)<br />
Verfügbarkeit<br />
Verklemmung<br />
Verlässlichkeit<br />
verteilte Automatisierungssysteme<br />
VERWALTUNGSBLOCK<br />
Vorgänge<br />
Vorhersehbarkeit<br />
Weiche Echtzeitsysteme<br />
Wirkungsmäßige Struktur<br />
Yokogawa<br />
zeitgesteuerte Architektur<br />
Zeitparameter<br />
Zeitscheibenverfahren<br />
Zeitsteuerung<br />
ZEITZÄHLER<br />
zentrale Anordnung<br />
Zustandsdiagramm<br />
Zustandsführung<br />
122, 129<br />
*304*<br />
23<br />
127<br />
381<br />
61<br />
23<br />
*258*<br />
107<br />
104<br />
287<br />
296<br />
*326*<br />
*230*<br />
378<br />
108<br />
294<br />
370<br />
© 2013, IAS Universität Stuttgart 491
AT1<br />
Index (14)<br />
Zuverlässigkeit<br />
ZYKLUS<br />
Zykluszeit-Bildung<br />
115, 129<br />
379<br />
367<br />
© 2013, IAS Universität Stuttgart 492