Dxf2gcode

De Wikijoan
Dreceres ràpides: navegació, cerca

Contingut

Introducció

$ sudo apt-get install python-qt4 python-qt4-dev
svn checkout http://dxf2gcode.googlecode.com/svn/trunk/ dxf2gcode-read-only
$ cd dxf2gcode-read-only/
$ cd source/
$ python dxf2gcode.py

Aleshores ja entrem en la interface gràfica, obrim un fitxer .dxf, fem els canvis que es creguin oportuns (aquí ve la feina grossa, s'ha de definir tot), i finalment exportem a fitxer .ngc (el g-code).

Un cop obtinc el g-code, aleshores el EMC2 és el que és capaç de comunicar-se amb la targeta controladora a través del port paral.lel (i eventualment el port USB).

Així com el HeeksCAD és un CAM software (llegeix el fitxer dxf i fa la generació del g-code, i també es comunica amb la màquina CNC), el EMC2 només es controlador, de manera que necessitem un software previ per generar el g-code (el dxf2gcode).

Instal.lació 2016 (Ubuntu 16.04)

$ git clone git://git.code.sf.net/p/dxf2gcode/sourcecode dxf2gcode-sourcecode
$ cd dxf2gcode-sourcecode/source
$ python dxf2gcode.py

i ja funciona

El workflow en general serà:

Utilització de dxf2gcode

En diferents punts s'explica l'ús de dxf2gcode en el meu tool chain per utilitzar una màquina CNC. De moment, el meu tool chain seria:

Però hi ha gent que té altres fluxos de treball. Per ex:

En definitiva, cada maestrillo té el seu librillo.

dxf2gcode en línia de comandes

A l'accedir en línia de comandes, no tinc accés a la interfície gràfica i a tots els paràmetres que es defineixen. No passa res, perquè està previst que dxf2gcode funcioni en línia de comandes:

$ python dxf2gcode.py -h
usage: dxf2gcode.py [-h] [-e EXPORT_FILENAME] [-q] [filename]

positional arguments:
  filename

optional arguments:
  -h, --help            show this help message and exit
  -e EXPORT_FILENAME, --export EXPORT_FILENAME
                        export data to FILENAME
  -q, --quiet           no GUI

Per tant:

$ python dxf2gcode.py --e anec_donald.ngc -q anec_donald.dxf

Es tracta d'editar el fitxer config.py, on queden definits tots els paràmetres interessants i que són visibles en la interfície gràfica.

línia 132:

   [Depth_Coordinates]
   # Third axis' coordinate at which it can do rapid move.
   axis3_retract = float(default = 15.0)
   # Third axis' margin for which it needs to do a slow move.
   axis3_safe_margin = float(default = 3.0)
   # The top third axis' coordinate of the workpiece.
   axis3_start_mill_depth = float(default = 0.0)
   # Relative depth for each cut (third axis' coordinate will be decreased by this value at each step).
   axis3_slice_depth = float(default = -1.5)
   # Relative final third axis' depth.
   axis3_mill_depth = float(default = -3.0)
   [Feed_Rates]
   f_g1_plane = float(default = 400)
   f_g1_depth = float(default = 150)

línia 161:

   # Machine types supported: milling; lathe; drag_knife
   machine_type = option('milling', 'lathe', 'drag_knife', default = 'milling')
   # The unit used for all values in this file
   tool_units = option('mm', 'in', default = 'mm')

És interessant la part del tutorial que diu Section Layer Options. La idea és que renombrant els layers del dxf de la manera correcta, agafa els paràmetres correctes, i d'aquesta manera evito haver d'editar el fitxer config.py.

By naming Layers in the .dxf file in special ways you can easily influence how shapes in these layers are translated to G-Cod

Tool Parameters

És fàcil en el fitxer config.py afegir noves broques. Només cal editar aquest fitxer.

    [Tool_Parameters]
    [[1]]
    diameter = float(default = 2.0)
    speed = float(default = 6000)
    start_radius = float(default = 0.2)

    [[2]]
    diameter = float(default = 2.0)
    speed = float(default = 6000.0)
    start_radius = float(default = 1.0)

    [[10]]
    diameter = float(default = 10.0)
    speed = float(default = 6000.0)
    start_radius = float(default = 2.0)

Milling parameters

By using MILL: as a prefix to your layer name you can define milling parameters by using one of the following identifiers (taken from https://groups.google.com/forum/#!topic/dxf2gcode-users/q3hPQkN2OCo ):

    # mill options
    mill_depth_identifiers = MillDepth, Md, TiefeGesamt, Tg
    slice_depth_identifiers = SliceDepth, Sd, TiefeZustellung, Tz
    start_mill_depth_identifiers = StartMillDepth, SMd, StartTiefe, St
    retract_identifiers = RetractHeight, Rh, FreifahrHohe, FFh
    safe_margin_identifiers = SafeMargin, Sm, SicherheitsHoehe, Sh
    f_g1_plane_identifiers = FeedXY, Fxy, VorschubXY, Vxy, F
    f_g1_depth_identifiers = FeedZ, Fz, VorschubZ, Vz

    #Tool Options
    tool_nr_identifiers = ToolNr, Tn, T, WerkzeugNummer, Wn
    tool_diameter_identifiers = ToolDiameter, Td, WerkzeugDurchmesser, Wd
    spindle_speed_identifiers = SpindleSpeed, Drehzahl, RPM, UPM, S
    start_radius_identifiers = StartRadius, Sr

Example:

MILL: 1 Md: -2 Sd: -2 FeedXY: 400 FeedZ: 200 ('''compte!''', ficar números negatius)

This will cut shapes on the layer 2 mm deep (in one pass, since Sd == Md) using 400 mm / minute speed for X/Y movement and 200 mm / minute for Z movement.

Tip: You can combine workpieces for different materials in one .dxf file, just put all the pieces that belong to one kind of material (e.g. thickness of plywood) onto one layer.

Si vull especificar l'eina a utilitzar ficaria:

MILL: 1 Md: -2 Sd: -2 FeedXY: 400 FeedZ: 200 Td: 6

o bé ficar l'identificador de l'eina (Tn) tal com està definit en el config.py (on manualment es poden afegir noves eines):

MILL: 1 Md: -2 Sd: -2 FeedXY: 400 FeedZ: 200 Tn: 10

Efectivament, defineixo a config.py una nova eina amb una broca de 12mm, i el resultat és:

...
(*** LAYER: MILL: 1 Md: -4.0 Sd: -2.0 FeedXY: 400 FeedZ: 200 ToolNr: 12 ***)
T12 M6
S6000

però en canvi, si ho faig amb la interfície gràfica, per defecte no queda seleccionada l'eina 12.

T12: select tool number 12
M6: tool change

Hi ha màquines bones que fan els canvis d'eina de forma automàtica. Per defecte, una màquina normal atura el procés i espera el canvi manual de l'eina.

Un fallo que veig és que he definit en l'eina 12 una velocitat de 3000, i veig que no ho fa bé. No passa res perquè en la meva màquina la velocitat serà manual.

Si vull fer dues passades de -2mm per arribar a -4mm:

(*** LAYER: MILL: 1 Md: -4 Sd: -2 FeedXY: 400 FeedZ: 200 ToolNr: 12 ***)
T12 M6
S6000

(* SHAPE Nr: 0 *)
G0 X  17.250 Y  15.500
M3 M8
G0 Z   3.000 
F200
G1 Z  -2.000
F400
G1 X  17.250 Y  44.750
G1 X  54.750 Y  44.750
G1 X  54.750 Y  15.500
G1 X  17.250 Y  15.500
F200
G1 Z  -4.000
F400
G1 X  17.250 Y  44.750
G1 X  54.750 Y  44.750
G1 X  54.750 Y  15.500
G1 X  17.250 Y  15.500

Què és el start radius de les tool options?

És una mica difícil d'explicar. Té a veure amb la compensació que s'ha de posar en funció de la broca que s'utilitza:

start_radius: start radius for tool compensation when using G41 / G42 moves

Però per defecte està deshabilitat. En el fitxer config.py veig:

# Automatically enable cutter compensation for all the shapes (G41 & G42)
automatic_cutter_compensation = boolean(default = False)

Jo crec que amb una broca rodona no té efecte. Però imagiment un cutter o un drag-knife. La punta no queda centrada al mig. Quan amb el cutter faig un giro de 90 graus, passarà que el punt on continuo tallant no era el punt on vaig deixar de tallar. Aleshores s'ha de compensar tenint en compte la separació que hi ha entre el centre de la cuchilla i on està la punta de la cuchilla.

Ignored layers

Només cal que la layer comenci per IGNORE:

Making tabs with Breaking layers

It is common practice to not entirely mill out workpieces but leave small gaps in the milling path known as tabs (in German this is called "Frässtäge" or "Stützbrücken"). The reason behind this is that without tabs the workpiece may be kicked away or take damage in another way by the milling head.

It is of course totally feasible to produce tabs by simple drawing them in the .dxf file with the CAD software. This however has the disadvantage that the blueprint of your workpiece is now interspersed with tabs and shapes are no longer closed.

dxf2gcode allows to define tabs as intersection points between lines of shapes to mill and lines of shapes on a breaking layer. If a shape to mill is intersected exactly two times by a shape on a breaking layer, a tab will be introduced. This allows for tabs to be introduced as rectangles on the breaking layer. The image below has a magenta breaking layer and a white layer defining the workpiece.

Breaking layers are defined by the prefix BREAKS: in the layer name.

Note that some parameters from the 'Milling parameters' section above apply to the breaking layer as well: FeedZ (or Fz, VorschubZ, Vz) will define the speed the milling head is retracted at the beginning and reinserted at the end of the tab. FeedXY (Fxy, VorschubXY, Vxy, F) will define the speed the milling head is passing the tab MillDepth (Md, TiefeGesamt, Tg) will define the height the milling head will have while passing the tab. This allows to pass the workpiece completely (Md > 0) or just prevent from cutting all the way through (Md < 0 but bigger than Md from your milling layer).

Example:

Drilling layers

Milling machines can also be used for drilling holes in the workpiece. To achieve this with dxf2gcode you have to draw points on a drilling layer.

Drilling layers are defined by the prefix DRILL: in the layer name.

Drilling layers can have all the parameters specified unter Milling parameters above, thus defining how deep (MillDepth) or how fast (FeedZ) the hole should be drilled. Also the given ToolDiameter will be used to visualize the hole.

Eines de l'usuari
Espais de noms
Variants
Accions
Navegació
IES Jaume Balmes
Màquines recreatives
CNC
Informàtica musical
joanillo.org Planet
Eines