Forum: Platinen Eagle HPGL-Daten


von Mike M. (Gast)


Lesenswert?

Hallo Leute,

hab da mal eine Frage zu HPGL-Daten:
Wenn ich mir in Eagle mein Board mit dem CAM-Prozessor als HPGL ausgeben 
lasse, bekomme ich z.B. folgenden Code:
IN; IP 0,0,100,100; SC 0,100,0,100;
SP 1;
PA 359,210;
PD;
PA 360,210;
PA 360,209;
PA 359,209;
PA 359,210;
PU;

Die einzelnen Befehle (IP, SP, PU, PD, PA) sind mir klar.
Was ich nicht verstehe, sind die Koordinaten. Wenn der Plotter mit '0,0' 
und '100,100' initialisiert wird, warum liegen die 'PA-Koordinaten' dann 
ausserhalb? Und wie funktioniert 'SC'? Mein Board hat die Maße 75x100 
mm. Das passt ja gleich gar nicht zusammen. Kann mir da jemand Klarheit 
verschaffen?
So wie ich das verstehe wird der Plotter mit 0,0 und 100,100 
initialisiert, der Stift gewählt, dann werden die Koordinaten 359,210 
angefahren und dann geht der Stift nach unten und fängt bei dieser 
Position an zu zeichen. Im obigen Beispiel ein kleines Viereck. Aber 
irgendwie will mir diese Logik nicht in den Kopf. Eigentlich sollten 
doch die Initialisierungskoordinaten größer als die PA-Koordinaten 
sein..?

Der Grund: ich fitzel gerade mit Java rum. Herrauskommen soll ein 
einfaches Programm, was mir a) die HPGL-Daten auf den Bildschirm 
zeichnet (funktioniert schon) und b) diese Daten auf die 
LPT-Schnittstelle schreibt.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Mike M. schrieb:
> Kann mir da jemand Klarheit verschaffen?
Da fehlt jetzt eigentlich nur noch das Eagle-Projekt, dann könnte das 
evtl. jemand nachvollziehen...
Gibst du bei der Ausgabe einen x- oder y-Offset an?

von Mike M. (Gast)


Angehängte Dateien:

Lesenswert?

nein. das offset steht bei x/y = 0 inch. Ich dachte die projektdatei 
spielt keine rolle, da ich das koordinatensystem von hpgl verstehen 
will. aber gut... project siehe anhang

von Bernhard S. (dk9nw)


Lesenswert?

Hallo Mike,

Wenn ich das recht sehe, ist das ein winzig kleines Quadrat das zu da 
zeichnen willst. Die X,Y Zahlenpärchen sind in 1/1000 inch = mil
Dein Quadrat ist nur 1 x 1 mil groß = 0.025 x 0.025 mm

Das stimmt irgendwie nicht mit dem von dir angehängten Datei der 
Platine_LED.brd überein.

Du kannst ja mal folgendes probieren. Wähle bei CAM-Prozessor unter 
anderm den Layer DIMENSION aus und lege ihn zum Beispiel auf die 9
und gib eine Datei an, die du nachher mit einem Texteditor anschaust.

Deine Platine hast einen Rahmen von 100 x 76.19 mm
Die linke untere Ecke sollte nun in der HPGL Datei bei x=0 und y=0 
liegen.

Ist sie es nicht, muss du am Offset schrauben. So lange bis die linke 
untere Ecke wirklich bei 0,0 ist

Aber zunächst mal muss du durch Auswahl der nötwendigen Layer dafür 
sorgen,
daß in die HPGL-Datei der Inhalt deiner Platine inklusive des layers 
DIMENSION geht.

Bernhard

von Mike M. (Gast)


Lesenswert?

Kann ja alles sein. Und das Board ist auch völlig egal. Die Plottdaten 
sind nur ein Auszug und Beispielhaft. Ich kann Projekte laden wie ich 
will, alle werden mit 0,0,100,100 initialisiert.

Was ich aber eigentlich wissen wollte: Was hat es mit diesen Koordinaten 
zur Initialisierung auf sich? Wie ist dieses 'SC 0,0 100,100' zu 
verstehen? Und warum liegen die PA-Punkte 'ausserhalb' von IP?

Ich gehe noch mit und denke mir das IP 0,0,100,100 die zur Verfügung 
stehende Plottgrösse ist (Arbeitsbereich) Aber schon damit hab ich dann 
meine Schwirigkeiten. Die Arbeitsfläche ist doch nicht nur 2,5x2,5 cm 
groß?

Ich habe mir gerade mal ein neues, leeres Board erstellt (100x80mm) und 
nur das DIMENSION-Layer via CAM als HPGL ausgegeben. Hier ist es das 
selbe:
IN; IP 0,0,100,100; SC 0,100,0,100;
SP 8;
PA 10,10;
PD;
PA 10,3210;
PA 4010,3210;
PA 4010,10;
PA 10,10;
PU; SP 0; PA 0,0;

Das versteh ich einfach nicht...? Die Init-Koordinaten sollten doch min. 
grösser als 4010 sein..?
Habe aber gerade mal nachgerechnet. 4010*0,025=100,25. Das wäre ja 
(fast) richtig. Fehlt mir nur noch die Logik bei IP bzw. SC. Weis da 
jemdand noch was zu berichten?

von Bernhard S. (dk9nw)


Lesenswert?

Hallo Mike,

Leider kann ich bei dem IN; IP 0,0,100,100; SC 0,100,0,100; nicht weiter 
helfen.

SP 8;  heist select Pen number 8  Er holt sich also Stift No 8 aus dem 
Karussel.
PD = plotter pen down.

PA 10,10;  hier ist der erste Fehler. Es müsste hier PA 0,0; heissen.
Du musst den Offset auf x = -0.01 und y= -0.01 stellen.

Ein Board 100x80mm bedeutet in mil:
x=3937.008 mil  und y=3149.606 mil

4010*0,025=100,25  ist richtig gerechnet, aber ein Inch ist 25.4mm und 
nicht 25.0 mm
Wenn du die 10 mil vom offset abziehst kommst du auf 100 mm

Es sollte am Ende also so aussehen:
SP 8;
PA 0,0;
PD;
PA 0,3150;
PA 3937,3150;
PA 3937,0;
PA 0,0;
PU;
SP 0;

ciao
Bernhard

von Mike M. (Gast)


Lesenswert?

Dank Dir. Hab zwar auch schon mit dem Offset gespielt, aber auf -0.01 
bin ich nicht gekommen. Na mal sehn wo mich das ganze noch hin trägt...

von ... (Gast)


Lesenswert?

Nix mit mil!
Koordinaten in HPGL sind in "plotter units". Und das sind 25µm, also 
1016 units pro Zoll.

IP 0,0,100,100;
legt erstmal einfach nur 2 Punkte fest (in plotter units):
P1(0,0) und P2(100,100)

SC 0,100,0,100;
legt ein User-Koordinatensystem fest:
Der Punkt 0,0 (in User-Koordinaten) entspricht P1 (aus dem IP Kommando, 
also in diesem Fall hier 0,0 in plotter units).
Der Punkt 100,100 (in User-Koordinaten) entspricht P2 (aus dem IP 
Kommando, also in diesem Fall hier 100,100 in plotter units).

Das Ganze ist also im Endeffekt eine 1:1 Skalierung. Alle nachfolgenden 
Koordinten sind also in 25µm Einheiten.

Die Rechnung stimmte trotzdem nicht ganz. Da der Startpunk auf den 
Koordinaten 10,10 liegt, ist das Rechteck 4000x3200 plotter units groß, 
also genau 100x80mm²

Mehr dazu gibts z.B. hier:
http://en.wikipedia.org/wiki/HPGL
http://www.sxlist.com/techref/language/hpgl/commands.htm
http://www.sxlist.com/techref/language/hpgl/ip.htm
http://www.sxlist.com/techref/language/hpgl/sc.htm
http://cstep.luberth.com/HPGL.pdf

von ... (Gast)


Lesenswert?


von Mike M. (Gast)


Lesenswert?

Hui! Das is ja ma fein. So hab ich mir das gedacht. Vielen Dank! Die 
Wiki-Seite hatte ich inzwischen auch schon gefunden.
Mit diesen Informationen kann ich doch schon viel besser umgehen 
(Programmieren).

von Mike M. (Gast)


Lesenswert?

Jetzt muss ich doch noch mal genauer nachfragen.

IP 0,0,100,100;
SC 0,100,0,100;

IP X1,Y1,X2,Y2 is klar, hab ich kapiert.
SC Xmin,Xmax,Ymin,Ymax is noch ni ganz klar.

laut der Doku bedeutet das, daß Xmin & Ymin der Punkt P1 und Xmax & Ymax 
der Punkt P2 ist. Und eine PlotterUnit sind ja 0,025mm.
Heisst das, wenn ich z.B. SC 0,1080,0,1200 nehmen würde, würde ich 
meinen Bereich auf A4-Format 'hoch-skalieren'?
Und ich schätze mal, das wenn ich auf die zu plottende Fläche schliessen 
will, nur die Möglichkeit habe mir aus der Ausgabedatei den grössten 
Wert rauszusuchen, evtl. den Startpunkt davon abziehen und mit den 
PlotUnits verrechnen. Und das Ergebnis dann als 'Dokumentgrenze' zu 
betrachten. Oder hab ich da noch was übersehen?

