17.01.2014 Aufrufe

7 Programmiersprachen für die Automatisierungstechnik

7 Programmiersprachen für die Automatisierungstechnik

7 Programmiersprachen für die Automatisierungstechnik

MEHR ANZEIGEN
WENIGER ANZEIGEN

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!