(Dieser Beitrag wurde geloescht)
Also willst Du Seiten direkt beschreiben oder Bitmaps&Co. umwandeln ? Egal op Postscript oder HPGL es sind Vektorformate, d.h. Du müßtest für die jeweiligen Grundformen definieren wie sie umgesetzt werden. Du solltest einfach mal im Linux Lager bei den Druckertreibern nachsehen und schaun, ob Du die dortige HPGL Umsetzung adaptieren kannst ;) Allerdings verstehe ich nicht so ganz was HPGL mit Schrittmotoren zu tun hat ? Willst Du einen Plotter mit HPGL realisieren ???? Bye, xyz
... ein aufwändiges Thema ! Randinfo: Ein kostenloses PC Programm für die Betrachtung von HPGL Dateien ist "TakView2" , zu finden bei http://www.taktools.de/
Hallo! Ich wollte mir auch schon mal die Arbeit machen, finde allerdings momentan keine Zeit dazu. Wenn Du das anstrebst, schmeiss den HPGL Quatsch gleich in die Ecke und schreib nem GCode interpreter. Bei gutmütigen Materialen (z.B. Holz) würdest Du damit klar kommen, ab Aluminium ist nach meiner Erfarung nicht mehr einfach mit heben senken Gasgeben getan. Als ansatz wuerde sich da der Source Code von TurboCNC eignen (allerdings in Turbo Pascal geschrieben). GCode haette auch den vorteil das Du Cad Daten mit einer CAM Software konvertieren könntest. z.Z. Arbeite ich mit PCNC als Steuerung (GCode interpreter), ner kleinen selbstgebastelten Software und noch ner Menge Handarbeit am GCode......... mfg, Bjoern
Ahja, stimmt TurboCNC ist nicht OpenSource hab es mal registriert und dann gibts den Source Code dazu. Du solltest auch erstmal mit ner fertigen Software arbeiten und sehen wie das ganze Abläuft und dann in deine Steuerung einfliessen lassen. Falls es deine erstes CNC Maschinchen wird, gibt es eh noch genug zum spielen tüffteln und Dinge lernen die in keinen Forum stehen. Das "grössere" Problem, wenn das liebe Geld nicht waehre die umsetzung der technischen Zeichnungen, in GCode, ne brauchbare bezahlbare CAM Software ist mir noch nicht untergekommen. Bis Du die ersten Prozeßsicheren CNC Programme hinbekommst wird deine Maschine noch ne Menge Späne und gebrochener Fräser produzieren und du wirst eh nen PC zum Zeichnugen aendern und Programme aendern vor Ort haben muessen. Dann noch Hals und Fräserbruch Bjoern
Der einfachste PC-HPGL-Betrachter ist HP2XX ,den gibts unter Windows und Linux. Ohne Parameter aufgerufen wird ein HPGL-File auf dem Bildschirm dargestellt, mit Parametern in verschiedene Vektor- oder Pixelformate umgewandelt: http://www.gnu.org/software/hp2xx/ Ich habe mit dem AVR schon Messkrven in HPGL seriell ausgegeben, da Laserjet-kompatible Drucker das direkt verstehen.
Von Bresenham hast du schon gelesen, oder? Der hat einen Algorithmus zum Zeichnen von Linien entwickelt, der auf sehr einfachen Operationen (Addition und Subtraktion) basiert. Kreise soll man damit auch hinbekommen...
Das hab ich schon begriffen. Ich finde, dass HPGL zu Unrecht in Vergessenheit geraten ist, gerade für Mikrocontroller ist der einfache Aufbau ideal. Bresenham hab ich auch schon mit AVR zum Kreis-Zeichnen auf einem LC-Display benutzt, das kann 45 Grad am Stück, größere muß man aus 45Grad-Segnmanten zusammensetzen.
Hallo Leute, bin vor ca. 3 Monaten vor dem gleichnen Problem gestanden. Habe darauf einen G-Code (DIN66025) in C implementiert. Ist aber noch nich ganz fertig. Features: - Auflösung 0,001 mm - Text (Line) Interpreter - Alle Berechnungen im 4Byte Integerformat --> verdammt schnell!! - Alle Winkelfunktionen über LookUp Tabellen (Auflösung 0,1°) --> verdammt schnell! - Unterstützung von Vector Fonts (HersheyFonts) - Impementierte Kommandos (normiert): G00, G01, G02, G03, G04, G40, G41, G42, G70, G71, G90, G91, - zusätzliche Funktionen: - G66 Fräsen von Texten, inkl. Drehung, Eckradien (ca. 20 Fonts) - G86 Taschen-Fräszyklus, inkl. Drehung - G87 Kreistaschen-Fräszyklus - M-Codes - T-Codes Zu der Integerberechnung sei zu sagen, dass ein Vergleich mit ner Floating Point Lib einen Geschwindigkeitsvorteil von 1:114 ergab (Integerarithmetik ist 114 mal schneller als Float). Da ich (noch) keine CNC-Fräse habe, habe ich ein PC-Programm (X,Y,Z - Auflösung 1mm - 0,01mm) geschrieben, dass die Daten der Steuerung (Schrittmotor Steps) grafisch simuliert (2 1/2 CAD). Später kann dieses Programm als Vorab Simulator verwendet werden. Was fehlt noch: - Drehung von Texten (G66) - Frästasche Eckradien bei Drehung ist noch fehlerhaft. - Ein paar M und T Befehle Ist ziemlicher Aufwand, daher weiß ich noch nicht, ob es als Open-Source Projekt einstellen werde.
ich meinte Guido... Hast du für den (Viertel-)Kreis irgendwelche Links? (bin etwas faul...)
Hier mein Bresenham-Kreis in AVR-Assembler. Ich zeichne hier allerdings nur komplette 45 Grad Segmente. Als Anwendung die Darstellung eines Smith-Diagramms auf dem LCD-Schirm
Hallo Leute Der Thread scheint schon tot zu sein, trotzdem schreibe ich heier mal für die anderen Verzweifelten die auf der Suche nach einem guten Kreisalgorithmus sind. Ich habe bis jetzt immer nur Code für 45° Segmente gefunden, die man aber für CNC Anwenfungen absolut nicht gebrauchen kann, da man damit keinen durchgängigen Kreis fahren kann.
1 | //Beispiel eines Algorithmus zum Fräsen eines Kreissegments
|
2 | //Mit den eingestellten Werten wird ein Dreiviertelkreis im Uhrzeigersinn ausgegeben
|
3 | /
|
4 | |
5 | |
6 | //Der Radius des Kreises
|
7 | int r=100; |
8 | |
9 | //Die Startposition
|
10 | //damit der Algorithmus funktioniert muss x oder y zu Beginn 0, bzw r sein
|
11 | //der Fräser muss also genau zwischen zwei Quadranten stehen, da sonst das anfängliche h nicht stimmt
|
12 | |
13 | int x=0; |
14 | int y=r; |
15 | int x0=100; |
16 | int y0=100; |
17 | |
18 | //Der punkt bis zu dem der Fräser fahren soll
|
19 | int xsoll=x0-r; |
20 | int ysoll=y0; |
21 | |
22 | |
23 | //Drehrichtung; CCW bedeutet gegen den Uhtzeigersinn
|
24 | bool CCW=false; |
25 | |
26 | //Hilfsvariablen
|
27 | int h=r; |
28 | int a=0; |
29 | int b=0; |
30 | int c=0; |
31 | int d=0; |
32 | |
33 | |
34 | |
35 | do
|
36 | {
|
37 | |
38 | //Hier wird ermittelt, in welchem Quadranten sich der Fräser gerade befindet
|
39 | byte sector = (byte)(2 * (y >= 0) + (x >= 0)); |
40 | |
41 | //Wenn sich der Fräster genau zwischen zwei Quadranten befindet wird h zurückgesetzt
|
42 | if (x == 0 || y == 0) |
43 | h = r; |
44 | |
45 | //Je nachdem in welchem Quadranten sich der Fräser befindet werden a und b unterschiedlich belegt
|
46 | switch (sector) |
47 | {
|
48 | case 3: a = x; b = y; break; //1.Quadrant |
49 | case 2: a = y; b = -x; break; //2.Quadrant |
50 | case 0: a = -x; b = -y; break; //3.Quadrant |
51 | case 1: a = -y; b = x; break; //4.Quadrant |
52 | }
|
53 | |
54 | //Wenn gegen den Uhrzeigersinn gefahren werden soll werden a und b vertauscht
|
55 | if (CCW) |
56 | {
|
57 | int temp=a; |
58 | a=b; |
59 | b=temp; |
60 | }
|
61 | |
62 | |
63 | //Eigentlicher Bresenham Algorithmus für die erste 45° des Viertelkreises
|
64 | if (b > a) |
65 | {
|
66 | if (h < 0) |
67 | h += (2 * --b +2); |
68 | h -= (2 * ++a +1); |
69 | }
|
70 | //Algorithmus für die anderen 45° des Viertelkreises
|
71 | else
|
72 | {
|
73 | if (h < 0) |
74 | h += (2 * ++a +2); |
75 | h -= (2 * --b -1); |
76 | }
|
77 | |
78 | //Wenn gegen den Uhrzeigersinn gefahren werden soll werden a und b vertauscht
|
79 | if (CCW) |
80 | {
|
81 | int temp=a; |
82 | a=b; |
83 | b=temp; |
84 | }
|
85 | |
86 | //Je nachdem in welchem Quadranten sich der Fräser befindet werden x und y unterschiedlich belegt
|
87 | switch (sector) |
88 | {
|
89 | case 3: x = a; y = b; break; |
90 | case 2: x = -b; y = a; break; |
91 | case 0: x = -a; y = -b; break; |
92 | case 1: x = b; y = -a; break; |
93 | }
|
94 | |
95 | //Pseudofunktion, die die Schrittmotoren auf die gewünschte Position setzt
|
96 | BewegeFraeser(x0+x,y0+y); |
97 | |
98 | }
|
99 | while ((x0+x)!=xsoll && (y0+y)!=ysoll); |
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.