Tutoriales de Electrónica Básica
TUTORIAL DE CNC:

Aquí comenzamos una nueva sección de la web, pensaba inaugurar otra dedicada exclusivamente a este tema, pero bueno, luego veremos si es necesario o no, por lo pronto aquí queda instalada.

CNC - PROGRAMACION (Parte IV) - Los Archivos PLT

La mayoría de los archivos PLT, al menos los que yo hice y los que conseguí de la web, tienen la misma estructura, me refiero más que nada al encabezado, que es muy similar en todos ellos, siempre teniendo en cuenta que las coordenadas deben estar en modo Absoluto, por supuesto.

A pesar de que en la sección de códigos para CNC ya hablamos bastante de este tema, lo que nos interesa aquí es cómo realizar la lectura de esos archivos, así que... lo que haremos será tomar nuevamente un ejemplo de ese código para estudiarlo, y suponiendo que ya hemos visto varios y los hemos comparado, nos aventuramos a ordenarlos.

La intención de hacer este ordenamiento es con la idea de facilitarle la lectura del código al programa principal de la máquina (el programa de control) es decir, le vamos a quitar todo lo que según nosotros está demás, esto dará como resultado mayor velocidad de lectura, mayor velocidad de desplazamiento, menor utilización de recursos de la PC, y una que otra cosita más. Para hacerlo deberemos tener en cuenta cuáles serán las instrucciones que reconocerá nuestra máquina, y cuáles no, para así eliminarlas de nuestra lista total de instrucciones.

Las que yo tomé son muy pocas, y son las listadas a continuación

COMANDODESCRIPCION
PAAbsolute Position (Posicionamiento Absoluto): En algunos casos, especialmente al iniciar el código suele presentarse esta instrucción, para comenzar a graficar, así que nos puede ser de utilidad
PUPen-Up (Subir el Lápiz): Puede que sea un lápiz (cuando lo convierta en un Plotter) o puede que sea un Mini-Taladro, así que para no entrar en detalles lo llamaremos Herramienta de Trazado, o simplemente Herramienta, Entonces será "Subir la Herramienta"
PDPen-Down: (Bajar el Lápiz): Para nosotros, Bajar la Herramienta
LTLine-Type (Tipo de Línea): En realidad no será de mucha importancia, ya que el tipo de línea que se utiliza por lo general es continua, ahora que.. si el gráfico incluye otro tipo de línea, tendremos problemas. Lo importante en nuestro programa es que marca el inicio del trazado de la imagen.
SPSelect-Pen (Selección de lápiz): Bueno, esta instrucción no está implementada en nuestra máquina, pero nos puede servir para saber en qué momento terminó de trazar, ya que lo vi al final de código en la mayoría de los archivos PLT.

Veamos cómo viene el inicio de un archivo PLT, y cuáles son los bloques que hay que quitar...

