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.
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
intr=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
intx=0;
14
inty=r;
15
intx0=100;
16
inty0=100;
17
18
//Der punkt bis zu dem der Fräser fahren soll
19
intxsoll=x0-r;
20
intysoll=y0;
21
22
23
//Drehrichtung; CCW bedeutet gegen den Uhtzeigersinn
24
boolCCW=false;
25
26
//Hilfsvariablen
27
inth=r;
28
inta=0;
29
intb=0;
30
intc=0;
31
intd=0;
32
33
34
35
do
36
{
37
38
//Hier wird ermittelt, in welchem Quadranten sich der Fräser gerade befindet
39
bytesector=(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
case3:a=x;b=y;break;//1.Quadrant
49
case2:a=y;b=-x;break;//2.Quadrant
50
case0:a=-x;b=-y;break;//3.Quadrant
51
case1: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
inttemp=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
inttemp=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
case3:x=a;y=b;break;
90
case2:x=-b;y=a;break;
91
case0:x=-a;y=-b;break;
92
case1:x=b;y=-a;break;
93
}
94
95
//Pseudofunktion, die die Schrittmotoren auf die gewünschte Position setzt
Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.
Wichtige Regeln - erst lesen, dann posten!
Groß- und Kleinschreibung verwenden
Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang