Diplomarbeit - Hochschule für Technik und Wirtschaft Dresden
Diplomarbeit - Hochschule für Technik und Wirtschaft Dresden
Diplomarbeit - Hochschule für Technik und Wirtschaft Dresden
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
<strong>Diplomarbeit</strong>: Modulares System Programmierung der Knotenpunkte<br />
6.3. Umsetzung<br />
Um die Sensoren <strong>und</strong> Aktoren beziehungsweise die dazugehörigen Controller in die Lage zu<br />
versetzen, Steuerprogramme ausführen zu können, müssen die PL0-Programme in einen Code<br />
übersetzt werden, den die Controller verstehen. Um die Programme nicht <strong>für</strong> jeden Controllertypen<br />
spezifisch zu übersetzen, wird ein Code erzeugt, der von einer Virtuellen Maschine ausgeführt<br />
werden kann. Diese verfügt über einen Kellerspeicher, auf dem alle Daten abgelegt werden. Damit sie<br />
auch auf kleineren Controllern mit wenig Arbeitsspeicher lauffähig ist, ist die Breite des Maschinen-<br />
Speichers auf zwei Byte festgelegt.<br />
Der Code ist relativ klein gehalten <strong>und</strong> kommt mit derzeit 35 Befehlen aus. Damit ist er bereits<br />
gegenüber dem von Prof. Beck verwendeten Zwischencode um einige Befehle erweitert worden. Sie<br />
dienen zum einen dem Alternativ-Zweig der zweiseitigen Verzweigung (IF THEN ELSE) <strong>und</strong> den<br />
Funktionsaufrufen <strong>und</strong> zum anderen wurden zwei neue Befehle eingeführt, um mit den anderen<br />
Knotenpunkten kommunizieren zu können. Diese Befehle holen sich ihre Parameter vom<br />
Kellerspeicher <strong>und</strong> schreiben die Ergebnisse dorthin zurück. Die Virtuelle Maschine entscheidet dabei,<br />
ob sich die Anfrage an einen entfernten Knoten richtet oder die Daten direkt vom gleichen Controller<br />
bezogen werden können. Dadurch, dass keine Unterschiede bei diesen beiden Aufrufen in der<br />
Skriptsprache gemacht werden, vereinfacht sich die Programmierung <strong>und</strong> die Programme können mit<br />
gleichen Ergebnissen auf jedem Knoten ausgeführt werden, ohne extra angepasst werden zu<br />
müssen.<br />
6.3.1. Der Compiler<br />
Auf die genaue Entwicklung eines Compilers soll hier nicht eingegangen werden, sondern es wird nur<br />
ein grober Überblick gegeben.<br />
Ein Compilervorgang besteht aus mehreren Phasen. Am folgenden Beispiel werden diese kurz<br />
erläutert.<br />
CONST pi=3;<br />
VAR a,x;<br />
BEGIN<br />
IF a>0 THEN<br />
x:=2*pi+a;<br />
END.<br />
Phase Bedeutung<br />
Lexikalische Analyse Der Quelltext wird in eine Folge von Symbolen zerlegt.<br />
(const)(id,pi)(=)(num,3)(;)<br />
(var)(id,a)(,)(id,x)(;)<br />
(begin)<br />
(if)(id,a)(>)(then)<br />
(id,x)(:=)(num,2)(*)(id,pi)(+)(id,a)(;)<br />
(end)(;)<br />
26.07.2004 Seite 44 von 85