Installierung des Simulators Linuxcnc-sim | |
#<scale>=0.01 ;%SP 1; G00 X[189*#<scale>] Y[57*#<scale>] G01 Z0 G01 X[193*#<scale>] Y[61*#<scale>] G01 X[193*#<scale>] Y[361*#<scale>] G01 X[197*#<scale>] Y[365*#<scale>] G01 X[549*#<scale>] Y[365*#<scale>] |
Das
erste g-Code-Beispiel |
Installierung des Simulators Linuxcnc-sim
Die Fräse legt erst los, wenn in linuxcnc eine Befehlsfolge mit ISO g-Code und gegebenfalls mit linuxcnc-o-Code gestartet wird. Wie immer man zu diesem Code gelangt, sei es durch Erstellung mit einem Editor oder durch Umwandlung von anderweitig gewonnenen Grafikdateien. Es ist sinnvoll, die Datei im Simulator zu testen, bevor man die Fräse direkt mit dem (möglicherweise fehlerhaften Code) startet. Zu linuxcnc passend gibt es dafür die Programmvariante linuxcnc-sim. Wer an einem Fräsen-Projekt arbeitet, tut gut daran, linxcnc-sim auf seinem Arbeitscomputer zu installieren.
Installierung von Linuxcnc-sim
Die
Installierung ist keineswegs einfach. Im Unperfekthaus wurde daher ein
Beispiel ausgearbeitet, wie sich linuxcnc-sim unter dem live-cd
Betriebssystem knoppix 7.1 installieren lässt. Knoppix 7.1 basiert auf dem
System Debian wheezy. Die Hoffnung, dass sich die für "wheezy" gegebene
Anleitung "Installing on Debian Wheezy" von der Webseite
http://linuxcnc.org/docs/html/getting-started/getting-linuxcnc.html
leicht durchführen lasse, hat sich zerschlagen. Der Installierungsversuch mit apt-get fand unauflösbare Abhängigkeiten. Es kommt darauf an, dass die Version von linuxcnc-sim gut zum gegebenen Betriebssystem passt. Viele Versionen vom linuxcnc sind auf der Seite
http://linuxcnc.org/dists/wheezy/2.6-sim/binary-i386/
zu
finden. Nach zahlreichen Versuchen mit diesen Install-Paketen ergab
sich schließlich für die Version
linuxcnc-sim_2.6.9_i386.deb
ein Erfolg. Die Installierung des Paketes gelingt nicht sofort, aber aus den Fehlermeldungen der Installwerkzeuge "dpkg" und "apt-get" konnten schließlich die fehlenden Pakete im Internet gefunden und in einem Festplattenverzeichnis, dem "lokalen Repositorium" versammelt werden. Das lokale Repositorium für die Installierung enthält die Paket-Dateien:
00knoppix
bwidget_1.9.5-1_all.deb
libc6_2.19-0experimental0_i386.deb
libc6-dev_2.19-0experimental0_i386.deb
libc6-i686_2.19-0experimental0_i386.deb
libc-dev-bin_2.19-0experimental0_i386.deb
libmodbus5_3.0.6-1_i386.deb
libtk-img_1%3a1.3-release-12_i386.deb
lincnc_start.sh
linuxcnc-sim_2.6.9_i386.deb
locales_2.19-0experimental0_all.deb
Packages.gz
python-configobj_4.7.2+ds-4_all.deb
python-gtkglext1_1.1.0-9.1_i386.deb
python-gtksourceview2_2.10.1-2_i386.deb
python-opengl_3.0.1-1_all.deb
sources.list
tcl-tclreadline_2.1.0-12_i386.deb
tclx8.4_8.4.1-1_i386.deb
Die Datei "Packages.gz" ist aus den übrigen entstanden mit der Kommandozeile:
dpkg-scanpackages ./ /dev/null | gzip > Packages.gz
Mit
dem lokalen Repositorium kann die Installation jederzeit ohne
Internetverbindung wiederholt werden. Auch können die Dateien zur Zeit im
Internet gefunden und heruntergeladen werden. Wie lange die
Herunterladbarkeit noch besteht, ist unklar. Solange die Dateien
lokal gespeichert sind, bleiben sie immer verfügbar. In dieser
Situation genügt zum Start des Simulators die Kommandozeile:
lincnc_start.sh
Dieses Start-Skript besteht aus den Zeilen:
#! /bin/sh # das lokale Repositorium wird als einziges in die Liste der # Debian-Quellen eingetragen. if [ ! -e /etc/apt/sourcesKN.list ] ; then sudo mv /etc/apt/sources.list /etc/apt/sourcesKN.list sudo cp /media/sda6/physik/software/linuxcnc/fuerKnoppix71/sources.list /etc/apt/sources.list echo "lokale sources.list aktiviert" fi # Es werden außer "wheezy-Quellen auch andere zugelassen" sudo cp 00knoppix /etc/apt/apt.conf.d/ # apt-get soll ausschließlich mit den Quellen des lokalen # Repositoriums arbeiten. sudo apt-get update # apt-get installiert den FräsenSimulator sudo apt-get --yes install linuxcnc-sim |
Zur Vervollständigung der Anleitung seien noch die Dateien "sources.list" und "knoppix00" angegeben:
# sources.list deb [ trusted=yes ] file:///media/sda6/physik/software/linuxcnc/fuerKnoppix71 ./ |
// Datei /etc/apt/apt.conf.d/knoppix00 // Debian/squeeze is the "stable" release for this version of KNOPPIX Apt::Get::Purge; APT::Force-LoopBreak 1; APT::Cache-Limit 80000000; // Acquire::http::timeout 36000; // Acquire::http { Proxy "http://localhost:9999"; }; |
In der "sources.list" steht der Dateipfad des lokalen Repositoriums mit der Option "trustetd=yes". apt-get soll diesem Repositorium blind vertrauen. Aus dem Original der Datei knoppix00 wurde die auf "wheezy" verweisende Zeile "APT::Default-Release "wheezy";" herausgenommen.
Erstellung von g-Code
Hier
soll über die Fräsung von ebenen Objekten geschrieben werden.
Mit
zahlreichen CAD-Programmen kann man entsprechende Zeichnungen erstellen
und die dann in den g-Code für die Fräse umwandeln. Manchmal, wie beim
nebenstehenden Werkstück, ist die direkte Erstellung des Codes mit einem
Editor eine gut praktikable Variante. Enthält der Befehlssatz des
ISO-DIN-g-Codes doch leicht verständliche Befehle für gerade Strecken, für
Kreisbögen und für Kreise.
Bei
diesem Werkstück für einen Heizthermostaten kommt es auf die
Verwirklichung von vorgegebenen Abmessungen an. Genau das ermöglicht der
g-Code zwanglos.
Befehl für gerade Strecken: G01 Xnnn Ynnn Znnn
vom aktuellen Punkt fährt der Fräskopf zum Punkt mit den Koordinaten Xnnn,
Ynnn, Znnn.
Befehl für in der x-y Ebene liegende Kreise oder Kreisbögen im Uhrzeigersinn:
G02 Xnnn Ynnn Innn Jnnn
Am einfachsten ist der Fall, wenn für die Koordinaten Xnnn, Ynnn der aktuelle Punkt des Fräskopfes eingesetzt wird. Dann wird ein Vollkreis um den Mittelpunkt Innn,Jnnn gefräst. Die Koordinaten Innn und Jnnn sind allerdings relativ zum Startpunkt anzugeben (so als wäre der aktuelle Punkt des Fräskopfes der Koordnatenursprung). Schwieriger wird es bei Kreisbögen. Dann muss nämlich ein Punkt Xnnn,Ynnn eingesetzt werden, der tatsächlich genau auf dem mit dem Mittelpunkt Innn,Jnnn schon vorgegebenen Kreis liegt. Da kann eine trigonometrische Rechnung nötig werden. Knoppix hält dafür aber Hilfsprogramme bereit. Besonders intuitiv bedienbar ist das Programm GeoGebra. Kreise mit beliebigen Mittelpunkten können gezeichnet werden. Schnittpunkte von Kreisen mit weiteren Geometrieobjekten berechnet das Programm notfalls mit bis zu 15 Nachkommastellen Genauigkeit.
Ein Kreis(bogen) im Gegenuhrzeigersinn
wird gefräst mit dem Befehl G03 Xnnn
Ynnn Innn Jnnn
Für
das oben dargestellte Werkstück
ergibt sich ein g-Code Programm
wie folgt:
; Werkstueck fuer Heizthermostate
1 |
; G-Code für den Hilfsrahmen Rahmen des Heizthermostaten |
2 |
|
3 |
#<scale> = 0.0254 |
4 |
#<zoben> = -1.0 |
5 |
#<AnfTiefe> = 0.0 |
6 |
#<EndTiefe> = 1.6 |
7 |
|
8 |
G53 G00 Z2 (Spindel zum oberen Anschlag. So stoesst sie nirgendwo an) |
9 |
G10 L2 P1 Z+50 (Arbeitskoordinatensystem einschalten. Kann durch Antasten ersetzt werden) |
10 |
|
11 |
S100 ( Motorgeschwindigkeit vorwaehlen) |
12 |
; Der Wert der Motorgeschwindigkeit ist egal. |
13 |
; Unser Motor dreht sich mit fest eingestellter Geschwindigkeit. |
14 |
T2 (Werkzeug T2 waehlen) |
15 |
M3 (Motor einschalten) |
16 |
|
17 |
;1. Bohrung |
18 |
#<Radius> = 37.0 |
19 |
#<StartXrand> = 111.0 |
20 |
#<startYrand> = 2332.0 |
21 |
; Spindel über den Anfangspunkt setzen |
22 |
G00 X[#<StartXrand>*#<scale>] Y[#<startYrand>*#<scale>] |
23 |
; Unterprogramm dür das erste Kreisloch abarbeiten. |
24 |
o<kreisloch> call [#<zoben>] [#<AnfTiefe>] [#<EndTiefe>] [#<Radius>] [#<StartXrand>] [#<startYrand>] [#<scale>] |
25 |
|
26 |
;2. Bohrung |
27 |
#<Radius> = 108.0 |
28 |
#<StartXrand> = 1144.0 |
29 |
#<startYrand> = 1340.0 |
30 |
o<kreisloch> call [#<zoben>] [#<AnfTiefe>] [#<EndTiefe>] [#<Radius>] [#<StartXrand>] [#<startYrand>] [#<scale>] |
31 |
|
32 |
;3. Bohrung |
33 |
#<Radius> = 37.0 |
34 |
#<StartXrand> = 2723.0 |
35 |
#<startYrand> = 2324.0 |
36 |
o<kreisloch> call [#<zoben>] [#<AnfTiefe>] [#<EndTiefe>] [#<Radius>] [#<StartXrand>] [#<startYrand>] [#<scale>] |
37 |
|
38 |
;4. Bohrung |
39 |
#<Radius> = 37.0 |
40 |
#<StartXrand> = 135.0 |
41 |
#<startYrand> = 140.0 |
42 |
o<kreisloch> call [#<zoben>] [#<AnfTiefe>] [#<EndTiefe>] [#<Radius>] [#<StartXrand>] [#<startYrand>] [#<scale>] |
43 |
|
44 |
o<hrahmenkontursub> call [#<zoben>] [#<AnfTiefe>] [#<EndTiefe>] [#<scale>] |
45 |
|
46 |
G53 G00 Z2 |
47 |
M2 (Programmende) |
48 |
% |
Das g-Code-Programm setzt sich keineswegs nur aus elementaren ISO-DIN-Befehlen zusammen. Der linuxcnc-Code ermöglicht innerhalb des Codes Programmteile, wie sie sonst nur aus höheren Programmiersprachen bekannt sind. So gibt es die Möglichkeit, Variablen zu definieren (Siehe Code-Zeilen 3-6) und Unterprogramme aufzurufen. Das Beispiel
24 |
o<kreisloch> call [#<zoben>] [#<AnfTiefe>] [#<EndTiefe>] [#<Radius>] [#<StartXrand>] [#<startYrand>] [#<scale>] |
zeigt
ein derartiges Unterprogramm (o-Code) für ein kreisförmiges Loch. Der
Aufruf übergibt 7 Parameter, deren Bedeutung sich fast selbst erklärt.
Zunächst wird das Fräswerkzeug auf die Höhe #<zoben> gebracht und
sogleich auf die Anfangstiefe #<AnfTiefe> abgesenkt. Auch der Radius
und die Koordinaten eines Punktes auf dem Kreisrand (#<StartXrand> und #<startYrand>)
werden dem Unterprogamm o<kreisloch> mitgeteilt. Die
Parameterübergabe endet mit einem Maßstabsfaktor #<scale>. Das
Unterprogramm o<kreisloch> veranlasst die Fräse, ein Loch mit den
aus der Parameterliste des call-Aufrufs ersichtlichen Abmessungen zu
fräsen.
Unterprogramm
o<kreisloch |
||
1 |
|
; Loch Unterprogramm fuer den HRahmen des Heizthermostaten |
2 |
|
o<kreisloch> sub |
3 |
|
#<scale>=#7 |
4 |
|
|
5 |
|
#<zoben> = #1 |
6 |
|
#<AnfTiefe> = #2 |
7 |
|
#<EndTiefe> = #3 |
8 |
|
|
9 |
|
#<Radius> = #4 |
10 |
|
#<StartXrand> = #5 |
11 |
|
#<startYrand> = #6 |
12 |
|
|
13 |
|
T2 |
14 |
|
F200.0
(langsamer x- oder y-Vorschub bei Kreisloechern) |
15 |
|
|
16 |
|
#<aktTiefe> = #<AnfTiefe> |
17 |
|
G00 Z[#<zoben>] |
18 |
|
; G00 X0 Y0 |
19 |
|
; Bohrung |
20 |
|
G01 X[#<StartXrand>*#<scale>] Y[#<StartYrand>*#<scale>] |
21 |
|
|
22 |
|
G01 Z[#<aktTiefe>] |
23 |
|
o100 while [#<aktTiefe> LT #<EndTiefe>] |
24 |
|
G02 X[#<StartXrand>*#<scale>] Y[#<StartYrand>*#<scale>] I[#<Radius>*#<scale>] J[0*#<scale>] |
25 |
|
#<aktTiefe> = [#<aktTiefe> + 0.1] (0.1 = Zustellung: Kleine Werte sind gut für Kunstglas ) |
26 |
|
G01 Z[#<aktTiefe>] |
27 |
|
o100 endwhile |
28 |
|
|
29 |
|
G01 Z[#<zoben>] |
30 |
|
; G00 X0 Y0 |
31 |
|
o<kreisloch> endsub |
32 |
|
M2 |
33 |
|
% |
Zur
Erklärung des Unterprogramms. In den Zeilen 3..11 werden die beim Aufruf
übergebenen Parameter in lokale Variablen kopiert.
In den Zeilen 13 und 14 werden Fräswerkzeug und die Geschwindigkeit
festgelegt. In den Zeilen 16..20 wird der Fräser dicht über die erste
Arbeitsposition gelenkt. In den Zeilen 20..22 folgt die endgültige
Absenkung des Fräsers auf die Oberfläche des Werkstücks. In den Zeilen
23..27 ist in der Form o100 while..o100
endwhile eine Programmschleife zu sehen. Dabei wird der in Zeile
24 definierte Kreis hintereinander mehrfach mit zunehmender Tiefe gefräst,
bis die in der Variablen #<EndTiefe>
geforderte Tiefe der Lochfräsung erreicht ist. Diese Technik heißt "Fräsen mit Zustellung". Zeile 25
zeigt, wie linuxcnc mit Variablen Berechnungen ausführen kann. Aus
der jeweils aktuellen Tiefe des zuletzt gefrästen Kreises wird eine um
0.1 mm tiefere #<aktTiefe> für den nächsten Kreis errechnet. In
den Zeilen 29..33 findet sich der Code für das Ende der Fräsungen.
Mit dem Befehl in Zeile 29 wird der Fräskopf aus dem Loch herausgehoben,
damit das Hauptprogramm eine neue Arbeitsstelle anfahren kann.
Mit
dem "Kreisloch"-Unterprogramm werden bei dem Werkstück zunächst 4
Bohrungen gefräst. Zum Schluss ist die Kontur dran. Dafür wurde auch ein
Unterprogramm mit dem Namen o<hrahmenkontursub>
(Hauptprogtamm Zeile 44) geschrieben, das im folgenden
mitgeteilt werden soll:
1 |
;hRahmenKontursub.ngc |
|
2 |
|
|
3 |
o<hrahmenkontursub> sub |
|
4 |
|
|
5 |
#<scale>=#4 |
|
6 |
|
|
7 |
#<zoben> = #1 |
|
8 |
#<AnfTiefe> = #2 |
|
9 |
#<EndTiefe> = #3 |
|
10 |
|
|
11 |
T2 |
|
12 |
F400.0 |
|
13 |
|
|
14 |
#<aktTiefe> = #<AnfTiefe> |
|
15 |
G00 Z[#<zoben>] |
|
16 |
G00 X0 Y0 |
|
17 |
G01 Z[#<aktTiefe>] |
|
18 |
|
|
19 |
o100 while [#<aktTiefe> LT #<EndTiefe>] |
|
20 |
|
|
21 |
; alle Befehle der Kontur |
|
22 |
G00 X[0*#<scale>] Y[0*#<scale>] |
|
23 |
G01 X[0*#<scale>] Y[0*#<scale>] |
|
24 |
G01 X[0*#<scale>] Y[300*#<scale>] |
|
25 |
G01 X[4*#<scale>] Y[304*#<scale>] |
|
26 |
G01 X[356*#<scale>] Y[304*#<scale>] |
|
27 |
G01 X[436*#<scale>] Y[384*#<scale>] |
|
28 |
G01 X[436*#<scale>] Y[1372*#<scale>] |
|
29 |
G01 X[536*#<scale>] Y[1504*#<scale>] |
|
30 |
G01 X[536*#<scale>] Y[2156*#<scale>] |
|
31 |
G01 X[0*#<scale>] Y[2156*#<scale>] |
|
32 |
G01 X[0*#<scale>] Y[2480*#<scale>] |
|
33 |
G01 X[2908*#<scale>] Y[2480*#<scale>] |
|
34 |
G01 X[2908*#<scale>] Y[2096*#<scale>] |
|
35 |
G01 X[2000*#<scale>] Y[2096*#<scale>] |
|
36 |
G01 X[1812*#<scale>] Y[1920*#<scale>] |
|
37 |
G01 X[1812*#<scale>] Y[788*#<scale>] |
|
38 |
; Kreisbogen (Teil der Kontur) |
|
39 |
G03 X[1179*#<scale>] Y[0*#<scale>] I[-370*#<scale>] J[-351*#<scale>] |
|
40 |
G01 X[0*#<scale>] Y[0*#<scale>] |
|
41 |
|
|
42 |
; neue aktuelle Tiefe |
|
43 |
#<aktTiefe> = [#<aktTiefe> + 0.1] |
|
44 |
G01 Z[#<aktTiefe>] |
|
45 |
|
|
46 |
o100 endwhile |
|
47 |
|
|
48 |
G01 Z[#<zoben>] |
|
49 |
|
|
50 |
o<hrahmenkontursub> endsub |
|
51 |
M2 |
|
52 |
% |
Das Unperfekthaus hat
oft Bedarf an Frästeilen aus Kunstglas (Akrylglas, Plexoglas, Makrolon).
Diese Materialien sind für die Fräse nicht einfach zu handhaben.
Einerseits muss man vermeiden, dass der Fräser bricht, andererseits kann
sich Kunstglas beim Fräsen erhitzen und schmelzen. Dann misslingt das
Werkstück. Zu Vermeidung der Probleme sind folgende Maßnahmen
empfehlenswert: