Programmierung & G-Code

Programm- und Bearbeitungsstrategie
Nun gut, es mag etwas verwegen klingen über Strategien im Hobbybereich zu sprechen, aber trotzdem ists mir wichtig. Alle Programme die ich erstelle sollen in etwa immer den selben Ablauf haben um sie auch später noch zu verstehen und
nicht bei jedem Programm erst lesen zu müssen was als nächstes passiert. Es sollte nicht sein, dass der Z-Nullpunkt einmal oben am Werkstück (WKST) und einmal unten ist. Insbesondere ist dieser Punkt von Wichtigkeit, wenn die Programme über ein externes Programmiersytem erstellt werden und die "Übersetzung" in den G-Code über einen Postprozessor geschieht welcher evt. noch selbst erstellt oder angepasst wird.

 

Deshalb halte ich mich an folgende Programmstruktur:

 

1.) Programmkopf
allgemeine Daten, insbesondere Kommentare zu Werkstoff, Rohteilgrösse, Bearbeitungszeit, Programmstatus (initial oder gelaufen & optimiert)

2.) Nullpunktaufruf (G54; G55 G56...)

3.) Werkzeugwechsel
- Anfahren der Werkzeugwechselposition in Z dann in X und Y
- Programmstop
- manueller Werkzeugwechsel wird durchgeführt
- Start drücken und das WZ fährt zum Messtaster und wird automatisch vermessen
- Nach dem Vermessen ist der Werkstück- Nullpunkt unten am Werkstück (auf dem Tisch)
- Anfahren der ersten Bearbeitungsposition in X/Y (Z ist auf Sicherheitshöhe)
- Spindel einschalten mit entsprechender Drehzahl
- Absaugung einschalten
- Z auf Sicherheitshöhe vor Bearbeitung (2-50mm vor Werksück je nach Aufspannung)

4.) Bearbeiten
- nach der Bearbeitung auf "Sicherheitshöhe vor Bearbeitung"
- Absaugung aus
- Spindel aus

3.) Wz-Wechsel
... beliebige WZ-Wechsel und Bearbeitungen
5. Programmende
- Anfahren der Parkposition programmspezifisch im Maschinenkoordinatensystem (G53) erst Z dann X/Y
- Programmende und Rücksprung zu Anfang (M30)

 

Punkte welche situativ verändert werden:

- Werkzeugradiuskompensation will ich bei Bedarf fahren können

  (bei sehr genauen Teilen unter ±0.05mm Toleranz)
- und genau so auch die WZ- Längenkompensation

 

Bis heute hat sich der obige Ablauf bestens bewährt. Einmal definiert, ist er bei Programmierung über einen Postprozessor für alle nachfolgenden Programme automatisch vorhanden.

Nun ists ja meist nicht so, dass man ganze CNC-Programme so selbst schreibt. In der Regel ist ein Programmmiersystem mit Postprozessor (übersetzungs-Tool Progr.System --> Maschinencode) oder irgend ein Konverter im Einsatz welcher CAD-Daten in Maschinensprache übersetzt. Einfache CNC- Programme schreibe ich manuell im Editor. Da ist allerdings sehr konzentriertes Arbeiten nötig und Tippfehler können fatale Folgen haben!
Klar, wenns knallt weiss man relativ schnell wo der Fehler war aber sonst ist die fehlerhafte Programmzeile nicht einfach zu finden. Unter einfachen Programmen versteh ich einige Bohrungen und vielleicht eine einfache Nut Fräsen. Auch hier muss jeder selbst wissen wieviel er sich selbst zutraut.
Beim Abarbeiten solcher selbst getippter Programme ist auch immer grösste Vorsicht an der Maschine geboten. Meist arbeite ich diese im Einzelschrittmodus ab. Deshalb war es mir auch wichtig, den jeweiligen Rest- Verfahrweg auf der Steuerung angezeigt zu haben. Wenn man knapp über der Werkstückoberfläche steht und der Restweg in Z noch -200mm ist, liegt wahrscheinlich mit dem Programm was im Argen.

Flowchart von der Zeichnung zum Programm
Flowchart von der Zeichnung zum Programm

 

Programmierung von G-Code

