Autor Tema: Opción de lectura de instrucciones por paquetes  (Leído 783 veces)

soko

  • Usuario de CNCs
  • ***
  • Mensajes: 1504
  • Karma: +13/-0
    • Ver Perfil
  • Ubicación: Valladolid
Opción de lectura de instrucciones por paquetes
« en: Junio 03, 2014, 10:54:06 am »
HOla!!!!

Vengo a proponer otro quebradero de cabeza para NGC, como siempre primero preguntaros si os parece interesante y segundo si es posible  =B =B.

Estos dias estoy haciendo con el laser dibujos de siluetas (más exactamente caras), pero no son nada fáciles de vectorizar, y el resultado final son programas con miles de lineas, eso si.....cada linea de apenas decimas de mm.

El problema con estos tipos de programas, es que la maquina se pasa más tiempo comunicándose entre arduino y PC que moviéndose, aunque ya tengo la velocidad del puerto a 57600 (a 115200 no lo puedo poner pues se cuelga el programa al cabo de un rato), me gustaría saber si es posible poner un cuadro de texto en la configuración, donde indicar el numero de instrucciones seguidas a leer-ejecutar, es decir, en vez de leer una instrucción, enviarla, ejecutarla y esperar el OK, leer PAQUETES de instrucciones.

De esta forma se reduciría mucho el tiempo de ejecución de los programas, a cambio de sacrificar un poco la seguridad de confirmar que cada movimiento se ha realizado correctamente.

No se como lo veis, y sobro todo NGC el curro que puede dar, pues imagino que es un cambio importante tanto a nivel de diseño del programa como del firmware..... :-X :-X

soko

  • Usuario de CNCs
  • ***
  • Mensajes: 1504
  • Karma: +13/-0
    • Ver Perfil
  • Ubicación: Valladolid
Re:Opción de lectura de instrucciones por paquetes
« Respuesta #1 en: Junio 03, 2014, 11:34:47 am »
Para que se vea más claro el objetivo final voy a poner un ejemplo de lo que estoy intentando hacer...que yo creo que queda bastante chulo  :D :D

Adjunto dos imagenes de un par de caras ya cortadas en goma eva negra de 2 mm:





El archivo NGC son unas 15.000 lineas y se tarda en cortar mas o menos una horita, pero calculo que sin las pausas de lectura escritura se puede quedar en la mitad......pero para cosillas mas complicadas (tengo algun programa de cerca del medio millon de lineas  :bouah: :bouah:) se puede ahorrar mucho tiempo.

Miguel75

  • Aprendiz
  • **
  • Mensajes: 922
  • Karma: +13/-0
    • Ver Perfil
    • LáserFoamy
  • Ubicación: Estepona