.(;.I81;;17:.N;19:IN;SC;PU;RO0;IP;IW;VS15;VS15;VS15;VS15;VS15;VS15;SP1; PU;PA0,0;SP1;LT;PA53,421;PDPA53,397,77,372,125,372,174,397,174,469 ...etc., etc., etc.

y cuando termina el archivo aparece...

UPA2645,445;PDPA2645,348,2621,58;PUPA2548,445;PDPA2596,445;PU;PA0,0;SP;

Estos archivos están escritos en una sola línea de código, no existe un retorno de carro, no, nada de eso, es una sola línea, lo que yo tomé es el inicio y el final de uno de estos archivos para que lo podamos estudiar, así que, aquí vamos...

Lo que está en verde, la verdad es que no sé de qué se trata, una que otra cosa entiendo y del resto no tengo la más pálida idea, pero hay algo muy curioso después de eso, los dos bloques que siguen PU;PA0,0; que mira como es esta vida, resulta que da la casualidad que se repiten al final del código, y tiene que ser así, ya que la máquina debe saber cuál será el punto de origen (coordenada 0,0) además ese será el punto de referencia principal y todos los otros desplazamientos estarán referidos a ese punto, y Por qué al final...?, bueno, porque la máquina debe volver al punto de origen una vez termine de trazar.

Si lo vemos con más detalle PU es levantar la herramienta, y PA0,0 desplazarse al punto Cero, que bien podría resumirse en un sólo bloque, mira...

PU0,0;

De acuerdo, esto será obligatorio tenerlo al comienzo y al final de nuestro código.

El bloque que sigue es SP1; en realidad este bloque no tiene importancia, ya que estamos trabajando con una sola herramienta, por lo tanto será ignorado, mientras que el último SP; por lo que se ve, selecciona la herramienta que está configurada por defecto, de tal modo que se asegura que siempre será esa la herramienta con la que comience sus trazados, a este último lo vamos a dejar, para que cuando lo leamos, sepamos que ya terminó el código, podríamos reemplazarlo por un END o algo parecido no crees..., bueno, por ahora lo dejaremos tal como está.

Y apareció un bloque más LT; que no es tan importante, ya que el tipo de línea será siempre llena, es decir siempre será LT; pero es importante tenerlo en cuenta ya que a partir de ahora comenzarán los desplazamientos

Y comenzamos con PA53,421;, como ya saben PA es Posicionamiento Absoluto, sólo debe desplazarse a ese punto (53,421), sin subir ni bajar la herramienta de trazado, así, tal como está.

De ahora en más no volverá a aparecer un bloque PA solo, sino acompañado de una instrucción PU o PD, tal como se ve en el resto del código, bueno la verdad es que sí aparece, pero al final (esto ya está previsto).

Otra observación importante, es que un bloque que tenga como instrucción PU, no aparecerá nunca como uno PD que suele venir con quinientas mil coordenadas en un solo bloque, y esto se debe a que ninguna máquina se la pasará paseando por la superficie de trabajo al divino gas (sin hacer ningún trazado), se supone que está destinada a trabajar y no a andar de juerga por allí, no es como nosotros, jejeje... Bueno, vamos a comenzar con nuestro primer programa...

Programa "Decode":

Bautizado por mis chicos, Definamos lo que debemos hacer para organizar todo este lío, porque a la hora de programar suelen aparecer cosas inesperadas o que no las tuvimos en cuenta, así que nada mejor que un diagrama para aclararnos las dudas...

Algoritmo del decodificador de archivos plt

A pesar de que el diagrama parece muy enredado y extenso, no lo es, es muy sencillito, mira...

Primero cargas todo el código en una variable, la verdad es que desconozco la longitud máxima de caracteres que se puede almacenar en una variable de tipo String, no estaría mal consultarlo, verdad...? Luego buscas la instrucción LT; la función que nos permite hallarla es...

InStrRev(líneaReg, "LT")

Esta función devuelve la posición de "L" en realidad, lo que hace es buscar en la variable líneaReg (Variable que contiene nuestro código) los caracteres LT, una vez lo encuentra, devuelve la posición del caracter anterior a L, esa posición la podría guardar en una variable, por ejemplo "ini", pero si recuerdas el bloque completo es LT; así que saltamos 2 caracteres más para pasar a las instrucciones que nos interesan, no es necesario hacer el salto ya que el resto será ignorado hasta encontrar una "P", nosotros lo hicimos para agilizar un poco el programa, en fin, entonces...

ini=ini+2

Necesitamos un List para almacenar cada bloque de instrucciones, y la primera instrucción que necesitamos es PU0,0, a pesar de que sabemos que la siguiente instrucción será PA, nos pueden aparecer sorpresas, así que aquí comienza la fiesta, y vamos a ir leyendo caracter por caracter, y a concatenarlo para armar cada bloque, recuerda que cada bloque termina en un ;

También es necesario conocer la longitud del código, para así leer hasta el último caracter, podría ser algo así...

Longitud=Len(líneaReg)

Como ini es la posición actual del caracter a leer, entonces podemos leer mientras ini<>Longitud

Ahora, si el caracter leído es distinto al ; se irá concatenando en otra variable en mi caso será en (PInstrucc), el primer caracter a concatenar será P, el segundo puede ser A, U o D.

Si PInstrucc="PA" comenzamos a concatenar sus números hasta el ;.
Si PInstrucc="PU" no me interesa y sigo concatenando
Si PInstrucc="PD" tampoco, pero sigo concatenando

Si es PInstrucc="PUPA" entonces sí, Hago PInstrucc="PU" y comienzo a concatenar sus valores hasta el ;

Si es PInstrucc="PDPA" hago lo mismo que antes, PInstrucc="PD" y comienzo a concatenar sus valores hasta el ; Lo curioso aquí, es que pueden haber muchas coordenadas en un solo bloque PD, entonces hay que separarlos de dos en dos, es decir...

Si encuentro la primera coma, la tendré en cuenta. Si encuentro la segunda, terminé con un bloque, lo cargo en el List y hago PInstrucc="" es decir, limpio mi variable para comenzar de nuevo, y como estoy en un bloque "PD" hago PInstrucc="PD", y a este le concatenaré otro par de números, y así hasta que me encuentre con un ;

Finalmente el último SP; será ignorado y cuando hayamos alcanzado la longitud total de la variable, lo que haremos será agregarle nuevamente SP;, como dije antes... podríamos haberle puesto un The End o algo parecido no...?, bueno, lo que ves es lo que hay... y por último, una imagen del programa...

Decodificador de Archivos PLT

Claro que en el código final del programa hay otras cosas más, como llamadas al cuadro de diálogo Abrir, Guardar Como, un arreglo para evitar que se modifique el tamaño del formulario, un par de Labels para mostrar la ubicación y nombre del archivo, la cantidad de líneas de instrucciones, el List con sus propiedades, la limpieza del List una vez guardado el archivo y otras insignificancias, que lo dejo para que las estudies...

Bien, a armarse de coraje y a ver que modificaciones más se le puede hacer, aquí queda...

Bajar Programa

Si te animas a continuar, te espero del otro lado, en la siguiente página...



R-Luis...