Hewlett-Packard Graphics Language

Die Hewlett Packard Graphics Language (HP-GL; deutsch Hewlett-Packard-Grafiksprache) ist eine von Hewlett-Packard entwickelte Seitenbeschreibungssprache zur Ansteuerung von Stiftplottern.

Sie wurde 1977 zusammen mit dem Plotter HP-8972 eingeführt.[1] Andere Plotterhersteller haben HP-GL zur Ansteuerung ihrer eigenen Plotter übernommen.

Sprachaufbau

HP-GL ist eine einfach aufgebaute Sprache. Die Kommandos bestehen aus zwei Großbuchstaben, denen ein oder mehrere Argumente folgen. Die Daten stehen im lesbaren ASCII-Format.

Beispiele für HP-GL-Kommandos
KommandoBedeutung
PAPosition absolute (Stift zu absoluten Koordinaten bewegen)
PRPosition relative (Stift um Anzahl von Einheiten bewegen)
PDPen down (Stift senken)
PUPen up (Stift heben)
SPSelect pen (Stift auswählen)

Das Koordinatensystem basiert auf der kleinsten Einheit, die ein HP-Plotter damals unterstützte, und wurde auf 25 µm (40 Einheiten pro Millimeter bzw. 1016 Einheiten pro Zoll) festgelegt. HP-GL enthält auch Befehle (LB) zur Ausgabe von einfachen ASCII-Texten.

Inkjet- und Laserplotter

Auch zur Ansteuerung von Inkjet- und Laserplottern wird HP-GL verwendet. Diese Plotter bauen das Bild zunächst im Speicher auf (man spricht vom Rasterisieren) und geben es dann auf Papier aus. Dabei arbeiten diese Plotter mit „virtuellen Stiften“, das heißt, es gibt eine Tabelle, in der jeder Stiftnummer eine Linienbreite und gegebenenfalls eine Farbe zugeordnet wird. Diese Tabelle kann fix im Plotter abgespeichert werden (heute kaum mehr gebräuchlich) oder mit den HP-GL-Daten mitgesendet werden (ab HP-GL/2 oder mit herstellerspezifischen Headern).

HP-GL/2

HP-GL/2 ist eine Weiterentwicklung der Sprache HP-GL. Eine wichtige Neuerung ist die Möglichkeit, Strichstärken (und andere Linienattribute) festzulegen sowie binär und somit platzsparend kodierte Befehle (z. B. PE = Polyline Encoding) zu erzeugen. Da HP-GL für Stiftplotter entwickelt wurde, gab es keine Befehle, um die Strichstärken zu definieren, denn diese waren durch die Stifte festgelegt. Der Anwender musste das Stiftkarussel entsprechend seinen Wünschen bestücken. Als die ersten Inkjetplotter aufkamen, musste der Anwender stattdessen am Plotter eine Stifttabelle eingeben. Mit HP-GL/2 wurde dieser unkomfortable und fehlerträchtige Schritt überflüssig.

Beispiele für HP-GL/2 Kommandos
KommandoBedeutung
NPxNumber of Pens (Anzahl der Stifte festlegen); x=1..256
PCx,r,g,bPen Color (Farbe von Stift x festlegen); x=Stift, r=rot, g=grün, b=blau, jeweils 0..255
PWw,xPen Width (Strichstärke von Stift x festlegen); w=Strichstärke in mm mit Dezimalpunkt, x=Stift

Kommandos (Mnemonics) in HP-GL/2 können groß oder kleingeschrieben werden. Ein Kommando hat kein, ein oder mehrere (optionale) Parameter. Trennzeichen bei Parametern können sein: Komma, Leerzeichen, + oder - (bei Zahlen). Kommandos werden beendet durch: Semikolon, das nächste Kommando oder Zwischenraumzeichen. Empfohlen sind Komma, und nächstes Kommando oder Semikolon.

HP-GL und HP-GL/2 als Datenaustauschformat

Obwohl sie nicht dafür geschaffen wurde, entwickelte sich HP-GL wegen ihrer Einfachheit zum Datenaustauschformat für Vektordaten von Grafiken. Viele CAD-Programme unterstützen den Export im HP-GL-Format. Eine weitere gängige Möglichkeit, HP-GL-Daten zu erzeugen ist der „Druck in eine Datei“ mit einem entsprechenden Druckertreiber. Das ist problematisch, da die Sprache mit Erscheinen neuer Plottermodelle immer wieder erweitert wird und es dadurch zu Kompatibilitätsproblemen kommen kann. Ein weiteres Problem sind herstellerspezifische Header, die vor den eigentlichen HP-GL-Daten gesendet werden, um bestimmte Plottereigenschaften anzusteuern – zum Beispiel die Printer Job Language von Hewlett-Packard oder das Remote Control Format von Océ.