Re:Opción de lectura de instrucciones por paquetes
« Respuesta #2 en: Junio 03, 2014, 12:22:41 pm »
Una chulada soko, ahora entiendo que querías hacer con los programas de vectorizado  :D quedan geniales. Antes de comentar tu propuesta un apunte, exigimos vídeos a todo el mundo... ¿donde está el tuyo para ver como trabaja esa máquina?... ya te lo puedes ir poniendo en la agenda de cosas urgentes   :(

Tu idea es buena, cierto que para cosas tan pequeñas y tan numerosas pierde mucho tiempo con los "ve allí... has llegado ya?... sí!, vale pues ahora ve a este otro lugar", la carita que yo hice en grabado (la del tutorial de grabar imágenes) fue una hora para un dibujo de 17x15mm, sin las confirmaciones me imagino que se hubiera reducido drásticamente.
Solo le veo una pega, que tendrá que descartar o confirmarla ngc, y es que pasaría con poder hacer una pausa desde el programa o el botón de emergencia, si le mandamos un lote de ordenes, se supone que arduino no atendrá al programa mientras las esté procesando ¿perderíamos esas dos funciones?.
Imagino que la del botón de emergencia no se perdería, ya que se comporta como un final de carrera, la pausa seguramente si... que tampoco es que la use mucho.

Resumiendo, me gusta tu idea. A ver que dice ngc.

ngc1300

  • Administrador
  • Usuario de CNCs
  • *****
  • Mensajes: 2896
  • Karma: +46/-2
    • Ver Perfil
    • cncControl
  • Ubicación: Terrassa
Re:Opción de lectura de instrucciones por paquetes
« Respuesta #3 en: Junio 03, 2014, 12:56:29 pm »
Lo primero, vaya cosas chulas que haces soko, opino como miguel necesitamos un video tutorial de como lo haces.

En cuanto a la mejora aunque no la descarto, creo que el problema viene de otro sitio, yo he mecanizado relieves con artcan que también crea miles de lineas, y no he notado pausas, es mas es uno de los motivos que me animo a hacer el programa ya que cuando usaba el de txapuzas si que las notaba, revisare tanto el programa como el firmware a ver si no se ha colado algo en las últimas versiones que haya bajado el rendimiento, siempre en las pruebas que hago el tiempo de comunicación me ha parecido asumible incluso a 19200. Déjame que me lo revise todo con el arduino nano que me acaba de llegar.

Miguel en principio esas funciones no se perderían, si se hace esa modificación, pero la complicación del firmware seria mayor, dejarme hacer algunas pruebas y os digo algo.

Un saludo.


soko

  • Usuario de CNCs
  • ***
  • Mensajes: 1504
  • Karma: +13/-0
    • Ver Perfil
  • Ubicación: Valladolid
Re:Opción de lectura de instrucciones por paquetes
« Respuesta #4 en: Junio 03, 2014, 01:07:38 pm »
Primero muchas gracias!!!! Por supuesto que preparare un tutorial si os gusta y un video de la maquina funcionando en breve, estaba esperando a tener las primeras pruebas bien terminadas, y aún estoy con ajustes en la maquina  :secreto:

El tema de la pausa no lo veo un problema, pues primero es una funcion que yo no uso casi nunca, y segundo imagino que dara igual que haga la pausa instantanea que despues de 1 o 2sg que tarde en hacer el paquete de lineas (en mi caso al ser microlineas no tardaría casi nada) el tema del boton de emergencia (que yo tampoco uso) si lo veo mas importante pero creo que podria funcionar igual al tratarse como una interrupción (desde mi ignorancia).

NGC si te ha llegado el nano y haces las pruebas genial, y sino ya me tienes a mi para probar lo que quieras y no hace falta que andes montando nada, como quieras  :D

He probado en dos ordenadores uno portatil y otro de sobremesa y en ambos se pierde mucho tiempo entre lectura-ejecución-ok




ngc1300

  • Administrador
  • Usuario de CNCs
  • *****
  • Mensajes: 2896
  • Karma: +46/-2
    • Ver Perfil
    • cncControl
  • Ubicación: Terrassa
Re:Opción de lectura de instrucciones por paquetes
« Respuesta #5 en: Junio 03, 2014, 02:57:35 pm »
He hecho unas pruebas a mandar un bloque de 57 ordenes M115, M114, y M105 incluyendo el tiempo de proceso del arduino de dichas instrucciones y incluyendo el tiempo de proceso del programa me ha salido una media de 44.491 mili segundos por instruccion, con lo que el tiempo de comunicación es inferior a esos 44 mili segundos, seguramente que es muy inferior ya que las 3 ordenes usan comunicaciones con el arduino.

Si usamos una orden que no use comunicaciones como por ejemplo G92 y ejecuto 57 ordenes G92 el tiempo de proceso del arduino podríamos asumir que es nulo ya que es del orden de los nano segundos, y el tiempo del programa también lo es, el tiempo de media que nos da para esas 57 ordenes es de 16.087 mili segundos por instrucción, con lo que esto si nos da una idea mas clara de cual es el tiempo de comunicación desde que se manda una orden, la procesa el arduino y la recibe el programa.

Si hacemos el mismo ejemplo pero con ordenes G0 por ejemplo G0 X1 Y1 Z1 y G0 X0 Y0 Z0 y intercalamos un M105 el tiempo de ejecución de ejecutar las 57 ordenes (teniendo en cuenta los tiempo de proceso tanto del arduino como del programa) es de media 361.263 mili segundos por instrucción.

Como vemos en el ultimo ejemplo el tiempo es muy superior en el 3 caso una vez que intervienen los motores, pero si nos atenemos al ejemplo 2 el tiempo de comunicación es el mismo 16 mili segundos con lo que tenemos que durante 345 mili segundos los motores se están moviendo aunque no nos lo parezca.

Si tenemos en cuenta que el tiempo de comunicación es de 16 mili segundos en un archivo de 15000 lineas el tiempo empleado para comunicar el arduino es de 241 segundos o lo que es lo mismo 4.02 minutos.

Creo que hay que mirarse bien los parámetros de aceleración y ver que es lo que pasa con los motores, pero como te decía en un post anterior yo cuando freso relieves no noto ninguna pausa entre instrucción e instrucción.

Mándame uno de los archivos y hago las pruebas con el a ver como se comporta.

Un saludo.

ngc1300

  • Administrador
  • Usuario de CNCs
  • *****
  • Mensajes: 2896
  • Karma: +46/-2
    • Ver Perfil
    • cncControl
  • Ubicación: Terrassa
Re:Opción de lectura de instrucciones por paquetes
« Respuesta #6 en: Junio 03, 2014, 03:19:08 pm »
Se me olvido comentar que las pruebas están hechas a 19200 de velocidad de conexión, aunque con los pocos datos que se envían no habrá mucha diferencia entre las distintas velocidades que hay.

soko

  • Usuario de CNCs
  • ***
  • Mensajes: 1504
  • Karma: +13/-0
    • Ver Perfil
  • Ubicación: Valladolid
Re:Opción de lectura de instrucciones por paquetes
« Respuesta #7 en: Junio 03, 2014, 03:56:35 pm »
Te he dejado NGC por privado tres ejemplos y la explicación de los tres tipos.

Desde luego mejor que tu nadie para saber realmente lo que se tarda, jejejeee eso son datos exactos  :D

Tambien es cierto que al menos en el 99% de los comandos (en mi caso) son G0-G1-G2-G3  y siempre mueven motores que es lo que mas retraso genera.

Si me dices como medir tiempos exactamente, hago yo la prueba con un archivo "test" y vemos la diferencia.

Por supuesto si hablamos de nanosg, ni te molestes en cambiar nada, pero yo tengo la sensación de que en mi PC son decimas de sg  :booom: :booom: :booom:

ngc1300

  • Administrador
  • Usuario de CNCs
  • *****
  • Mensajes: 2896
  • Karma: +46/-2
    • Ver Perfil
    • cncControl
  • Ubicación: Terrassa
Re:Opción de lectura de instrucciones por paquetes
« Respuesta #8 en: Junio 03, 2014, 07:53:18 pm »
He hecho una simulación con las 100 primeras lineas del archivo "D&P_7.Parte1 [Grabar1]".

Lo que es puramente comunicación no la he podido aislar del todo sin escribir bastante código, con lo que cuando digo "comunicación" es el tiempo que tarda el programa en mandar el dato al arduino, el tiempo que tarda el arduino en recibirlo y el tiempo que tarda el programa en procesar los datos recibidos por el arduino, mas adelante extraeré esa información.

Los resultados son que en la "comunicación"  aproximadamente tarda unos 41 mili segundos por instrucción. Con lo que da un total de unos 10 minutos de "comunicación" en un archivo que tarda algo mas de 3 horas aproximadamente en ejecutarse.

Aquí tienes un PDF donde se ven los datos, están las 100 primeras lineas del archivo y lo que tarda el arduino en procesar la información.

https://drive.google.com/file/d/0B6wMjiu3cbkyTTRzU1otR1NiZlE/edit?usp=sharing

Tiempo total proceso es lo que tarda en ejecutarse la 100 lineas y es el tiempo de final - tiempo de comienzo
Tiempo total movimiento = es la suma de todos los tiempos de las 100 lineas
Tiempo total comunicación = es la resta entre el tiempo total de proceso menos tiempo total movimiento
Tiempo comunicación por instrucción = es el tiempo total comunicación / 100 lineas
Tiempo comunicación total archivo = es el tiempo total de la comunicación de todo el archivo 14454
« Última modificación: Junio 03, 2014, 07:55:27 pm por ngc1300 »

soko

  • Usuario de CNCs
  • ***
  • Mensajes: 1504
  • Karma: +13/-0
    • Ver Perfil
  • Ubicación: Valladolid
Re:Opción de lectura de instrucciones por paquetes
« Respuesta #9 en: Junio 03, 2014, 09:48:51 pm »
Vale lo acabo de ver un poco por encima pero esta noche lo estudio con calma. Gracias, mas detallado imposible  :)