von ... (Gast)


Lesenswert?

Ne, verkehrt rum. Du skalierst runter :)

Schau mal in bpl13211.pdf (mittlerer Link im letzten Post) ab Seite 50.

Für
1
IP X1,Y1,X2,Y2
2
SC Xmin,Xmax,Ymin,Ymax
3
PA X,Y
errechnen sich die realen Koordinaten folgendermaßen
1
xp = (X * (X2 - X1) / (Xmax - Xmin) + X1) * 0.025mm
2
yp = (Y * (Y2 - Y1) / (Ymax - Ymin) + Y1) * 0.025mm

Um bei Deinem Bsp. zu bleiben
1
IP 0,0,100,100;
2
SC 0,1080,0,1200;
3
4
SP 8;
5
PA 10,10;
6
PD;
7
PA 10,3210;
8
PA 4010,3210;
9
PA 4010,10;
10
PA 10,10;
11
PU; SP 0; PA 0,0;
mal rechnen (Ergebnisse gerundet!)
1
PA 10,10;
2
  xp = (10 * (100 - 0) / (1080 - 0) + 0) * 0.025mm = 0.023mm
3
  yp = (10 * (100 - 0) / (1200 - 0) + 0) * 0.025mm = 0.021mm
4
...
5
PA 4010,3210;
6
  Gehe zu 
7
  xp = (4010 * (100 - 0) / (1080 - 0) + 0) * 0.025mm = 9.28mm
8
  yp = (3210 * (100 - 0) / (1200 - 0) + 0) * 0.025mm = 6.69mm
9
...

Dein ursprünglich 100x80mm² großes Rechteck hätte jetzt auf dem Papier 
noch etwa 9.26x6.67mm². Also in x-Richtung um den Faktor 10.8 und in 
y-Richtung um den Faktor 12 kleiner. Und wär auch noch ein Stück nach 
links unten gerutscht.

Was die 'Dokumentgrenze' angeht, der Plotter/Drucker clipped spätestens 
an seinen physikalischen Grenzen. Für Deinen Viewer siehst Du am 
besten/einfachsten eine manuell Einstellung des Papierformats vor.
Du mußt dabei aber auch noch das IW-Kommando beachten.

Was hängt denn eigentlich an Deinem LPT dran?


CU

von ... (Gast)


Lesenswert?

Mist in der Formel fehlte noch was :(
Hoffe jetzt passts.
1
xp = (((X - Xmin) * (X2 - X1) / (Xmax - Xmin)) + X1) * 0.025mm
2
yp = (((Y - Ymin) * (Y2 - Y1) / (Ymax - Ymin)) + Y1) * 0.025mm

CU

von Mike M. (Gast)


Lesenswert?

am LPT hängt (noch) nix. da soll aber mal eine steppersteuerung dran. 
und dann dacht ich mir, in meinem jugendlichen leichtsinn, das ich die 
plottkommandos/plottkoordinaten in schritte verwandeln kann und sich 
dann ein paar motoren anfangen zu drehen. allerdings dauert das noch 
eine weile. erst bau ich die fräse ;-) mechanisch auf, nebenbei schraub 
ich ein wenig am programm rum und zum schluss kommt dann die steuerung + 
umsetzung der kommandos in 'HI/LOW' signale. (hoffentlich klappt das 
auch mit java ohne grössere timing probleme - aber eins nach dem 
anderen)

von ... (Gast)


Lesenswert?

Hehe, sowas in der Richtung hab ich auch vor :)
Wird aber auch noch ne Weile dauern :(

Wenn Dein Rechner schnell genug ist könnte es klappen. Wenn nicht kannst 
Du ja auch einfach erstmal die Schrittfolgen vorrausberechnen und dann 
nur noch 'abspielen'. Brauchst Du ja eigentlich für die 
Bildschirmanzeige sowieso.

Wünsch Dir jedenfalls viel Erfolg dabei.

CU

von Mike M. (Gast)


Lesenswert?

... schrieb:
> einfach erstmal die Schrittfolgen vorrausberechnen und dann
> nur noch 'abspielen'. Brauchst Du ja eigentlich für die
> Bildschirmanzeige sowieso.

das hatte ich sowieso so geplant.
Ich werd wohl zum Ende der nächsten Woche die ersten Bilder meiner Fräse 
hier mal präsentieren. so long...

von ... (Gast)


Lesenswert?

Btw., hier hat jemand sowas schon mal in C programmiert :)
http://www.luberth.com/cstep/download.htm

Hier noch die Startseite: http://cstep.luberth.com/

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.