Dieses Kapitel könnte mehrere Seiten beinhalten. Anleitungen und Beschreibungen zum ISO G-Code gibts unzählige im Internet und deshalb verzichte ich auf eine ausführliche Beschreibung des Codes.

Ich möchte hier aber trotzdem kurz auf die Bohrzyklen (G81; G82; G83....) eingehen und ein kleines aber nicht unwichtiges Detail hervorheben nach welchem ich selber ziemlich lange gesucht habe:

 

In folgendem vereinfachten Beispiel wird eine 20mm Dicke Platte gebohrt, wobei Z-Nullpunkt unten liegt (auf dem Tisch).

 

Ablauf Bohren mit Bohrzyklen:

T01 M06 (WZ-Wechsel)
M3 S6000 (Spinel ein)
G00 X0 Y0 (Vorpositionieren)
G00 Z30 (Vorpositionieren 10mm vor Oberfläche)
G81 X0 Y0 Z-1.5 R22 (Bohrzyklus Definition und 1. Aufruf; bohrt auf Z-1.5 und zieht auf 22 zurück)
G00 X100 Y0   (Bohrzyklus-Aufruf)
G00 X100 Y100 (Bohrzyklus-Aufruf)
G00 X100 Y200 (Bohrzyklus-Aufruf)
G80 (Aufheben Bohrzüklus)

 

Obiges Beispiel Positioniert wohl auf Z30mm vor, zieht aber nach jedem Bohren nur auf Z 22mm zurück. Wie programmiere ich das nun, wenn ich immer auf 30mm zurückziehen will? (z. Bsp. wenn beim X/Y Positionieren ein Spannmittel im Weg ist)

 

nochmals:
G00 Z30 (Vorpositionieren 10mm vor Oberfläche)
G81 X0 Y0 Z-1.5 R30 (Bohrzyklus Definition und 1. Aufruf; Bohrt auf Z-1.5 und zieht dann auf 30 zurück)
G00 X100 Y0   (Bohrzyklus-Aufruf)
G00 X100 Y100 (Bohrzyklus-Aufruf)
G00 X100 Y200 (Bohrzyklus-Aufruf)
G80 (Aufheben Bohrzüklus)

 

Jetzt zieht er wohl wie gewünscht nach jedem Bohren auf Z30 zurück aber bis Z20 bearbetet er nun bei jeder Bohrung 10mm Luft und das dauert seine Zeit.

 

Es gibt im Bohrzyklus keinen Parameter welcher das steuern kann.
Zwar gibts noch "Q" für die Zustelltiefe beim Spanbrechzyklus oder den Parameter für die Verweilzeit aber eben keinen für die Startposition in Z.

 
Ich bin dann im Internet auf folgende beiden G-Codes gestossen:


G98 --> Rückzug auf Positionierebene
G99 --> Rückzug auf Referenzebene

 

Dies heisst im Detail:
G00 Z30 (Vorpositionieren 10mm vor Oberfläche)
G81 G98 X0 Y0 Z-1.5 R22 (Bohrzyklus Definition und 1. Aufruf; Bohrt auf Z-1.5 und zieht dann auf 30 zurück --> G98 )
G00 G99 X100 Y0   --> fährt Position an, im Eilgang auf 22 (R22), bohrt Z-1.5, Zückzug auf 22 im Eilgang --> G99
G00 G99 X100 Y100 --> fährt Position an, bohrt Z-1.5, Zückzug auf 22 im Eilgang --> G99
G00 G98 X100 Y200 --> fährt Position an, bohrt Z-1.5, Zückzug auf 30 im Eilgang --> G98
G00 G98 X100 Y200 --> fährt Position an, im Eilgang auf 22 (R22), bohrt Z-1.5, Zückzug auf 30 im Eilgang --> G98
G80 (Aufheben Bohrzüklus)

Unser (mein) Problem ist nun gelöst, kann immer soweit zurückziehen und Vorpositionieren wie ich will und dies ohne unnötig Luft zu bearbeiten. Soweit der kleine Exkurs zum Programmcode. Nachfolgend habe ich das Ganze mal aufskizziert und ich hoffe ich schaffe damit nicht noch mehr Verwirrung.

Bohrzyklen mit G98 & G99
Bohrzyklen mit G98 & G99