LinuxCNC Startbildschirm
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 

WerkstückHier 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

%

LinuxCNC kann diesen g-Code sofort simulieren:

Werkstück im Simulator

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: