vorläufige Fassung - Beuth Hochschule für Technik Berlin

Transcrição

vorläufige Fassung - Beuth Hochschule für Technik Berlin
Beuth Hochschule für Technik Berlin
Fachbereich VI (Informatik und Medien)
Manfred Ottens
Richard Spyra
Rapid Control Prototyping
(Schneller Reglerprototypen-Entwurf)
Skript zur Lehrveranstaltung
(Vorläufige Version vom 18.04.2010)
Berlin, Sommersemster 2010
Vorwort
"Rapid Control Prototyping" heißt auf Deutsch "Schneller Reglerprototypen-Entwurf".
Die Phrase verbindet zwei Begriffe, den am Anfang einer Entwicklungsphase
liegenden "Entwurf" und den "Prototypen", der in der klassischen Entwurfphilosophie
eher am Ende einer Entwicklungsreihenfolge
angesiedelt ist. Dass der Entwurf
etwas mit Regelungstechnik zu tun haben muss, verrät das Wort Control.
Neu zu entwickelnde Regelalgorithmen werden im Allgemeinen, wenn der
Entwurfsprozess fach- und sachgerecht durchgeführt wird, auf der Basis eines
mathematischen Modells der Regelstrecke berechnet und simulativ auf einem PC an
einem ebenfalls simulierten Modell der Regelstrecke getestet und nachoptimiert.
Hierzu sind vertiefte Kenntnisse in Systemtheorie, Regelungstechnik und eines
geeigneten geeigneten Simulationswerkzeugs, z.B. Simulink der Firma Mathworks,
notwendig.
Zur Implementierung des entwickelten Regelalgorithmus sind dagegen völlig andere
Kenntnisse und Fähigkeiten notwendig. Der Regelalgorithmus läuft i. A. auf einem
Mikrocontroller oder, wenn es sich um eine größere zu regelnde Anlage handelt, auf
einem
leistungsfähigerem
PC
mit
höherem
Durchsatz.
Zur
weiteren
Durchsatzsteigerung muss der Regelalgorithmus in C oder teilweise sogar in
Assembler realisiert werden. Weil der Regelalgorithmus zur Beeinflussung eines
technischen Prozesses herangezogen wird, muss der Mikrocontroller die Fähigkeit
des Echtzeitbetriebs haben, d. h. er muß schritthaltend mit der zu beeinflussenden
Regelstrecke arbeiten. Dies kann insbesondere dadurch erschwert werden, dass die
notwendigen Berechnung des Regelalgorithmus in Gleitkommarechnung wie
ursprünglich in der Simulation durchgeführt werden. Zur weiteren Durchsatzerhöhung
würde es deshalb sinnvoll sein, den Regelalgorithmus vor seiner Implementierung in
die Zielhardware von Gleitkomma auf Festkommarechnung, die erheblich weniger
zeitintensiv ist, umzurechnen. Leider birgt aber Festkommaarithmetik die Gefahr des
Zahlenbereichsüberlauf und ungenauer Berechnung des Algorithmus.
Alle diese Einflussgrößen (Programmierung, Echtzeitbetrieb und Festkommarechnung),
die
vom
ursprünglichen
Entwurf
des
Algorithmus
auf
dem
Entwicklungssystem (PC) abweichen, bergen die Möglichkeit, unbekannte Fehler
vom Entwurf in die Implementierung einzuschleppen.
I
Vom CAE-Programm Matlab/Simulink wird eine durchgängige Entwicklungs- und
Implementierungsplattform für solche Reglerentwicklungen zur Verfügung gestellt,
die auf der Simulink Erweiterung "Realtime Workshop" aufbaut. Sie unterstützt den
Identifizierungsvorgang der Regelstrecke, die Simulation des dadurch gewonnenen
mathematischen Modells der Strecke, den Reglerentwurfsvorgang , die Simulation
des entworfenen Kreises und auch die Realisierung des Reglerprototypen in seiner
Zielumgebung. Der Implementierungsprozess des Regelalgorithmus, inklusive der
Realisierung seiner Echtzeitfähigkeit geschieht dabei quasi auf Knopfdruck.
Das vor Ihnen liegende Skript beschreibt ausführlich diese Entwurfs- und
Implementierungsstrategie, das Rapid Control Prototyping von Regelalgorithmen auf
der Basis des Realtime Workshops von Matlab/Simulink.
Wegen der Vielfalt der Wissensgebiete, aus denen man sich Kenntnisse erwerben
oder bereits haben
muss, kann dieses Skript nicht vollständig sein. Es setzt
zunächst auf den Gebieten Systemtheorie, Regelungstechnik, Systemidentifikation
und Matlab/Simulink Wissen voraus, wie es in den Skripten /2/,/3/, und /4/ sowie in
den Kapiteln 1, 2, 5.1, 5.2.1, 5.3.2 und 5.3.4 von /5/ beschrieben wird. Grundlegende
Kenntnisse des Aufbaus, der Funktion und der Programmierung von Mikrocontrollern
und über Echtzeitbetriebssysteme sollten ebenfalls vorhanden sein.
Aufbauend auf diesem Wissen werden die Grundzüge des Rapid Control Prototyping
so
weit
erläutert,
dass
die
entsprechenden
Matlab/Simulink-Werkzeuge
in
Laborübungen zu diesem Thema sinnvoll genutzt werden können. Für einen
vertiefenden Wissenserwerb wird häufig auf die Literatur verwiesen.
II
Inhalt
1
Einführung
1.1
Klassischer Softwareentwurf für eingebettete Systeme
1.1.1 Entwurfsphasenmodelle
1.1.2 Modellierungsverfahren
1.1.3 Realisierungsprobleme eingebetteter Systeme
1.2
Rapid Control Prototyping
1.2.1 Das Entwurfsphasenmodell
1.2.2 Werkzeuge zum Rapid Control Prototyping
1.2.3 Mit Matlab von der Systemspezifikation zum Objektkode
1.2.3.1
Konzeptorientiertes Prototyping
1.2.3.2
Implementierungsorientiertes Prototyping
1.2.4 Echtzeitbetrieb
1.2.5 Festkommaarithmetik
1.2.6 What is in the Loop?
2
3
Fachliches Umfeld
2.1
Systemtheorie
2.2
Systemmodellierung / Systemidentifikation
2.3
Regelungstechnik
2.4
Simulation dynamischer Systeme
Die Arbeitsumgebung Matlab/ Simulink
3.1
Ein Werkzeug zur Systemidentifikation
3.2
Ein Werkzeug zum Reglerentwurf
3.3
Ein Werkzeug zur Systemsimulation
3.3.1 Einbindung von Festkommaarithmetik
3.4
Das Real-Time Windows Target als Werkzeug zum konzeptorientierten Rapid Prototyping
3.4.1. Einleitung
3.4.2 Vorbemerkungen zum Betrieb des Real-Time Workshop /
Real-Time Windows Target
3.4.3 Bedienungsanleitung des Real-Time Workshop /
Real-Time Windows Targets
III
3.4.3.1
Prüfung der Installation des Echtzeitkerns
3.4.3.2
Anpassung der "RT In"- und "RT Out"-Blöcke
an die installierte A/D-DA-Wandler-Karte
3.4.3.3
Realisierung einer Realtime-Anwendung
3.4.3.4
Hardware-Ankopplung
3.4.3.5
Parametrierung des Real-Time Workshop /
Real-Time Windows Targets
3.4.3.6
Parametrierung der Simulationsblöcke
3.4.3.7
Starten einer Real -Time - Anwendung
3.4.3.8
Signalvisualisierung
3.4.4 Offsetabgleich der A/D-D/A-Wandlerkarte pci6025E
3.5
4
Embedded Coder und Target for Infineon C166 als Werkzeug zum
implementierungsorientierten Rapid Prototyping
Praktisches Rapid Control Prototyping
4.1
Identifikation des Steuerverhaltens der Regelstrecke
4.1.1 Statisches Verhalten
4.1.2 Dynamisches Verhalten
4.2
Identifikation des Störverhaltens der Regelstrecke
4.3
Simulation des Streckenverhaltens
4.4
Der Reglerentwurf
4.4.1 Kontinuierlicher Regler
4.4.2 Zeitdiskreter Regler
4.4.3 Zeitdiskreter Regler mit Festkommaarithmetik
4.5
Simulation des Regelkreises
4.5.1 Prüfung des Führungsverhaltens
4.5.2 Prüfung des Störverhaltens
4.5.3 Prüfung des Aussteuerbereich der Stellgröße
4.6
Implementierung des Reglers in das Anwendersystem
4.6.1 Software in the Loop
4.6.2 Hardware in the Loop
IV
1 Einführung
Software zur Regelung technischer Prozesse läuft i. A. in dezentral angeordneten
Steuergeräten, die einen Mikrocontroller und aufgabenspezifische Ein-/AusagabeHardware, angeordnet und verdrahtet auf einer gedruckten Schaltung enthalten.
Häufig sind diese Steuergeräte über ein Bussystem mit anderen Steuergeräten in
einer sinnvollen Hierarchie miteinander verknüpft. Ein Paradebeispiel sind moderne
Kraftfahrzeuge mit CAN-Bus /116/ gekoppelten, verteilten Steuergeräten für das
Motormanagement, die Getriebe-, die ESP-, die Klimasteuerung und andere
Funktionen eines modernen Autos. Oberklassenfahrzeuge enthalten heute bereits
mehr als fünfzig Mikrocontroller /1/.
Durch dies Komplexität wird die Entwurfsaufgabe der Steuersoftware zunehmend
anspruchsvoller. Kundenwünsche nach ständigen Neuerungen, z.B. automatische
Einparkhilfen oder die automatische Kommunikation zwischen Kraftfahrzeugen z. B.
zur Meldung von vor einem liegende Staus, ziehen den Zwang nach immer kürzeren
Entwicklungszeiten nach sich. Durch beide Forderungen, nämlich ständige
Neuerungen in immer kürzerer Zeit, wird die Qualitätssicherung ein zunehmendes
Problem.
Zur Vermeidung von Fehlern werden deshalb in frühen Entwicklungsphasen
Methoden zur abstrakten Spezifikation und Modellierung der zu lösenden Aufgaben
verwendet. Darüber hinaus wird beim Steuerungs-/Reglerentwurf schon sehr früh im
Entwicklungszyklus auf die Herstellung von Steuerungs-/Regelungsprototypen Wert
gelegt. Als Prototyp soll hier eine Einheit aus Hardware, die schon große Ähnlichkeit
mit der später in den Prozess zu integrierenden hat, und Software, die aus der
abstrakten Beschreibung -möglichst automatisch- Objektkode für den in der
Hardware befindlichen Mikrocontroller erzeugt wurde, verstanden werden.
Ein solcher Prototyp kann direkt in die endgültige, zu steuernde Systemumgebung
eingebettet werden, was allerdings voraussetzt, dass das Steuergerät in Echtzeit,
also schritthaltend mit der zu lösenden Steuer-/Regelaufgabe im Prozess arbeitet.
Integriert in seine spätere Umgebung offenbart ein solcher Prototyp beim Betrieb des
Gesamtsystems sowohl Fehler in der Hardware als auch in der Software.
Durch diesen "Schnellen Reglerprototypen-Entwurf" oder das gleichbedeutende
"Rapid Control Prototyping" (RCP) wird die Sicherheit, dass ein konzipiertes
Regelungskonzept die geforderten Aufgaben fehlerfrei erfüllt, schon relativ früh in der
1.1
Entwicklungsphase überprüfbar und kürzt damit den gesamtem Entwicklungsvorgang
erheblich ab. Mit Hilfe der in den nächsten Kapiteln dargestellte Methoden des RCP
kann das beschriebene Entwurfkonzept durchgeführt werden.
Zunächst wird im Kapitel 1.1 der klassische Softwareentwurf für eingebettete
Systeme /102/, /103/ beschrieben, um den RCP-Entwurf in den Gesamtkontext
"Softwareentwurf für eingebettete Systeme" einordnen und die Vorteile des RCP
(Kapitel 1.2) deutlich erkennen zu können.
Im Kapitel 1.2.1 wird bei der Betrachtung des Entwurfphasen-Modells im Vergleich
zu den Modellen für den klassischen Entwurf im Kapitel 1.1.1 deutlich, an welcher
Stelle sich beide Entwurfsstrategien maßgeblich unterscheiden.
Das Kapitel 1.2.2 stellt einige kommerziell erwerbbare Arbeitsumgebungen vor, die
das RCP unterstützen. Wir werden uns später im Kapitel 3 ausführlich mit der
Arbeitsumgebung Matlab/Simulink auseinandersetzen, weil wir sie auch im Kapitel 4
für das praktische RCP einsetzen werden. Das Kapitel 4 ist damit auch eine
praktische Handlungsanweisung zur Lösung von RCP-Aufgaben, z.B. bei den
Übungen im Regelungstechnik-Labor im Rahmen der Lehrveranstaltung "Rapid
Control Prototyping".
Das Kapitel 1.2.3 "Mit Matlab von der Systemspezifikation zum Objektkode" nimmt
eine erste, dem Überblick dienende Beschreibung der Matlab-Arbeitsumgebung und
ihrer Leistung vor. Dabei werden zwei Prototypenentwurfsverfahren, die zu
verschiedenen
Zeitpunkten
im
Entwurfsphasenmodell
ansetzen
und
damit
verschiedene Ziele verfolgen, betrachtet.
Im Kapitel 1.2.4 wird die Grundidee eines einfachen Echtzeit-Betriebssystems auf der
Basis periodischer Interrupts beschrieben.
Anschließend im Kapitel 1.2.5 wird ein weiterer wesentlicher Aspekt der Realisierung
von Mikrocontroller gestützten Steuer- und Regelgeräten besprochen, nämlich die
Realisierung von Festkommaarithmetik zur Erhöhung des Durchsatzes von
eingebetteten Steuer- und Regelgeräten. Simulink besitzt ein spezielles Blockset zur
Wandlung von Gleitkomma- in Festpunktzahlen und umgekehrt und die meisten
Simulink-Blöcke
können
sowohl
Gleitkomma-
als
auch
Festkommazahlen
verarbeiten. Aufbauend auf dieser Einführung wird deshalb die Implementierung von
Festkommaarithmetik in Simulink-Strukturen und ihre von Matlab unterstützte
automatische Skalierung in Kapitel 3.4.2 vertieft.
Das zu entwickelnde Regelungssystem kann mit dem zu regelnden Prozess in
1.2
verschiedenen Ausprägungsformen und Fertigstellungsphasen (z.B. Regler in
Zielhardware an simuliertem Prozess) gekoppelt werden. Abgeschlossen wir die
Einführung in das RCP deshalb in Kapitel 1.2.6 "What is in the Loop" mit einer
Betrachtung, die die verschiedenen in der Literatur gebräuchlichen und sich zum Teil
widersprechenden
Definitionen
für
diese
Steuergerät-/Prozesskonfigurationen
vorgestellt und die Definitionen herausgearbeitet, die zukünftig im vorliegenden
Skript benutzt werden.
Zusatzbemerkung: Leider steht die Arbeitsumgebung für das implenntierungsorientierte
RCP (moderne PC's und die notwendigen Matlabprogramme) aus
verschiedenen Gründen dem Labor für Regelungstechnik noch nicht so lange zur
Verfügung, dass größere Erfahrungen damit gesammelt werden konnten. Dem
entsprechend beschränken sich sowohl die tiefergehenden Beschreibungen dieses
Skripts als auch die praktischen Anwendungen im Labor überwiegend auf das
konzeptorientierte RCP mit Unterstützung des sogenannten Real-Time Windows
Target von Matlab. Wer sich allerdings für die implentierungsorientierte Variante
interessiert, ist eingeladen, seine Abschlussarbeit über einen Aspekt dieser Methode
zu schreiben.
1.1 Klassischer Softwareentwurf für eingebettete Systeme
Um deutlich erkennen zu können, welchen entscheidenden Vorteil das Verfahren des
Rapid Control Prototyping im Gegensatz zu herkömmlichen Entwurfsverfahren hat,
soll in diesem Kapitel kurz auf klassische Entwurfsgrundlagen und insbesondere ihre
Schwächen eingegangen werden.
Es sei noch einmal darauf hingewiesen, dass wir uns mit Software für eingebettete
Systeme, also Steuerungen mit einer begrenzten Anzahl von Aufgaben beschäftigen.
Das heißt wir betrachten keine Entwurfsverfahren für große Softwaresysteme, an
denen ganze Abteilungen von Entwicklern arbeiten, z.B. kommerzielle Software für
Computer Inegrated Manufacturing.
1.1.1 Entwurfsphasenmodelle
Einer der wichtigsten Aspekte beim Entwurf von Software für eingebettete Systeme
ist die schlichte Forderung, dass das fertige Produkt die Anforderungen erfüllt, die an
1.3
es gestellt werden.
Häufig ist ein Kunde oder derjenige, der die Aufgabe einer zu entwickelnden
Steuerung formuliert, nicht in der Lage, diese Anforderungen detailliert und restlos zu
beschreiben, weil es ihm nicht gelingt, alle Randbedingungen, die eine solche
Steuerung erfüllen muss, im Voraus zu erkennen.
Dies hat zur Konsequenz, dass man Auftraggeber und Auftragnehmer
eine
gemeinsame Anforderungsanalyse (auch Systemanalyse genannt) vornehmen lässt.
Woraus
ein
sogenanntes
Lastenheft
entsteht,
das
eine
Aufstellung
aller
Grundforderungen an das zu entwickelnde System aus der Sicht das Auftraggebers
enthält. Nach /100/; /101/ kann man heute diese Phase bereits mit CASE-Tools
(Computer Aided Software Engineering Tools), wie z. B. UML (Unified Modelling
Language) zur Prüfung und Bestätigung der Lastenheftinhalte unterstützen. Aus dem
Lastenheft
kann
nun
von
Auftragnehmer/Entwickler
eine
detaillierte
Systemspezifikation abgeleitet werden. Die schriftliche Form dieser Spezifikation wird
Pflichtenheft genannt. In der dann folgenden Systementwurfsphase wird vom
Entwickler aus dieser Spezifikation eine Unterteilung des Gesamtsystems in kleine
Subsysteme vorgenommen. Dabei wird das Ziel angestrebt, solche Subsysteme zu
generieren, die für sich weitgehend abgeschlossenen Aufgaben erledigen. Mit der
Identifikation
Strukturierung
und
der
Beschreibung
solcher
Gesamtaufgabe
Subsysteme
angestrebt,
die
wird
eine
gewisse
das
Gesamtsystem
überschaubarer macht. Die funktionelle Abgeschlossenheit der Subsysteme soll auch
eine Vereinfachung der späteren Funktionstests herbeiführen. Heute ist auch dieser
Schritt z.B. mit dem CASE-Tool UML beschreibbar.
In der Implementierungsphase werden alle Subsysteme vereint und im Allgemeinen
in der realen Umgebung getestet. Erst in dieser sehr späten Phase kann man
erkennen, ob die Funktion den Wünschen des Auftraggebers entspricht, d. h. , ob
alle Forderungen des Lastenhefts erfüllt werden oder ob sogar die Definition von
Funktionen vergessen wurde.
Das eben beschriebene Entwurfkonzept wird in /1/ als Wasserfallmodell bezeichnet
(siehe Bild 1.1.1 auf der nächsten Seite.)
Diese Vorgehensweise in der Entwicklungsphase führte auf eine sehr späte
Aufdeckung von Fehlern und Versäumnissen, die zu hohen Nacharbeitungskosten
und Zeitverzögerungen führen kann.
1.4
Anforderungs −
analyse
Lastenheft
System −
spezifikation
Pflichtenheft
System −
entwurf
Subsystem −
entwürfe
System −
int egration
Bild 1.1.1: Das Wasserfallmodell des Softwareentwurfs
Das gab Anlass zur Weiterentwicklung des Wasserfallmodells zum bekannten VModell:
Anforderungs −
analyse
Fertigung
Anwendungs −
test
System −
spezifikation
Top −
Down
System −
test
System −
entwurf
Subsystem −
test
Subsystem −
entwürfe
System −
realisierung
Bild 1.1.2: Das V-Modell des Softwareentwurfs
1.5
Bottom −
Up
Das V-Modell ist nicht in dem Sinne zu verstehen, dass zeitlich links oben mit der
Entwicklung begonnen und rechts oben die Entwicklung beendet wird, sondern das
V-Modell basiert auf der Annahme /1/, "dass der Spezifikations- und Entwurfsprozeß
hauptsächlich durch Zerlegung und Verfeinerung eines top-down-orientierten
Entwicklungsprozeß charakterisiert ist. Ergänzt wird dies durch einen auf
zunehmender Zusammensetzung beruhenden bottom-up-orientierten Prozeß, der die
Implementierungs- und Integrationsphasen charakterisiert. Jede Phase auf der
Spezifikations- und Entwurfsseite hat ihre Entsprechung auf der gegenüberliegenden
Seite auf den Implementierungs- und Integrationsphasen. Begleitend zu den
Implementierungs- und Integrationsphasen erfolgt die Verifikation und Validierung,
die die Konsistenz und Vollständigkeit der Entwurfsbeschreibung auf jeder Ebene
gewährleistet. Während der horizontale Verlauf des V-Modells die Projektphasen und
ihre relative Dauer darstellt, repräsentiert der vertikale Verlauf die unterschiedlichen
Abstraktionsebenen".
Leider erkennt man bei dieser Vorgehensweise Spezifikationsfehler auch sehr spät,
nämlich beim System- oder Anwendungstest.
1.1.2 Modellierungsverfahren für Software
Zu Beginn dieses Kapitels wurde betont, dass sich dieses Skript mit der Entwicklung
eingebetteter Systeme auseinandersetzt. Damit sollte zum Ausdruck gebracht
werden, dass nicht die Entwicklung großer, kommerzieller Softwaresysteme, wie z.B.
Buchhaltungssoftware, Datenbank- oder Textverarbeitungssysteme, sondern die
Entwicklung kleiner Softwarepakete, die auf Mikrocontrollern laufen und eine
überschaubare Anzahl technischer Aufgabenstellungen lösen sollen, betrachtet
werden. Damit wird ausgeschlossen, dass zur Modellierung der Software
umfangreiche, sehr breit nutzbare Verfahren, wie zum Beispiel UML (Unified
Modelling Language) eingesetzt werden. Es soll an dieser Stelle auch nicht versucht
werden zu begründen, warum dies nicht der Fall ist. Wollte man ein sinnvolles
Verständnis für eine solche Begründung wecken, müsste man für UML ein Skript,
das sinnvollerweise auch Beispiele enthält, schreiben, das mindestens einen Umfang
besitzt, wie das vorliegende. Wir wollen uns auf Modellierungsverfahren für
eingebettete Systeme und insbesondere auf solche, die Steuerungs- und
Regelungsaufgaben erfüllen, beschränken.
Deshalb nehmen wir eine kurze Strukturierung der dafür in der Literatur
1.6
beschriebenen Modellierungsverfahren vor und gehen nur intensiver auf solche ein,
die Signalverarbeitungssysteme in Form von Steuerungen oder Regelungen
beschreiben. Wir folgen an dieser Stelle weitgehend den Ausführungen von /1/. Dort
wird zwischen drei wesentlichen Steuerungsmodellen unterschieden:
•
ereignisdiskrete Steuerungen,
•
kontinuierliche Steuerungen und
•
daten- und kontrollflussmodellierte Steuerungen (das sind alle restlichen
Steuerungen die nicht ereignisdiskret oder kontinuierlich sind).
Dabei wird impliziert, dass eine ereignisdiskrete Steuerung einen ereignisdiskreten
Prozess und eine kontinuierliche Steuerung einen kontinuierliche Prozess steuert,
bzw. regelt.
•
Ereignisdiskrete Steuerungen
Der Begriff "kontinuierliches System" ist aus der Systemtheorie /2/ hinlänglich
bekannt. Er beschreibt ein System zur Verarbeitung kontinuierlicher Signale, die sich
dadurch auszeichnen, dass sie zu jedem Zeitpunkt existieren, d.h. eine beliebig
genaue Amplitude haben. Unter einem zeitdiskreten System wird -genau genommenein nur zu diskreten Zeitpunkten existierendes Signal mit beliebig genauer Amplitude
verstanden. Solche Signale existieren real nur am Ausgang eines Haltegliedes vor
einen A-/D-Wandler. Der Begriff wird aber auch benutzt, wenn es sich um sowohl
zeit- als auch amplitudendiskrete Signale handelt. Solche Signale treten am Ausgang
von A/D-Wandlern und bei der Weiterverarbeitung in Digitalrechnern (zeitdiskretes
System, Abtastsystem) auf. Diese etwas ungenaue, aber häufig genutzte
Bezeichnung hat zwei Gründe. Erstens macht sich die Amplitudendiskretisierung bei
der Standarauflösung eingesetzter A-/D-Wandler von 12 Bit systemtheoretisch kaum
bemerkbar, während die Zeitdiskretisierung erheblichen Einfluß auf die Signal- und
damit auch auf die Systembeschreibung hat (z.B. Differenzengleichungen an Stelle
von Differenzialgleichungen als mathematisches Modell im Zeitbereich.) Der zweite
Grund liegt darin, dass unter der richtigeren Bezeichnung "digitales Signal" für ein
zeit- und wertquantisiertes Signal häufig eine Binärzahl, also eine Ansammlung von
Nullen und Einsen verstanden wird.
Ein ereignisdiskretes Signal ist auch ein nur zu diskreten Zeitpunkten auftretendes
1.7
Signal, aber nicht mit z.B. 256 oder 4096 verschiedenen Amplitudenquanten,
sondern i.A. nur mit zwei Amplitudenwerten. Deswegen nennt man solche
ereignisdiskreten Systeme
häufig auch "diskrete binäre Systeme" oder binäre
Automaten. Auch die Begriffe "endlicher Zustandsautomat" oder "finite state
machine" sind gebräuchlich.
Früher benutzte man zur Beschreibung ereignisdiskreter Systeme Ablaufdiagramme
endlicher Zustandsautomaten (Mealy- und Moore-Automaten) oder Petrinetze /1/.
Wegen erheblicher Mängel dieser Beschreibungen haben sich heute sogenannte
"Statecharts" (Zustandsübergangsdiagramme) durchgesetzt /1/.
Auch Simulink besitzt eine grafische Erweiterung zur Modellierung von endlichen
Zustandsautomaten, die hier darüber hinaus im Zusammenspiel mit kontinuierlichen
und zeitdiskreten Systemelementen modelliert werden können. Matlab nennt diese
Erweiterung "Stateflow". In /6/ findet der Leser eine sehr gut nachvollziehbare
Einführung in Stateflow mit zwei Beispielen "Getränkeautomat" und "Steuerung eines
Heizgebläses.
Da wir keine Zustandsautomaten betrachten wollen, gehen wir auf ereignisdiskrete
Steuerungen nicht weiter ein.
•
Kontinuierliche Steuerungen
Kontinuierliche Systemmodelle dienen zur Beschreibung kontinuierlicher Systeme,
die wiederum zur Beschreibung von steuer- und regelungstechnischen Algorithmen
herangezogen werden können. Ein kontinuierliches System kann mittels Formeln in
Form einer Differenzialgleichung (bzw. durch ein Zustandsmodell) oder in einem
anderen Betrachtungsbereich, dem Bildbereich, mit einer Übertragungsfunktion
modelliert werden /2/. Dazu gibt es äquivalente grafische Beschreibungsarten in
Form von sogenannten Strukturbildern. Die Formel- und die Strukturbildbeschreibungen besitzen den gleichen Informationsgehalt und lassen sich eindeutig
ineinander umrechnen. Als CASE-Tool wird im Falle des RCP allerdings die
grafische Beschreibungsform als Strukturbild bevorzugt.
Wir wollen uns an dieser Stelle noch einmal vor Augen führen, warum wir eine
Modellierung unseres kontinuierlichen Systems vornehmen: Wir wollen einen
zuverlässigen und möglichst fehlerfreien Entwurfsweg von dem zu realisierenden
System hin zu einem Algorithmus beschreiten, der in einen Digitalrechner
1.8
implementiert, das gleich Wirkungsverhalten zwischen Eingang und Ausgang zeigt,
wie das zu realisierende System.
Wir zeigen im Folgenden, welche Schritte man gehen muss, um eine solche
Implementierung weitgehend zuverlässig durchführen zu können. Um das Ganze
noch anschaulicher zu machen, soll nicht von einem abstrakten Regler, dessen
Wirkungsverhalten wir ja eigentlich im Mikrocontroller-Algorithmus nachbilden wollen,
ausgegangen werden, sondern
von einem -uns allen bekannten koninuierlichen
System- einem RC-Glied, wie wir es in /1/ bereits mathematisch modelliert haben:
R
u( t)
y( t)
C
u( t) = Eingangsspannung
y( t) = Ausgangsspannung
R = 100 kΩ, C = 100 µF
Bild 1.1.3: Ein nachzubildendes reales System
Es soll ein Algorithmus/Programm entworfen werden, das in einen Digitalrechner
implementiert, am Eingang mit einem A/D- und am Ausgang mit einem D/A-Wandler
versehen, das gleich Wirkungsverhalten zeigt wie das ursprüngliche reale System.
y( t)
1V
0
u( t)
t
0
1V
0
0
Digitalrechner mit
implementiertem
Filtera lg orithmus
t
y( t)
1V
A /D
D/A
0
t
0
Bild 1.1.4: Nachbildung des Wirkungsverhaltens durch einen Algorithmus
In /2/ wurde gezeigt, wie man das RC-Glied mittels einer mathematisch
/physikalischen
Modellbildung
in
eine
1.9
Zustandsmodell
und
anschließender
Transformation in eine Übertragungsfunktion wie folgt beschreiben kann:
Ua (s)
1
1
=
=
.
Ue (s) 1 + RC ⋅ s 1 + 10 ⋅ s
G(s) =
Obwohl man ein solches kontinuierliches System auch auf einem Digitalrechner
implementieren könnte, empfiehlt es sich, die Übertragungsfunktion zu diskretisieren
und den Algorithmus in Form einer zeitdiskreten Differenzengleichung zu
implementieren. Nach der Diskretisierung bei einer Abtastzeit von 1sek. (wie man die
Abtastzeit sinnvoll wählt wird in /2/ beschrieben) ergibt sich mit Hilfe der
Sprunginvarianztransformation eine z-Übertragungsfunktion
G(z) =
Ua (z)
0,09516
0,09516z −1
=
=
,
Ue (z) z − 0,9048 1 − 0,9048z −1
die man in eine Differenzengleichung wandeln kann:
ua (k) = 0,9048ua (k − 1) + 0,09516ue (k − 1).
Nach /2/ ergibt sich daraus folgendes Strukturbild:
ue (k)
ue (k − 1)
T
0,09516
ua (k)
0,9048
ua (k − 1)
T
Daraus läßt sich leicht -wie angestrebt- ein Programm schreiben, das das
vorgegebene RC-Glied simuliert. Weil wir den späteren Rapid Control Prototyping Vorgang
unter
Matlab/Simulink
realisieren
werden
und
keine
weitere
Programmiersprache einführen wollen, soll ein Matlab-Programm entwickelt werden,
um das obige Strukturbild als Programm zu realisieren. Man kann das MatlabProgramm quasi als Pseudocode für ein C-Programm auffassen.
1.10
Für die folgende Programmrealisierung soll eine Einheitssprungantwort über 50 sek.
realisiert werden:
% Pseudokode (Matlab) für ein C-Programm zur
% Realisierung des Verhaltens eines RC-Gliedes
ue_alt=0;
% Initialisierung der Speicher T
ua_alt=0;
ue=1;
% Eingangssprung.
for k=0:1:50
ua = 0.9048*ua_alt
%
ue_alt = ue;
%
ua_alt = ua;
%
end
+ 0.09516*ue_alt;
Realisierung des Strukturbildes.
Umladung der Signalspeicher
von kT nach (k-1)T.
ua_plot(k+1)=ua; % Speicher, um das Ausgangssignal
% zu plotten.
t=0:1:50;
figure(1)
stairs(t,ua_plot)
grid on
% Plotroutine (für die Nutzung des)
% Programms nicht notwendig).
Wenn man analytisch die Sprungantwort des RC-Gliedes berechnen würde, könnte
man zeigen, dass die vom obigen Programm berechnete Sprungantwort, der des
ursprünglichen realen kontinuierlichen Systems entspricht.
Das heißt, die Modellierung kontinuierlicher Systeme mittels parametrischer
mathematischer Modelle und deren grafisch Darstellung sind eine zuverlässige
Grundlage zum Entwurf kontinuierlicher Steuerungen.
Wir wollen uns an dieser Stelle noch ein paar Gedanken über den Sinn einer
kontinuierlichen Realisierung gegenüber einer zeitdiskreten Realisierung und deren
numerischer Simulation/Berechnung machen.
Am deutlichsten wird dies, wenn wir das vorangehende RC-Glied einmal
kontinuierlich mit einer Rechenschrittweite von dt = 1sek. und einmal nach der
Diskretisierung mit der Abtastzeit T = 1sek, also
zwischen
den
Berechnungszeitpunkten,
beantworten, wo der Unterschied liegt,
Berechnungsalgorithmus?
1.11
identischen Zwischenräumen
simulieren.
im
Wir
wollen
Berechnungsergebnis
die
Frage
oder
im
Wenn zur Berechnung der zeitdiskreten Realisierung die Sprunginvarianztransformation benutzt wurde, müssen die Sprungantworten zu den Berechungsbzw. Abtastzeitpunkten gleich sein, weil es die Eigenschaft dieser Transformation ist,
invariant
gegenüber
Sprungerregungen
zu
sein.
Wenn
man
eine
andere
Transformation wählt, z.B. die Tustinsche Näherung mit einer relativ kleinen
Abtastzeit, sind die Systemantworten nicht vollständig identisch, sich aber sehr
ähnlich. Das heißt, der praktische Unterschied liegt nicht im Berechnungsergebnis,
sondern im Berechnungsalgortihmus.
Um die Systemantwort eines kontinuierlichen Systems zu berechnen, müssen
Differenzialgleichungen
numerisch
gelöst
werden.
Dazu
sind,
wenn
das
Berechnungsergebnis genau sein soll, aufwändige rechenintensive Algorithmen,
sogenannte Integrationsalgorithmen, wie das Runge/Kutta-Verfahren notwendig.
Diese Algorithmen müssen, wenn das System in Echtzeit laufen soll, schritthaltend
mit dem Prozess gerechnet werden.
Diese CPU-Belastung kann man sich ersparen, wenn man die kontinuierlichen
Algorithmen in zeitdiskrete umrechnet (das macht man einmal Offline, d. h. vor dem
Echtzeitbetrieb) und berechnet während des Echzeitbetriebs die einfach zu lösende
Differenzengleichung mit wenigen, von der Ordnung des Systems abhängigen,
Multiplikationen und Additionen. D. h., es empfiehlt sich immer, mit zeitdiskreten
Regelalgorithmen zu arbeiten.
•
Modellierung von Daten- und Kontrollstrukturen
Alle Modellierungen für Steuerungen, die nicht diskreter oder kontinuierlicher Natur
sind, können, wenn kein zu großes Softwareprojekt modelliert werden soll, mit Datenund Kontrollflüssen modelliert werden. In der Literatur über Softwareegineering
werden sie als leicht erstellbar und gut lesbar auch für Nichtfachleute bezeichnet.
In /1/ werden zwei Verfahren vorgestellt,
•
Datenflussdiagramme und
•
Activity charts.
Da
wir
diese
Ansätze
Steuerungen/Regelungen
nicht
benutzen
zum
Entwurf
wollen,
Modellierungsverfahren nicht ein.
1.12
gehen
von
kontinuierlichen
wir
auf
dies
1.1.3 Realisierungsprobleme eingebetteter Systeme
Nachdem die zu lösende Programmieraufgabe durch eine geeignete Modellierung,
wie im vorangehenden Kapitel beschrieben, zur Programmierung vorbereite wurde,
muss nun auf dieser Basis eine Umsetzung in ein Programm für einen
Mikrocontroller erfolgen.
Diese Umsetzung birgt einige sachliche Probleme und setzt ein weitgehend anderes
Ingenieurwissen des Entwicklers voraus, als bei der vorangehenden systemtheoretisches Aufbereitung des Problems.
Das sachliche Problem besteht darin, dass die Entwicklungsumgebung für die
Software und das Zielsystem auf dem die Software später laufen soll, zwei
weitgehend verschiedene Welten sind. Das Entwicklungssystem wird i.A. ein PC
sein, auf der Cross Software zur Programmentwicklung in Form einer integrierten
Entwicklungsumgebung (IDE: "Integrated Development Environment") mit Compiler,
ggf. Assembler, Linker, Lader und Debugger arbeitet. (Als Cross Software wird ein
Compiler, Assembler oder eine IDE genannt, die auf einem Rechner läuft, der nicht
die CPU besitzt, für die die Entwicklungsumgebung Software erzeugt. Es handelt
sich z.B. um Cross Software, wenn man auf einem PC eine IDE zur Programmierung
von C167 Mikrocontrollern benutzt).
Das Zielsystem wird i.A. ein Mikrocontroller als eingebettete System sein, das
•
über spezifische Hardwareschnittstellen Sensorsignale vom zu steuernden
Prozess empfängt und Stellsignale in den Prozess abgibt,
•
i. A. in Echtzeit, d. h. schritthaltend zum Prozess betrieben wird und
•
neben einfachen Steueraufgaben und Kommunikation mit über-/untergeorneten
Systemen auch anspruchsvolle Regelalgorithmen zu lösen hat, d. .h eine
entsprechend genaue Arithmetikunterstützung braucht.
Die Entwicklung des Programms, dessen modellhafte Entstehung im letzten Kapitel
beschrieben wurde, wird i. a. in einer Hochsprache vorgenommen. Verschiedene
Firmen bieten z.B. IDE's an, die auf spezielle Mikrocontroller zugeschnitten sind, z.B.
die Firma Altium, den Tasking C-Compiler oder die Firma Keil auch einen
C-
Compiler für die Mikrocontroller C16x von Infineon.
Obwohl die Verwendung von Hochsprachen nicht so effizienten Objektcode liefert,
wie ein Assembler (d. h. der Code hat eine langsamere Verarbeitungs1.13
geschwindigkeit
und
benötigt
mehr
Speicherplatz)
zieht
man
die
Hochsprachenentwicklung vor, weil sie schneller und problemorientierter ist.
Weiterhin ist der Code für Dritte besser les- und damit wartbar. Das schließt
allerdings nicht aus, das z.B. Treiber, die sehr häufig während des Programmlaufs
aufgerufen werden, zur Steigerung des Durchsatzes in Assembler geschrieben
werden. Bei der Beschaffung einer geeigneten IDE sollte auf die Möglichkeit der
Einbindung von Assemblerprogrammen in Hochsprachenprogramme geachtet
werden. Eine weitere Erhöhung des Durchsatzes ist mit einer Umstellung der
Gleitkommarechnung, die ein Mikrocontroller i.A. nicht per Hardware sondern mit
einer Gleitkommabibliothek unterstützt, in Festkommarechnung möglich. Hier muss
allerdings sehr mühsam ein Kompromiss zwischen darstellbarem Zahlenbereich und
Genauigkeit (Zahlenauflösung) der Rechnung durch die Wahl der Lage des
Radixpunktes der Festkommazahlen gefunden werden. An dieser Stelle könnte
Matlab mit seiner "Fixed Point Toolbox" sehr hilfreich eingesetzt werden. Wir gehen
auf dieses Tool nicht weiter ein, weil wir im Rahmen des RCP im Kapitel 3.3.1 die
automatische Generierung von Festkommaarithmetik mit Simulink und dem "Fixed
Point Blockset" kennen lernen. In Kapitel 1.2.5 werden die dazu notwendigen
Grundlagen besprochen.
Der Echtzeitbetrieb ließe sich mit Echtzeitbetriebssystemen für Mikrocontroller
(FreeRTOS, RTO-UH, Tornado/VxWorks, usw.) herstellen. Häufig reicht auch schon
eine Lösung aus, die auf der Basis von periodisch von einem Hardwarezähler
getakteten Interrupt-Service-Routinen realisiert wird. Matlab nennt diese Form des
Echtzeitbetriebs "Bare-Board Environment", weil kein echtes Betriebssystem den
Echtzeitbetrieb ermöglicht.
Die Erläuterung der Funktion von Echtzeitbetriebssystemen wird im Rahmen dieses
Skripts im Überblick vorgenommen, so dass der Unterschied zur Echtzeiterzeugung
mit getakteten Interrupt Service Routinen deutlich erkennbar wird.
Das
hauptsächliche
Realisierungsproblem
eingebetteter
Systeme
ist
der
Funktionstest der Software im Zielsystem wegen der am Anfang dieses Kapitels
heraus gearbeiteten großen funktionellen Unterschiede zwischen Entwicklungs- und
Zielsystem.
Einige integrierte Entwicklungsumgebungen für Cross Software stellen einen
Simulator zur Verfügung, welcher die interne Struktur und die auf dem Controllerchip
befindliche Peripherie per Software nachbildet. Auf diesem Simulator kann die
1.14
entwickelte Software getestet werden, externe Anworten auf ausgegebenen Signale
müssen dabei auch per Software nachgebildet werden. Die Prüfung auf
Echtzeitreaktionen ist nicht möglich.
Das
seit
ca.
30
Jahren
klassische
Testinstrument
für
Steuergeräte
mit
Mikroprozessoren und Mikrocontroller ist der "In Circuit Emulator" (ICE) /104/. Mit
ihm ist ein Systemtest in der Zielhardware in Echtzeit möglich. Ein ICE ist eine
Kombination aus Software und Hardware. Zur Arbeit mit einem ICE wird der
Controller aus seiner Umgebung entnommen, d. h. er muss steckbar auf der Platine
angeordnet sein. An Stelle des Controllers wird der ICE angeschlossen. Im ICE ist
die Controller-Hardware durch einem typgleichen aber etwas schnelleren Controller
ersetzt oder wird mittels schnellerer Hardware "diskret" nachgebildet. Um den
Controller herum muss sich weitere Hardware befinden, die u. A. Kontakt zu einem
PC herstellt, um von dort Zugriffe auf die ICE-Hardware zu ermöglichen. Wenn man
nun eine Anwendung vom PC aus im Zielsystem startet, kann man die entwickelte
Software auch in Anwesenheit eines Echtzeitbetriebssystems testen. Weil der
Controller im ICE schneller ist als der ursprüngliche, kann man während des Lauf
z.B. CPU-Register auslesen, ausgegeben Signale auf einem Monitor betrachten, den
Controller bis zu einem gesetzten Breakpoint laufen lassen und anschließend
getracete Ein-/Ausgangssignale betrachten und damit Fehlfunktionen der Software
aufdecken. Auch andere Funktionen, die ein normaler Debugger eine IDE besitzt,
z.B. die Abarbeitung des Programms in Einzelschritten ist i. A. auch mit einem In
Circuit Emulator möglich.
Komfortable ICE's sind i. A. sehr kostspielig und können sechstellige Europreise
kosten. Heutige Mikrocontroller haben in der Regel rudimentäre ICE-Funktionen auf
dem Controllerchip integriert. Diese Funktion wird häufig "In System Programmer"
oder "In System Debugger" genannt. Sie bieten i. A. nicht die Testtiefe wie ICE's und
sind auch nur bedingt echtzeitfähig. Dafür liegen aber die Preise nur im zwei- bis
dreistelligen Eurobereich.
Mikocontroller, die den sogenannten JTAG-Standard (Joint Test Action Group Standard) /105/ unterstützen, verfügen über eine JTAG-Schnittstelle über die sie mit
einem PC gekoppelt werden können. Auch damit sind eingeschränkte DebugFunktionen möglich.
1.15
1.2 Rapid Control Prototyping
Wie schon im Vorwort dargestellt wurde, wird unter einem Prototypen in der Technik
ein Objekt verstanden, dessen Entwicklungsstand zwischen Entwurf und Fertigung
liegt.
Der Prototyp steht in seiner Aussagefähigkeit hinsichtlich des Erfüllungsgrades des
geplanten Konzepts zwischen der reinen Simulation und der endgültigen
Realisierung innerhalb eines zu beeinflussenden Prozesses. Das heißt, es können
Prototypen entwickelt werden, verschiedene interessierende Fragen beantworte. Wir
werden in Kapitel 1.2.1 auf drei zu verschiedenen Zeitpunkten im V-Modell
einsetzende Prototyping-Ansätze
•
Das konzeptorientierte RCP,
•
Das architekturorientierte RCP und
•
das implementierungsorientierte RCP
eingehen.
1.2.1 Entwurfsphasenmodelle
Das erweiterte V-Modell mit den drei Ansätzen für die Generierung von Prototypen ist
bereits ca. 20 Jahre alt /7/, obwohl man vermuten würde, das softwaregestützte
RCP -Methoden erst im aktuellen Jahrzehnt entwickelt wurden.
Der traditionelle Entwicklungsablauf nach dem V-Modell (vergleiche Kapitel 1.1.1)
wird dabei durch den Einsatz von Rapid Prototyping auf verschiedenen Ebenen der
Steuerungsentwicklung unterstützt (siehe Bild 1.2.1 auf der folgenden Seite.)
Da diesem Entwurfsphasenmodell, dem das V-Modell zu Grunde liegt, aber Rapid
Prototyping berücksichtigt, wird es VP-Modell genannt.
Aus den folgenden Betrachtungen wird deutlich, dass die drei Prototypingansätze
nicht miteinander konkurrieren, sondern sich ergänzen.
1.16
Anforderungs −
analyse
Fertigung
System −
spezifikation
Anwendungs −
test
I
System −
entwurf
System −
test
II
Subsystem −
entwürfe
III
Subsystem −
test
System −
realisierung
I:
II :
III :
Konzeptorientierter Prototyp
Architekturorientierter Prototyp
Implementierungorientierter Prototyp
Bild 1.2.1: Das VP-Modell der Softwareentwicklung
•
Konzeptorientiertes Rapid Control Prototyping
Das konzeptorientierte RCP, das am dichtesten bei der Systemspezifikation
angesiedelt ist, dient hauptsächlich der Klärung der Systemziele. Es realisiert einen
Prototypen direkt aus der Systemspezifikation heraus.
Das CAE-Programm Matlab/Simulink, das wir später für die praktische Anwendung
des
RCP
nutzen
wollen,
realisiert
das
konzeptorientierte
RCP
mit
zwei
verschiedenen Softwarewerkzeugen:
•
Dem Real-Time Windows Target und
•
dem xPC-Target.
Unter Target ("Ziel") wird im Fachjargon das Zielsystem verstanden, auf dem der
entwickelte Objektcode laufen soll.
Beim Real-Time Windows Target ist das Ziel ein PC, der unter dem Betriebssystem
Microsoft
Windows
läuft.
Zusätzlich
installiert
ein
Matlabprogramm
einen
sogenannten Echtzeitkern, so dass das Zielsystem echtzeitfähig ist. Um mit der
1.17
Außenwelt kommunizieren zu können, muss in den PC eine handelsübliche A/D-D/AWandlerkarte (z.B. von der Firma Keithley-Instruments oder der Firma Analog
Devices) eingefügt werden.
Beim xPC-Target werden zwei PC's benötigt, einen, mit dem der in Echtzeit laufende
PC gesteuert wird und dem in Echtzeit laufenden PC selbst. Auf dem Echtzeitrechner
kann die Kommunikation mit der Umwelt über alle bekannten PC-Schnittstellen und
eingesteckte analoge und digitale I/O-Karten erfolgen. Matlab bietet eine xPC-TargetBox an , die vielen mit I/O's, z.B. mit PWM-Signalgenerierung, CAN-Busschnitstelle
und Encoder-Eingang versehen ist.
Auf diesen Plattformen kann auf der Basis einer Simulation, z. B. mit Simulink im
Nicht-Echtzeitbetrieb die Funktionsfähigkeit eines Reglers nachgewiesen werden.
Mittels der beiden genannten Softwaresysteme (Realtime Windows Target, xPC
Target) kann dann ein in Echtzeit laufenden Prototyp generiert werden. Bei richtig
installierter Software geschieht das auf Knopfdruck bis hin zum Laden des
generierten Prototypenobjektcodes in den Echtzeitrechner. Anschließend kann die
Software zur Ausführung gebracht werden.
Stellt man bei der Ausführung eine Fehlfunktion fest, kann man mit den von Matlab
bereitgestellten CASE Tools schnell eine Programmänderung vornehmen und nach
wenigen Minuten die geänderte Steuerung erneut testen.
Weil mit dem konzeptorientierten Prototypen primär die konzipierte Funktion getestet
werden soll, muss die Hardwarearchitektur noch nicht zwangsläufig der endgültigen
entsprechen. Allerdings sollte man darauf achten, dass die Schnittstellen zwischen
dem zu testenden Target und seiner Umwelt (z. B. der Regelstrecke) keine
zusätzlichen Fehler in die Lösung einschleppen. Zum Beispiel sollte angestrebt
werden, dass der Aussteuerbereich und die Auflösung des A/D-Wandlers größer
oder gleich der endgültigen Realisierung sind. Dies ist in so fern unproblematisch,
weil der konzeptionelle Prototyp wieder verwendbar ist und damit auch etwas
kostenintensiver sein darf. Ist allerdings das Target, das bei den vorliegenden
Softwaresystemen mit einer Abtastzeit von minimal ca. 100 µsek. beim Real-Time
Windows Target und von ca. 10 µsek. beim xPC Target betrieben werden kann, zu
langsam (was bei einer regelungstechnischen Anwendung i. A. nicht der Fall ist)
muss auf die Nutzung konzeptionellen Prototypen verzichtet werden und ein
architektur- oder implementierungsorientierter Prototyp eingesetzt werden.
1.18
•
Architekturorientiertes Rapid Control Prototyping
Im Gegensatz zum konzeptorientierten RCP wird hier bereits die Zielarchitektur der
zu entwickelnden Steuerung berücksichtigt, um genauere Aussagen über die
endgültige Funktionsfähigkeit der Steuerung/Regelung treffen zu können. Bei diesem
Prototypen werden i. A. bereits die Hardwarekomponenten der endgültigen
Realisierung eingesetzt. Die Steuerungssoftware muss noch nicht auf minimalen
Speicherplatzbedarf optimiert, aber die Echtzeitfähigkeit muss sichergestellt sein.
•
Implementierungsorientiertes Rapid Control Prototyping
An dieser Stelle werden Prototypen erzeugt, die vollständig auf den spezifischen
Anwendungsfall
zugeschnitten
sind.
Häufig
werden
architektur-
und
implementierungsorientiertes Prototyping nicht mehr unterschieden, sondern in
einem letzten Arbeitsschritt implementierungsorientiert hergestellt. Matlab unterstützt
auch solche Plattformen, in dem für spezielle Controllertypen (z.B. Infineon C16x,
Motorola MPC 555, Texas Instruments TIC6000) sogenannte Embedded Target
angeboten werden. Wir gehen in den Kapiteln 1.2.3.2 und 3.4.2 etwas näher auf das
Embedded Target für den Infineon Controller C167 ein. Implementierungorientierte
Prototypen werden im Allgemeinen auch zur automatischen Codegenerierung für
Mikrocontroller
herangezogen,
diesen
Aspekt
wollen
wir
im
Rahmen
der
Lehrveranstaltung Rapid Control Prototyping nicht vertiefen, er soll dem Modul
"Modellbasierter Entwurf" im gleichen Studiengang vorbehalten bleiben
1.2.2 Werkzeuge zum Rapid Control Prototyping
Obwohl wir uns im Rahmen dieses Skripts primär mit den von der Firma
The Mathworks unter dem CAE-Programm Matlab laufenden RCP-Werkzeugen
auseinandersetzen wollen, soll zunächst ein Überblick über einige andere am Markt
verfügbare RCP-Werkzeuge gegeben werden.
Die Entwicklung von Rapid Control Prototyping Werkzeugen begann verstärkt Anfang
der 90-ger Jahre des letzten Jahrhunderts. Einige Werkzeuge existierten schon
früher, z.B. das "Engineering Analysis System, Version 5" (EASY5), das von der
Firma Boing Corporation, USA entwickelt und ab 1976 im zivilen Flugzeugbau
verwendet wurde. Die Stärken dieses Werkzeugs liegen allerdings nicht im
1.19
Prototyping, sondern unterstützen den Entwurf und die Simulation stark heterogener
Systeme (Mischsysteme aus z.B. mechanischen, hydraulischen und elektrischen
Komponenten). Es kann jedoch auch Code für verschiedenen Zielsysteme, z.B. von
der Firma dSpace, Deutschland (siehe weiter hinten) und der Firma SUN, USA
generiert werden.
Im folgenden sollen die heute am häufigsten in der Literatur genannten RCPWerkzeuge kurz in ihrer Leistung beschrieben werden. Die Weiterentwicklung dieser
Systeme geht so rasant voran, dass ihre aktuelle Leistung zeitnah im Internet
"nachgeschlagen" werden sollte.
•
Werkzeuge der Firma dSpace, Deutschland
Die dSpace GmbH, eine deutsche Firma mit internationalem Absatzmarkt, entwickelt
und vertreibt RCP-Werzeuge (Hard- und Softwarekomponenten), die direkt aus
Matlab, Simulink und Stateflow heraus Objektkode für verschiedene Zielcontroller
erzeugen können. Der Code kann dann unter Echtzeitbedingungen als "Softwareoder Hardware-In-The-Loop-Struktur" (vergleiche Kapitel 1.2.6) getestet werden.
dSpace nennt die Software, mit der aus einer Simulink-Struktur (vergleiche Kapitel
1.2.3 und 3.4) lauf- und echtzeitfähiger Code generiert werden kann, "TargetLink"
/106/.
Hinter TargetLink verbergen sich modular erweiterbare Softwarekomponenten mit
denen z.B. Code für die gängigsten Frescale-, Infineon- und Renasas-Mikrocontroller
und Mikroprozessoren generiert werden können. Haupteinsatzgebiet dieses dSpaceWerkzeugs ist die Automobilindustrie. Dies ist auch daran zu erkennen, dass
TargetLink automobilspezifische Softwaremodule, wie
•
AUTOSAR und
•
OSEK
unterstützt. AUTOSAR steht für "AUtomoTive Open System ARchitecture" und ist ein
offener Standard für Software Architekturen von vernetzten Mikrocontrollern in
Kraftfahrzeugen. AUTOSAR ist ein Schichtenmodell und standardisiert die Schichten
zwischen Anwendungssoftware/Applikation Layer (z.B. Einparkhilfe, adaptives
Abblendlicht) und die über einen CAN-Bus vernetzte Mikrocontrollerhardware /107/.
1.20
Bild 1 2 2: Die AUTOSAR-Architektur
Die Grundidee von AUTOSAR lautet: Zusammenarbeit bei Standards, Wettbewerb
bei der Implementierung von Funktionen.
OSEK geht von ähnlichen Intentionen aus, es steht für "Offene Systeme und deren
Schnittstellen für die Elektrik im Kraftfahrzeug". Das OSEK-Konzept wird durch die
Standards
OSEK-OS:
Ein Betriebssystem/Operating System, das auf die Belange der KFZIndustrie ausgerichtet ist.
OSEK-OIL: Eine Implementierungssprache (OSEK Implementation Language) mit
der
Betriebssystemobjekt
(Tasks,
Interrupts,
Ressourcen,
usw.)
angelegt werden können.
OSEK-ORTI: Ein OSEK Run Tme Interface zum Debuggen in Echtzeit.
OSEK-COM: Beschreibt die Kommunikation (Communication) zwischen Tasks und
auch verteilten Mikrocontrollern.
OSEK-NM: Beschreibt das Netzwerkmangement (Network Management) zwischen
den einzelnen Mikrocontrollern.
getragen.
1.21
•
Das RCP-Werkzeug ASCET
ASCET /113/ ist eine sehr spezifische Entwicklungsumgebung für hierarchisch
gekoppelte eingebettete Steuerungs- und Regelungssysteme im Automobilsektor.
ASCET ist eine Entwicklung der deutschen Firma ETAS und ist weltweit verbreitet.
ASCET unterstützt auch die modellbasierte Entwicklung von Komponenten für
Steuergeräte-Anwendungssoftware
nach
dem
AUTOSAR-Entwurfsprinzip
mit
anschließender automatischer Codegenerierung für Steuergeräte. Der generierte
Code, der mittels der Programmiersprache MISRA-C (Motor Industrie Software
Reliability Association) erzeugt wird, zeichnet sich durch die Einhaltung von
sogenannten Sicherheits-Integritäts-Level (SIL) aus. Aus dem angestrebten zu
erreichenden Level ergeben sich Konstruktionsprinzipien für die Hard- und Software,
die eingehalten werden müssen, damit das Risiko einer Fehlfunktion minimiert wird.
Simulink-Strukturen lassen sich in ASCET integrieren.
•
LabView
LabView (Laboratory Virtual Instrumentation Engeneering Workbench) /114/ ist ein
Produkt der Firma National Instruments (NI), USA, das mittels grafischer
Programmierung (ähnlich wie Simulink) primär zur Messdatenerfassung und
Datenanalyse (Mittel-wertbildung, Filterung, Spektralanalyse, usw.), also in der
Messtechnik eingesetzt wird. Ursprünglich diente diese Software zur Demonstration
der Leistungsumfangs der von NI hergestellten A/D-D/A-Wandler-Einsteckkarten für
PC's. In der neuesten Version (≥ 8) ermöglicht LabView auch die Programmierung
von Mikrocontrollern und DSP's. Es unterstützt auch einige Echtzeitbetriebssysteme.
Mittels der Software "NI LabView Simulation Interface Toolkit" lassen sich auch
Simulink-Strukturen in LabView einbinden und in Echtzeit z.B. auf NI-Harware
implementieren.
•
MATRIXx
MATRIXx /115/ ist ein Sammelbegriff einer auch von der Firma National Instruments
vertriebenen Software, die sich in drei Produktgruppen gliedert: Xmath, SystemBuild,
AutoCode.
1.22
NI Xmath: Ist eine interaktive Arbeitsumgebung für numerische Berechnungen,
Visualisierung und Entwicklung von Regelungsstrukturen. Grundlage von
Xmath ist MathScript, eine Hochsprache, die in Funktionsweise und
Umfang mit Matlab vergleichbar ist. Die Interaktivität von spezifischen
Anwendungsprogrammen (z.B. zur Reglerentwicklung) wird, auch wie
bei Matlab, mit GUI's (Graphical User Interfaces) hergestellt. Der
Funktionsumfang von MathSkript kann auch durch sogenannte "add-on
modules" , z.B. zur Signalverarbeitung oder Systemidentifikation
erweitert werden.
NI SystemBuild: Ist eine grafische Arbeitsumgebung zum Aufbau zu simulierender
Systemmodelle
aus
Systemsimulationen.
grafischen
SystemBuild
ist
Funktionselementen
erweiterter
mit
für
funktions-
spezifischen "add-on libraries" für z.B. neuronale Netze, Fuzzy Logik und
zur Simulation von Zustandsautomaten. SystemBuild unterstützt dabei
sowohl Gleit- als auch Festkommarechnung.
Auch hier ist die Ähnlichkeit mit Simulink und Stateflow von The
Mathworks verblüffend.
NI AuotCode:
Ist ein Werkzeug zur automatischen Codegenerierung aus
SystemBuild-Blockdiagrammen. Es besteht die Wahl, ob C- oder AdaCode generiert werden soll. Es werden sowohl kontinuierliche als auch
zeitdiskrete Systeme -auch mit verschiedenen Abtastraten- generiert.
Damit wird RCP im Echtzeitbetrieb möglich. Mit AutoCode add-on
Modulen lässt sich Code für Multiprozessorsysteme generieren.
•
Matlab / Simulink
Mit dieser Entwicklungsumgebung werden wir uns im Rahmen dieses Skriptes näher
auseinandersetzen. Wir gehen im nächsten Kapitel 1.2.3 zunächst kurz und dann
etwas intensiver im Kapitel 3 auf Matlab/Simulink ein. Praktisch anwenden werden
wir ausschließlich Matlab/Simulink.
1.23
1.2.3 Von der Systemspezifikation zum Objektkode
Nachdem wir gesehen haben, dass das Konzept des Prototypen offensichtlich die
zuverlässigste Methode ist, von einer Systemspezifikation zu einer eingebetteten
Realisierung zu gelangen, an der man nachweisen kann, dass die Spezifikationen
erfüllt sind (wir hatten diesen Prototypen "konzeptorientiert" genannt) und man
darüber hinaus mit einem "implementierungsorientierten" Prototypen sogar die
Funktionstüchtigkeit eines Steuergerätes in seiner späteren Arbeitsumgebung
vollständig nachweisen kann, wollen wir in diesen Kapitel zeigen
•
mit welchen Matlab-Komponenten dies gelingt und
•
wie man aus einer Simulink-Struktur automatisch lauffähigen Objektcode
erzeugt.
1.2.3.1
Matlabkomponenten
prototypen
zum
Entwurf
konzeptorientierter
Regler-
Um zu einer Systemspezifikation für einen Regler zu gelangen (Festlegung welcher
Reglertyp eingesetzt und wie die Parameter eingestellt werden sollen), muss man
nach regelungstechnischen Gesichtspunkten einen Regler entwerfen. Dazu benötigt
man ein mathematisches Modell der Regelstrecke. Um dieses bei einem realen
Problem zu erhalten, muss eine Systemidentifikation vorgenommen werden, die
zweckmäßigerweise rechnergestützt vorgenommen wird. Auf der Basis dieses
Streckenmodells kann nun eine Regler ausgewählt und nach verschiedenen
Methoden, die die Regelungstechnik lehrt, parametriert werden. Bevor man daran
geht, diesen Regler als Prototypen zu realisieren, erweist es sich als zweckmäßig,
den Regelkreis, von dem jetzt jede Systemkomponente bekannt ist, zunächst unter
Simulink zu simulieren. Auf der Basis dieser Simulation kann im ersten Ansatz
überprüft werden, ob die Reglerauslegung prinzipiell gelungen ist, das heißt, ob der
Kreis Führungsgrößen wunschgemäss folgt, Störungen ausregelt und ob z. B. die
Stellgröße bei bestimmten im Betrieb auftretenden Führungs- und Störgrößen
übersteuert wird. Erst jetzt ist der Entwurf eines konzeptorientierten Prototypen
sinnvoll.
Wegen der Wichtigkeit dieser Vorgehensweise wird diese sehr ausführlich im
Kapitel 4 "Praktisches Rapid Control Prototyping" beschrieben und als globale
Handlungsanweisung für die das RCP herangezogen.
1.24
Jetzt soll zunächst erläutert werden, welche Matlab-Programme für die Realisierung
des konzeptorientierten Prototypen benötigt werden.
In Kapitel 1.2.1 wurde schon angedeutet, dass Matlab das konzeptorientierte RCP
mit zwei verschiedenen Softwarewerkzeugen unterstützt, nämlich dem sogenannten
xPC- und mit dem Windows-Target. Wir wollen uns auf das Windows Target konzentrieren, weil es uns zur praktischen Arbeit im Labor für Regelungstechnik zur
Verfügung steht.
An dieser Stelle soll ein gewisses Grundverständnis für die Funktion und das
Zusammenspiel der eingesetzten Matlab-Komponenten geweckt und insbesondere
anschaulich gezeigt werden, wie Matlab automatisch aus einer Simulink-Struktur ein
compilier- und in den Arbeitsspeicher ladbares Programm erzeugen kann.
In Kapitel 3.4.1 "Praktische Nutzung des Realtime Workshops und des Realtime
Windows Targets" wird dann vertiefend auf die praktische Nutzung dieser
Werkzeuge eingegangen.
Zur Nutzung des Real-Time Windows Target wird an Hardware
•
Ein (möglichst moderner) PC und
•
eine A/D-D/A-Wandler-Karte, die kompatibel zum Real-Time Windows Target
ist (nähere Einzelheiten sieh /8/)
benötigt. Folgende Softwarekomponenten müssen auf dem PC installiert sein:
•
Das Betriebssystem Windows XP,
•
Matlab /10/,
•
Simulink /11/,
•
der Real-Time Workshop /9/,
•
das Real-Time Windows Target /8/ und
•
der Open Watcom C/C++ Compiler /110/.
(siehe Anhang A1, welche Softwareversionen im Labor für Regelungstechnik
verfügbar sind.)
Die Kenntnis der Funktion und des Umgangs mit Matlab und Simulink als CAEProgramm für die System- und Regelungstechnik, wie sie z.B. in /4/ vermittelt wird,
wird vorausgesetzt. Der weiterhin benötigte Real-Time Workshop ist eine
Erweiterung der Leistungen von Simulink: er generiert aus Simulink-Strukturen
1.25
automatisch einen Beschreibungscode, erzeugt daraus C-Quellcode, compiliert und
verlinkt ihn mit anderen notwendigen Funktionen, so dass er, geladen in die
Zielhardware die Funktion der ursprünglich entworfenen Simulink-Struktur realisiert.
Allein, ohne zusätzliche Installation der Zielort- (Target-) Software, z.B. des RealtimeWindows Targets, mit dem wir uns hier auseinandersetzen wollen, unterstützt der
Real-Time
Workshop
sogenannte
"Rapid
Simulations".
Das
sind
Simulationsstrukturen, die ca. 5 - 20 mal schneller ablaufen als allein unter Simulink.
Nähere Einzelheiten dazu finden sich in Kapitel 12 von /9/.
Mit der zusätzlich installierten Targetsoftware Real-Time Windows Target kann man
den erzeugten Objektcode auf einem PC in Echtzeit laufen lassen. Um in diesem
Rahmen einen per Simulink erzeugten Regler mit der realen Regelstrecke verbinden
Bild 1.2.3 : Ausschnitt aus dem Blockset des Real-Time Windows Target
zu können, muss die weiter oben beschriebene A/D-D/A-Wandler-Karte
im PC
installiert sein. Während der Installation des Real-Time Windows Target wird dieser
über die Auswahl eines kartenspezifischen Treibers mit der Karte verbunden. In der
Block Library von Simulink taucht dann in einer Unterbibliothek "Blocksets &
1.26
Toolboxes"
das Blockset Real-Time Windows Target auf. Führt man einen
Doppelklick auf dieses Blockset aus, öffnet sich des Fenster, wie es im
vorangehenden Bild 1.2.3 dargestellt ist.
Jeder darin befindliche Simulationsblock ist das Symbol eines speziellen Ein- oder
Ausgangs der sich im PC befindlichen A/D-D/A-Wandler-Karte.
Versieht man einen unter Simulink als Übertragungsfunktion realisierten zeitdiskreten
PI-Regler mit vorgeschalteter Vergleichseinrichtung und der Möglichkeit der
Aufschaltung einer Führungsgröße (z.B. Step Function für einen Führungssprung)
0.2973 -z+0.2828
z-1
Step
Discrete
Transfer Fcn
Bild 1.2.4: Ein zeitdiskreter PI-Regler
mit einem Analog Input für die Messgröße und einem Analog Output für das
Stellsignal, kann man nach der Implementierung des daraus mit dem RTW und dem
RT Windows Target erzeugten Objektcodes der PC über die A/D-D/A-Wandler-Karte
als PI-Regler an der PC-externen Regelstrecke arbeiten:
0.2973 -z+0.2828
z-1
Step
Analog Input
Discrete
Transfer Fcn
Analog
Output
Analog Output
Analog
Input
Bild 1.2.5: Ein zeitdiskreter PI-Regler mit analog Input- und Output-Blöcken
Die Umsetzung einer Simulink-Struktur in ausführbaren Objektcode wird bei Matlab
"Build"-Prozess genannt. Mit diesem Vorgang wollen wir uns im folgenden kurz
beschäftigen.
Solange wir Rapid Prototyping betreiben wollen, wird die praktische Ausführung
dieses Prozesses nach der Installation und Konfiguration der notwendigen Matlab1.27
software nicht mehr als die Betätigung eines Softwarebuttons bedeuten.
Im ersten Schritt übersetzt der RTW die Simulink-Struktur, die den Filenamen
"model.mdl" tragen möge in eine vom Menschen lesbare verbale Beschreibung in
Form einer Skriptsprache aus ASCII-Zeichen. Das erzeugte File wird von der
Software "model.rtw" genannt. Dieser Code dient als Input für den sogenannten
"Target Language Compiler" (TLC). Der TLC wird von der gewählten Targetsoftware,
in unserem Falle also von RT Windows Target bereitgestellt. (Er wird bei Matlab
"System Target File" genannt und trägt beim RT Windows Target den Namen
"rtwin.tlc".) Der TLC kompiliert die Modellbeschreibung "model.rtw" in den für das
Target spezifischen C-Code (model.c, model.h), in unserem Falle für eine Pentium
CPU mit PC-Peripherie.
Anschließend erzeugt der Real-Time Workshop mit Hilfe des sogenannten Make
commands "make.rtw.m" aus einem Muster- (Template-) Makefile "rtwin.tmf" (wobei
tmf für template make file steht) ein für das Windows Target zugeschnittenes
Makefile mit dem Namen "model.mk". dieses Makefile dient zur Steuerung der
Erzeugung des Objektcodes aus den vorher erzeugten C-Quellen. Dazu wird die IDE
des Watcom Compilers eingesetzt.
Der Real-Time Workshop stellt weiterhin ein sogenanntes "Run-Time Interface" zur
Verfügung, das folgende Komponenten enthält:
•
Schnittstellen nach Windows (z.B. für Signalplots auf Simulink-Scopes),
•
Ein-/Ausgabetreiber , z.B. für die Analogsignal-Ein-/ und Ausgabe über die A/DD/A-Wandler-Karte,
•
Integrationsalgorithmen (sog. "Solver" zur numerischen Lösung/Simulation
kontinuierlicher ,dynamischer Systemkomponenten)
Das "Run-Time Interface" und der Modellcode werden zusammen kompiliert, woraus
die ausführbare Datei "model.exe" entsteht, in ihr wird das "model" unter dem "RunTime Interface" ausgeführt.
1.2.3.2
Matlabkomponenten zum Entwurf implementierungsorientierter
Prototypen
Nachdem im vorangegangenen Kapitel beschrieben wurde, welche Matlab/SimulinkProgramme zum Entwurf von konzeptorientierten Prototypen benutzt werden können.
Sollen in diesem Kapitel sukzessive die Programme und ihre Leistungen beschrieben
1.28
werden, mit denen ein implementierungsorientiertes Rapid Control Prototyping
vorgenommen werden kann.
Im Rahmen des Masterstudiengangs "Technische Informatik - Embedded Systems"
soll dazu als Zielsystem ("Target") ein C167 Mikrocontroller der Firma Infineon auf
einem Board ("Development Kit") der Firma Phytec dienen.
Zur Nutzung des C166-Targets wird an Hardware
•
ein moderner PC als Hostrechner mit einer RS 232-Schnittstelle,
•
ein entsprechendes Kabel zur Kopplung zwischen Hostrechner und PhytecBoard und
•
ein Phytec-Board mit C167-Mikrocontroller.
Folgende Softwarekomponenten müssen darüber auf dem PC installiert sein:
•
Das Betriebssystem Windows XP,
•
Matlab /10/,
•
Simulink /11/,
•
Real-Time Workshop /9/,
•
Real-Time Workshop Embedded Coder /12/,
•
Link for Tasking /13/,
•
Target for Infineon C166 /14/ und
•
Tasking Compiler mit Entwicklungsumgebung der Firma Altium /111/.
Um später Messungen am entworfenen Regler, bzw. am Regelkreis vornehmen zu
können, ist es sinnvoll, wenn sich auf dem Host-PC noch - wie beim
konzeptorientierten RCP - eine A/D-D/A-Wandler-Karte im PC befinden würde und
das Real-Time Windows Target installiert wäre.
Da zur Zeit noch keine tiefergehenden Erfahrungen mit den vorangehend genannten
Entwurfswerkzeugen gesammelt wurden, muss dieses Kapitel zunächst noch ein
Fragment bleiben. Es wird ständig durch Ergebnisse von Bachelor-, Diplom- und
Masterarbeiten ergänzt und erweitert.
Die Leserin / der Leser sind eingeladen, sich durch eigene Abschlussarbeiten an der
Vervollständigung des Skripts zu beteiligen.
1.29
1.2.4. Echtzeitbetrieb
Ohne den Begriff Echtzeitbetrieb
exakter zu definieren, wurde er in den
vorangehenden Betrachtungen häufig verwendet mit der Eigenschaft umschrieben,
dass ein eingebettetes System einen technischen Prozess schritthaltend steuern
oder überwachen muss.
Weil die Echtzeitfähigkeit eine zentrale Forderung an Steuer- und Regelgeräte ist,
soll der Begriff in diesem Kapitel etwas näher erläutert und Methoden dargestellt
werden, wie die Echtzeitfähigkeit eingebetteter Systeme herbeigeführt werden kann.
Dazu wollen wir zunächst die in /1/ kurz und treffend beschriebenen Definitionen und
Funktionsbeschreibungen eines Echtzeitsystems zitieren und anschließend zeigen,
dass sich Echtzeitverhalten von Steuergeräten
•
einerseits mit einem Echtzeitbetriebssystem und
•
andererseits wesentlich einfacher, wenn auch nicht so vollkommen, mit
periodischen Interrupts
realisieren lässt. (Die Nutzung periodischer Interrupts als Alternative zu einem
Echtzeitbetriebssystem wird in der Matlab-Literatur häufig "bare baord"-Umgebung
genannt, weil die Modellsoftware des Steuergeräts auf einem Board ohne
Betriebssystem läuft.
Der Real-Time Workshop von Matlab unterstützt beide Methoden. Wir werden uns
auf die im Regelungstechnik-Labor verwendete Methode der periodischen Interrupts
konzentrieren.
In /1/ werden Echtzeitsysteme wie folgt beschrieben:
"Von elektronischen Systemen wird verlangt, dass strenge Zeitbedingungen
eingehalten werden müssen. Charakteristisch für diese Klasse von Systemen ist,
dass z. B. auf Prozeßstörungen in Echtzeit (engl. real–time) reagiert werden muss
und sofort korrigierende Maßnahmen eingeleitet werden. Je nach Anwendungsgebiet
unterscheiden sich die geforderten Zeitbedingungen stark und damit existieren
verschiedene Interpretationen von dem Begriff “Echtzeit”.
Nach DIN 44300 wird Echtzeit wie folgt definiert: Unter dem Begriff Echtzeitbetrieb
wird ein Rechnersystem verstanden, bei dem Programme zur Verarbeitung
anfallender
Daten
ständig
betriebsbereit
1.30
sind,
derart,
dass
die
Verarbeitungsergebnisse innerhalb einer vorgegebenen Zeitspanne verfügbar sind.
Somit ist ein Echtzeitsystem eine Hardware/Softwarekombination, die Daten
empfängt, diese verarbeitet und die Ergebnisse innerhalb einer definierten
Zeitspanne an den Prozeß weitergibt.
Diese Definition nimmt jedoch keine quantitative Aussage über die Länge der
Zeitspanne vor. Diese wird anwendungsspezifisch für unterschiedliche Bereiche
festgelegt und kann von einigen Mikrosekunden bei Spracherkennungssystemen bis
zu einigen Sekunden bei Feueralarmsystemen reichen.
Während bei konventionellen Systemen die Richtigkeit einer Berechnung im
Vordergrund steht und der Zeitpunkt für die Bereitstellung des Ergebnisses
zweitrangig ist, muss im Echtzeitsystem zu einem geforderten Zeitpunkt das
Ergebnis zwingend vorliegen. Echtzeitsysteme werden in ihrer Verarbeitung von
externen Ereignissen (z.B. Interrupts) unterbrochen. Daraufhin muss die Wichtigkeit
des externen Ereignisses bewertet werden und gegebenenfalls direkt in die
Verarbeitung eingegriffen werden. Die zur Verarbeitung anfallenden Daten und
Ereignisse können dabei zu zyklischen Zeitpunkten auftreten oder einer zufälligen
Verteilung unterliegen. Unabhängig von den eingehenden Daten und Ereignissen
ums ein Echtzeitsystem die vorgegebene Reaktionszeit auch im schlechtesten
anzunehmenden Fall (engl. worst case) einhalten.
Neben der Einteilung in anwendungsspezifische Klassen unterscheidet man bei
Echtzeitsystemen auch die Folgen der Nichteinhaltung einer Reaktionszeit. Führt die
Nichteinhaltung zu schwerwiegenden Störungen oder Systemabstürzen, spricht man
von harten Echtzeitbedingungen. Beispiele für solche Systeme sind Anti–Blockier–
Systeme bei Bremsanlagen von Automobilen oder Systeme zur Schnellabschaltung
bei kritischen Zuständen in Kraftwerken. Hat die Nichteinhaltung lediglich eine
tolerierbare Rechenungenauigkeit zur Folge, bezeichnet man dies als weiche
Echtzeitbedingung. Ein Beispiel hierfür sind Klimaanlagen.
•
Echtzeitbetriebssysteme
Bei Echtzeitsystemen wird häufig von einer parallelen oder verteilten Verarbeitung
Gebrauch
gemacht.
Unter
Berücksichtigung
der
Zeitbedingungen
ist
die
Synchronisation der Tasks eines Echtzeitsystems eines der vordringlichsten
Probleme. Zur Unterstützung bei der Programmierung von Echtzeitsystemen
gelangen deswegen spezielle Echtzeitbetriebssysteme (engl. real–time operating
ystems) zum Einsatz, die Mechanismen zur Verwaltung der Betriebsmittel zur
1.31
Verfügung stellen und als Schnittstelle zwischen Systemumgebung und der
Anwendung dienen. Betriebsmittel stellen in diesem Zusammenhang alle Mittel dar,
die von einer Task benötigt werden, um durchgeführt werden zu können. Dazu
zählen Prozessor, Speicher, Peripheriegeräte sowie Programme, Daten, Variablen
und Dateien. Beim Echtzeitbetrieb werden die Aufträge direkt in Form von einzelnen
Programmen vergeben, die abgearbeitet werden müssen. Um den zeitlichen
Anforderungen
zu
Tasksteuerung
(engl.
entsprechen,
task
besitzt
control),
die
das
die
Echtzeitbetriebssystem
einzelnen
Tasks
eine
verarbeiten,
unterbrechen oder beenden kann. Die Ablaufplanung dieser Tasksteuerung bestimmt
die Zuteilungsstrategie, nach der die Prozessorleistung an Tasks verteilt werden.
Dieser Vorgang wird als Task–Scheduling bezeichnet. Die Ablaufplanung muss auch
im worst case Fall die korrekte Verarbeitung gewährleisten. Ist ein System jedoch mit
der Abarbeitung von Tasks überlastet, so dass keine korrekte Verarbeitung mehr
gewährleistet ist, muss das elektronische System bei der Erkennung von
Zeitverletzungen in einen sicheren Zustand übergehen. Es sollte bereits bei der
Auslegung des Systems beachtet werden, dass eine Zeitverletzung ausgeschlossen
werden kann. Um dies zu gewährleisten, muss man die Machbarkeit des
Schedulings (engl. schedulability) nachweisen.
Echtzeitbetriebssysteme sind in der Regel modular aufgebaut und sind bezüglich
ihrer Funktionalität skalierbar (Bild 1.2.6).
Bild 1.2.6: Skalierbares Echtzeitbetriebssystem VxWorks
Dies gilt insbesondere für die Klasse der eingebetteten Systeme, denen oftmals nur
wenig Speicher und eine geringe Prozessorleistung zur Verfügung stehen. Neben
1.32
den stets vorhandenen Grundfunktionen lassen sich bei Bedarf weitere Funktionalität
z.B. zur Datei– oder Netzwerkverwaltung einbinden. Die spezifische Anpassung
eines Echtzeitbetriebssystems an eine Hardwareplattform geschieht über ein Board
Support Package, das dem Betriebssystem das Ansprechen der vorhandenen
Hardware (z.B. Timer, Speicher, Ein–/Ausgabekanäle) ermöglicht.
Der Kern (engl. kernel) eines Echtzeitbetriebssystems besteht aus den elementaren
Systemfunktionen zur Pflege des Systemtakts sowie der Synchronisation und
Verwaltung von Tasks. Er unterscheidet sich insbesondere bei der Unterbrechbarkeit
zu
konventionellen
Betriebssystemen.
Echtzeitbetriebssysteme
sind
voll
unterbrechbar (engl. full–preemptive) und besitzen damit die Möglichkeit, einen
Interrupt
direkt
bei
dessen
Auftreten
zu
bearbeiten.
Betriebssysteme
mit
Unterbrechungspunkten (z.B. Microsoft Windows) bearbeiten einen Interrupt nach
dem Erreichen des nächsten Unterbrechungspunktes (engl. preemption points). Bei
einem nicht unterbrechbaren Kernel (engl. non–preemptive) kann erst nach
Beendigung eines Systemaufrufs auf einen Interrupt reagiert werden.
Bei der Erstellung von Echtzeitsystemen wird häufig versucht, unabhängige
Aufgaben mit verschiedenen Tasks zu realisieren und die zeitlich korrekte
Abarbeitung dem Echtzeitbetriebssystem zu überlassen. Um bestimmen zu können,
welche Task als nächste ausgeführt werden soll, bzw. welche Tasks überhaupt
ausgeführt werden können, teilt ein Echtzeitbetriebssystem Tasks in unterschiedliche
Klassen ein. Insgesamt existieren sechs solcher Klassen:
•
Existent.
•
Nicht existent.
•
Eine Task ist bereit (engl. ready), wenn lauffähig ist, d.h. sie hat alle
Betriebsmittel außer dem Prozessor zugeteilt bekommen.
•
Eine Task ist laufend (engl. running), wenn sie in diesem Augenblick
ausgeführt wird und damit den Prozessor benutzt.
•
Eine Task ist blockiert (engl. blocked), wenn sie nicht ausgeführt
werden kann, weil sie auf die Zuteilung von Betriebsmitteln
oder ein Unterbrechungssignal wartet.
•
Eine Task ist beendet (engl. terminated), wenn sie alle ihre
Anweisungen abgearbeitet und die ihr zugeteilten Betriebsmittel
zurückgegeben hat.
1.33
Bild 1.2.7: Mögliche Taskzustände und Zustandsübergänge
In Bild 1.27 ist dargestellt, welche Übergänge zwischen den sechs Zuständen
möglich sind. Eine Task darf sich dabei nur in einem der Zustände aufhalten. Die
Zustandsübergänge werden vom sogenannten Dispatcher durchgeführt.
•
Task-Scheduling
Der Scheduler eines Echtzeitbetriebssystems bestimmt, wann welche Task
ausgeführt wird. Hierbei stehen mehrere unterschiedliche Verfahren zur Verfügung:
•
Beim Round–Robin Scheduling werden die Tasks zyklisch geordnet und
erhalten den Prozessor für eine definierte Dauer (einem sogenannten Time–
Slice) zugeteilt. Nach Ablauf dieser Dauer wird die Task in jedem Fall
unterbrochen und die nächste Task wird aktiviert. Dieses Verfahren wird
hauptsächlich dann eingesetzt, wenn alle Tasks gleich wichtig sind und die
Prozeßlaufzeiten abgeschätzt werden können.
•
Beim prioritätsbasierten Scheduling erhält jede Task eine bestimmte Priorität
zugewiesen. Der Scheduler führt dann die Task mit der höchsten Priorität aus.
Wird eine sich gerade in der Ausführung befindende Task zugunsten einer
freigeschalteten Task mit höherer Priorität unterbrochen, bevor sie ihre eigene
Abarbeitung
beendet
hat,
spricht
man
von
preemptiven
Scheduling.
Prioritätsbasiertes Scheduling eignet sich für Echtzeitbetriebssysteme.
•
Das Hybrid–Scheduling stellt eine Verbindung der beiden oben genannten
1.34
Scheduling–Mechanismen dar. Dabei werden Tasks, die die gleiche Priorität
besitzen, per Round–Robin Scheduling abgearbeitet.
Trotz der prioritätsbasierten Scheduling–Verfahren kann es zu unerwünschten
Effekten bei der Abarbeitung von Tasks kommen. Dies ist in Bild 1.2.8 dargestellt.
Greift eine Task C mit niedriger Priorität auf eine Ressource (beispielsweise über
eine Semaphore, siehe dazu nächstes Unterkapitel) zu, während zur gleichen Zeit
Task A, die eine höhere Priorität besitzt, die Ressource benötigt, muss Task A
warten, bis die Ressource von Task C freigegeben wird. Dieser Vorgang ist
beabsichtigt und dient der Datenkonsistenz. Wird zum Zeitpunkt t2 allerdings Task B
mit einer mittleren Priorität erzeugt, so wird sie Task C unterbrechen, da sie mit
einer
Bild 1.2.8: Prioritätsumkehr und Prioritätsvererbung
höheren Priorität ausgestattet ist. Damit ergibt sich der unerwünschte Effekt, dass die
mit höchster Priorität versehene Task A sowohl auf Task B als auch auf Task C
warten muss. Dieser Effekt wird als Prioritätsumkehr oder Prioritätsinversion
bezeichnet.
Um dieses Problem zu umgehen, vererbt Task A seine Priorität an Task C. Dabei
wird bei der Beanspruchung einer blockierten Ressource die Priorität der höher
priorisierten Task an die niedriger priorisierte Task weitergereicht. Dieses Verfahren
führt unter Beachtung der Prioritäten weiterer Tasks zu der schnellstmöglichen
Freigabe der Ressource. Task B ist in diesem Fall nicht mehr in der Lage, die
1.35
Abarbeitung von Task C zu unterbrechen. Man spricht in diesem Fall von
Prioritätsvererbung. Bild 1.2.8 unten zeigt die Abarbeitung der drei Tasks nach
Einführung der Prioritätsvererbung.
Die Bereitstellung von Mechanismen zur Interprozeßkommunikation zählt zu den
wichtigsten
Aufgaben
eines
Echtzeitbetriebssystems.
Unter
Interprozeß-
kommunikation versteht man die Möglichkeit, Informationen zwischen verschiedenen
Tasks auszutauschen. Da einzelne Tasks im allgemeinen keine selbständigen
Einheiten darstellen, sondern auf Datenaustausch mit anderen Tasks angewiesen
sind, werden Kommunikationsmittel benötigt, die den Datenaustausch und die
Synchronisation der Tasks übernehmen. Kommunikationsmechanismen, die für
diese Aufgaben verwendet werden, sind im folgenden aufgeführt.
•
Semaphoren zeigen die Verfügbarkeit von Ressourcen an und können auf
nahezu alle Betriebsmittel angewendet werden. Häufig werden Semaphoren auf
speziell für diesen Zweck definierte Variablen angewendet und dienen der
Synchronisation von Tasks. Solange eine Task eine Semaphore besitzt, muss
jede andere Task warten, die auf dieselbe Semaphore zugreifen will, bis die
Semaphore wieder freigegeben wird. Die wartende Task geht in den Zustand
”blockiert” über. Erst nach Freigabe der Semaphore kann die wartende Task auf
die Ressource zugreifen und kann weiter verarbeitet werden.
•
Message Queues dienen der Übermittlung von Daten beliebiger Länge.
•
Ein Shared Memory stellt einen Bereich dar, der von mehreren Tasks zur
gleichen Zeit benutzt werden kann. Beim Datenaustausch über Shared Memory
besitzen die Tasks einen Zeiger auf einen global definierten Speicherplatz, der
sowohl lesend als auch schreibend benutzt werden kann. Normalerweise wird
vor einem Lese– oder Schreibvorgang eine Semaphore auf diesen Bereich
gesetzt, um eine definierte Benutzung zu gewährleisten.
•
Asynchrone Signale entsprechen einem Software–Interrupt und können
zwischen Tasks das Auftreten von Ereignissen signalisieren. " (Ende des Zitats
aus /1/)
1.36
Echtzeitbetrieb mit dem Real-Time Workshop von Matlab
Auch der Real-Time Workshop kann unter einem Echtzeitbetriebssystem, nämlich
Tornado/VxWorks /112/ der Firma Wind River, Inc, USA, laufende Echtzeitapplikationen auf verschiedenen Mikroprozessoren und -Controllern generieren.
Tornado
ist
eine
integrierte
Echtzeitanwendungen.
Man
Entwicklungsbenutzt
und
Tornado
Ausführungsumgebung
zur
Cross-Entwicklung
für
von
Applikationen auf einem Host-PC, zum Downloaden der Anwendung in den Echtzeitprozessor und zum starten der Anwendung. Optional kann man die Aktivitäten des
Echtzeitsystems beobachten (grafische Signalverläufe) und Parameter ändern.
Tornado beinhaltet
•
Application building tool: Compiler, Linker, Make utility,
•
Interactive development tools: Editor, Debugger, Browser, Configuration Tool,
•
VxWorks: Hochleistungs Echtzeitbetriebssystem,
•
StethoScope: Datenerfassung und Monitoring System.
Zur Unterstützung der Tornado Umgebung, die von Wind River, Inc. zugekauft
werden muss, stellt der Real-Time Workshop das sogenannte "Tornado Target" zur
Verfügung (/9/, Kapitel 13). Diese Target wandelt Simulink-Modelle in eine Code der
mit Tornado-Werkzeugen korrespondiert und unter VxWorks läuft. Die Beobachtung
des in Echtzeit laufenden Systems kann mit dem vorangehend genannten
StethoScope
oder
auch
mit
Simulink-Scopes
durchgeführt
werden.
Auch
Parameteränderungen in Modell sind über Simulink (External Mode) möglich.
•
Echtzeitbetrieb mit dem Real-Time Workshop mittels periodischer Interrupts
(Bare Board Betrieb)
Um sich eine verständliche Vorstellung von der Echtzeitverarbeitng mittels
periodischer Interrupts bilden zu können, ist es sinnvoll, zunächst zu klären, wie eine
Simulink-Struktur zur Berechnung einer Systemantwort (also eine Systemsimulation)
abgearbeitet wird. Wir wollen zu diesem Zwecke wieder unser schon weiter vorn
betrachtetes RC-Glied als Beispiel heranziehen:
Nach /2/ wird das folgende RC-Glied
1.37
R = 50kΩ
uin (t)
uout (t)
C = 10µF
Bild 1.2.8: Eine Widerstands-/Kondensatorkombination
durch folgendes Zustandsmodell beschrieben:
•
= −0,5uc (t) + 0,5uin (t)
uc (t)
uout (t) =
(1.2.1)
uc (t)
Daraus lässt sich folgendes Strukturbild entwerfen:
uc (0)
uin (t)
∫
0,5
uout (t)
0,5
Bild 1.2.9: Strukturbild einer Widerstands-/Kondensatorkombination
Diese Struktur wurde im folgenden Bild 1.2.10 noch weiter verfeinert, um deutlicher
die einzelnen Systemkomponenten und die dazwischen liegen Leitungsverbindungen
Integrator
Eingangs −
erregung
uin
Pr oportional −
glied 1
ep1
Summierer
a0i
ei
ap1 e1s1
as1
Leitung 2
e2s1
Leitung 4
uout
ep2
ap2
e : Eingang
a : Ausgang
p : Pr oportiona lglied
s : Summierer
i : Integrator
ai
∫
0,5
Leitung 1
Speicher
und
Anzeige
Anfangs −
wert
0,5
Leitung 3
Leitung 5
Pr oportional −
glied 2
Bild 1.2.10: Verfeinertes Strukturbild einer Widerstands-/Kondensatorkombination
1.38
zu erkennen. Man sieht, dass das System aus zwei Proportionalgliedern, einem
Summierer und einem Integrator (mit Anfangswertaufschaltung der Zustandsgröße)
besteht. Verbunden sind diese Systemelemente mit fünf Leitungen.
Mit etwas Phantasie kann man sich vorstellen, das diese Information, die in der
Simulationsstruktur vorhanden ist, ausreicht, um daraus automatisch folgenden
lauffähigen Code (hier der besseren Anschauung wegen, Matlab Code) zu erzeugen:
% Matlabcode der Simulationsstruktur des RC-Glieds
% Parameter des Systems
R=50e3;
C=10e-6;
T=R*C;
% Eingangserregung
uin=1;
% Zeitachse
tend=5;
dt=0.001;
% Simulationzeitraum
% Rechenschrittweite
% Anfangswert der Zustands
a0i=0;
% Initialisierung
ap1=0;
ap2=0;
a1s1=0;
ai=0;
ai_alt=0;
k=0;
% Alle Ausgangsignale und
% Anfangswertzwischenspeicher = 0.
% Zählvariable
% Berechnungsschleife der Systemantwort
for t=0:dt:tend;
ep1=uin;
% Leitung
% Proportionalglied 1
ap1=T*ep1;
%
%%%%%%%%%%%%%%%%%%%%%
e1s1=ap1;
% Leitung
e2s1=ap2;
% Leitung
% Summierer 1 %%%%%%%
as1=e1s1-e2s1;
%
%%%%%%%%%%%%%%%%%%%%%
ei=as1;
% Leitung
% Integrierer %%%%%%%
if t==0
%
1.39
1
2
3
4
ai_alt= a0i;
%
end
%
ai=ai_alt+ei*dt;
%
ai_alt=ai;
%
%%%%%%%%%%%%%%%%%%%%%
ep2=ai;
% Proportionalglied 2
ap2=T*ep2;
%
%%%%%%%%%%%%%%%%%%%%%
% Leitung 5
% Ausgangssignalspeicher%
k=k+1;
%
uout(k)=ai;
%
%%%%%%%%%%%%%%%%%%%%%%%%%
pause
end
t=0:dt:tend;
figure(1)
plot(t,uout), grid on
% Plot des
% Ausgangssignals
Es treten darin die vier genannten Systemkomponenten (zwei Proportionalverstärker,
ein Summierer und ein Integrator) und vier Leitungsverbindungen auf. Der Integrator
wird näherungsweise durch eine kumulierte Summe von Rechtecken ei ∗ dt gebildet.
Er ist in der Lage einen Anfangswert der Zustandsgrößen a0i zu berücksichtigen.
(Das Ausgangssignal des Integrators, das auch das Ausgangssignal des
Gesamtsystems ist, wird in einem Speicher uout(k) abgelegt, um es nach
Matlabkonventionen nach Beendigung der Schleifendurchläufe (bei t ≥ tend)
anzeigen zu können.)
Das Programm beginnt mit einer Zuweisung der Systemparameterwerte für R und C
und der Berechnung der entsprechenden Zeitkonstante
T = R∗C = 50kΩ ∗ 10µF = 0,5 sek.
Anschließend werden die Eingangserregung uin = 1, ein Einheitssprung, und der
Anfangszustand der Zustandsgröße a0i = 0 festgelegt. Danach erfolgt die
Parametrierung der späteren Zeitachse, über der die Systemantwort berechnet
werden soll. Zuletzt werden von allen Systemkomponenten die Ausgänge initial auf
Null gesetzt, um von einem definierten Anfangszustand auszugehen.
Die eigentliche Simulation erfolgt in der anschließenden for-Schleife, die bei t = 0
beginnt und (tend / T +1)-mal durchlaufen wird.
Das Ausgangssignal uout wird gespeichert, damit es nach Vollendung der
1.40
Schleifendurchläufe angezeigt werden kann. (So könnte übrigens mit jedem Signal in
der Simulationsschleife verfahren werden.)
In Hinblick auf den Unterschied zwischen Simulation und Echtzeitbetrieb ist es
wesentlich, das innerhalb des Integrators eine if-Abfrage erfolgt, die nur zu einem
Zeitpunkt, nämlich t = 0 wirksam ist und zu einer Zuweisung des Anfangswerts a0i
der Zustandsgröße führt. Das heißt, der Schleifendurchlauf ist zum Zeitpunkt t = 0
etwas länger, womit auch die Programmlaufzeit in diesem Durchlauf etwas länger
dauert als bei den folgenden Durchläufen.
Für eine Simulation ist das unwesentlich und wird kaum bemerkt. Wäre die zu
berechnende Struktur z. B. ein Steuer- oder Regelalgorithmus, der für eine feste
Abtastzeit T entworfen wäre und sollte dieser Algorithmus nun in seiner realen
Umwelt arbeiten, wäre eine solche variable Abtastzeit fatal: Obwohl für eine
bestimmte feste Abtastzeit entworfen, würde der Steuer- oder Regelalgorithmus mit
variablen Abtastzeiten betrieben. Das Ergebnis wären falsche Berechnungsergebnisse.
Davon kann man sich leicht überzeugen, wenn man z. B. eine zeitdiskreten Regler
für eine Abtastzeit T = T1 entwickelt und ihn in einem Regelkreis mit einer anderen
Abtastzeit T ≠ T1 betreibt. Im vorliegenden Fall wäre das Ergebnis nach
unüberschaubarer, weil sich die Abtastzeit während des Betriebs ändert.
Mit Hilfe eines periodischen z.B. mit einem Hardware-Timer getakteten Interrupts, der
im Abstand der Abtastzeit, die zum Entwurf des Steuer-/Regelalgorithmus benutzt
wurde, eine Interrupt-Service-Routine aufruft, kann dieses Problem gelöst werden.
Die Interrupt-Service-Routine dient als Ersatz für die Simulationsschleife des
vorangehend betrachteten
Simulationsprogramms und in ihr werden die gleiche
Berechnungen vorgenommen. Alles bleibt damit gleich, bis auf die Tatsache, dass
das Ergebnis der Rechnung immer nach Ablauf eines festen Zeitintervalls (Abtastzeit
T = Periodendauer des erzeugten Interrupts) zur Verfügung steht.
Man muss lediglich darauf achten, dass innerhalb der Periodendauer zwischen zwei
Interrupts auch der am längsten dauernde Programmabschnitt (bei unserem Beispiel
der Schleifendurchlauf zum Zeitpunkt t = 0) vollständig abgearbeitet werden kann.
Falls der Rechner zur Berechnung des Codes der ehemaligen Schleife länger
braucht als die Zeit zwischen zwei Interrupts, muss entweder der Algorithmus mit
einer größeren Abtastzeit entworfen oder ein schnellerer Rechner genutzt werden.
1.41
Matlab spricht von einer Single Tasking Umgebung, wenn auf einer CPU ein oder
mehrere
Steuer-
oder
Regelalgorithmen
laufen,
die
mit
einer
Abtastzeit
beziehungsweise mit einer Rechenschrittweite betrieben werden.
Laufen auf einer CPU mehrere Algorithmen, die mit verschiedenen Abtastzeiten
betrieben werden, z.B. ein kontinuierliches System mit der Rechenschrittweite dt und
ein zeitdiskretes System mit der Abtastzeit T ≠ dt oder zeitdiskrete Systeme mit
verschiedenen Abtastzeiten T1 ≠ T2 spricht man von einer Multi Tasking Umgebung.
Für eine Single Tasking Umgebung wird folgendes Timing angegeben (/9/, Kapitel 7):
periodische
Interrupts
Abtastzeit /
Re chenschrittweite
Zeitachse
Interrupt − Service − Routine
zur Berechnung des Systemcodes
(Steuer − / Re gelalgorithmus)
Zeit zur Bearbeitung der Hint ergrundtask
Bild 1.2.11: Task Timing für Single Tasking Systeme mit periodischen Interrupts
Die nach oben zeigenden Pfeile stellen die periodischen Interrupts dar, die in
Schritten der Abtastzeit eine Interrupt-Service-Routine auslösen, die einen
Rechenschritt des Steuer-/Regelalgorithmus ausführt. (Das entspricht einem
Schleifendurchlauf des vorangehend beschriebenen Simulationsprogramms.)
Innerhalb dieser Periode werden alle zeitkritischen Operationen ausgeführt:
•
Lesen eines Eingangssignalwerts z. B. vom A/D-Wandler,
•
Berechnung
aller
Ausgangssignalwerte
der
Systemkomponenten
des
Systemmodels/Algorithmus,
•
Berechnung des Ausgangssignalwertes des Gesamtsystems,
•
Ausgabe des berechneten Ausgangssignalwerts z. B. über einen D/A-Wandler.
Nach Beendigung dieser Operationen kehrt die CPU aus der Inerrupt-Service1.42
Routine in eine ständig laufende Hintergrund Task zurück. Hier ermöglicht Matlab die
Erledigung von nicht zeitkritischen Aufgaben, z. B. die Ausgabe des berechneten
Ausgangssignalwerts des Algorithmus über ein Simulink-Scope oder die Änderung
von Parametern im Algorithmus.
Reicht die Zeit zwischen zwei aufeinander folgenden Interrupts nicht aus, um den
Code der Interrupt Service Routine und der Hintergrundtask vollständig abzuarbeiten,
muss, wie schon oben beschrieben, der Algorithmus für eine größere Abtastzeit neu
berechnet oder ein schnellerer Rechner eingesetzt werden.
Ebenfalls in /9/, Kapitel 7, wird Pseudokode angegeben, der die Ausführung der
Interrupt-Service-Routine, die dort den Funktionsnamen rtOneStep ( ) und des
main ()-Programms in dem die Hintergrundtask (Background Task) läuft, etwas
ausführlicher beschreibt:
rtOneStep()
{
Check for interrupt overflow
Enable "rtOneStep" interrupt
ModelOutputs
-- Major time step.
LogTXY
-- Log time, states and outports.
ModelUpdate
-- Major time step.
Integrate
-- Integration in minor time step for
-- models with continuous states.
ModelDerivatives
Do 0 or more
ModelOutputs
ModelDerivatives
EndDo (Number of iterations depends upon the solver.)
Integrate derivatives to update continuous states.
EndIntegrate
}
main()
{
Initialization (including installation of rtOneStep as an
interrupt service routine, ISR, for a real-time clock).
While(time < final time)
Background task.
EndWhile
Mask interrupts (Disable rtOneStep from executing.)
Complete any background tasks.
Shutdown
}
Beginnen wir mit der Erläuterung des Codes beim Hauptprogramm (main ()). Dort
1.43
wird zunächst die Interrupt-Service-Routine initialisiert, in dem ein Hardware-Timer
(real-time clock) so programmiert wird, dass er periodische Interrupts mit der
gewünschten Periodendauer (base sample time) erzeugt. Anschließend geht das
Hauptprogramm für die Zeit "t < final time" in die Hintergrundtask (Background
task),
wo die weiter vorn beschriebenen Aktivitäten, z. B. das Anzeigen von
berechneten
Daten
auf
einem
Scope
vorgenommen
werden.
Soll
die
Echtzeitumgebung nicht ständig laufen, muss für die "final time" ein endlicher
Zeitwert eingetragen werden. Wird dieser dann irgendwann einmal erreicht, wird der
periodische Aufruf der Interrupt-Service-Routine gestoppt (Mask interrupt) und alle
Aktivitäten der Background Task beendet.
Die Interrupt-Service-Routine prüft zunächst immer, ob die vorangegangene ServiceRoutine vollständig abgearbeitet wurde (Check für Interrupt overflow). Ist das nicht
der Fall, wird die Ausführung abgebrochen (z.B. mit "Disable interrupt"). Wurden alle
Befehle innerhalb der Dauer des Interrupts vollständig abgearbeitet, wir die aktuelle
Interrupt-Service-Routine ausgeführt (Enable rtOneStep).
Innerhalb der Service-Routine werden zuerst das oder die Ausgangssignale des
Gesamtsystems berechnet (ModelOutputs) und ausgegeben. Dann werden der
Zeitpunkt
(time),
die
aktuellen
kontinuierlichen
Zustände
(states)
und
die
Ausgangsgrößen der Systemelemente (outports) gespeichert (Log). Anschließend
werden die Ausgangssignale aller Systemelemente (zeitdiskrete Blöcke und alle
anderen Blöcke ohne kontinuierliche Zustände)
auf die aktuell anliegenden
Eingangssignale berechnet. Die Integrationsschleife zwischen "Integrate und
EndIntegrate" berechnet die kontinuierlichen Zustände und Ausgangssignale
eventuell vorhandener kontinuierlicher Übertragungsblöcke.
Der Pseudocode berücksichtigt die Tatsache, dass eine solche Berechnung mittels
eines numerischen Integrationsalgorithmus, z.B. des Runge-Kutta-Algorithmus
durchgeführt wird. Ein solcher Algorithmus teilt im Allgemeinen einen solchen
Berechnungsschritt innerhalb der Service-Routine (Major time step) in weitere
Teilintervalle
auf,
in
denen
er
zur
Erhöhung
der
Rechengenauigkeit
in
Zwischenschritten (Minor time steps) Zwischenergebnisse berechnet, (weiter genutzt
wird allerdings nur der im letzten Schritt berechneten Zustand). Der Runge-KuttaAlgorithmus arbeitet häufig mit vier Schritten.
1.44
•
Multitasking Echtzeitbetrieb mit dem Real-Time Workshop mittels
periodischer Interrupts (Bare Board Betrieb)
Wenn ein eingebetteter Mikrocontroller durch die Bearbeitung einer Steuerungs/Regelungsaufgabe nicht ausgelastet ist, d. h. nur ein geringer teil Rechenkapazität
genutzt wird, kann er zur Bearbeitung anderer Aufgaben (Tasks) herangezogen
werden.
Für ein solches Multitasking stellt der Real-Time Workshop auch einen Bare Board
Modus auf der Basis periodischer Interrupts zur Verfügung.
Dieser Modus kommt immer dann zur Anwendung, wenn auf einem Prozessor zwei
oder mehrere Steuer-/Regelalgorithmen mit verschiedenen Abtastzeiten laufen
sollen. Dabei kann auch unter einer der Tasks ein kontinuierlicher Algorithmus sein,
der mit Hilfe eines Integrationsalgorithmus bei einer Rechenschrittweite dt arbeitet.
Die
zweite
und
weitere
Tasks
müssen
dann
zeitdiskret
Algorithmen
mit
verschiedenen Abtastzeiten sein. Um eine synchrone Abarbeitung der Tasks zu
gewährleisten, müssen die Abtastzeiten aller Task sein ganzzahliges Vielfaches der
kürzesten gewählten Abtastzeit oder Rechenschrittweite sein.
Der Task mit der kürzesten Abtastzeit wird vom Real-Time Workshop automatisch
die höchste Priorität zugeordnet, der Task mit nächst langsameren, die zweithöchste
Priorität, usw.. Damit ergibt sich eine Timing, wie es beispielhaft für drei Tasks (drei
Algorithmen mit drei verschiedenen Abtastzeiten) im folgenden Bild 1.2.12 dargestellt
ist (/9/, Kapitel 8).
Die fetten nach oben zeigenden Pfeile stellen die periodischen Interrupts in den drei
Proritätsebenen dar, die die entsprechenden
Interrupt-Servic-Routinen starten,
sofern nicht eine andere Interrupt-Servic-Routine mit höherer Prorität gestartet
werden muss. Man erkennt an der zeitlichen Lage dieser Pfeile, dass niedriger
priorisierte
Interrupts in einer Zeitspanne auftreten, die einem ganzzahligen
Vielfachen der Basis-Abtastzeit entsprtcht. Nennt man die Basis-Abtastzeit
TMin = T1 = t1 − t 0 , hat die mittlere Prioritätsebene eine Abtastzeit von T2 = 2 ⋅ T1 und
die untere Ebenen T3 = 4 ⋅ T1 .
Die gestrichelten, nach unten zeigenden Pfeile zeigen die Freigabe der
Ausführungszeit für eine niedriger priorisierte Task an. Die gestrichelten, nach oben
zeigenden Pfeile zeigen die vorzeitige Freigabe einer niedriger priorisierten Task zu
Gunsten einer höher priorisierten an. (Dies wird häufig als präemptives Verhalten des
Multitasking Betriebssystems bezeichnet.)
1.45
t0
t1
t2
t3
t4
Pr iorität 1
Pr iorität 2
Pr iorität 3
periodische Interrupts
Freigabe der Rechenzei t aneine
geringer priorisierte Task
Aktive Laufzeiten
der Tasks
Unterbrechungszeiten
niederpriorisierter Tasks
Vorzeitige Freigabe der Rechenzei t
an eine höher priorisierte Task
Bild 1.2.12: Task-Timing für Multitasking Umgebungen mit periodischen Interrupts unter den Real-Time Workshop
Die hellgrau markierten Kästchen, bzw. Kästchenteile sind die aktiven Laufzeiten der
einzelnen Tasks. Die dunkler markierten Kästchenteile in den niedriger priorisierten
Ebenen markieren gerade von höher priorisierten Tasks unterbrochene InterruptService-Routinen.
Bei genauerem Hinsehen erkennt man, dass die aktiven Arbeitszeiten der Tasks und
die zur Verfügung stehende Rechenzeit der einzelnen Tasks deterministisch
festliegen und voraus berechenbar sind. Trotz des deterministischen Betriebs können
Übergabefehler (Transition Errors) auftreten (/9/, Kapitel 8), dies allerdings nur, wenn
in einem Algorithmus verschiedene Abtastzeiten benutzt werden. Tauschen die mit
verschiedenen Abtastraten auf einem Mikrocontroller laufenden Algorithmen
untereinander keine Daten aus, können Übergabefehler nicht auftreten. Der RealTime Workshop stellt sogenannten "Rate Transitons Blocks" zur Verfügung, mit
denen bei der Datenübergabe von langsamer zu schneller getakteten SimulinkBlöcken und umgekehrt solche Übergabefehler vermieden werden können. Darüber
hinaus kann man im "Solver"-Parametrierungsfeld bei "Automatically handle data
transfer between tasks" ein Häkchen setzen, dann integriert der Realt-Time
Workshop automatisch unsichtbare, also nicht dargestellte "Rate Transitons Blocks"
an die notwendigen Stellen in der Simulink-Struktur des Algorithmus.
Obwohl die meisten Anwendungen der Real-Time Workshop mit dem Bare Board
Multitasking auskommen, muss in einigen Anwendungen auch auf asynchron
auftretende Ereignisse reagiert werden. Dies kann allerdings nur in Anwesenheit
eines Echtzeitbetriebssystems, vorzugsweise Tornado/VxWorks, realisiert werden.
Im Blockset des Real-Time Workshops befindet sich eine VxWorks-Library, die
Interface- Blöcke zu diesem Echtzeitbetriebssystem zur Verfügung stellt. In einer
weiteren Library "Create Yor Own Asynchronous Interrupt Library" befinden zwei
Blöcke,
die
als
Interface
zu
beliebigen
anderen
Echtzeitbetriebssystemen
weiterentwickelt werden können. Die Nutzung dieser Blöcke wird ausführlich in (/9/,
Kapitel 16) und in /15/ beschreiben.
Da wir im Rahmen der praktischen Nutzung des Real-Time Workshops nur den
Signale Tasking -Betrieb nutzen werden, soll auf eine nähere Beschreibung des
Multitasking und des asynchronen Echtzeitbetriebs nicht weiter eingegangen werden.
Anwendungsspezifische
Zusammenhänge
Workshops werden in Kapitel 3.4 beschrieben.
1.47
bei
der
Nutzung
der
Real-Time
1.2.5 Festkommaarithmetik
•
Motiv zur Nutzung von Festkommaarithmetik
In digitaler Hardware können Zahlen als Fließkomma- (Floating Point) oder
Festkomma- (Fixed Point) Datentypen dargestellt werden. (Andere Datentypen sind
auch noch möglich, aber zur Berechnung von Algorithmen bevorzugt man die beiden
genannten.) Beide Datentypen werden durch Datenworte mit einer festen Anzahl von
Bits beschreiben. Jedoch ist der darstellbare Zahlenbereich einer Festkommazahl
viele geringer als der einer Gleitkommazahl mit gleicher Datenwortlänge.
Der darstellbare Zahlenbereich wird bei einer Fließkommazahl primär durch die
Datenwortlänge des Exponenten und die Auflösung durch die Datenwortlänge der
Mantisse beschreiben. Schon mit einem 8-Bit Datenwort für den Exponenten lassen
sich Zahlenbereich von ca. 10^ ± 127 realisieren und die Auflösung steigt mit der
Länge des Datenwortes der Mantisse.
Bei einer Festkommazahl fällt die Aufteilung in Mantisse und Exponent weg, es
existiert nur noch ein Datenwort. Je nach Lage des Kommas (Radix Point) innerhalb
dieses Datenworts steigt oder verringert sich der darstellbare Zahlenbereich (Range),
was mit einer Erhöhung bzw. Verringerung der Auflösung/Genauigkeit (Precision)
verbunden ist.
Dies hat zur Folge, dass bei der Nutzung von Festkommazahlen bei jeder
Rechenoperation eine relativ aufwändige Skalierung (Positionierung des Kommas
innerhalb des Datenwortes) vorgenommen werden muss. Würde man Prozessoren
mit Gleitkomma-Harware verwenden, müsste man sich darüber keine Gedanken
machen. Damit erhebt sich die Frage, warum man immer noch vorwiegend
Mikrocontroller mit Festkommahardware einsetzt?
Den Vorteilen der Gleitkommaarithmetik stehen eine Reihen von Nachteilen
entgegen:
ƒ Gleitkomma-Harware ist aufwändiger, d.h. es sind elektronische Schaltungen mit
mehr Bauelementen als bei Festkommaarithmetik notwendig. Dadurch erhöht
sich der Platzbedarf auf dem Chip und die Stromaufnahme wird höher. Erhöhter
Strombedarf belastet Batterien stärker und erzeugt Verlustwärme, wodurch die
Packungsdichte
auf
dem
Chip
verringert
1.48
werden
muss.
Wegen
der
aufwändigeren Hardware erhöhen sich die Kosten, was sich insbesondere bei
Massenprodukten negativ bemerkbar macht.
ƒ Gleitkomma-Rechenoperationen,
die
ja
Exponenten
und
Mantissen
verschiedener Zahlen miteinander zu verknüpfen und abzugleichen haben,
dauern länger als Festkomma-Rechenoperationen. Damit sinkt der Durchsatz
eines Gleitkommaprozessors.
ƒ Will man Kosten sparen und realisiert die Gleitkommarechnung per Software,
wird die Performance / der Durchsatz noch schlechter und der Stromverbrauch
steigt wegen der längeren Rechenzeiten auch noch an.
Auf Grund dieser Zusammenhänge müssen wir uns mit der Implementierung von
Festkommaarithmetik
zur
Berechnung
von
Steuer-
und
Regelalgorithmen
auseinandersetzen.
•
Grundlagen und Begriffe der Festkommaarithmetik
Festkommazahlen im Binärformat erlauben es, reelle Zahlen als eine Integerwert
durch Festlegung einer Datenwortlänge und der Lage eines Binärkommas zumindest
näherungsweise zu beschreiben.
Das folgende Beispiel zeigt die Dezimalzahl 6,5 als binäre Festkommazahl,
beschrieben
durch
ein
8-Bit
Datenwort
und
einem
0
0
0
2−3
2−4
Binärkomma
an
der
gekennzeichneten Stelle:
0
1
1
0
+
22
21
20
1
2−1 2−2
Bild 1.2.13: Beschreibung der Dezimalzahl 6,5 als binäre Festkommazahl
Aus der Wertigkeit der Bits lässt sich die Dezimalzahl 6,5 ablesen. Auf dem
folgenden
Bild
1.2.14
werden
alle
notwendigen
Zusammenhang wichtig sind, dargestellt:
1.49
Begriffe,
die
in
diesem
Wortlänge
Dezimalzahl : Ganze Zahl links vom
Dezimalkomma (6),gebrochnener
Teil rechts von Dezimalkomma (5)
+6,5
64447444
8 644444744444
4
8
0
1
1
0
1
0
0
0
2
22 42444
2−3 2−43
2−1 2−4
21 203 14444
144
244444
Äquivalente Festkommazahl :
ganzahliger Teil links vom Binärkomma (110),
gebrochener Teil rechts vom Komma (1000)
gebrochener
ganzzahliger
Teil
Teil
Dezimale Gewichte
Vorzeichen −
Auflösung
=
Binär −
der Binärstellen
bit
−4
2
0,0625
=
komma
0=+
1 =−
Maximaler Wertebereich :
3
−2 bis 23 − 0,0625 = −8 bis 7,9375
Bild 1.2.14: Begriffe die bei der Darstellung von Dezimalzahlen als binäre Festkommazahlen wichtig sind
Die Umrechnung sowohl des ganzzahligen als auch des gebrochenen Teils der
binären Festkommazahl in die entsprechenden Teile der Dezimalzahl erfolgt durch
x
Aufsummierung der dezimalen Gewichte (2 ) der mit 1 gekennzeichneten
Binärstellen:
21 + 22 = 2 + 4 = 6
1
Gebrochener Teil:
2-1 = = 0,5
2
Daraus folgt die Dezimalzahl:
6+0,6 = 6,5 .
Ganzzahliger Teil:
Das ganz links außen liegende Bit gibt das Vorzeichen an: 0: +; 1: - .
Die Auflösung, das ist der kleinste darstellbare von Null verschiedene Wert, den die
Festkommazahl annehmen kann, wird durch das dezimale Gewicht der ganz rechts
außen liegenden Binärstelle beschrieben:
Auflösung: 2-4 = 0,0625.
Der maximale durch die Festkommazahl darstellbare Zahlenbereich geht von:
-2x bis + 2x − Auflösung.
Wobei x die Anzahl der links vom Festkomma liegenden Bits minus des
Vorzeichenbits, im vorliegenden Fall x = 3, ist. Damit ergibt sich ein Wertebereich
von:
-23 bis + 23 − 0,0625,
beziehungsweise von:
-8 bis + 7,9375.
Man kann sich leicht davon überzeugen, dass eine Verschiebung des Kommas nach
rechts eine Erhöhung des Wertebereichs (unter Verlust von Auflösung) und eine
Verschiebung des Kommas nach links eine Verkleinerung des Wertebereichs mit
einer Verbesserung (Verkleinerung ) der Auflösung einher geht.
•
Festkommaarithmetik unter Simulink
Um mit Festkommaarithmetik nicht nur Simulationen durchführen, sondern auch
Code für eingebettete Systeme generieren zu können, muss Simulink um das "Fixed
Point Blockset" ergänzt werden.
1.51
Simulink stellt eine Demonstrationsstruktur mit dem Namen "Double to Fixed-Point
Conversion" zur Verfügung. (Im Matlab Command Window (MCW) den String "demo"
eingeben, im sich öffnenden "Help Navigator" Simulink anklicken, aus dem sich
öffnenden Menü "Simulink Fixed Point" anklicken und im MCW erscheint als erstes
Demonstrationsprogramm "Double to Fixed-Point Conversion", das nach dem
Anklicken erläutert wird. Durch Betätigung des Links (oben rechts) "Open this model"
öffnet sich die Simulink-Struktur, die dann gestartet werden kann.)
Double to Fixed-Point Conversion
double
Signal
Generator
Convert
sfix 5_En2
Dbl -to-FixPt
double
double
FixPt-to-Dbl
Mux
double
Mux
Scope
?
Copyright 1990 -2007 The MathWorks , Inc.
Bild 1.2.15: Simulationsstruktur für "Double to Fixed Point Conversion"
Mit dieser Simulation können die Auswirkungen einer Lageänderung des
Binärkommas bei der Wandlung von Double-Precision-Gleitkommazahlen in
Festkommazahlen demonstriert werden. Mit dem "Signal Generator" wird ein
Sägezahnsignal mit einem Signalanstieg von -10 bis +10 zum Zeitpunkt t=0 und ein
linearer Abfall von +10 nach -10 in der darauf folgenden Sekunde mit der
Matlab/Simulink üblichen Double-Precision Auflösung erzeugt. Diese Signal wird als
dünne gestrichelte Linie auf den folgenden Bildern angezeigt.
Anschließend wird das Double-Precision-Signal in der Simulink-Struktur mittels eines
"Data-Type-Conversion-Blockes" (DTC-Block) aus der "Signal and Systems"Blocklibrary von Simulink in ein Signal mit Festkommadatentypen gewandelt.
Darauf hin werden mit einem zweiten DTC-Block bei Erhaltung der im ersten DTCBlock berechneten Werte und auch deren Auflösung diese wieder in Werte eines
Double Datentyps gewandelt und ebenfalls auf dem gleiche Scope angezeigt. (Der
Grund für dies Wandlung liegt darin, dass das Scope keine verschiedenen
Datentypen gleichzeitig anzeigen kann.)
1.52
Als Ausgangsdatentyp (Output data type) wird im Parametrierungsfenster des ersten
DTC-Blockes der Fixed-Point-Datatyp
fixdt(x,y,z)
{
1 Vorzeichen berücksichtigen
0 Vorzeichen nicht berücksichtigen
y : Datenwortlänge
z : Länge des gebrochenen Teils des Datenworts
x:
mit der Parametrierung fixdt(1, 5, 2) und den folgenden weiteren Parametrierungen
Bild 1.2.16: Parametrierung des ersten DTC-Blockes
gewählt. Damit ergibt sich folgendes Simulationsergebnis:
1.53
10
5
0
-5
-10
0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1
Bild 1.2.17: Ergebnis der ersten Simulation zur Datentyp-Wandlung
Bei einer Wortlänge von 5 Bit, einem Vorzeichenbit und einem gebrochenen Teil des
Datenworts von 2 Bit berechnet man eine Auflösung von 2−2 = 0,25 und einen
maximalen Wertebereich von
−25 − 2 −1 bis 25 − 2 −1 − 0,25
−4
bis
3,75,
⇒
was auch in der Simulation zu erkennen ist. Im Falle der Übersteuerung (im vorderen
Bereich von ca. t = 0 - 0,3 und im hinteren Bereich von t = 0,7 - 1), d. h. wo das
Eingangssignal größer (kleiner) ist als der Wertebereich des Eingangssignals, geht
der DTC-Block in die Begrenzung.
Verändert man den "Output data type" auf
fixdt(1, 5, 1) verschlechtert sich die
Auflösung auf 2−1 = 0,5 und der Wertebereich vergrößert sich auf
−25 −1−1 bis 25 −1−1 − 0,15
−8
bis
7,5.
⇒
Damit ergibt sich erwartungsgemäß die folgende zweite Simulation (vergleiche Bild
1.2.18) mit dem vergrößerten Wertebereich und der verschlechterten Auflösung.
1.54
10
5
0
-5
-10
0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1
Bild 1.2.18: Ergebnis der zweiten Simulation zur Datentyp-Wandlung
Bei bekannten Signal-Maximal- und -Minimalwerten, die man durch eine Simulation
mit Double-Precision-Fließkomma-Datentypen bestimmen und in die entsprechenden
Felder (Output minimum / Output maximum) des Parametrierungsfeldes des DTCBlocks (vergleiche Bild 1.2.16) einträgt, kann man nach Betätigung des
Doppelpfeilknopfes (>>) im Parametrierungsfeld auf einen sich öffnenden neuen Teil
des Feldes gelangen, wo man durch einen Knopfdruck auf den Button "Calculate
Best-Precision Scaling" die Länge des ganzzahligen und des gebrochenen Teils des
Datenworts der Festkommazahl automatisch von Simulink berechnen lassen kann.
Nicht nur die Data-Type-Conversion-Blöcke besitzen die Möglichkeit der Anpassung
des
Wertebereichs
an
die
maximal
und
minimal
im
Block
auftretenden
Signalamplituden. Auch alle Blöcke, die z.B. zum Aufbau eines zeitdiskreten Reglers
gehören (Summierer, Verstärker) beinhalten die Möglichkeit des automatischen "Best
Precison Scaling". Die in diesem Zusammenhang auch benötigten "Unit delays" (1/z)
benötigen diese Eigenschaft nicht, weil sie die Amplitude des Eingangssignals nicht
verändern sondern nur um einen Abtastschritt verzögern.
Mit Hilfe des sogenannten "Fixed-Point Tools", das man mit einem rechten Mausklick
in die zu wandelnde Simulink-Struktur und Auswahl von "Fixed Poit Settings" aus
dem sich öffnenden
Festkommazahlen
für
Menü auswählt, kann man diesen Anpassungsvorgang an
ganze
Simulationsstrukturen
(z.B.
Regler)
in
einem
Arbeitsgang durchführen und mit einer Simulation mit Double Datentypen
vergleichen.
Auf dieses Werkzeug wird im Rahmen der aktuellen Lehrveranstaltung nicht
1.55
eingegangen, weil das Real-Time Windows Target, das aktuell im Labor eingesetzt
wird, nicht mit Festkomma-Datentypen arbeitet.
Übertragungsfunktionen, mit denen man sonst in Simulationen Regler realisiert,
können nicht mit "Best Precision Scaling" für die Verarbeitung von Festkommazahlen
automatisch abgeglichen werden, weil nicht jeder Rechenschritt für das "Fixed Point
Tool" beobachtbar ist. Dies ist aber notwendig, um die maxi- und minimalen
Berechnungswerte bestimmen zu können, um daraus die beste Auflösung bei
Einhaltung des notwendigen Wertebereichs berechnen zu können.
Die benötigten Rechenoperationen (Multiplikation und Summation) müssen mit
einzelnen Simulink-Blöcken quasi "atomar" durchgeführt werden.
1.2.6 What is in the Loop?
Im
Kapitel
1.2.1
"Entwurfsmodelle"
wurde
beschrieben,
dass
eingebettete
Steuerungs-/Regelungsprototypen in unterschiedlichsten Fertigstellungsgraden als
konzept-, architektur- und implementierungsorientierte Realisierungen in den zu
beeinflussenden Prozess eingefügt werden.
Häufig existiert dieser Prozess aus verschiedenen Gründen auch nicht real, sondern
liegt als nicht echtzeitfähiges oder echtzeitfähiges Simulationsmodell oder als
echtzeitfähiges Simulationsmodell in Kombination mit realen Systemkomponenten
(z.B. simuliertes Kraftfahrzeug mit realem Getriebe zum Test des Prototypen eines
Getriebesteuergeräts) vor.
Zu allen diesen Kombinationen von verschiedenen Fertigstellungsgraden der
Steuergeräte und Art des Vorliegens des zu steuernden Prozesses gibt es in der
aktuellen
Literatur
Bezeichnungen
die
schlagwortartig
diese
verschiedenen
Kombinationen erklären sollen. Weil es sich immer um Regelkreise handelt, kommt in
diesen Bezeichnungen immer die Phrase "in the Loop" vor und das "was", welches
sich in der Schleife (Loop) befindet, bezieht sich auf den Steuerungsprototypen.
Damit sind aber auch schon die Gemeinsamkeiten der Definitionen weitgehend
erschöpft. Beginnen wir mit der einheitlichsten Definition:
•
"Hardware in the Loop" (HIL)
In /17/ versteht man darunter einen Regelungs-/Steuerungsprototypen dessen
Software auf seiner Zielhardware läuft und mit einem in Echtzeit simuliertem
1.56
Prozess, der z.B. auf einem PC läuft, verbunden ist.
/118/
verbreitert
diese
Definition
dahingehend,
dass
auch
mechatronische
Komponenten, die die Software des Regelungs-/Steuerungsprototypen beinhalten,
und an dem vorangehend genannten simulierten Prozess arbeiten, als "Hardware in
the Loop" bezeichnet werden. Weitere Literaturstellen, z.B. /16/ beschreiben das HILPrinzip sehr ähnlich.
Bei allen Autoren wird hervorgehoben, dass das HIL-Prinzip sehr gut automatisierte
Tests unterstützt und sehr kostengünstig ist, weil kein Eingriff in den realen Prozess
erfolgen muss. Dies hat zur Folge, dass sich mit dem HIL-Ansatz auch
Systemzustände testen lassen, die aus Sicherheitsgründen im realen System nicht
testbar sind.
•
"Software in the Loop" (SIL)
Bei der Definition von "Software in the Loop" gehen die Festlegungen verschiedener
Autoren relativ weit auseinander. /17/ versteht darunter die prototypische
Implementierung der Regelungs-/Steuerungsprototypen-Software in echtzeitfähige
Hardware, die noch nicht die später zu implementierende ist, aber so leistungsfähige
Komponenten besitzt, dass in Bezug auf Rechenleistung, Speicherkapazität,
Auflösung der Messaufnehmer, usw. keine oder nur geringfügige Einschränkungen
für den verwendeten Algorithmus entstehen. Diese Hardware wird mit dem realen
Prozess verbunden.
/118/ dagegen implementiert die entwickelte Regelungs-/SteuerungsprototypenSoftware in keine besondere Hardware und lässt sie zusammen mit dem simulierten
Prozess auf dem gleichen PC laufen. Über die Einhaltung von Echtzeitbedingungen
wird keine Aussage gemacht.
/16/ ist der gleichen Auffassung, betont aber, dass Echtzeitfähigkeit nicht unbedingt
bestehen muss. Als spezifisches Merkmal des SIL-Ansatzes wird hier die Tatsache
verstanden, dass es sich bei dem Code des Regelungs-/Steuerungsprototypen nicht
um Simulationssoftware handelt (z.B. die Ausführung einer Simulink-Simulationsstruktur, die mit Simulink-Blöcken aufgebaut ist), sondern um Code (z.B. C-Code),
den man von Hand oder automatisch aus der Simulink-Struktur erzeugt und
anschließend in ausführbaren Code compiliert hat.
/16/ erweitert die Begriffsbildungen HIL und SIL um zwei zusätzliche "in the Loop"1.57
Phrasen:
• Beim "Model in the Loop" (MIL) liegen der Regelungs-/Steuerungsalgorithmus
und der Prozess als Simulationsmodelle vor und laufen auf dem gleichen
Rechner, beispielsweise einem PC. Das Task-Management, die Festkommaarithmetik, die I/O-Schnittstellen usw. werden weitgehend mit simuliert. Da alles
auf dem gleichen Rechner läuft, muss er nicht in Echtzeit arbeiten.
• Die "Prozessor in the Loop" -Simulation (PIL) ist der SIL-Methode sehr ähnlich.
Der Steuer-/Regelalgorithmus läuft allerdings auf einer der späteren Zielhardware
nahen Hardware, z.B. einem Evaluierungsboard mit dem späteren Zielcontroller.
Der Prozess wird wiederum simuliert, überwiegend in Echtzeit.
Der Autor des vorliegenden Skripts hält die beiden Definitionen von /17/ im
Kombination mit den in Kapitel 1.2.1 eingeführten Prototypenbezeichnungen für am
sinnvollsten:
Die Bezeichnung "Software in the Loop" (SIL) bedeutet den Einsatz von
konzept-, architektur- und implementierungsorientierten Steuerungs/Regelungsprototypen am realen Prozess.
"Hardware in the Loop" dagegen den Einsatz dieser Prototypen am
simulierten, aber in Echtzeit laufenden Prozess.
1.58
2
Fachliches Umfeld
Dieses Kapitel wurde im Rahmen der aktuellen Lehrveranstaltung bereits zu Beginn des
Semesters durchgearbeitet. Es wurde darauf hingewiesen, dass zur Bearbeitung des
Kapitels 4 "Praktisches Rapid Control Prototyping" Kenntnisse auf folgenden Gebieten
notwendig sind:
2.1
Systemtheorie
Die Systemtheorie legt die Grundlagen für sämtliche Wissensgebiete des fachlichen
Umfelds des RCP (Systemmodellierung / Systemidentifikation, Regelungstechnik und
die Simulation dynamischer Systeme). Es wird deshalb dringend empfohlen, bei
fehlendem oder nur bruchstückhaftem Wissen aus diesem Gebiet das Skript
"Grundlagen der Systemtheorie" /2/ vollständig durchzuarbeiten.
Auf Seite 122 von /2/ befindet sich eine Übersicht, mit der man sich bei
systemtheoretischen Fragen orientieren kann, wo man im Skript nachschlagen muss.
Das
Kapitel
“Eine
Übersicht
über
die
Beschreibungsformen
der
wichtigsten
Übertragungsglieder“ (/2/ Seite 133) schließt die Betrachtungen über die Systemtheorie
kontinuierlicher SISO-LTI-Systeme ab. Es zeigt in Form eines Katalogs einige wichtige
Modellierungsformen (Übertragungsfunktion, Sprungantwort, Bodediagramm, usw.)
wichtiger einfacher Übertragungsglieder. Auch ein Bezug zu realen Systemen, die das
beschriebene
Übertragungsverhalten
aufweisen,
wird
hergestellt.
Der
Katalog
unterstützt damit anschaulich das Kapitel 1.2.4 über “Praktische Bezüge zwischen
Übertragungsfunktion und Übertragungssystem“. Darüber hinaus werden den einzelnen
Übertragungssystemen systemtheoretische Namen und Kurzbezeichnungen (z.B.
Integralglied mit Verzögerung 1. Ordnung, IT1-Glied) zugewiesen. Auch auf die
Möglichkeit, den Katalog zur experimentellen Modellbildung nutzen zu können, soll mit
Nachdruck hingewiesen werden. Damit wird eine grundlegende Alternative zur
schwierigen mathematisch-/physikalischen Modellbildung aufgezeigt.
Während das Kapitel 1 von /2/ der Theorie kontinuierlicher SISO-LTI-Systeme gewidmet
war, geht das Kapitel 2 auf mathematische Modelle zeitdiskreter Systeme ein. Die
zeitdiskreten Systeme werden dort auch im Zeit-, Bild- und Frequenzbereich modelliert,
2.1
allerdings nicht in der Modellvielfalt, wie bei kontinuierlichen Systemen.
Um gemischte kontinuierliche und zeitdiskrete Systeme modellieren und um aus
kontinuierlichen Systembeschreibungen (z.B. eines kontinuierlichen PI-Reglers) digitale
Algorithmen entwickeln zu können, die in einem Digitalrechner implementierbar sind,
werden darüber hinaus sogenannte Diskretisierungstransformationen eingeführt.
An einem praktischen Beispiel, dem Entwurf eines digitalen Filters, wird die praktische
Anwendbarkeit der kontinuierlichen und zeitdiskreten Systemtheorie gezeigt.
2.2
Systemmodellierung / Systemidentifikation
Um sinnvoll Regelungstechnik betreiben zu können, muss von dem regelnden System
ein mathematisches Modell vorliegen. Die Systemmodellierung / Systemidentifikation
beschäftigt
sich
mit
dieser
Problematik.
Ein
grundlegender
Einblick
in
die
Systemmodellierung, d.h. in die theoretische Modellbildung wird in /2/, Kapitel 1.2.1,
gegeben. Man erkennt, dass diese Methode für praktische Alltagsprobleme nicht
anwendbar ist.
Im Skript "Praktische Verfahren zur experimentellen Systemidentifikation" /5/ wird
deshalb ausführlich auf die messtechnische Identifikation dynamischer System
eingegangen. In Kapitel 5.3.2 "Bestimmung der Parameter der Übertragungsfunktion
mittels einer Optimierungsstrategie" wird ein Verfahren beschrieben, welches auch unter
praktischen Gesichtspunkten zu sehr guten Identifikationsergebnissen führt.
Zum Verständnis dieses Verfahrens sollten die Kapitel 1 "Was ist Systemidentifikation",
Kapitel 2 " Einflußgrößen bei der Systemidentifikation" und Kapitel 5.1 "Vorbereitende
Betrachtungen"
durchgearbeitet
werden.
Das
Kapitel
5.2.1
"Kataloggestützte
Systemidentifikation" gibt Einblicke in den Zusammenhang zwischen der Struktur der
systembeschreibenden Übertragungsfunktion (also dem Systemmodel) und der Form
der Sprungantwort des zu identifizierenden Systems. Diese Kenntnis wird benötigt,
wenn man das in Kapitel 5.3.2 beschriebene Identifikationsverfahren sinnvoll praktisch
nutzen will. Das eigentliche messtechnische Verfahren wird in Kapitel 5.3.2 beschrieben.
Eine quasi "Bedienungsanleitung" findet man in Kapitel 5.3.2.7 "SYS_ID: Ein Werkzeug
zur praktischen Systemidentifikation".
2.2
2.3
Regelungstechnik
Die zentrale Aufgabe der Regelungstechnik ist der Entwurf eines Reglers, der nach
vorzugebenden Kriterien eine Regelstrecke beeinflusst. Dieser Optimierungsvorgang
wird in Kapitel 2.3 "Optimierung von Regelkreisen " von /3/ beschrieben. Fast alle
Beispielregelkreise bei den Laborübungen lassen sich mit Hilfe des relativ einfach
anzuwendenden "Verfahrens der Polkompensation" (Kapitel 2.3.2.2 von /3/) optimieren.
Hier sollten insbesondere die "wichtigen Ergänzungen zur Polkompensation" auf Seite
2.99 berücksichtigt werden, da es sich bei den Regelstrecken im Labor für Regelungstechnik häufig um Strecken niedriger Ordnung handelt.
Zur Untersuchung der Struktureigenschaften des optimierten Regelkreises (Führungs-,
Störungs- und Stellverhalten) können die Verfahren des Kapitels 2.2 "Struktureigenschaften von Regelkreisen" herangezogen werden. Mit einer Simulink-Struktur
lässt sich dieses Verhalten allerdings mit wesentlich geringerem Aufwand studieren.
Zum Entwurf eines zeitdiskreten Reglers reicht im Rahmen der Laborübungen "der
quasikontinuierliche Reglerentwurf", wie er in Kapitel 3.3.1 beschrieben wird, völlig aus.
Grundlegende Zusammenhänge der Regelungstechnik können anschaulich im Kapitel 1
"Aufbau und prinzipielle Wirkungsweise von Regelkreisen" und theoretisch untermauert
in Kapitel 2.1.4 "Der Regler mit Vergleichseinrichtung" und in Kapitel 2.3.1 "Das
Entwurfsprinzip des dominierenden Polpaares" nachgelesen werden.
2.4
Simulation dynamischer Systeme
Da wir die Arbeitsumgebung Matlab/Simulink zur Erzeugung von Prototypen benutzen,
ziehen wir dieses CAE-Programm natürlich auch zur Simulation und für andere
numerische Berechnungen heran. Im Skript "Einführung in das CAE-Programm
Matlab/Simulink (Version 5.3)" /4/ wird diese Thematik behandelt. Nach einer kurzen
Einführung in Kapitel 1, werden in Kapitel 2 "Grundlagen von Matlab" die allgemeinen
Fähigkeiten von Matlab als Computeralgebra-Programm beschrieben (nutzbare
Datenstrukturen, mathematische Funktionen, die in Ihrer Leistungsfähigkeit i.A. weit
über die anderer Hochsprachen hinausgehen, Programmlaufkontrolle, Unterprogramme,
Benutzerkommunikation und Elemente der integrierten Entwicklungsumgebung). Das
2.3
Kapitel weist insbesondere darauf hin, dass Matlabvariable Zahlenfelder sind und diese
mathematisch im Sinne der Matrizenrechnung oder elementweise, das ist eine
Besonderheit von Matlab, arithmetisch verknüpft werden können. Wegen der
Möglichkeit der elementweisen Verknüpfung von Zahlenfeldern können mit Matlab forSchleifen-freie Programme geschrieben werden.
Im dritten Kapitel werden "Matlabfunktionen für die System- und Regelungstechnik
beschrieben". Es werden für alle im Skript "Grundlagen der Systemtheorie" eingeführten
Berechungs- und Umrechnungsverfahren (z.B. Berechnung einer Sprungantwort,
Umrechnung eines Zustandsmodells in eine Übertragungsfunktion oder Umrechnung
der Polynomform der Übertragungsfunktion in die faktorisierte V-Normalform) die
numerischen Äquivalente angegeben und das sowohl für kontinuierliche als auch
zeitdiskrete Systeme. Auch die Umrechnung kontinuierlicher Systeme in zeitdiskrete
werden
die
entsprechenden
Befehle
vorgestellt.
Nach
einem
ausführlichen
Programmbeispiel, wo alle vorangehend besprochenen Befehle zum Einsatz kommen,
werden noch einige spezielle regelungstechnische Befehle (z.B. zur Berechnung einer
Wurzelortskurve) angesprochen.
Das vierte Kapitel setzt sich mit Simulink, einem grafikgestützten Simulationsprogramm
auseinander. In diesem Kapitel wird zunächst in die Arbeitsumgebung eingeführt: Aufruf
von Simulink, Öffnen eines Simulink-Arbeitsfensters, Grundzüge der Erstellung
von
Simulink-Simulationsstrukturen und Parametrierung von Signal-Anzeige-Elementen
(Scopes). Anschließend werden die wichtigsten Inhalte der Menueleisten des SimulinkArbeitsfensters (File-, Edit-, View-, Simulation-, Format- und Tools-Menue) besprochen.
Dabei wird intensiv auf das "Simulation-Menue" und den darin auftretenden Menuepunkt
"Parameters..." eingegangen. Hinter diesem wichtigem Menuepunkt verbirgt sich die
Parametrierung
des
Integrationsalgorithmus
für
die
Simulation
dynamischer
Systemanteile (also die numerische Berechnung von Differentialgleichungen).
Nach
der
Besprechung
Simulationselemente
(z.B.
der
einzelnen
Menuepunkte
Übertragungsfunktions-,
wird
intensiv
Zustandsmodell-,
auf
die
Integrator-,
Verstärker-Blöcke) der "Simulink Block Library" eingegangen, mit deren Hilfe die
Simulationsstrukturen aufgebaut werden. Das abschließende Kapitel beschäftigt sich mit
dem Übergang von Simulink nach Matlab und umgekehrt. Beim Übergang von Simulink
nach Matlab ist insbesondere der Befehl "linmod" von Wichtigkeit, weil mit Ihm Simulink2.4
Strukturen in Form von Zustandsmodellen nach Matlab transferiert werden können, um
dort weiter verarbeitet zu werden, z.B. durch Berechnung des Bodediagramms der
Simulink-Struktur. Auch nichtlineare Simulink-Strukturen lassen sich mit "linmod" nach
einer automatischen Linearisierung in einem angebbaren Arbeitspunkt in eine
Zustandsmodell wandeln. Der Übergang von Matlab nach Simulink ermöglicht die
Parametrierung von Simulink-Blöcken aus einem Matlabprogramm heraus. Dies ist
immer dann sinnvoll, wenn eine Reihe von Versuchen vorgenommen werden sollen, um
z.B.
eine
bestmögliche
Parametrierung
experimentell
durchzuführen,
z.B.
die
Bestimmung der optimalen Abtastzeit bei einem zeitdiskreten Regler aus seinem
kontinuierlichen Vorbild: Zu diesem Zwecke würde man eine Simulink-Struktur
entwerfen, bei der der Regelkreis einmal mit dem optimalen kontinuierlichen Regler und
einmal mit einem zeitdiskreten Regler realisiert wird. Die Regelgrößen und die
Stellgrößen werden jeweils gemeinsam auf einem Scope dargestellt. Die Koeffizienten
der zeitdiskreten Regler-Übertragungsfunktion und die aktuelle Abtastzeit werden von
einem Matlabprogramm aus den optimalen Koeffizienten des kontinuierlichen Reglers
berechnet und an die Simulink-Struktur, d.h. an den zeitdiskreten
Übertragungs-
funktionsblock übergeben, dann ruft das Matlabprogramm die Simulink-Struktur auf und
man kann sie simulieren. Durch Änderung der Abtastzeit und Neuberechnung der
Parameter des zeitdiskreten Reglers im Matlab-Programm kann man so ohne großen
Aufwand die Veränderung der Regelgüte des zeitdiskreten Regelkreises im Vergleich
zum kontinuierlichen Regelkreis studieren.
2.5
3
Die Arbeitsumgebung Matlab/ Simulink
Die nächsten Kapitel 3.1 "Ein Werkzeug zur Systemidentifikation", 3.2 " Ein
Werkzeug zum Reglerentwurf" und 3.3 "Ein Werkzeug zur Systemsimulation" lagen
im aktuellen Semester noch nicht als Skript vor und wurden deshalb an Hand des
folgenden Beispiels zur Lösung einer regelungstechnischen Problemstelllung
mündlich erläutert.
Das
Unterkapitel
3.3.1
"Einbindung
von
Festkommaarithmetik"
wird
nicht
vorgetragen, weil das aktuell verfügbare Real-Time Windows Target Festkommaarithmetik nicht unterstützt.
Beispiels zur Lösung einer regelungstechnischen Problemstelllung
Ein Walzenmotor einer Blechwalzstraße, der mit einer Arbeitspunktdrehzahl von
120 U/min betrieben wird, treibt ein Walzenpaar an, welches Walzgut (sogenannte
Brammen) einzieht, dünner walzt und wieder auswirft. (Normalerweise wird eine
solche Walze repetierend in zwei Walzrichtungen betrieben, was zur Vereinfachung
der Aufgabe hier nicht der Fall sein soll.)
Beim Eingriff der Bramme in das Walzenpaar sinkt wegen der Belastung die
Arbeitspunktdrehzahl, solange sich das Walzgut im Eingriff befindet (Nennlast). Nach
Abwurf des Walzgutes erhöht sich die Drehzahl wieder, um nach einer gewissen Zeit
wieder die Arbeitspunktdrehzahl zu erreichen. Der lineare Aussteuerbereich der
Stelleinrichtung beträgt ± 10 V.
Der Walzenmotor soll in einen Regelkreis eingefügt werden, der dafür sorgt, dass bei
den oben genannten Belastungen die Arbeitspunktdrehzahl zumindest stationär (d.h.
nach einer gewissen Zeit nach der Belastungsänderung) wieder erreicht wird.
Um einen solchen Regelkreis entwerfen zu können, wurden zur Identifikation des
Übertragungsverhalten von Regelstrecke und Messeinrichtung bei der in Bild 1
dargestellten Geräteanordnung
3.1
u(t)
V
Walzen −
Motor
Stell−
einrichtung
uA (t)
V
un (t)
V
Drehzahl −
Messeinrichtung
n(t)
U / min
u(t): spätere Stellgröße, uA(t): Ankerspannung des Motors, n(t): Drehzahl der
Rotorwelle des Motors, un(t): Ausgangsspannung der
Drehzahlmesseinrichtung.
Bild 1: Der Walzenmotor mit Stell- und Messeinrichtung
zunächst die folgende statische Kennlinie gemessen, auf der basierend die
Messungen zur Identifikation ihres dynamischen Verhaltens durchgeführt wurden:
12
un
V
10
8
6
4
2
0
0
2
4
6
8
u
V
10
Bild 2: Statische Kennlinie der Anordnung Stelleinrichtung, Walzenmotor und
Messeinrichtung nach Bild 1 im Leerlauf
3.2
Anschließend wurde bei folgender Erregung
6
u(t)
V
4
2
0
5
0
10
15
20
t
sek
20
t
sek
Bild 3: Erregungssignal der Geräteanordnung von Bild 1
folgende Systemantwort an der Messeinrichtung gemessen:
8
un (t)
V 6
4
2
0
-2
5
0
15
10
Bild 4: Systemantwort der Geräteanordnung von Bild 1 bei Erregung
mit dem Signal von Bild 3
Weiterhin ist bekannt, dass die eingesetzte Messeinrichtung, ein sogenannter
Tachogenerator, eine Drehzahl von 0 - 200 U/min linear auf 0 - 10V abbildet und bei
folgendem rampenförmigen Drehzahlanstieg
10
n(t)
U / min
5
0
0
0.2
22
0.4
0.6
0.8
t
1.0 sek
Bild 5: Erregung der Messeinrichtung mit einer rampenförmigen Drehzahländerung
3.3
mit folgendem Spannungsverlauf am Ausgang antwortet:
0.6
un (t)
V 0.5
0.4
0.3
0.2
0.1
0
0
0.4
0.2
0.6
0.8
1.0
t
sek
Bild 6: Systemantwort der Messeinrichtung bei einer Erregung nach Bild 5
a) Identifizieren Sie die Übertragungsfunktion der Anordnung Stelleinrichtung,
Walzenmotor und Drehzahlmesseinrichtung (Bild 1) mit Hilfe der in Bild 3 und
Bild 4 angegebenen Ein- und Ausgangssignale. Die entsprechenden Messwerte
finden sie unter dem Namen "Datensätze zur 3. Hausaufgabe" auf der WEB-Seite
zum
Modul
Regelungstechnik
(http://prof.tfh-berlin.de/ottens).
Der
Ordner
"Daten_Strecke" enthält die Vektoren
t:
Zeitachse der folgenden Vektoren,
uerr:
Erregungssignal nach Bild 3,
ySystem:
Systemantwort nach Bild 4.
b) Identifizieren Sie die Übertragungsfunktion der Messeinrichtung mit Hilfe der in
Bild 5 und Bild 6 angegebenen Ein- und Ausgangssignale. Die entsprechenden
Messwerte finden sie auch unter dem Namen "Datensätze zur 3. Hausaufgabe"
auf
der
WEB-Seite
zum
Modul
Regelungstechnik.
"Daten_Messeinrichtung" enthält folgende Vektoren:
t:
Zeitachse der folgenden Vektoren,
uerr:
Erregungssignal nach Bild 5,
ySystem:
Systemantwort nach Bild 6.
3.4
Der
Ordner
c) Werten Sie die identifizierten Übertragungsfunktionen so aus, dass Sie die
Übertragungsfunktion der Strecke (mit Stelleinrichtung)
N(s)
U(s)
und der Messeinrichtung
GS (s) =
GM (s) =
Un (s)
N(s)
in V-Normalform hinschreiben können.
d) Entwerfen Sie einen kontinuierlichen Regler, der mit den restlichen Baugliedern
zu einem Standard-Regelkreis verknüpft, folgende Regelungsziele erreicht:
-
keine bleibende Regelabweichung,
-
möglichst geringe Anstiegszeit tr der Führungssprungantwort unter
Ausschöpfung des gesamten Stellbereichs aber ohne Übersteuerung der
Stellgröße.
Beginnen Sie mit den Optimierungsvorgang, in dem Sie mittels Polkompensation
zunächst eine Überschwingweite Mp = 0,2 einstellen.
e) Erproben Sie den entworfenen Regler in einer Simulink-Simulation des gesamtem
Regelkreises. Simulieren Sie dabei auch die Wirkung der Belastung und
Entlastung durch den Eingriff bzw. den Abwurf von Walzgut und zwar so, dass
sich die ungeregelte Drehzahl bei Lasteingriff um maximal -50 U/min von ihrer
Arbeitspunktdrehzahl
entfernt
und
sich
nach
Lastabwurf
wieder
die
Arbeitspunktdrehzahl einstellt. Jedem Lasteingriff muß ein Lastabwurf folgen.
Betrachten Sie den "worst-case"-Fall, d.h. sprungförmige Laständerungen.
Wählen Sie zunächst auch eine sprungförmige Führungsgröße mit einer
Amplitude, die stationär die Arbeitspunktdrehzahl von 120 U/min einstellt.
f) Überprüfen Sie die Stellgröße des Regelkreises und optimieren Sie bei Bedarf
den Regler experimentell nach. Bedenken Sie, dass der Regelkreis primär
Störungen ausregeln soll, das heißt, die Führungsgröße w(t) bleibt während des
3.5
Betriebs längere Zeit (Tage) konstant. Nur nach Wartungs- und Reparaturarbeiten
wird der Kreis wieder in seinen Arbeitspunkt gefahren. Dies hat Konsequenzen
hinsichtlich der Auslegung des Regelkreises.
g) Entwerfen Sie einen quasikontinuierlichen, zeitdiskreten Regler dessen Abtastzeit
so groß wie möglich gewählt werden soll, wobei sich aber die dynamischen
Eigenschaften des Regelkreises gegenüber der optimalen kontinuierlichen
Realisierung nicht wesentlich verschlechtern sollen. (Diese Forderung ist eine
wichtige Randbedingung für den Echtzeitbetrieb des Reglers, es wird damit
nämlich die notwendige Rechenzeit für die Regelalgorithmen geschaffen).
Demonstrieren Sie die Leistungsfähigkeit des zeitdiskreten Reglers, indem Sie die
Regelergebnisse (Verlauf der Regel- und Stellgröße) des kontinuierlichen
Regelkreises und die des zeitdiskreten Regelkreises in jeweils einem Scope
darstellen.
Lösung der regelungstechnischen Problemstellung
a) Die Identifikation der Reihenschaltung Stelleinrichtung, Strecke und
Messeinrichtung (nach Bild 1) führt auf folgende Übertragungsfunktion (dabei
wird die Reihenschaltung Stelleinrichtung und Strecke vereinbarungsgemäß als
Einheit aufgefasst und "Strecke" genannt):
V
1,8164  
V
GSM (s) =
.
(1 + 0,427 [sek.] s ) (1 + 1,0423 [sek.] s )
b) Die Identifikation der Messeinrichtung führt auf folgende Übertragungs-
funktion:
 V 
0,05 
(1 + 0,12 [sek.] s )
U / min 

GM (s) =
.
1 + 0,08 [ sek.] s
3.6
c) Berechnung der Streckenübertragungsfunktion:
GSM (s) = GS (s) ⋅ GM (s)
GS (s) =
⇒
V
1,8164   (1 + 0,08 [ sek.] s )
v
GSM (s)
=
GM (s)
 V 
0,05 
(1 + 0,12 [sek.] s ) (1 + 0,427 [sek.] s ) (1+ 1,0423 [sek.] s )
 U / min 
 U / min 
36,33 
(1 + 0,08 [sek.] s )
V 

=
(1 + 0,12 [sek.] s ) (1 + 0,427 [sek.] s ) (1+ 1,0423 [sek.] s )
d) Entwurf eines Reglers mittels Polkompensation
Das Programm "go_bodedigramm.m" ruft die Simulink-Struktur "bodediagramm.mdl" auf.
experimentell
Es wird die größte Zeitkonstante kompensiert und
mittels
des
Verstärkungsfaktors
V
des
PI-Reglers
eine
Überschwingweite von 0,2 eingestellt (V=1,55):
% Programm go_bodediagramm, ruft die Simulink-Struktur
% bodediagramm.mdl auf.
% Beide Programme dienen zum Reglerentwurf.
[A,b,c,d]=linmod('bodediagramm');
sys=ss(A,b,c,d);
figure(1)
margin (sys)
grid on
1
In1
1.55*[1.042 1]
36.3
0.08s+1
1
0.05*[0.12 1]
s
0.43s+1
1.042s+1
0.12s+1
0.08s+1
PI-Regler
Strecke 1
Strecke 2
Strecke 3
Messeinrichtung
V=1.55 führt auf Phi_r = 48 Grad
Simulink-Struktur "bodediagramm.mdl"
3.7
1
Out1
Bode Diagrams
Gm = Inf, Pm=48.031 deg. (at 2.0917 rad/sec)
50
Phase (deg); Magnitude (dB)
0
-50
-100
-80
-100
-120
-140
-160
-180
10-2
10-1
100
101
102
Frequency (rad/sec)
Sich ergebendes Bodediagramm
Alternativer Reglerentwurf mittels "polkomp.m"
Zur
Reglerbestimmung
mittels
polkomp.m
wird
die
Polynomform
der
Übertragungsfunktion von Strecke und Messeinrichtung benötigt. Mit dem folgenden
Programm
"Polynomform_von_Gs_und_GM.m"
werden
die
Polynomformen
berechnet:
% Berechnung der Polynomform der Strecke und Messeinrichtung
% zum Reglerentwurf mittels "polkomp.m"
% Strecke in Polynomform
zS = 36.33*[0.08, 1];
n1S = [0.12, 1];
n2S =[0.427, 1];
nS= conv(n1S, n2S);
n3S = [1.0423, 1];
nS = conv(nS, n3S);
disp('Polynomform der Übertragungsfunktion der Strecke')
Strecke=tf(zS, nS)
% Messeinrichtung in Polynomform
3.8
zM =0.05*[0.12, 1];
nM = [0.08, 1];
disp('Polynomform der Übertragungsfunktion der
Messeinrichtung')
Messeinrichtung=tf(zM, nM)
Ergebnis:
Polynomform der Übertragungsfunktion der Strecke
Transfer function:
2.906 s + 36.33
-------------------------------------0.05341 s^3 + 0.6214 s^2 + 1.589 s + 1
Polynomform der Übertragungsfunktion der Messeinrichtung
Transfer function:
0.006 s + 0.05
-------------0.08 s + 1
Der Entwurf führt auf eine fast identische Übertragungsfunktion des Reglers:
GR (s) =
1,55 ⋅ (1 + 1,041s)
.
s
Das Bild auf dem nächsten Blatt zeigt die entworfene Simulationsstruktur zum Test
des entworfenen Reglers. V=1,55 führt auf einen Phasenrand von 48°.
Durch Nachoptimierung von V auf V = 1,7 wird die Ausregelung der Störung, die viel
häufiger auftritt als eine Führungsgrößenänderung, optimiert. Da dann bei Führung
eine kleine Übersteuerung der Stellgröße auftritt, wird ein Führungsgrößenvorfilter
eingefügt, was keine wesentliche Verlangsamung des Führungsverhaltens bedeutet.
Siehe dazu die folgenden Regel- und Führungsgrößenverläufe am Anschluss an das
Strukturbild:
3.9
V=1.55 führt auf Phi_r = 48 Grad
V=1.7 ist nachoptimiert auf optimale Störungsausregelung
(inklusive des Vorfilters)
Step
1.55*[1.042 1]
36.3
0.08s+1
1
s
0.43s+1
1.042s+1
0.12s+1
PI-Regler3
Strecke 1
Strecke 2
Strecke 3
1
1.7*[1.042 1]
0.15s+1
s
Strecke 5
Entlastung
Regelgrösse
Belastung
PI-Regler4
Stellgrösse
0.05*[0.12 1]
0.08s+1
Messeinrichtung
Simulationsstruktur zum Test des entworfenen Reglers
3.10
Regel- und Stellgröße bei V=1, 55 (Mp = 0,2).
Es bleibt ein gewisser Stellgrößenspielraum. Wenn man diesen mit V = 1,7
ausschöpft (Lastpeak auf 10V), wird die Stellgröße bei Führung überschritten.
Dies kann man mit einem Führungsgrößenvorfilter kompensieren. Dieses wurde auf
dem vorangehenden Strukturbild bereits darstellt, aber noch nicht angeschlossen.
Man erkennt auf dem folgenden Grafen der Stellgröße, das dann die weder die
Stellgröße bei Störung noch die Stellgröße bei Führung übersteuert wird.
3.11
g) Entwurf eines quasikontinuierlichen zeitdiskreten Reglers
Es wird die Simulink-Struktur "Vergleich_kont_diskret.mdl" entworfen (siehe nächstes
Blatt). Sie enthält den kontinuierlichen Regelkreis aus Aufgabenteil f), darunter wird
der
gleiche
Kreis
allerdings
mit
einem
zeitdiskreten
Regler
(Discrete
Transferfunction) realisiert.
Der Discrete Transferfunction - Block wird nicht mit Zahlenwerten für Zähler, Nenner
und Abtastzeit parametriert, sonder mit drei Variablennamen (zd, nd und T).
3.12
1
0.15s+1
Führungsgrößee
Vorfilter
1.7*[1.042 1]
36.3
0.08s+1
1
s
0.43s+1
1.042s+1
0.12s+1
Kontinuierlicher
PI-Regler
Strecke 1
Strecke 2
Strecke 3
Entlastung
Regelgröße
Belastung
0.05*[0.12 1]
Stellgröße
0.08s+1
Messeinrichtung
zd(z)
36.3
0.08s+1
1
nd(z)
0.43s+1
1.042s+1
0.12s+1
Diskreter
PI-Regler
Strecke 5
Strecke 6
Strecke 7
0.05*[0.12 1]
0.08s+1
Messeinrichtung1
Simulinkstruktur "Vergleich_kont_diskret.mdl" zur Lösung der Aufgabenstellung g)
3.13
Die Werte der Variablen werden
Vergleich_kont_diskret.m" parametriert:
mit
dem
Matlabprogramm
"go_
% Programm go_Vergleich_kont_diskret.m ruft die gleichnamige
% simulink-Strunktur auf und berechnet und parametriert den
% zeitdiskreten Regler.
clear
home
close all
% Öffnen der Simulink-Struktur
Vergleich_kont_diskret
% kontinuierlicher Regler
z=1.7*[1.042 1];
n=[1 0];
sys_kont=tf(z,n);
% diskreter Regler
T=0.01;
sys_diskret=c2d(sys_kont,T,'tustin');
[zd,nd]=tfdata(sys_diskret);
zd=zd{1,1};
nd=nd{1,1};
Regelgrößenverlauf bei einer Abtastzeit von T=1sek. (im Vergleich zur kontinuierlichen Realisierung
3.14
Dazugehöriger Stellgrößenverlauf bei einer Abtastzeit von T=1sek. (im Vergleich zur
kontinuierlichen Realisierung)
Regelgrößenverlauf bei einer Abtastzeit von T=0,1sek. (im Vergleich zur
kontinuierlichen Realisierung)
3.15
Regel- und Stellgrößenverlauf bei einer Abtastzeit von T=0,1sek. (im Vergleich zur
kontinuierlichen Realisierung)
Bei T=1sek. weichen die dynamischen Eigenschaften des Kreises stark von der
kontinuierlichen Realisierung ab. Bei T=0.1sek. sind die Eigenschaften sehr ähnlich.
Allerdings ist die freie Rechenzeit zur Berechnung des Regelalgorithmus wesentlich
kleiner.
3.16
3.4
Das Real-Time Windows Target als Werkzeug zum konzeptorientierten
Rapid Control Prototyping
Dieses Kapitel vertieft den Überblick des Kapitels 1.2.3 "Mit Matlab von der
Systemspezifikation zum Objektcode" so weit, dass man mit dem Real-Time
Windows Target praktisch arbeiten und konzeptorientierte Prototypen erzeugen
kann.
Alle Beschreibungen beziehen sich auf die im Labor verfügbare Matlabversion
R11.1, wie sie im Anhang A1 beschrieben ist.
3.4.1 Einleitung
Die folgenden Erläuterungen fassen ca. 900 Seiten des Real-Time Workshops User's
Guide und 200 Seiten das Real-Time Windows Target User's Guide auf ca. 25 Seiten
zusammen. Das Kapitel kann also nicht den Anspruch auf Vollständigkeit, erheben,
noch beschreibt es die Arbeitsweise der Real-Time Workshop / Real-Time Windows
Targets annähend erschöpfend. Die dargestellten Vorgehensweisen und Leistungen
des Real-Time Workshop / Real-Time Windows Targets reichen zur Lösung der
Laborübungen jedoch aus und versetzen den Leser in die Lage, sich tiefer in die
Arbeitsweise dieser Software einzuarbeiten.
Für nähere Einzelheiten wird auf die Handbücher /8/ und /9/ verwiesen, die im
Rahmen der Laborübungen eingesehen werden können. In ihnen können z.B.
nachgelesen werden:
•
Vorgehensschritte zur Installation des Systems
•
Alternative Vorgehensweisen zu den beschriebenen Arbeitsschritten
•
Methoden zum Online-Tuning von Simulationsparametern
•
Echtzeit-Simulation von Systemen mit verschiedenen Abtastzeiten
Da auch diese Handbücher nicht vollständig widerspruchsfrei sind, hilft manchmal
nur Probieren weiter. Halten Sie sich jedoch an die Empfehlungen des folgenden
Kapitels 3.4.2 .
3.17
3.4.2. Vorbemerkungen zum Betrieb des Real-Time Workshops / Real-Time
Windows Target
In
diesem
Kapitel
sind
einige
Empfehlungen
zusammengestellt,
die
auf
Erkenntnissen gegründet sind, die während der Nutzung des Real-Time Workshops
/ Real-Time Windows Targets bei Laborübungen in den letzten Semestern
gesammelt wurden.
•
Benutzen Sie zum Entwurf Ihrer eigenen Echtzeitanwendungen möglichst immer
das Ihnen zur Verfügung gestellte Mustermodell
"reinraus.mdl" bzw. "reinraus_dash.mdl"
Damit stellen Sie sicher, das alle Grundeinstellungen richtig vorgenommen
wurden. Damit lassen sich eventuell auftretende Fehler beim Build-Prozess
leichter eingrenzen. (Sie finden dieses Mustermodell neben anderen nützlichen
Programmen auf den "Echtzeit-PCs" im Labor. Fragen Sie den Dozenten ggf.
nach dem Speicherort.)
•
Nehmen Sie nach jedem Einschalten Ihres / Ihrer Arbeits-PCs einen OffsetAbgleich der A/D-D/A-Wandlerkarte pci6025E vor, wie er im Kapitel 3.4.4
beschrieben ist. Das Unterlassen des Abgleichs kann zu erheblichen Messfehlern
führen.
•
In einer Simulink-Struktur, die als Echtzeitanwendung laufen soll, muss sich
immer ein Scope befinden. Sonst wird der Compilierungsvorgang mit einer
sinnlosen Fehlermeldung abgebrochen.
•
Dateinamen von Simulink-Strukturen, die als Echtzeitanwendung laufen sollen,
dürfen nicht mehr als 8 Zeichen haben. Sonst wird der Compilierungsvorgang
auch mit einer sinnlosen Fehlermeldung abgebrochen.
•
Nehmen Sie notwendige Veränderungen an der Hardware (Rechner, Versuchsaufbau) nur bei abgeschalteter Netzspannung vor!
•
Wechseln Sie vor Beginn einer Matlab / Real-Time Workshop Sitzung immer in
das Unterverzeichnis "work" von Matlab R11 und von dort nach "RTII-Labor",
legen Sie sich hier Unterverzeichnisse an, mit denen Sie Ihre Arbeit strukturieren.
3.18
Stellen sie sicher, das Sie sich während eines Build-Prozesses in dem
Unterverzeichnis befinden, in dem sich auch die zu compilierende Modelldatei
befindet. Simulink legt sonst die beim Build-Prozess anfallenden Dateien (und das
sind nicht wenige) dort ab, wo sich gerade befinden. Die Folge ist eine völlig
unübersichtliche Datenhaltung.
•
Sichern Sie sich wichtige Programme auf Diskette, da ggf. auch andere
Studierende an den Rechnern des Labors arbeiten.
•
Benutzen Sie bei Echtzeitanwendungen keine Scopes mit mehreren Eigängen,
weil es sonst während des Echtzeitbetriebs zu Programmabbrüchen ohne
Fehlermeldung kommen kann. Es wird empfohlen, zur Signalvisualisierung im
Echtzeitbetrieb für jedes zu messende Signal ein Scope zu benutzen.
3.4.3 Bedienungsanleitung des Real-Time Workshop / Real-Time Windows
Targets
Für die folgenden Beschreibungen wird vorausgesetzt, dass folgende Software
Matlab
Version 5.3.1 (R11.1)
Simulink
Version 3.0.1 (R11.1)
Real-Time Workshop
Version 3.0.1 (R11.1)
Realtime-Windows-Target
Version 1.1 (R11.1)
Watcom C-Compiler
Version 11.0
und eine geeignete A/D-D/A-Wandlerkarte nach den Vorschriften des "Real-Time
Workshop User's Guide" /9/ und des "Real-Time Windows Target User's Guide" /8/
installiert wurden.
3.4.3.1
Prüfung der Installation des Echtzeitkerns
Nach dem Starten von Matlab (Doppelklick auf das Matlab-Icon) kann mit der
Eingabe des Strings
rtwho
in das Matlab Command Window geprüft werden, ob der Echtzeitkern des Real-Time
Workshops installiert wurde. Da die Installation vollständig ist, sollte Matlab wie folgt
3.19
antworten:
Real time windows Target version 1.00 ©
The MathWorks, Inc 1998
Matlab performance = 100%
Kernel timeslice period =1 ms
Nach der anschließenden Eingabe des Strings
simulink3 (CR)
in das Matlab-Command-Window, öffnet sich die "Simulink Block Library" mit dem
bekannten Angebot von Simulationsblock-Kategorien: Sources, Sinks, ... .
Durch die Auswahl folgender Menüfolge
File → New → Model öffnet sich das
Simulations-Arbeits-Fenster (SAF) von Simulink (siehe folgenden Ausschnitt),
in dem die zu realisierende Simulationsstruktur aufgebaut wird. Diese Simulationsstruktur trägt noch den Namen "untitled". Sie kann später nach den üblichen
Speichermethoden des Betriebssystems Windows mit einem frei wählbaren Namen
3.20
als Datei abgespeichert und auch wieder geladen werden. Es ist zu beachten, dass
die Namensergänzung einer Simulink-Datei "mdl" (von model) heißt.
3.4.3.2
Anpassung der "RT In"- und "RT Out"-Blöcke an die installierte A/DD/A-Wandler-Karte
Zur Arbeit mit dem Realtime Workshop werden noch weitere "Blocksets" benötigt. An
diese gelangt man durch Betätigung des Buttons "Blocksets & Toolboxes" im
"Simulink Block Library"-Fenster. Es öffnet sich ein weiteres Fenster mit dem Namen
"Library: Blocksets_and_Toolboxes".
Hier öffnen wir durch einen Doppelklick die Library "Real-Time Windows Target".
In der sich öffnenden "rtwinlib" befinden sich die schon im Kapitel 1.2.3 erwähnten
3.21
Ankopplungselemente an den A/D-Wandler ("RT In") und den D/A-Wandler ("RT
Out") und ein Block mit einer stilisierten PC-Einsteckkarte mit dem Namen "Adapter".
Wir ziehen, wie gewohnt, diese drei Blöcke in das SAF (siehe folgendes Bild). Durch
einen
Doppelklick
auf
den
Block
"Adapter"
öffnet
sich
eine
Liste
von
Hardwaretreibern ("Select a hardware driver") für die vom "Realtime-WindowsTarget" unterstützten A/D-D/A-Wandler-Karten.
Im Labor für Regelungstechnik werden zwei Karten-Typen eingesetzt:
•
•
das1602
pci6025e
(Firma Keithley) und
(Firma National Instruments).
Beide Karten besitzen 16 A/D-Wandler- (gemultiplext) und 2 D/A-Wandler-Kanäle mit
jeweils 12 Bit Amplitudenauflösung.
Wir wählen mittels eines Doppelklicks den für die im Rechner installierte Karte
gültigen Treiber aus. Welche Karte sich in den Labor-Rechnern befindet, können Sie
auf einer Beschriftung der Rechner ablesen. Mit dem Doppelklick öffnet sich ein
Parametrierungsfenster für die gewählte Karte (siehe nächstes Bild).
3.22
•
Bei der pci6025e-Karte aktivieren wir die beiden Felder
Single-ended A/D und
Unipolar D/A
und lassen alle anderen Einstellungen unverändert. Anschließend betätigen wir
den Button "Gains ..." und wählen durch Betätigung des Buttons "±10V >>" für
alle A/D-Wandler-Kanäle einen Aussteuerbereich von ±10V. Jeweils durch
Betätigung der "OK"-Buttons schließen wir dann die Parametrierungsfenster.
•
Bei der das1602-Karte verändern wir in dem sich zuerst öffnenden Fenster gar
nichts, sondern klicken gleich den Button "Gains ..." an.
Hier
wählen
wir
für
alle
A/D-Wandler-Kanäle
den
hier
abgefragten
Verstärkungsfaktor mit 1 (Button "1>>") und schließen, wie oben, beide Fenster
mit "OK".
Damit sind die "RT In"- und "RT Out"-Blöcke für die installierte A/D-D/A-WandlerKarte konfiguriert.
3.23
3.4.3.3 Realisierung einer Echtzeitanwendung
Die einfachste Anwendung des Real-Time Workshop / Real-Time Windows Targets
(allerdings zunächst ohne praktischen Nutzen) besteht aus dem Einlesen in und
sofortigem Ausgeben von Signalen aus der Echtzeitanwendung:
Im SAF muss dazu lediglich, wie bei Simulink üblich, eine Verbindungslinie zwischen
"RT In" und "RT Out" gezogen werden. Diese Anordnung im SAF ist im
vorangehenden Bild zu sehen. Wir realisieren diese Struktur an dieser Stelle noch
nicht, weil noch einige Randbedingungen einzuhalten sind, die wir im Folgenden
kennen lernen werden.
3.4.3.4 Hardware-Ankopplung
Zur hardwareseitigen Signal-An- und -Auskopplung steht für die das1602-Karte eine
Anschlußbox mit Bananen-Buchsen zur Verfügung, die vier A/D-Wandler-Eingänge
und zwei D/A-Wandler-Ausgänge zur Verfügung stellt. Die D/A-Wandlerkanäle
("Out") haben eine gemeinsame Masse ("Ground"), die A/D-Wandlerkanäle ("High
In") haben jeweils getrennte Massen ("Low In"). Die Box-Beschriftung ist weitgehend
selbsterklärend.
Die Signalankopplung für die pci6025e-Karte erfolgt über zwei Flachbandkabel mit
Schraubklemmen. Wir benötigen nur den Flachbandkabel-Anschluß für die PINs 1
bis 50 (siehe Beschriftung auf den Kabeln: "Position 1-50"). Die PINs haben folgende
Belegung:
3.24
A/D-Kanal 1
A/D-Kanal 2
A/D-Kanal 3
A/D-Kanal 4
...
Gemeinsame Masse
für alle A/D-Kanäle
D/A-Kanal 1
D/A-Kanal 2
Gemeindame Masse
für alle D/A-Kanäle
:
:
:
:
3
5
7
9
:
:
:
1 und 2
20
21
:
23
3.4.3.5 Parametrierung des Real-Time Workshop / Real-Time Windows Targets
Zur Ankopplung der Simulationsstruktur im SAF an den Real-Time Workshop / RealTime Windows Target und damit an die A/D-D/A-Wandler-Karte für den
Echtzeitbetrieb der Simulation sind eine Reihe von Einstellungen vorzunehmen:
1. Zunächst sollte zu Beginn einer Sitzung im Menü der SAF
Tools → RTW Options → Realtime Workshop
überprüft werden, ob folgende Eintragungen in den entsprechenden Feldern
stehen (Vergleiche Kapitel 1.2.3.1):
3.25
System target file :
Template makefile :
Make command
:
win_watc.tlc
win_watc.tmf
make_rtw.
Falls das "System target file" einen anderen Eintrag hat, muss es mittels des
Buttons "Browse..." entsprechend umbenannt werden.
An allen anderen Stellen wird keine Veränderung vorgenommen. Anschließend
wird das Fenster "Simulation Parameters" geschlossen.
2. Prüfung ob im Menue "Simulation" die Eigenschaft "External" aktiviert ist. Wenn
nicht, wird diese Einstellung vorgenommen.
3. Im dritten Schritt werden im Menü
Simulation → Parameters → Solver
im Abschnitt "Simulation time" die "Start time" der Simulation (i.a. 0.0) und die
"Stop time", die Simulationsdauer, beide in Sekunden eingegeben. Die zu
wählende "Stop time" hängt von der durchzuführenden Simulationsaufgabe ab.
Sie kann beliebig groß eingestellt werden.
Bei "Solver-Options" muss bei Nutzung des Real-Time Workshop / Real-Time
Windows Targets in der Rubrik "Type" grundsätzlich "Fixed-step" gewählt werden.
Abhängig davon, ob das im Real-Time Workshop / Real-Time Windows Target zu
betreibende System kontinuierlich (Simulationsblöcke aus der „Continous“Blocklibrary) oder zeitdiskret (Simulationsblöcke aus der „Diskret“- Blocklibrary)
realisiert ist, muss (wie bei einer normalen Simulation) im kontinuierlichen Fall ein
3.26
Integrationsalgorithmus („odex“, x steht für eine Zahl zwischen 1 und 5) und im
zeitdiskreten Fall „discret ( no continous states)“ gewählt werden. Es wird
empfohlen, für kontinuierliche Simulationen den Integrationsalgorithmus „ ode4
(Runge-Kutta)“ zu wählen. Dieser Algorithmus ist ein guter Kompromiß zwischen
Rechengenauigkeit und –geschwindigkeit.
Grundsätzlich sollte jedoch immer
überlegt
werden,
ob
überhaupt
mit
kontinuierlichen Simulationen gearbeitet werden soll. Integrationsalgorithmen sind
relativ rechenintensiv, so dass nicht mit sehr hohen Abtastzeiten gearbeitet
werden kann. Die Alternative mit der höchsten Rechengeschwindigkeit besteht
darin, ausschließlich mit zeitdiskreten Simulatiosblöcken zu arbeiten. Dazu
müssen
aber
vorliegende
kontinuierliche
Systeme
zunächst
diskretisiert
(Sprunginvarianz-Transformation, Tustinsche Näherung) und diskret in die
Simulation implementiert werden.
Bei der dann folgenden Abfragen "Fixed step size" und "Mode" im Feld
„Simulation Parameters“ sollte immer "auto" gewählt werden. Die Abtastzeit, die
sich hinter "Fixed step size" verbirgt, wird in den „RT In“- und „RT-Out“Simulationsblöcken (siehe Kapitel 3.2.3) festgelegt.
Die Menüpunkte "Workspace I/O" und "Diagnostics" werden im Rahmen dieser
Einführung nicht benötigt und deshalb nicht verändert.
Das Fenster "Simulation Parameters" kann nun geschlossen werden.
3.4.3.6 Parametrierung der Simulationsblöcke
Alle Simulationsblöcke im SAF müssen, wie bei normalen Simulink-Sitzungen auch,
parametriert werden. Zu diesem Zweck müssen der Block mittels eines Doppelklicks
geöffnet und die abgefragten Parameter eingetragen werden. (Neben den folgenden
Erläuterungen können zur näheren Auskunft auch die Informationen herangezogen
werden, die nach Betätigung des "Help"-Buttons angezeigt werden).
Im Falle des Blocks "RT In" werden folgende Parameter abgefragt (vergleiche das
folgende Bild): "Sample Time": hier muss die Abtastzeit eingetragen werden mit der
die Daten eingelesen, ausgeben und die Simulation betrieben werden soll. Die Größe
hängt
primär
von
der
Problemstellung
3.27
ab,
jedoch
hat
auch
die
Rechengeschwindigkeit
der
Problemstellung
Abtastzeit
eine
CPU
einen
maßgeblichen
erfordert,
die
so
Einfluß.
klein
ist,
Falls
die
dass
die
Rechengeschwindigkeit der CPU nicht ausreicht, (dies macht sich durch eine
Fehlermeldung des RTW bemerkbar: "Error occured ... Too fast for this hardware")
muss auf einen Rechner mit schnellerer CPU zurückgegriffen werden. In ungünstigen
Fällen erfolgt manchmal auch keine Fehlermeldung, sondern die Echtzeitanwendung
stürzt schlicht ab.
Bei "HW Adapter" muss der Name, der unter dem Kartensymbol zur Auswahl des
Kartentreibers (default "Adapter") steht, eingetragen werden.
Bei "Adapter Channels" wird die Anzahl der benutzten A/D-Wandler-Kanäle
eingetragen:
1
:
[1 2] :
[1 2 3] :
usw.
Kanal 1
Kanal 1 und 2
Kanal 1, 2 und 3
Mit dem "OK"-Button wird das Fenster geschlossen.
Der Block "RT Out" wird in gleicher weise parametriert. Es ist darauf zu achten, dass
an allen Stellen, wo die "Sample time" abgefragt wird, immer der gleiche Wert
eingetragen wird, sonst erfolgt eine Fehlermeldung, so dass die Echtzeitanwendung
nicht gestartet werden kann.
Sind noch weitere Simulationsblöcke in der zu simulierenden Struktur enthalten,
3.28
müssen diese selbstverständlich auch parametriert werden. Dabei kann man i.a. so
vorgehen, wie man es aus normalen Simulink-Sitzungen gewohnt ist.
3.4.3.7 Starten einer Echtzeitanwendung
Nach den vorangehenden Anschluß- und Parametrierungsarbeiten kann die erzeugte
Simulationsstruktur in Echtzeit betrieben werden.
Dazu muss im SAF im Menü "Tools" des SAF "RTW Build" ausgewählt werden.
Matlab startet dann die Übersetzungs-, Compilierungs- und Link-Prozedur zur
Generierung eines ausführbaren Programms. Dieser Vorgang ist im sich in den
Vordergrund legenden Matlab-Command-Window beobachtbar.
Bei dieser Prozedur entstehen neben dem ausführbaren Kode eine Vielzahl weiterer
Dateien, die im aktuell eingestellten Speicher-Verzeichnis abgelegt werden. Zur
Verhinderung von Datenchaos sollte deshalb vor dem „Build“-Vorgang in das
Verzeichnis gewechselt werden, wo diese Dateien abgelegt werden sollen. Dies wird
i.A. das Verzeichnis sein, in dem auch die Simulink-Quellstruktur abgelegt wurde.
Beim folgenden Startvorgang dieser Echtzeitanwendung (siehe weiter hinten) sollte
man sich auch in diesem Verzeichnis befinden.
Wenn kein Fehler auftritt heißt die letzte Meldung dieses Build-Prozesses
"Successfull completion of Realt-Time Workshop buildprocedure for
model: untitled".
Erfolgte diese Meldung, wechselt man wieder in das SAF und wählt im Menü
"Simulation" "Connect to target". Damit wird die Echzeitanwendung in den PCArbeitsspeicher geladen und mit der A/D-D/A-Hardware gekoppelt, der Kode aber
noch nicht gestartet. Erst mit der Menüauswahl "Simulation" "Start real-time code"
wird die Echtzeitanwendung gestartet. Sie stoppt entweder nach Ablauf der weiter
vorn gewählten "Stop time" oder durch manuelle Auswahl des Menüpunktes
"Simulation" "Stop real-time code".
Hinweis 1
Leider bleibt das Signal, was beim Stoppen der Echtzeitanwendung am Ausgang des
D/A-Wandlers liegt, anschließend konstant am Ausgang liegen. Falls dies zu
unerwünschten Betriebszuständen im angesteuerten System führen sollte, empfiehlt
es sich, das angesteuerte System vor dem Stoppen der Echtzeitanwendung
3.29
auszuschalten. Häufig genügt es jedoch, nach dem Stoppen der Echtzeitanwendung, wieder den Zustand „Connect to target“ herzustellen. In diesem Zustand
wird am Ausgang des D/A-Wandlers 0 Volt ausgegeben und das angesteuerte
System komm auch zur Ruhe, (auch wenn man anschließend "Disconnect from
target" wählt).
Falls während das Laufes Daten gespeichert wurden, kann es bei den vorangehend
beschriebenen Manipulationen zu Datenverlusten kommen. Es wird deshalb
empfohlen, nach dem Studium dieses Skriptes und vor einer echten Anwendung des
Real-Time Workshop / Real-Time Windows Targets, sich ausführlich mit dem
Stoppen
von
Echtzeitanwendungen
und
der
Rettung
gemessener
Daten
auseinanderzusetzen.
Hinweis 2
Der Real-Time Workshop / Real-Time Windows Target Wind nimmt eine Normierung
der ein- und auszugebenden Signalamplituden vor, die sich bei den vorangehend
vorgenommen Parametrierungen wie folgt auswirkt:
•
Ein über den Block "RT In" eingelesenes Signal von ±10V am Eingang des A/DWandlers wird auf ±1V im SAF am Blockausgang abgebildet (10 fache
Dämpfung).
•
Ein über den Block "RT Out" aus dem SAF ausgegebenes Signal von ±1V wird
auf eine Signalamplitude von ±10V am Ausgang des D/A-Wandlers abgebildet
(10 fache Verstärkung).
Um Verständnisschwierigkeiten zu vermeiden, sollte daher immer mit folgender
Konfiguration gearbeitet werden:
Die jeweilige Blockkofiguration sollten als Einheit aufgefasst werden, d.h. zwischen
"RT in"-Block und dem anschließenden "Gain"-Block oder dem "Gain"-Block und dem
anschließenden "RT Out"-Block sollte nie eine weiterer Block angeschlossen oder
eine Verbindungsleitung abgezweigt werden.
3.30
3.4.3.8 Signalvisualisierung
Einer der großen Vorzüge des Real-Time Workshop, wenn er in Zusammenhang mit
dem "Realtime-Windows-Target" betrieben wird, ist die Möglichkeit, sich mit Hilfe von
Oszilloskopen ("Scopes" aus der "Simulink Block Library" "Sinks") an beliebigen
Stellen einer Simulationsstruktur die aktuellen Signalverläufe in Echtzeit ansehen und
damit das Verhalten das Systems beurteilen zu können.
Zu diesem Zweck muss ein "Scope"-Block an die interessierende Leitung im SAF
angeschlossen werden.
Im folgenden Beispiel wird das eingelesene Signal auf einem "Scope" angezeigt und
gleichzeitig über einen "RT Out"-Block ausgegeben. Die Amplitudennormierung
wurde, wie vorangehend beschrieben, aufgehoben:
Würde man mit einem realen Oszilloskop das Eingangs- und das Ausgangssignal
messen und diese Signalverläufe mit der "Scope"-Abbildung vergleichen, müssen
alle Kurvenverläufe gleich sein.
Bevor das "Scope" sinnvoll arbeitet, muss es auch parametriert werden. Klickt man
das Scope-Symbol im SAF an, öffnet sich sein "Bildschirm" über dem sich sieben
Buttons mit folgender Bedeutung befinden (siehe folgendes Bild).
3.31
1: Zoom in x- und y-Richtung
5: Rettet die aktuellen
2: Zoom in x-Richtung
Einstellungen
3: Zoom in y-Richtung
6: Eigenschaften einstellen
4: Automatische Skalierung
7: Graphen drucken
Die Bedeutung der Buttons ist weitgehend selbsterklärend: mit 1, 2 und 3 kann mit
Hilfe der Maus ('klicken und ziehen') der Bildinhalt entsprechend gezoomt werden.
Button 4 nimmt durch Anklicken eine automatische Skalierung vor, so dass der
gesamte Bildinhalt, wie bei Matlab gewohnt, optimal in den Koordinaten angezeigt
wird. Mit Button 5 kann eine als optimal erkannte Skalierung für die folgenden
Signalausgaben "eingefroren" werden.
Der zunächst wichtigste Button ist Nr. 6 "Eigenschaften einstellen". Betätigt man ihn,
öffnet sich ein Fenster " 'Scope' properties " mit zwei weiteren Ordnern "General" und
"Data history".
Im Ordner "General" werden folgende Eigenschaften abgefragt:
3.32
•
"Number of axes ":Trage Sie hier ein, wieviel Darstellungs-Kanäle des Scope
haben soll. So erhält man z.B. bei einem Eintrag von z.B. "2" zwei ScopeEingänge und zwei übereinander liegende Bildschirme. Es wird empfohlen mit nur
einem Eingang pro Scope zu arbeiten.
•
"Time range"
Hier wird eingetragen über welcher Zeitachse die Signale im Scope ausgegeben
werden. Bei "auto" ist die Zeitachse genau so lang, wie die bei der
Parametrierung des RTW eingegebene "Stop Time" (vergleiche Kapitel 3.2.2).
Hier kann aber auch jede Zeit, die kleiner ist als die "Stop Time", eingegeben
werden, um eine repetierende, aber besser aufgelöste Signaldarstellung zu
erzielen.
•
"Tick labels"
"bottom axis only" beschriftet bei der Wahl von "Number of axes" > 2 nur die
untere Zeitachse, "all" alle Graphen und "non" keine.
•
"Sampling"
Im Feld "Sampling" kann in der Auswahl "Sampling time" eine DarstellungsAbtastzeit für die Scope-Darstellung des Signals gewählt werden. Bei Nutzung
der Auswahl "Decimation" kann die Anzahl der Darstellungs-Stützpunkte
dezimiert werden. Wenn z.B. die Simulation mit einer Abtastzeit von T= 0,1
durchgeführt und Decimation=10 gewählt wird, ergibt sich eine DarstellungsAbtastzeit von 1.
Im zweiten Ordner des Fensters " 'Scope' properties " nämlich "Data history"
(vergleiche das Bild auf der nächsten Seite) deaktivieren wir (falls es nicht schon
geschehen ist, "Limit rows to last ..." . Damit stellen wir sicher, dass bei der ScopeAnzeige keine Darstellungsverluste durch die hier einstellbare Anzahl von
Bildpunkten entstehen.
Die nächste Auswahl "Save data to workspace" besprechen wir im Kapitel 3.4.3.8,
wo wir uns mit der Speicherung von Meßdaten auseinander setzen.
Nach diesen Einstellungen wird das Fenster " 'Scope' properties" mittels des "OK"Buttons geschlossen. Eine vorangehende Betätigung von "Apply" ist nicht notwendig.
3.33
Während die vorangehend beschriebenen Parametrierungen eines Scope-Blockes
auch im normalen Simulink-Betrieb (d.h. Off-Line ohne Echtzeitbetrieb) durchgeführt
werden müssen, benötigt man zur Echtzeit-Visualisierung von Signalen mittels
Scope-Blöcken weitere Einstellungen.
Zu diesem Zweck öffnen wir im SAF mit der Menüfolge
Tools → External Mode Control Panel
ein Fenster mit dem Namen "Modellname: External Mode Control Panel",
wo wir den Button "Signal & Triggering" anklicken. (Die anderen Buttons werden im
Rahmen dieser Einführung nicht
benötigt.) Es öffnet sich ein Fenster mit dem
Namen "Modellname: External Signal & Triggering" (siehe nächstes Bild).
3.34
Im Feld "Signal selection" sind alle im Simulationsmodell benutzten "Scopes" mit
ihren Namen in der Rubrik "Block" aufgelistet. Um sie zu aktivieren, d.h. zur EchtzeitSignalanzeige zu veranlassen, muss zunächst in der linken unteren Ecke des
Fensters "Arm when connect to target" aktiviert werden. Jetzt können durch
Anklicken einer Scope-Zeile aus der dargestellten Liste und anschließender
Betätigung des Radio-Buttons "on" Scopes zur Anzeige aktiviert und durch "off"
wieder deaktiviert werden. Mit "Select all" können alle Scopes gleichzeitig aktiviert
werden.
Ein
aktiviertes
Scope
wird
durch
ein
der
entsprechenden
Zeile
vorangestelltes "X" gekennzeichnet.
Die Signalvisualisierung kann freilaufend oder signalgetriggert erfolgen, dies kann in
der Rubrik "Trigger" in der Abfrage "Source" eingestellt werden:
•
"manual"
Frei laufende Anzeige, d.h., die Signaldarstellung erfolgt nach dem Start der
Echtzeitanwendung durch "Start realtime code". Diese Einstellung wird für die
Durchführung erster Simulationsläufe in einer noch nicht näher bekannten
Umgebung empfohlen, wenn Verlauf und Amplitude des darzustellenden Signals
noch nicht genau bekannt sind.
3.35
•
"signal"
Anzeige des Signals erst nach dem Auftreten eines Trigger-Ereignisses, das noch
genauer spezifiziert werden kann (siehe weiter unten).
Im Feld "Duration" wird eingestellt, wieviel Abtastschritte (T) im Scope dargestellt
werden sollen. Es wird empfohlen, die "Duration" nach folgender Formel zu
berechnen
gewählte Signal-Darstellungsdauer des Scopes
Duration = -----------------------------------------------------------------------Abtastzeit (T)
.
Im freilaufenden Betrieb sollten die Felder "Mode" mit "normal" und "Delay" mit "0"
parametriert werden.
Zur getriggerten Signaldarstellung wählt man im Feld "Source" die Eigenschaft
"signal". Im gleichen Moment wird das Feld "Trigger signal" aktiviert, wodurch weitere
fünf Felder ("Port", "Element", "Direction", "Level" und "Hold-off") parametriert werden
müssen.
Zunächst
wählt
man
jedoch
aus,
welches
Scope-Signal
zur
Triggerung
herangezogen werden soll. Dazu klickt man die gewünschte Scope-Zeile in der
Rubrik "Signal Selection" an. Sie wird dadurch blau unterlegt. Anschließend betätigt
man den Button "Trigger signal", rechts neben dem Feld "Signal Selection". Das
gewählte Scope wird dadurch auf der linken Zeilenseite mit einem "T" versehen.
Die fünf oben erwähnten Parametrierungen werden wie folgt vorgenommen:
•
"Direction"
Angabe welche Verlaufsrichtung des Signal ("rising", "falling", "either") zur
Triggerung herangezogen werden soll.
•
"Level"
Angabe welcher Signalpegel (in Volt) die Triggerung auslösen soll.
•
"Port" und "Element"
Diese beiden Parameter werden nur benötigt, wenn ein Scope-Block mit
mehreren Eingängen zur Triggerung benutzt wird. Nähere Informationen finden
3.36
sich in /1/.
•
"Hold-off"
Bezieht sich auf die "Mode" "normal" Triggerung (siehe weiter unten).
Ausgedrückt in Abtastschritten ist "Hold-off" die Zeit zwischen der Beendigung
eines Trigger-Ereignisses und dem neuen Initialisieren des Triggers. Diese
Parametrierung wird selten benötigt, "Hold-off" steht daher i.a. auf 0.
In den Felder "Mode" und "Delay" bestehen noch folgende Parametrierungsmöglickeiten:
•
"Mode"
Hier besteht die Wahl zwischen "normal" und "one-shot". In der "normal"Betriebsweise wird der Trigger nach jedem Triggerereignis automatisch wieder
initialisiert. In der "one-shot"-Betriebsweise wird nur ein Datensatz gesammelt und
der Trigger erst nach erneutem ""Connect to target" wieder aktiviert. Es wird die
Benutzung des "normal"-Betriebszustands empfohlen.
•
"Delay"
Hier kann eine bestimmte Anzahl von Abtastschritten eingegeben werden, die die
Auslösung des Triggers gegenüber dem Anfang der Datendarstellung verzögert,
damit ist Posttriggering möglich. (Wird selten benötigt, nähere Einzelheiten siehe
/1/.
Nach diesen Parametrierungen wird das Fenster "Modellname: External Signal &
Triggering" geschlossen und die Echtzeitanwendung mit Datenvisualisierung kann
erstellt und laufen gelassen werden.
Hinweis 3
Die Signaltriggerung funktioniert nur, wenn die "Duration"-Einstellung nach der
Formel von Seite 21 richtig vorgenommen wird.
Hinweis 4
Für die in der Regelungstechnik relativ langsam ablaufenden Vorgänge wird i.A. die
Triggerung der Signale nicht benötigt, d.h. die Auswahl bei "Mode" wird i.A. "normal"
sein und mit dem Knopf "Trigger signal" wird kein Signal gekennzeichnet.
3.37
Falls zu viele Scopes zur Echtzeit-Signalbeobachtung eingesetzt werden, kann es,
insbesondere bei geringer CPU-Rechenleistung und kurzen Abtastzeiten, passieren,
dass die Anzeige nicht mehr schritthaltend arbeitet. Die Signale werden später
dargestellt, als sie in Wirklichkeit auftreten.
Die Rechenkapazität wird in diesem Falle auf das Einlesen, Ausgeben und die
Datenverarbeitung
innerhalb
der
Simulations-Struktur
verlagert,
weil
diese
Funktionen sinnvollerweise eine höhere Priorität genießen. Abhilfe kann damit erzielt
werden, dass
•
nicht alle Scopes im "External Signal & Triggering"-Fenster aktiviert werden oder
•
die Darstellungs-Abtastzeit der Scopes im "Scope properties"-Fenster (Scope
Anzeige-Fenster, Button 6) im Ordner "General" bei "Sampling" so verändert wird,
dass weniger Daten angezeigt werden (z.B. durch Wahl von "Decimation"
3.4.3.9
> 1).
Speicherung von Messdaten
Bei allen vorangegangenen Betriebsweisen des Real-Time Windows Target
existieren die gemessenen und verarbeiteten Signale nur transient im Moment ihres
Auftretens, d.h. es werden keine Daten gespeichert. Möchte man Daten speichern,
um sie nach einer Echzeit-Verarbeitung anschließend Off-Line weiter zu verarbeiten,
muss dieser Wunsch dem Real-Time Windows Target explizit mitgeteilt werden.
Dazu öffnen wir das schon bekannte Bildschirmfenster des Scopes, dessen Daten im
Matlab-Arbeitsspeicher gespeichert werden sollen:
Nach Betätigung von Button 6 erscheint das auch schon bekannte Fenster " 'Scope'
3.38
properties", bei dem wir den Ordner "Data history" öffnen:
Wir aktivieren das Feld "Save data to workspace" und wählen als "Format" "Matrix
(compatible with V2.0-2.2)". Damit erhalten wir ein gespeichertes Datenformat, das
uns aus der Nutzung von Matlab 4.2 bekannt ist.
Ist die im Ordner "General" von " 'Scope' properties" eingetragene "Time range"
identisch mit der bei "Simulation time" ( Menüfolge im SAF: Simulation → Parameters
→ Solver) eingetragenen, werden alle von diesem Scope während der laufenden
Echtzeitanwendung angezeigten Signale einschließlich des Zeitvektors mit der
gewählten Abtastzeit T im Matlab-Arbeitsspeicher mit dem Namen abgelegt, den Sie
unter "Variable name" eingetragen haben. Im vorliegenden Fall ist es die DefaultEintragung "ScopeData" . Ist die bei "'Scope' properties" eingetragene "Time range"
kürzer als die bei "Simulation time", wird nur der letzte Bildinhalt des Scopes
gespeichert.
Bitte bedenken Sie, dass jedes gespeicherte Datum und jeder im Zeitvektor
gespeicherte Zeitschritt nach Matlab-Konventionen jeweils 8 Byte lang ist. Berechnen
Sie daher überschlägig, ob die von Ihnen geplante Speicherdauer nicht die Kapazität
ihres Speichermediums sprengt.
Nach Ablauf der Echtzeitanwendung steht Ihnen dann der Datensatz unter Matlab
zur Verfügung. Mittels "whos" erfolgt im Matlab-Command-Window folgende
Ausgabe:
Name
Size
Bytes Class
ScopeData
51x2
816
double array
Grand total is 153 elements using 1224 bytes
3.39
In der (n x 2) - Matrix "ScopeData" befinden sich in der ersten Spalte die Zeitachse
"ScopeData( : , 1)" und in der zweiten Spalte der Signalverlauf "ScopeData( : , 2)".
Der Signalverlauf könnte z.B. mit dem folgenden Befehl unter Matlab geplottet
werden:
plot(ScopeData(:,1), ScopeData(:,2)), grid on;
Hinweis 5:
Speichern Sie die Meßdaten (auf Festplatte, Diskette), bevor Sie im Menü
"Simulation" den Menuepunkt "Connect to target" erneut wählen oder das
Bildschirmfenster, auf dem die Meßdaten zu sehen sind, schließen.
Anderenfalls können die Meßdaten im Matlab-Arbeitsspeicher gelöscht werden. Dies
ist insbesondere bei Langzeitmessungen ärgerlich.
3.4.4 Offset-Abgleich der A/D-D/A-Wandlerkarte pci6025E
Bei der A/D-D/A-Wandler-Karte pci6025E der Firma National Instruments können
sich nach dem Einschalten des Rechners ungewollte Gleichspannungspegel (OffsetSpannungen) einstellen, die sowohl die Signalerfassung über den A/D-Wandler als
auch die Signalausgabe über den D/A-Wandler verfälschen.
Aus diesem Grunde muss einmal nach jedem Einschalten des PCs ein sogenannter
Offsetabgleich vorgenommen werden. Aus didaktischen Gründen soll dies nicht
automatisch per Firmware sondern schrittweise von Hand vorgenommen werden.
•
Offsetkompensation am Analog-Eingang
Zunächst wird im Real-Time Windows Target an den oder die benutzten "RT In" Böcke mit Normierungsverstärker (vergleiche Kapitel 3.2.4. , Hinweis 2) ein Scope
angeschlossen
RT In
10
RT In
Gain
Scope
und der entsprechende Hardwareeingang elektrisch kurzgeschlossen. Falls ein
Offsetfehler vorliegt, kann diese Offsetspannung auf dem Scope abgelesen werden.
3.40
Zur Offset-Kompensation, wird mittels eines "Constant"-Blockes aus der SimulinkBlocklibrary "Sources" der im Vorzeichen umgekehrte Wert der auf dem Scope
abgelesenen Spannung wie folgt aufgeschaltet:
Weiterverarbeitung des
eingelesenen Signals
RT In
10
RT In
Gain
Scope
-Offset
Constant
Wenn dann am Scope eine Spannung von ca. Null Volt ablesbar ist, ist der
entsprechende Eingang ist abgeglichen.
•
Offsetkompensation am Analog-Ausgang
Zur Offsetkompensation von Analog-Ausgängen wird an den abzugleichenden
Hardware-Ausgang
ein
Gleichspannungsmesser
(Bereich
0V
bis
ca.
10V)
angeschlossen. Aus dem Real-Time Windows Target heraus wird mit folgender
Struktur Null Volt ausgegeben:
0
Constant
0,1
RT Out
Gain
RT Out
Falls ein Offset-Fehler vorliegt, kann eine Fehlerspanunng ungleich Null Volt auf dem
Spannungsmesser abgelesen werden. Die abgelesene Spannung wird anschließend
mit
umgekehrten
Vorzeichen
mittels
eines
"Constant"-Blockes
als
Offset-
Kompensation wie folgt in die Simulink-Strukutur eingefügt:
auszugebendes
Signal
0,1
RT Out
Gain
RT Out
-Offset
Constant
Nach diesen Offsetabgleichungen kann jetzt so lange Offsetfehler-frei gearbeitet
3.41
werden, bis der PC abgeschaltet wird. Nach einem erneuten Einschalten, muss ein
neuer Offsetabgleich vorgenommen werden.
Hinweis 6
Die
angegebenen
Offset-Kompensationsstrukturen
müssen
in
die
Simulink-
Echtzeitanwendungen eingebaut werden, die zur Messung benutzt werden!
3.5
Embedded Coder und Target for Infineon C166 als Werkzeug zum
implementierungsorientierten Rapid Prototyping
Leider existieren im aktuellen Semester noch keine Laborarbeitsplätze für
implementierungsorientiertes Rapid Control Prototyping. Es sind jedoch alle
Softwarekomponenten
von
Matlab/Simulink
und
die
dazu
notwendige
C-
Entwicklungsumgebung "Tasking Tools" der Firma Altium, Australien vorhanden, um
diese Arbeitsplätze aufzubauen. Auch entsprechende Hardware in Form von
Development Kits mit dem Prozessor C167 von der Firma Phytec, Deutschland sind
vorhanden.
Erste Erfahrungen mit dieser Entwicklungsumgebung wurden im Wintersemester in
Form einer Diplomarbeit /18 / gemacht.
Wer Interesse an dieser Technik hat, ist eingeladen sich in Form einer Masterarbeit
am Aufbau von Laborarbeitsplätzen zu beteiligen.
3.42
4.
Praktisches Rapid Control Prototyping
Dieses Kapitel kann mit Hilfe des Laborberichts, der parallel und zum Abschluss des
Laborversuchs
angefertigt
wird,
selbst
ergänzt
werden.
Die
Überschriften
entsprechen weitgehend dem Papier "Vorgehensweise zur Lösung praktischer
regelungstechnischer Problemstellungen", das auf der Webseite des Autors dieses
Skripts zu finden ist und als Bearbeitungsreihenfolge zur Lösung der Laboraufgabe
empfohlen wurde.
Die Anpassung des Berichts an die in diesem Kapitel verwendeten Überschriften ist
als Nachbereitung des Laborstoffss und als Vorbereitung zur Klausur sehr
empfehlenswert.
4.1
Literatur
(Gedruckte Literatur wird beginnend mit /1/, Internetadressen zu bestimmten
Themen werden beginnend mit /100/ durchnummeriert.)
/1/
A. Burst: "Rapid Prototyping eingebetteter Systeme auf der Basis des CDIFDatenaustauschformats"
Dissertation am Institut für Informationsverarbeitung, Universität Karlsruhe,
2000.
/2/
M. Ottens: "Grundlagen der Systemtheorie",
Vorlesungsskript im Fachbereich Informatik und Medien, Beuth Hochschule für
Technik Berlin, Sommersemester 2008.
/3/
M. Ottens: "Einführung in die Regelungstechnik",
Vorlesungsskript im Fachbereich Informatik und Medien, Beuth Hochschule für
Technik Berlin, Sommersemester 2008.
/4/
M. Ottens: "Einführung in das CAE-Programm Matlab/Simulink",
Vorlesungsskript im Fachbereich Informatik und Medien, Beuth Hochschule für
Technik Berlin, Sommersemester 2008.
/5/
M. Ottens: "Praktische Verfahren zur experimentellen Systemidentifikation",
Vorlesungsskript im Fachbereich Informatik und Medien, Beuth Hochschule für
Technik Berlin, Sommersemester 2008.
/6/
A. Angermann, M. Beuschel, M. Rau, U. Wohlfahrt:
"Matlab-Simulink-Stateflow Grundlagen, Toolboxen, Beispiele",
Oldenbourg Verlag, Münschen, Wien, 2. Auflage, 2003.
/7/
Ratcliff, B.: "Early and not-so-early prototyping-rationale and tool support"
Computer Software an applications Conference, 1988, COMPSAC 88.
Proceedings, Twelfth International.
/8/
Ohne Autorenangabe: "Real-Time Windows Target Users Guide"
Version 3.0 (R2007b), The MathWorks, Inc; Natic, MA, USA
/9/
Ohne Autorenangabe: "Real-Time Workshop Users Guide"
Version 7.0 (R2007b), The MathWorks, Inc; Natic, MA, USA
/10/
Ohne Autorenangabe "Getting Started with Matlab"
Version 7.5.0.342 (R2007b), The MathWorks, Inc; Natic, MA, USA
(In diesem Manual wird auf die verschiedenen vertiefenden Manuals zu
Matlab hingewiesen)
/11/
Ohne Autorenangabe: "Using Simulink"
Version 7.0 (R2007b), The MathWorks, Inc; Natic, MA, USA
/12/
Ohne Autorenangabe: "Real-Time Workshop Embedded Coder Users Guide"
Version 5.0 (R2007b), The MathWorks, Inc; Natic, MA, USA
/13/
Ohne Autorenangabe: "Link for Tasking Users Guide"
Version 1.2 (R2007b), The MathWorks, Inc; Natic, MA, USA
/14/
Ohne Autorenangabe: "Target for Infineon C166 Users Guide"
Version 1.5 (R2007b), The MathWorks, Inc; Natic, MA, USA
/15/
Ohne Autorenangabe: "Real-Time Workshop Reference"
Version 7 (R2007b), The MathWorks, Inc; Natic, MA, USA
/16/
S.Rebeschieß, T. Liebezeit, U. Bazarsuren
"Automatisierter Closed-Loop-Softwaretest eingebetteter Motorsteuerfunktionen"
www.silest.de/data/multimedia/paper_elektronik_im_kfz_2006_rebeschiess.pdf
/17/
D. Abel, A. Bollig: "Rapid Control Prototyping: Methoden und Anwendungen"
Springer Verlag; Berlin, Heidelberg, New York, ... , 2006
/18/
R.Spyra: "Rapid Control Prototyping für C167-Mikrocontroller unter
Matlab/Simulink"
Diplomarbeit im Studiengang Technische Informatik des Fachbereichs VI
(Informatik und Medien), Beuth Hochschule für Technik, 2010
/100/
http://de.wikipedia.org/wiki/Unified_Modeling_Language
/101/
http://ivs.cs.uni-magdeburg.de/~dumke/UML/12.htm
/102/
http://de.wikipedia.org/wiki/Eingebettetes_System
/103/
http://en.wikipedia.org/wiki/Embedded_systems
/104/
http://de.wikipedia.org/wiki/In-Circuit-Emulator
/105/
http://de.wikipedia.org/wiki/Joint_Test_Action_Group
/106/
http://de.wikipedia.org/wiki/TargetLink
/107a/
http://www.autosar.org/download/AUTOSAR_long_de.pdf
/107b/
http://www.autosar.org/download/AUTOSAR_short_de.pdf
/108/
http://de.wikipedia.org/wiki/OSEK
/109/
http://de.wikipedia.org/wiki/Echtzeitsystem
/110/
http://www.openwatcom.org/index.php/Main_Page
/111/
http://www.altium.com (Tasking Tools for C166, v8.6r3)
/112/
http://www.windriver.com/
/113/
http://de.wikipedia.org/wiki/ASCET/
/114/
http://de.wikipedia.org/wiki/LabVIEW/
/115/
http://www.ni.com/matrixx/
/117/
http://de.wikipedia.org/wiki/Controller_Area_Network
/118/
http://de.wikipedia.org/wiki/Hardware_in_the_Loop
/119/
http://www.openwatcom.org/index.php/Main_Page

Documentos relacionados