De todas formas 9,9 minutos en un proceso de 3 horas es mas o menos un 6% del tiempo que le pasa en comunicación, no es excesivo tampoco. Claro que estamos en lo de siempre, que si no lleva mucho curro......para cuando te sobre el tiempo en la version 5 o 6...... jejejee!!!!! ;) ;)


soko

  • Usuario de CNCs
  • ***
  • Mensajes: 1504
  • Karma: +13/-0
    • Ver Perfil
  • Ubicación: Valladolid
Re:Opción de lectura de instrucciones por paquetes
« Respuesta #10 en: Junio 05, 2014, 06:13:31 pm »
Bueno, pues por lo que veo en el PDF, los tiempos no son tan exagerados, yo tenia en mente comunicación de nanosg y me parecía mucho el tiempo real que tardaba, pero claro no tenía en cuenta las miles o cientos de miles de lineas que forman un programa.

Ya el tema de realizar la mejora o no, como tu veas, desde luego por mi parte, si en vez de tardar 3h, tarda 3h 4min, lo mismo me da, y si dices que hay que modificar mucho en programa y firmware......pues más razón para dejarlo como esta, que funciona muy bien  :D

ngc1300

  • Administrador
  • Usuario de CNCs
  • *****
  • Mensajes: 2896
  • Karma: +46/-2
    • Ver Perfil
    • cncControl
  • Ubicación: Terrassa
