Foro MetalAficion
CNC => CNC - Software y Controladores => Mensaje iniciado por: Manrique en 29 Marzo 2015, 16:09
-
Empezando a dar mis primeros pasos con el InventorCam, gracias a Jmllosa que me paso un post procesador que funciona con linuxcnc, hoy he hecho una pieza super complicada, vamos la leche:
(http://imagizer.imageshack.us/v2/800x600q90/538/JIenQj.jpg) (https://imageshack.com/i/eyJIenQjj)
Bien, bromas aparte, todo el proceso tiene dos operaciones primero taladrado y luego fresado.
El problema está en que al taladrar la Z de la broca no tiene nada que ver con la Z de la fresa y no se como hacer para poder cambiar la Z en medio del programa, es decir, que cuando hago el cambio de herramieneta pueda ver cual es la nueva Z y pasarsela al programa...como cada vez que cambias de herramienta la z varia y además aunque vuelva a la misma herramienta, tampoco será igual, dependerá de cuanto meta el vastago en la pinza...
Debe ser algo bastante básico, pero...
-
Si no posees portaherramientas intercambiables que mantengan la altura de la herramienta con repetitividad, hay varias formas de hacerlo (si lo tienes, es cuestión de meter los valores en la tabla de herramientas y ya LinuxCNC lo hace todo).
Lo primero vete a la tabla de herramientas y borra todos los valores que haya en las Z, que al instalar LinuxCNC vienen con un offset de 0.5 (que serían pulgadas) de ejemplo y a mi ya me ha jugado alguna mala pasada, hasta que descubrí que era por eso.
Lo segundo, si no quieres tener que meterte a cambiar las entrañas a LinuxCNC (remapping, que es cambiar lo que hacen las órdenes del código G) tendrás que separar en distintos archivos cada fresado que vayas a hacer con una herramienta.
Mecánicamente tienes este cacharro: http://www.ctctools.biz/mechanical-z-axis-pre-setter-with-dial-l151/
Simplemente bajas la herramienta hasta que llegue a cero (o el mismo valor que tuvieras antes), y pones el offset que quieras (diferencia entre el cero de ese cacharro y tu pieza). Para fresadoras manuales es muy útil para tener precisión y no tener que usar el método de las galgas, pero para CNC creo que hay un sistema mejor, la orden de touch probe.
En este post tienes explicado como se configura: http://foro.metalaficion.com/index.php?topic=14616.msg173660#msg173660
Una vez con esto así, colocas uno de los cables en la herramienta, y otro a la pieza. Acercas la herramienta manualmente a la pieza y con la fresadora "homeada" (que si no el MDI no funciona) escribes la velocidad a la que quieres que baje para hacer contacto (yo le pongo F20, es despacito, pero me asegura precisión). Escribes un G38.2 Z-100 y la fresadora empezará a bajar a 20mm/min hasta hacer contacto, momento en el que se parará. Ahí le marcas 0 en el eje (o la medida que sea en tu pieza) y listo.
Si la pieza es no conductora, o tu fresadora si lo es, tendrás que colocar un trozo de circuito impreso encima de la pieza para que la fresa haga contacto con él. Luego, obviamente, cuando marcas el 0, le tienes que decir que estas en Z igual al grosor del circuito.
-
Gracias por la ayuda, lo de partir el codigo es lo que quería evitar a toda costa..., la idea serría poder introducir de manera automatica en los cambios de herramienta esa rutina de touch probe...
Voya ver si me aclaro...
Gracias
-
Se puede hacer sin problema también, hay dos posibilidades:
La buena sería haciendo el remapping. La verdad es que me he leído los documentos pero no me he aclarado mucho y no me he puesto a probarlo aun. Si decides mirar por ahí y consigues algún avance, no dudes en enseñarnos:
http://linuxcnc.org/docs/html/remap/structure.html#_remapped_code_execution
De esta forma, cada vez que haya un cambio de herramienta, puedes hacer que al pulsar aceptar se vaya a un punto predeterminado, donde tengas la plaquita para tomar referencia y haga el touch probe.
La otra forma es hacer lo mismo pero introduciendo el código a mano en cada programa. Después del M6 sería algo así:
G53 G0 Z0 (Z0 cabezal arriba del todo)
X Y (irse al punto que tengas, en coordenadas maquina, la plaquita)
F20 (esto lo hace bastante lento si la distancia es demasiado larga, puedes hacer que vaya rápido y repetir luego mas despacio)
G38.2 Z-1000 (baja hasta tocar)
G10 L20 P1 Z0
G0 Z0
M3
Al final esto mismo va a ser lo que tengas que implementar en el remapping, solo que con lo otro lo hará automáticamente cada vez que haya un M6.
En este video se ve como lo hacen: https://www.youtube.com/watch?v=9H86iNWPYds
-
Esto si que me ha gustado.
Me pongo con ello.
-
Como una primera solución intermedia entre el remapping y colocar todo el codigo que propone Devilhunter (http://foro.metalaficion.com/index.php?topic=14616.msg173660#msg173660)
Podriamos hacer lo siguiente:
creamos un archivo que va a contener el codigo de Touchprobe para Z (El de Devil) con las siguientes modificaciones:
O<posicionz> sub
G53 G0 Z0 (Z0 cabezal arriba del todo)
X Y (irse al punto que tengas, en coordenadas maquina, la plaquita)
F20 (esto lo hace bastante lento si la distancia es demasiado larga, puedes hacer que vaya rápido y repetir luego mas despacio)
G38.2 Z-1000 (baja hasta tocar)
G10 L20 P1 Z0
G0 Z0
M3
O<posicionz> endsub
M2
El archivo se llamara: posicionz.ngc
Ahora, en cualquiera de nuestros programas, cuando necesitemos recalcular la Z solo tenemos que llamar a esta subrutina, podriamos ponerlo despues de un cambio de herramienta
Mi codigo....
...
O<posicionz> call
...
más codigo
Ojo, con esto así no vale, debemos añadir una cosa más en nuestro .INI para que sepa donde buscar esta subrutina:
Dentro del apartado [RS274NGC]
Añadiremos esta linea indicandole donde esta el directorio que las contiene.(Donde tengamos nuestro posicionz.ngc
SUBROUTINE_PATH= ../../usuario/linuxcnc/missubrutinas
Como muchos habreis notado, el codigo en general no está preparado para funcionar, habría que añadirle algunas lineas, como por ejemplo que fuese a una posición determinada para hacer la comprobación de altura, y a lo mejor un M0 para que se pare y nos de tiempo a colocar la sonda...
La idea que quería expresar es que podemos crear subrutinas, guardarlas y llamarlas desde cualquier programa.
Ahora vamos a ver si somos capaces de ponernos con el remapping...
Gracias Devil por indicarme el camino ;)
He modificado el post pq había algunas cosas mal puestas...por cagaprisas...
-
Exacto, con una subrutina es mucho mas fácil de implementar ya que sólo hay que meter una línea en el código.
Supongo que te hayas dado cuenta pero esa subrutina es para calcular el centro de un agujero, no sirve para el cambio de herramienta (aunque la idea es la misma).
Al cambiar de herramienta no es necesario modificar ninguno de los valores de X e Y, sólo Z. Sería esta, que sustituiría a la línea que lleva el Tx M6:
%
O<cambioherramienta> sub
G53 G0 Z0 (cabezal arriba)
G53 G0 X0 Y0 (o las coordenadas XY en coordenadas máquina que tengas el sensor)
M5 (paramos el husillo)
M0 (parada en el programa, ahora cambiaremos la herramienta y cuando esté lista pulsamos continuar)
F200 (prueba rápida para no eternizarnos)
G91 G38.2 X-1000
G91 Z1
F20 (prueba lenta para tener mas precisión)
G91 G38.2 Z-2
G10 L20 P1 Z0 (o el offset que tengamos, lo explico abajo)
G90
G53 G0 Z0 (cabezal arriba de nuevo)
M3 (volvemos a encender el husillo)
O<cambioherramienta> endsub
%
Lo que os comento de los offset: esto tiene el problema de que el Z0 lo pone en el sensor, no en el Z0 que hayamos querido nosotros al generar el código G. Para evitarnos problemas con esto lo mas fácil es, a la hora de crear el código G, hacer que Z0 sea la superficie de nuestra mesa siempre. Si nuestro sensor es por ejemplo una chapita de 2 mm de grosor, hacemos G10 L20 P1 Z2, de manera que al hacer contacto el Z0 sea la mesa, como queríamos.
Para evitar choques, el Z0 de máquina (G53 Z0) debe ser con el cabezal arriba del todo, de manera que el cabezal en esta posición esté arriba, lo mas alejado de la mesa. No es estrictamente necesario hacerlo así (pero si lo cambiáis tenéis que cambiar este código también), pero es la regla general que siempre se usa.
Cuando termina esta subrutina, LinuxCNC sigue con las coordenadas X e Y que estuvierais utilizando antes (al menos en G54, si estáis con otro offset comprobadlo por si acaso), por lo que el fresado seguirá sin problemas.
Manrique en cuanto consigas avances en el remapping no dudes en comentarnos como lo has hecho, para un cambiador automático de herramientas es muy útil.
-
Me di cuenta luego y he modificado el post.
No te preocupes que si consigo algo con el remapping os lo diré.
-
REMAPPING:
Por lo que voy leyendo hay varios metodos para hacerlo, el más sencillo (y limitado) es reutilizar el comportamiento del codigo que queremos utilizar y hacer pequeños cambios en el, según la ayuda, por ejemplo, con M6, utilizar una sonda de altura de herramienta.
Aqui mis experimentos...
Básicamente hay que hacer 2 cosas:
- Modificar nuestro .INI indicando el remapeo
- Crear una Subrutina que se ejecute cuando se lanza el codigo
1.-Para este primer método, en nuetro .INI añadiremos en la sección [RS274NGC]
REMAP=M6 modalgroup=6 ngc=change
2.-Crearemos un archivo change.ngc en la carpeta donde tenemos nuestras subrutinas y a la que apuntamos con:
Dentro del apartado [RS274NGC]
Añadiremos esta linea indicandole donde esta el directorio que las contiene.(Donde tengamos nuestro posicionz.ngc
SUBROUTINE_PATH= ../../usuario/linuxcnc/missubrutinas
Como comentaba en el post de más arriba
el contenido de la subrutina será:
o<change> sub
M6 (hereda el comportamiento de M6)
...
todo nuestro codigo
...
m0 (pausa el programa hasta que hagamos el cambio y le digamos que siga)
0<change> endsub
m2
Con esto cuando en nuestro codigo aparezca un M6 T2
lo primero que pasara es que nos saltara el mensaje de cambio de herramienta, le damos a OK y entonces se ejecuta la subrutina donde hará lo que le digamos y con M0 se queda en pausa hasta que le digamos que siga.
La prueba que he hecho funciona, PEEERO no del todo...el problema que me he encontrado es que dentro de la subrutina cambio el feedrate y al salir de ella, cuando vuelvo al programa, la primera linea que tengo depues de M6 es un F100 que se pasa por el forro...
Quizá, si a la subrutina le paso valores de feedrate y antes de salir los restauro desde la subrutina funcione, pero aun no me he estudiado lo de las variables...
Seguiremos investigando...
-
.yupi .yupi .yupi .yupi .yupi
Que sí que funciona!!! en la subrurina de mapeado le tenia puesto un G0 y al salir no había ningun G1 y todo lo hacia en G0 claro...
Asi pues este método creo que nos puede valer para el cambio de herramienta manual con sonda de altura.
Para cosas más complejas hay que usar un par de rutinas en Python más otro par de archivos que llama epilogo y prologo, pero por ahora si me vale con esto no voy a entrar...
-
Gracias por compartir..haber si poco a poco vamos saliendo de la oscuridad en linux cnc..aqui ay unos cuantos que de sobra saben estas cosas..pero claro como se creen tan PRO pues no comparten informacion..asi es que se J...N..al final siempre ay alguien que comparte informacion .ereselmejor .ereselmejor .brinda .brinda
-
Bueno, sigo retransmitiendo en directo, parece que con esto podriamos tener una rutina para el cambio manual, ahora hay que hacerla...
Mi idea es:
1.-Llegamos a M6 T1
2.-Subimos a Z segura
3.-Vamos a X,Y donde este la sonda
4.-Pausamos el programa para hacer el cambio de herramienta
5.-Una vez cambiada reanudamos el programa
6.-bajamos hasta tocar sonda
En esta parte quiero hacer algo diferente, la sonda que tengo no es más que una chapa de aluminio aislada en su base, que dara contacto cuando toque con la herramienta (Regalito de Michel)
En mi caso, por ejemplo si estoy haciendo un taladro y paso a fresar, cambio el portabrocas por el portapinzas y eso de por si me genera una diferencia de alturas considerable, con la sonda que tengo el contacto hay que hacerlo a muy poca velocidad, F20 supongo o menos, si tengo que bajar 70 mm a F20 me puedo morir esperando...
Entonces, lo que quiero hacer es tener 2 zonas de contacto en la sonda, una zona "blanda", por ejemplo colocar un muelle con una chapita arriba, y otra zona "dura" que será la referencia buena. Con esto puedo hacer un primer contacto a alta velocidad en la zona blanda sin temor a romper nada, volver a subir un poco y bajar a baja velocidad en la zona dura para obtener la Z buena, al tocar sonda en la zona "dura" rehacemos el offset de la herramienta para no tocar las coordenadas.
7.-volvemos a z segura
8.-volvemos a x,y original
9.-bajamos a Z de trabajo
10.-continuamos programa
problemas:
Offset de herramienta aun no se como funciona...
-
Pues es mas sencillo de lo que parece el remapping, al menos el archivo central. Yo cuando vi lo del epilog y prolog en pyton dije: para otro día xD
Lo de dos zonas de pruebas es muy buena idea, puedes hacerlo como te puse arriba solo con cambiar las coordenadas de X e Y en la zona de baja velocidad de prueba, solo necesita una línea de código mas.
Los offset de las herramientas todos a cero, no los necesitas ya que al hacer el G10 L20 P1 Z0 ya incluye ahí el offset que tenga, con lo que si tienes un offset diferente con otra herramienta te va a hacer un estropicio. Los offset sirven si tienes por ejemplo varios portapinzas que permitan tener guardadas las alturas de antes, pero entonces no necesitarías el sensor.
-
Pero hay una cosa que no me convence...
Si en mi rutina de cambio de herramienta lo que estoy haciendo es poner a cero alguno de los sistemas de coordenadas, si en el programa estoy usando otro, no sirve de nada.
Por eso quisiera utilizar los offsets de herramientas, asi no toco ningun sistema de coordenadas.
No se no se...acabo de instalar la parte de hardware del sensor que me faltaba y esta tarde haré pruebas en la máquina, a ver que rompo...
Gracias
-
Bueno, creo que tengo una primera Beta de mi cambio manual de herramienta, como ireis viendo aun estoy muy pez en esto del codigo G y vereis alguna burrada...
Hay algunas cosas que no tengo aun claras asi que el codigo sufrira algunas modificaciones...
Lo primero añadir cositas en nuestro .INI:
[RS274NGC]
SUBROUTINE_PATH=../../usuario/linuxcnc/nc_files ;la ruta donde estaran nuestras subrutinas
REMAP=M10 modalgroup=10 ncg=zinicio ;remapeo el codigo M10 que no tiene uso, las nuevas instrucciones en el archivo zinicio
REMAP=M6 modalgroup=6 ncg=change ;remapeo el M6 las nuevas instrucciones en el archivo change
Ahora vamos a por los dos archivos:
zinicio.ngc
O<zinicio> sub
M0
T1
G49
G1 F10
G91
G38.3 Z-10
(DEBUG, Punto de contacto en: #5063)
#1=[-5.18+#5063]
(DEBUG,Offset de herramienta para Z0: #1)
G43.1 z#1
G0 Z100
X100
(DEBUG,Situe la sonda bajo la herramienta)
M0
G38.3 Z-300 F100
(DEBUG,Punto de contacto en: #5063)
G1 G91 Z2 F50
G38.3 Z-3 F10
#<_constante>=#5063
G0 Z100
G90
O<zinicio> endsub
m2
Esta primera rutina hace 2 cosas:
Primero, colocando la sonda entre la herramienta y la pieza, bajara, hara contacto y calcula el offset para la herramienta, de manera que quede enrasada con la cara de la pieza.
La segunda, despues de esto va una posicion determinada y baja hasta la sonda que estara en un lugar fijo durante todo el proceso de mecanizado y que será el sitio al que vaya a calcular las nuevas alturas de herramienta.
Remapeo de M6:
change.ngc
O<change> sub
M6
G49 G91
G0 Z50
G90
G0 X130
M0
G91
G38.3 Z-400 F100
(DEBUG, punto de contacto:#5063)
G1 Z2 F50
G38.3 Z-4 F10
#1=[#5063-#<_constante>]
(DEBUG,Nuevo offset: #1)
G0 Z50
G90
O<change> endsub
m2
Este remapeo de M6 lo que hace es que cada vez que se ejecuta M6 va al sitio donde esta la sonda hace contacto y recalcula el offset para dejar la herramienta en Z0
Hay unas cuantas cosas pendientes:
que cada vez que entro en una subrutina, cuando termine vuelva al punto X Y donde empecé y a Z segura.
Cuando entro en una subrutina cambio cosas como el G90, y no se que otras que al salir de la subrutina deberian estar igual, un M70 y un M72 quizá valdrian, pero debo conservar el offset de la herramienta.
Donde colocar la sonda...
Bueno mañana coloco un video y le dare una vuelta a todo que esta cogido con alfileres...
-
Pues tengo una buena noticia y dos malas...
La buena es que ya funciona el cambio manual de herramienta, la primera mala es que no va a haber video y la segunda mala es que no habrá video porque me he cargado la breackoutboard...abriré ahora un post a ver si podeis echarme una mano...en fin...
Bueno la solución casi final:
El INI igual que antes.
En rojo la posocion de la sonda en coordenadas maquina.
Las rutinas restauran al terminar el sistema de coordenadas que tenian antes de entrar G54,55,56 o 57 no he puesto el resto, pero se podria facilmente, tambien restaura G90 o G91 segun estubiese antes de empezar y por ultima G0 o G1.
Despues de cada operación posiciona la herramienta en las coordenadas x e y que tenia antes de ejecutarse M6 o M10 con un Z de 50 por encima de donde estuviese.
En el codigo hay una serie de instrucciones que me han resultado muy utiles para depurar el programa y que además dan información al usuario en tiempo de ejecución, son los (debug,mensaje).
Creo que con esto ya esta solucionado el tema, cada uno puede ajustar lo que quiera o afinar más o menos, falta lo de la zona "blanda" y la zona "dura" que no me ha dado tiempo...
Archivo de mapeo de M6
O<change> sub
m6
#<coordsystem>=#<_coord_system>
#<abs>=#<_absolute>
#<motionmode>=#<_motion_mode>
#<x1>=#<_x>
#<y1>=#<_y>
#<z1>=#<_z>
G49 G91
g0 z50
G0 G53 G90
G0 X130 Y50
m0
g38.3 z-400 f150
(DEBUG,punto contacto en :#5063)
G91
G1 z2 f50
G91
g38.3 z-10 F10
#1=[#5063-#<_constante>]
(DEBUG,punto contacto en :#1)
G43.1 z#1
o<rest> if [#<abs>]
G90
(DEBUG,G90)
o<rest> endif
o<restauracordsys> if[#<coordsystem> eq 540]
G54
(DEBUG,G54)
o<restauracordsys> endif
o<restauracordsys1> if[#<coordsystem> eq 550]
G55
(DEBUG,G55)
o<restauracordsys1> endif
o<restauracordsys2> if[#<coordsystem> eq 560]
G56
(DEBUG,G56)
o<restauracordsys2> endif
o<restauracordsys3> if[#<coordsystem> eq 570]
G57
(DEBUG,G57)
o<restauracordsys3> endif
G0 Z[#<z1>+50]
x[#<x1>] y[#<y1>]
o<restauramotionmode> if[#<motionmode> eq 10]
G1
(DEBUG,G1)
else
(DEBUG,G0)
G0
o<restauramotionmode> endif
O<change> endsub
m2
Archivo con nuevo comando M6:
O<zinicio> sub
#<coordsystem>=#<_coord_system>
#<abs>=#<_absolute>
#<motionmode>=#<_motion_mode>
#<x1>=#<_x>
#<y1>=#<_y>
#<z1>=#<_z>
(debug,#<_coord_system>)
(debug,#<abs>)
(debug,#<_motion_mode>)
(DEBUG,IMPORTANTE para asignar la Z se utilizara la herramienta T1)
M0
T1
G49
G1 F10
g91
G38.2 z-10
(DEBUG,pto contacto en #5063)
#1=[-5.18+#5063]
(DEBUG,Offset: #1)
G43.1 Z#1
G0 Z50
G0 G53 G90
G0 X130 Y50
(DEBUG,Situe la sonda bajo la herramienta)
M0
g38.3 z-400 f200
(DEBUG,primer punto contacto en :#5063)
g1 g91 Z2 f50
g38.3 z-3 F10
#<_constante> = #5063
o<rest> if [#<abs>]
G90
(DEBUG,G90)
o<rest> endif
o<restauracordsys> if[#<coordsystem> eq 540]
G54
(DEBUG,G54)
o<restauracordsys> endif
o<restauracordsys1> if[#<coordsystem> eq 550]
G55
(DEBUG,G55)
o<restauracordsys1> endif
o<restauracordsys2> if[#<coordsystem> eq 560]
G56
(DEBUG,G56)
o<restauracordsys2> endif
o<restauracordsys3> if[#<coordsystem> eq 570]
G57
(DEBUG,G57)
o<restauracordsys3> endif
G0 Z[#<z1>+50]
x[#<x1>] y[#<y1>]
o<restauramotionmode> if[#<motionmode> eq 10]
G1
(DEBUG,G1)
else
(DEBUG,G0)
G0
o<restauramotionmode> endif
O<zinicio> endsub
m2
-
Una cosita, la línea que tienes en rojo debe de tener el G53. Lo has puesto en la línea anterior, sí, pero ahí no vale. G54, 55, etc vale con ponerlo una vez, pero al moverse en coordenadas máquina hay que poner G53 en cada línea.
-
Gracias! a ver si mañana puedo volver a trastear.
-
Un poco chapu, pero bueno...
https://www.youtube.com/watch?v=2UiP8IgafeY&feature=youtu.be
-
Muchas gracias. Su video me ha dado una muy buena idea para hacer un dispositivo que permita hacer un cambio mas rápido de herramientas encontrando el Z a mayor velocidad. .palmas Si encuentro el tiempo necesario para construirlo le dare su bien merecido crédito y compartiré los detalles, si no, compartiré la idea de todas formas por si algún otro interesado la pudiera aplicar.
Resulta que hice unas búsquedas en internet y esa idea ya fue patentada y algunos de esos dispositivos ya están siendo comercializados :( . La idea básicamente consiste en usar un haz de luz laser/led y un detector en el lado opuesto de la trayectoria de la herramienta (en el eje Z) para detectar el "edge" antes de llegar al verdadero detector, de esa forma la aproximación se puede hacer a mayor velocidad y una vez cruzado el haz de luz se disminuye la velocidad hasta llegar al contacto eléctrico. El detector puede ser un sencillo foto-diodo (con una apertura pequeña) o tan complejo como un detector tipo CCD, en ambos casos también puede prescindirse del contacto eléctrico y puede hacerse la detección del largo y diámetro de la herramienta sin contacto físico, lo que es muy conveniente cuando se usan herramientas largas y de muy muy pequeño diámetro (finas).
De todas formas sigo agradeciendo su aporte.