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.
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?
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
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
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?
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
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...
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
OK, da das Forum nicht mehr Links in einem Post unterstützt, hier die restlichen: http://h20000.www2.hp.com/bc/docs/support/SupportManual/bpl13210/bpl13210.pdf http://h20000.www2.hp.com/bc/docs/support/SupportManual/bpl13211/bpl13211.pdf http://h20000.www2.hp.com/bc/docs/support/SupportManual/bpl13212/bpl13212.pdf
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).
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?
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
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
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)
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
... 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...
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.