Zur Vermeidung von Kompatibilitätsproblemen gilt (frei nach Jonathan Postel): “be liberal in what you accept, be conservative in what you send”. Man kann davon ausgehen, dass der Befehlssatz des Plotters HP-750C allgemein verstanden wird. Außerdem ist die softwaretechnisch stark begrenzte systembedingte Genauigkeit eines „Druckes“ in diesem einfachen Übertragungsformat gegenüber dem DXF-Dateiformat zu beachten.

HP-GL wird auch verwendet, um Graviermaschinen anzusteuern.

Beispielhaftes csh-Skript zum Drucken von Etiketten

#!/bin/csh

set echo_style=both

set NAM='Johannes Herzogenrath\r'
set STR='Am Steinkamp 34b\r'
set ORT='32643  Leidenheim\r'
set TEL='Tel (05727) 7848571\r'
set TEXTA TEXTB
set OFILE=ETI_OUT
                                  # Etik. 48.5 x 25.4 (40=10x4)
echo "\e%-12345X\eE\e%1BinNP4;" >! $OFILE
echo "pc1,65,105,225pc2,250,240,230pc3,70,130,180;" >> $OFILE
echo "sc0,4,0,4,2;" >> $OFILE     # cp437=341,iso8859-1=14,-15=302,univers=52
echo "sd1,302,2,1,4,10,5,0,6,0,7,52ssDT|,1sp1wu0pw.1,1lo5ft1;" >> $OFILE
set STARTX=73 STARTY=107 ETIVER=10 ETIHOR=4
echo "PUpa$STARTX,$STARTY;" >> $OFILE
#   Relativbewegung Rechteckgroesse
set RXA=485 RYA=254 RXB=436 RYB=218
set VER=0 HOR=0 NUM=0 LBX=0 LBY=( 45 49 40 40 )
set TEXTA="$LBY[1];sp3sd4,8.25lb$TEL|;sp1pr0,$LBY[2];sd4,10.5lb$ORT|;"
set TEXTB="pr0,$LBY[3];lb$STR|;pr0,$LBY[4];lb$NAM|;"

while ( $VER < $ETIVER )
   @ NUM = ( $RXA * ( 1 - $ETIHOR ) )
   if ( $VER > 0 ) then
     echo "pr$NUM,$RYA;" >> $OFILE
   endif
   @ HOR = 0
   while ( $HOR < $ETIHOR )
      if ( $HOR > 0 ) then
        echo "pr$RXA,0;" >> $OFILE             # Rechteck-Position rel.
      endif
     #echo "sp2er$RXB,$RYB;sp1;" >> $OFILE     # Zeichne Rechteck rel.
      echo "sp2rr$RXB,$RYB;sp1;" >> $OFILE     # Fülle Rechteck rel.
      @ LBX = ( $RXB / 2 )
      echo "pr$LBX,$TEXTA$TEXTB" >> $OFILE
      @ LBX = - $LBX
      @ NUM = - ( $LBY[1] + $LBY[2] + $LBY[3] + $LBY[4] )
      echo "pr$LBX,$NUM;" >> $OFILE
      @ HOR++
   end
   @ VER++
end

echo "\e%0A\eE\e%-12345X" >> $OFILE
cat $OFILE > $DRUCKER
exit (0)

Das Skript druckt einen Etikettenbogen A4 mit 4 × 10 Etiketten. Die Kommentare im Skript (#kommentar) und die Variablennamen ($name) erlauben eine Orientierung. Innerhalb der "Zeichenketten" (rot) befinden sich HP-GL/2-Code und Variableninhalte. Auf ein Etikett werden eine rechteckige Fläche mit der Farbe Leinen und vier Zeilen zentrierter Text in Blautönen mit verschiedener Zeichengröße gedruckt. Die rechteckige Fläche ist kleiner als ein Etikett. Auskommentiert ist das Zeichnen eines rechteckigen Rahmens. Die Sequenzen \r und \e sind zu beachten. Sie repräsentieren die nicht abdruckbaren Zeichen CarriageReturn und ESCape. Diese Sequenzen werden durch echo_style=both von der (t)csh berücksichtigt. Der angegebene Text ist ein Phantasie-Text.

  • HP-GL Introduction (PDF; 111 kB; englisch; Archivlink zur Wayback Machine (Archive.org), Original-Link nicht mehr verfügbar).
  • HP-GL/2 (PDF; 3,1 MiB) im PCL5-Manual Part I (englisch)
  • HP-GL/2 (PDF; 3,7 MiB) im PCL5-Manual Part II (englisch)
  • HP-GL/2 (PDF; 2,4 MiB) im PCL5-Color-Manual (englisch)

Einzelnachweise

  1. A New Family of Intelligent Multi-Color X-Y Plotters. Archiviert vom Original; abgerufen am 25. Dezember 2023.