Re:Opción de lectura de instrucciones por paquetes
« Respuesta #11 en: Junio 05, 2014, 08:55:50 pm »
Cuando tenga todas las mejoras pendientes haré una simulación a ver si se gana algo, de todas formas mirare a ver si encuentro alguna cosa para intentar mejorarlo aunque ya estamos en el limite del arduino

soko

  • Usuario de CNCs
  • ***
  • Mensajes: 1504
  • Karma: +13/-0
    • Ver Perfil
  • Ubicación: Valladolid
Re:Opción de lectura de instrucciones por paquetes
« Respuesta #12 en: Junio 05, 2014, 09:36:54 pm »
Nada, nada, en cuanto tengas algo programado de la nueva versión nos vas diciendo y vamos probando, que ya hay ganas  ;D ;D ;D ;D......aunque con todas las mejoras que te hemos pedido......... :-X :-X :-X  creo que vamos a tardar en ver CNCControl 2.3

ngc1300

  • Administrador
  • Usuario de CNCs
  • *****
  • Mensajes: 2896
  • Karma: +46/-2
    • Ver Perfil
    • cncControl
  • Ubicación: Terrassa
Re:Opción de lectura de instrucciones por paquetes
« Respuesta #13 en: Junio 05, 2014, 10:03:09 pm »
No tanto, pero hasta que no termine la maquina no empezare con la verdion 2.3

soko

  • Usuario de CNCs
  • ***
  • Mensajes: 1504
  • Karma: +13/-0
    • Ver Perfil
  • Ubicación: Valladolid
Re:Opción de lectura de instrucciones por paquetes
« Respuesta #14 en: Junio 05, 2014, 11:51:07 pm »
Cachis.......pasame el telefono de los transportistas de las correas que les pongo las pilas, jejee!!!!!!!!!!!! ]>-) ]>-)

Normal, si no hay prisa ninguna, todo lo que se pueda mejorar cuando sea.......bienvenido!!!!!!