home *** CD-ROM | disk | FTP | other *** search
-
-
- Achsen und Skalen...
-
- ...auf dem Plotter implementiert
-
- von Gerd Kraus
-
-
- Während es für die unterschiedlichsten Anwendungen Druckertreiber in
- Hülle und Fülle gibt, fristet der Plotter, so scheint es, in der PC-
- Welt eher ein Mauerblümchendasein. Seitdem jedoch die PC-Grafiken
- immer ansprucksvoller werden und die CAD-Anwendungen auch für den
- Hobbybereich interessant, weil erschwinglich, werden, wird auch der
- Einsatz eines Plotters am PC immer interessanter.
-
- Die in TOOLBOX 12'88 veröffentlichte Grafik-Unit zur Ausgabe von
- richtigen Achsen und winkeltreuen Skalen fand unter den Lesern viel
- Anklang. Es häuften sich aber auch die Anfragen, ein ähnliches
- Programm für die Ausgabe von Kurven und anschaulichen Grafiken auf
- dem Plotter zu verwirklichen. Ihr Wunsch war uns Befehl: Wir haben
- die Grafik-Unit für Plotter mit einer HPGL-kompatiblen Be-
- fehlssprache in Turbo Pascal 4.0/5.0 umgesetzt.
-
- Wollte man sich vor zehn, fünfzehn Jahren einen Taschen- oder
- Tischrechner für den naturwissenschaftlichen Bereich kaufen, war es
- eine gute Idee, sich ein Gerät von Hewlett Packard zuzulegen. Die
- "umgekehrte polnische Notation" (UPN) von Arithmetikoperationen war
- zwar etwas gewöhnungsbedürftig, aber äußerst effektiv und schnell.
- Bereits mit der frühen Palette von naturwissenschaftlichen Rechnern
- lieferte Hewlett Packard auch X-Y-Plotter. Aus dieser Zeit stammt
- die HPGL, die Hewlett-Packard-Graphic-Language.
-
- HPGL ist heute für Plotter die Standard-Kommandosprache. Wer seinen
- mit HPGL ansprechbaren Plotter nicht in der Liste der Gerätetreiber
- eines CAD-Programmes findet, braucht nur einen der mit Sicherheit
- angebotenen HP-Plotter auszuwählen, schon sind die meisten Kommuni-
- kationsschwierigkeiten beseitigt. Lediglich bei der Menge der
- implementierten Befehlswörter ist eine gewisse Streuung vorhanden.
- Der für unsere Grafik-Implementation verwendete Plotter PL 450 läßt
- sich zum Beispiel mit 56 Befehlen programmieren, während der HP
- 7586B 82 Befehle versteht.
-
- Um das Programm für möglichst viele Plotterbesitzer interessant zu
- machen, wurden nur die gebräuchlichsten Befehle in der Grafik-Unit
- für den Plotter implementiert und auf einige komfortable Befehle wie
- zum Beispiel das Zeichnen von Koordinatenachsen mit Teilstrichen
- oder dem Festlegen einer Fensterfläche verzichtet. Welche Befehle
- Ihr Plotter verstehen muß, damit sie das Programm benutzen können,
- können Sie Bild 1 entnehmen.
-
- Ein Problem beim Programmieren in HPGL soll nicht unerwähnt bleiben:
- Dachte ich bisher, daß es nichts komplizierteres gäbe als ein
- Druckerhandbuch, so mußte ich meine Meinung gründlich revidieren.
- Beim Studium des Plotter-Manuals kommt man manchmal auf den
- Gedanken, HPGL sei eine Geheimsprache, die möglichst wenigen Leuten
- nähergebracht werden soll... Hier hilft oft nur mühsames und
- zeitraubendes Ausprobieren der Befehle. Mit dem Befehl CS, zum
- Beispiel, kann man den Zeichensatz auswählen, aber woraus hier die
- Auswahl besteht, bleibt im Dunklen.
-
- ,,z
- Das Pflichtenheft...
-
-
- Die beiden Plotter-Units sollen folgende Bedingungen erfüllen:
-
- - 1. der Plotter wird mit HPGL-Befehlen angesprochen (Unit HPGL),
- - 2. die in dieser Unit verwendeten Grafikbefehle sollen möglichst
- die gleiche Syntax wie die in Turbo-Pascal definierten Befehle
- haben,
- - 3. die allgemeinen Grafik-Routinen (Unit PLGRAPH) sollen sich mög-
- lichst wenig von den Befehlen der Bildschirmgraphik-Unit PGRAPH un-
- terscheiden und
- - 4. Anwender, die nur im Büro Zugriff auf einen Plotter haben,
- sollen ebenfalls mit dem Programm arbeiten können.
-
- Bei den in der Unit HPGL implementierten Prozeduren wurden die
- gleichen Namen und Parameter verwendet, wie sie in GRAPH.TPU
- deklariert sind. Dies ermöglicht ein schnelles Einarbeiten in die
- Befehle. Den Prozedurnamen ist der Übersichtlichkeit halber die
- Zeichenfolge "P_" vorangestellt, obwohl das nicht unbedingt nötig
- ist, da die Grafik entweder auf den Bildschirm oder den Plotter aus-
- gegeben wird, und somit die Unit GRAPH mit der Unit HPGL nicht in
- Konflikt kommen kann.
-
- Die Befehle zum Aufbereiten der Grafik sind in der Unit PLGRAPH
- enthalten. Diese Unit ist eine angepaßte Version der in TOOLBOX
- 12'88 veröffentlichten Unit PGraph. Für den Anwender heißt das, daß
- die Grafik zunächst auf dem Monitor dargestellt wird. Sind dann die
- richtigen Parameter ermittelt, braucht in der USES- Anweisung nur
- die Unit PGRAPH gegen PLGRAPH ausgetauscht zu werden. Bei der
- Implementierung wurde aus Gründen der Geschwindigkeit und der
- Übersichtlichkeit darauf verzichtet, die entsprechenden
- Plotterbefehle direkt in die Unit PLGRAPH aufzunehmen.
-
- Nicht jeder Anwender hat einen Plotter zu Hause stehen, aber mancher
- kann vielleicht das Gerät im Büro mitbenutzen. Deshalb erfolgen alle
- Anweisungen an den Plotter über eine Datei vom Typ 'TEXT', die
- entweder direkt via Centronics-Schnittstelle ausgegeben wird oder
- zur späteren Verwendung auf Diskette gespeichert werden kann.
- Außerdem konnte ich mich damit elegant an einem weiteren Problem
- 'vorbeimogeln', nämlich der Kommunikation zwischen Computer und
- Plotter. Die serielle Schnittstelle scheint da einige Tücken zu
- haben und da mein PL 450-Plotter sowohl eine serielle als auch eine
- Centronics-Schnittstelle besitzt, ist er bei dem von mir verwendeten
- CAD-Programm an die Centronics-Schnittstelle angeschlossen. Das hat
- auch den Vorteil, daß ein Druckerpuffer die Wartezeiten beträchtlich
- verkürzen hilft.
-
- Zu den Units im einzelnen: Die allgemeine Funktionsweise der Unit
- PGRAPH kann in der TOOLBOX 12'88 nachgelesen werden, an den
- Prozeduraufrufen wurde nichts verändert. Von 'außen' sind nur drei
- Änderungen sichtbar, die beim Austausch von Plotter- und
- Bildschirmgrafik zu beachten sind :
-
- - die Textgröße ist in HPGL in [cm] anzugeben, hier sorgen die
- typisierte Konstante "P_FontSize" und eine interne Umrechnung für
- eine rasche Umstellung.
- - die Festlegung des Grafikbereiches in der Prozedur "GraphikWindow"
- erfolgt in [mm]. Das ist vor allem bei der Festlegung des
- notwendigen Randabstandes von den den Zeichengrenzen wichtig, das
- Zeichenfenster sollte ohnehin nur in Abhängigkeit von den
- festgelegten typisierten Konstanten definiert werden. Bei der
- definierten Größe des Zeichensatzes (P_FontSize, Größe 2) genügt ein
- Randabstand von 20 mm.
- - für die Variable "Thickness", die Strichstärke also, ist kein
- entsprechender HPGL-Befehl vorhanden. Statt der Liniendicke wird mit
- "Thickness" die Wiederholschrittlänge des Linientyps geändert. Ein
- recht guter Wert ist hierbei '3', der bereits in der typisierten
- Konstanten "P_NormStep" festgelegt ist.
-
- Die weiteren Änderungen sind für den Anwender von außen nicht
- sichtbar. Einige Änderungen seien kurz aufgeführt:
-
- - der Ursprung des Koordinatensystems liegt im Gegensatz zum
- Bildschirm-Koordinatensystem links unten.
- - der Startpunkt eines Zeichens ist immer die linke untere Ecke, die
- erforderlichen Abstände der Beschriftung wurden in Abhängigkeit von
- der Größe des Zeichensatzes neu definiert.
- - die Ausdehnung "Expans" in der Prozedur "Uscale" wird noch mit
- einem Faktor (10) multipliziert, um bei gleichen Parametern ein in
- etwa gleiches Aussehen des Koordinatensystems zu erhalten.
-
- In der Unit HPGL müssen eventuell zunächst einige Werte an die
- verwendete Hardware angepaßt werden:
-
- - die Anzahl der Stifte ist in "MaxColors" mit 8 festgelegt
- - die maximale Blattgröße in [mm] ist in "UaxMax" und "VaxMax"
- anzupassen
- (vorbereitet für DIN A3)
- - durch eine Multiplikation mit "PFaktor" werden die Koordinaten
- plottergerecht aufbereitet. Bei einer Auflösung von 0.025 mm ergibt
- sich PFaktor zu 1/0.025 = 40. Die Auflösung des Plotters, das heißt
- die Anzahl der Plotschritte/Einheit, kann dem Datenblatt des Geräts
- entnommen werden.
- Die genannten drei Werte finden sich in der Prozedur
- "OpenGraphik".
-
- Damit Sie bei Änderungen nicht mühsam das gesamte Listing
- durchforsten müssen, sind so viele Parameter wie möglich als
- typisierte Konstanten deklariert:
-
- - die Stiftfarben sind wie beim Bildschirm belassen worden
- - die Namen der Linienarten wurden soweit möglich analog den Namen
- in der Graph-Unit gewählt
- - als DefaultFont wurde der Zeichensatz '0' festgelegt
-
- Einige Anmerkungen noch zu den Prozeduren:
-
- - "OpenGraphik" initialisiert den Plotter und teilt dem Programm die
- hardwarespezifischen Werte mit. Mit 'PRN' als Dateiname wird über
- die Centronics-Schnittstelle sofort gezeichnet, ein unter DOS
- gültiger Dateiname speichert Ihren Plot auf Diskette ab.
- - "P_LineRel" zeichnet relativ zum momentanen Standpunkt, nach
- Erledigung des Befehls muß aber wieder in absolute Koordinaten
- umgeschaltet werden.
- - "P_SetColor" wechselt die Farben in Abhängigkeit von MaxColor, bei
- 4 Stiften wird also Farbe 5 zu Farbe 1.
- - "P_PutPixel" dient zur Markierung eines Koordinatenpaares. Da mit
- HPGL kein Punkt gesetzt werden kann, wird ein kleines Kreuz als
- Marker verwendet. Wer mag, kann die geklammerte Version mit dem
- Kreis als Markierung testen, und anschließend bei einer Tasse Kaffee
- dem Plotter beim Zeichnen der Kreise zusehen. Bei vielen solcher
- Kreise werden Sie allerdings, wie auch bei einem komplizierten
- Füllmuster, bald eine "Time-Out"-Fehlermeldung erhalten.
- - in der Prozedur "P_SetLineStyle" wird statt der nicht direkt
- programmierbaren Liniendicke der Schrittweitenabstand verwendet. Ich
- bin davon ausgegangen, daß die sieben verwendeten Linienarten (0 bis
- 6) bei allen Plottern definiert sind. Bei Bedarf ist die maximale
- Anzahl entsprechend anzupassen. Einen Sonderfall stellt die
- durchgezogene Linie dar. Sie ist nicht als Linienart deklariert, um
- wieder von einer verwendeten Linienart auf 'Normalbetrieb' um-
- zuschalten, muß der Plotter zurückgesetzt werden. Den Ini-
- tialisierungsbefehl "IN" sollte man allerdings vermeiden, da eine
- ev. über HPGL gesetzte Skalierung ebenfalls gelöscht wird. Für die
- vorliegende Anwendung ist das zwar ohne Belang, aber bereits jetzt
- ist vorsorglich der harmlosere Initialisierungsbefehl "DF" im-
- plementiert.
- - Analog der Graph-Unit sind in der Prozedur "P_SetTextStyle" nur
- die vertikale und die horizontale Schriftrichtung ausführbar.
- Ebenfalls zu beachten ist in dieser Prozedur, daß die Textgröße in
- x- und y- Richtung definiert werden muß; hierbei habe ich für die x-
- Richtung die halbe Größe der y-Richtung (Faktor 0.5) gewählt.
- - Die Prozedur "CloseGraph" schließlich versetzt den Plotter wieder
- in den Ausgangszustand und fährt den Stift zum Ursprung links unten
- zurück.
-
- Falls Sie die Unit durch zusätzliche Befehle erweitern wollen, noch
- ein kleiner Hinweis. Ein Linien-Befehl zum Beispiel sieht für den
- Plotter so aus:
- ,,l
- PU100,100,200,200;
-
- Wird diese Anweisung mit Variablen im Programm gegeben, so müssen
- natürlich Komma und Strichpunkt ebenfalls mit angegeben werden. Da
- mir die ständige Eingabe von "," und ";" zu umständlich war, und das
- Listing unübersichtlich wurde, habe ich diese beiden erforderlichen
- Eingabewerte als typisierte Konstante "Komma" und "Ende" deklariert.
-
- (wr)
-
-
-
- PU Stift anheben (und Stift bewegen)
- PD Stift senken (und Linie ziehen)
- PA Linie in absoluten Koordinaten
- PR Linie in relativen Koordinaten
- SP Stiftfarbe auswählen
- LT Linientyp festlegen
- CS Zeichensatz auswählen
- DI Richtung der Beschriftung definieren
- SI Größe des Zeichensatzes festlegen
- LB String 'drucken'
-
- (jeweilige Parameter siehe Listings)