Capítulo 2 Programación de la interfaz gráfica de control en la computadora
2.3. Diseño y estructura del software de la interfaz gráfica
2.3.3. Interpretación y decodificación de coordenadas del archivo NC Drill
Para la interpretación y decodificación del archivo NC Drill con el fin de obtener las coordenadas de desplazamiento, y así mover el taladro de perforación de la máquina, se utilizan Instrucciones de selección simple if, estas instrucciones están dentro del método manejador de eventos, con el nombre de control button_Ejecutar, y el nombre de evento _Click.
Cada vez que se lee el archivo y se encuentra el código T#, es indicio de un bloque de coordenadas para esa herramienta de perforación. El número (#) seguido del código T, selecciona del arreglo de brocas, (que se obtiene en el Método tipos de brocas explicado anteriormente), el dato del diámetro de la broca en cuestión, y visualiza este dato junto con el número asignado, en las cajas de texto en la interfaz gráfica, marcadas como Tipo y Diámetro.
Al llevar a cabo la lectura del archivo NC Drill y lo que se logra con estas instrucciones de selección, es juntar siempre parejas de coordenadas X y Y, para que se tengan listas al mandarse al Método XY, y de ésta a la interfaz de la máquina, y no esperar primero en mandar una coordenada y realizar operaciones y después mandar la otra.
Primeramente se buscan las variables de la coordenadas X y Y, en la línea de texto del archivo leído, y se guarda esta lectura en la variable línea, si se encuentran ambas o sólo una de ellas, aun así, se les asigna el número de la posición donde se encuentra la variable dentro de la línea leída, y esto es, cada vez que vuelva a leer el archivo, en el bucle While. Para agrupar parejas de coordenadas, se dan tres casos:
1. En el caso de que vengan juntas en la misma línea de texto, que es la forma en que aparecen después de cada código T, se envían las posiciones de ambas variables X y Y, al método XY únicamente.
2. Si se encuentra la variable X únicamente, a la variable línea que solo contiene el dato de la coordenada X, se le suma la misma variable línea, más una variable (valCadenaY) que se almacena anteriormente después del bucle con la cadena del dato de la pareja faltante, en este caso Y. Seguidamente se envían las posiciones de ambas variables al método XY.
3. Si se encuentra la variable Y únicamente, a la variable línea que solo contiene el dato de la coordenada Y, se le suma una variable (valCadenaX) que se almacena anteriormente después del bucle con la cadena del dato de la pareja faltante, en este caso X, más la misma variable línea. Posteriormente se envían las posiciones de ambas variables al método XY.
38 Interpretación y decodificación de coordenadas del archivo NC Drill
Se observa que en los casos 2 y 3, se acomoda la variable línea con los datos de la coordenada de la misma forma que el caso 1 en parejas, primero X y luego Y, de la siguiente manera: X003Y003. Ver código 2-6 y diagrama 2-8.
while (encabezado == "%") {
linea = flujoEntrada.ReadLine();//Cada vez que lee, salta una línea ...
nT = linea.IndexOf("T"); // Busca y da posición, si no la encuentra da -1 nX = linea.IndexOf("X");
nY = linea.IndexOf("Y"); if (nT == -1)
{
Línea.Text = linea; //Solo para mostrar coordenadas }
if (nT != -1) //Con nT = 1, encontró información de broca {
Tipo.Text = linea;
numBroc = Convert.ToInt32(linea.Substring(2, 1)); //Obtiene numero de broca
//T01, 1<--
Diametro.Text = brocas[numBroc]; //Muestra el diámetro del arreglo
}
if (nX != -1 && nY != -1) //La línea contiene a X y Y {
MetodoXY(); //Contiene posiciones nX y nY }
if (nX != -1 && nY == -1 && nT == -1) //La línea contiene a X {
linea = linea + valCadenaY;
nX = linea.IndexOf("X"); //Nuevamente envío posiciones nX y nY nY = linea.IndexOf("Y"); //Para el MetodoXY
MetodoXY(); }
if (nY != -1 && nX == -1 && nT == -1) //La línea contiene a Y {
linea = valCadenaX + linea;
nX = linea.IndexOf("X"); //Nuevamente envío posiciones nX y nY nY = linea.IndexOf("Y"); //Para el MetodoXY
MetodoXY(); }
}
Programación de la interfaz gráfica de control en la computadora
39 Interpretación y decodificación de coordenadas del archivo NC Drill
Diagrama 2-8 Interpretación y decodificación de coordenadas del archivo NC Drill
Si No
Leer Archivo
Visualizar Tipo y Diámetro de herramienta de perforación No línea = T Si línea = X Si No
línea = línea más cadena Y Posición de X y Y Interpretación y decodificación de
coordenadas del archivo NC Drill
Localizar T, X y Y
línea = X y Y
No
línea = Y
Posición de X y Y
línea = cadena X más línea Posición de X y Y Si
40 Método XY
2.3.3.1.
Método XY
El método XY, recibe la posición de las variables de la coordenadas X y Y, y la variable línea que se obtiene cada vez que se lee el archivo. A la variable línea, se le cuenta el número de literales que contenga y se guarda en una variable llamada longXY, esto para poder leer el valor de las coordenadas X y Y. El valor de las coordenadas se obtiene de la cadena del texto de la variable línea, con los datos que recibe el Método XY, de la siguiente manera:
1. Para extraer el valor de la coordenada X, se usa la posición de las variables X y Y, y dos posiciones (A, B) para el método de extracción de cadenas Substring, donde A es igual a la posición de la variable X más uno, y B, es igual a la posición de la variable Y menos uno.
2. El valor de la coordenada Y, también requiere de las posiciones de las variables X y Y, y dos posiciones (A, B), siendo que para A es igual a la posición de la variable Y más uno, y B, es igual a longXY menos la posición de la variable y menos uno.
En este método se crean las cadenas, tanto para X como para Y, para completar las parejas de coordenadas que se utilizan en el método Interpretación y decodificación de coordenadas del archivo NC Drill. Para la cadena X, llamada valCadenaX, se utilizan las posiciones de las variables X y Y, y para la cadena Y, llamada valCadenaY se utiliza la posición de Y y lonXY.
El siguiente paso es, que el valor de coordenada tanto como para X como para Y, tengan valores con cifras máximo de cinco dígitos (como se menciona en el apartado 2.2 Preparación del archivo NC Drill) y valores enteros, realizándose esto tomando la longitud de la palabra del valor de la coordenada, el valor máximo de dignos y enviar estos datos, al método que complete las cifras, llamado MetodoAcompletar.
Una vez obtenidas las cifras, se pasan estos valores a número de pasos a desplazarse en las variables npapX y npapY, es decir, estas cifras son los desplazamientos que la máquina mueve al taladro, pero se realizan en pasos de 25, las cifras son múltiplos de 25, 25 son para movimientos de 25 milésimas de pulgada en la máquina, tal como se menciona en el mismo apartado 2.2.
Las variables npapX y npapY, la variable de control Ctrl_ent, así como las indicaciones visuales de control mencionadas en el Método terminar XY, son manejadas en el método salida de datos, y que los método terminar XY y el método XY ambas utilizan. Este método se observa en el código 2-7 y diagrama 2-9.
Programación de la interfaz gráfica de control en la computadora
41 Método XY
Línea.Text = linea;
longXY = Convert.ToInt32(linea.Length); //Longitud de la línea
valX = linea.Substring(nX + 1, nY - 1); //Obtiene valor de coordenada valY = linea.Substring(nY + 1, longXY - nY - 1);
ValorX.Text = valX; ValorY.Text = valY;
valCadenaX = linea.Substring(nX, nY); //Para la siguiente cadena X o Y solas valCadenaY = linea.Substring(nY, longXY - nY);
longval = Convert.ToInt32(valX.Length); //Ve la longitud longval = 5 - longval;
valAcomX = MetodoAcompletar(valX, longval); intvalX = Convert.ToInt32(valAcomX);
ValorRealX.Text = Convert.ToString(intvalX); npapX = intvalX / 25;
NpapX.Text = Convert.ToString(npapX);
longval = Convert.ToInt32(valY.Length); //Ve la longitud longval = 5 - longval;
valAcomY = MetodoAcompletar(valY, longval); intvalY = Convert.ToInt32(valAcomY);
ValorRealY.Text = Convert.ToString(intvalY); npapY = intvalY / 25;
NpapY.Text = Convert.ToString(npapY); Ctrl_ent = 0;
Código 2-7 Método XY
Diagrama 2-9 Método XY
Longitud de línea en longXY Método XY
Extraer valX, valY y visualizar
Cadenas para completar parejas de coordenadas
valCadenaX y valCadenaY
M
Obtener cifras enteras intvalX y intvalY
y visualizar M
Obtener número de pasos X y Y NpapX y NpapY
y visualizar
Método salida de datos Método completar
42 Método salida de datos
2.3.3.2.
Método salida de datos
Para poder enviar la información con el software de la interfaz gráfica a la interfaz de la máquina, se utiliza una clase llamada EasyHID, (explicada en el método Comunicación USB, PC con la interface de la máquina) que contiene las funciones de control para el control de dispositivos USB mediante protocolo HID, una constante entera BUFFER_OUT_SIZE y BufferSalida para el reporte de salida, así como un parámetro constante llamado controlador, que se refiere al controlador de salida, el cual se activa cuando el dispositivo está conectado al host.
La secuencia para enviar la información es colocar la información, en el arreglo BufferSalida de la siguiente manera: mandar el endpoint del control del bus, el cual es el cero, el comando de control y el dato, siendo estos tres datos el reporte de salida. El comando de control puede ser para el control de número de pasos en X o Y, o también para el control del led que se requiera encender en la máquina. Este método terminar XY, se muestra en el código 2-8 y diagrama 2-10.
byte[] BufferSalida = new byte[EasyHID.BUFFER_OUT_SIZE]; BufferSalida[0] = 0; //Report ID
BufferSalida[1] = 0x0B; //Comando de control para X BufferSalida[3] = Convert.ToByte(npapX); //Dato numero de pasos X EasyHID.Write(controlador, BufferSalida); //Envía los datos
BufferSalida[0] = 0; //Report ID
BufferSalida[1] = 0x0C; //Comando de control para Y BufferSalida[4] = Convert.ToByte(npapY); //Dato numero de pasos Y EasyHID.Write(controlador, BufferSalida); //Envía los datos
BufferSalida[0] = 0; //Report ID
BufferSalida[1] = 0x0A; //Comando de control para indicadores BufferSalida[2] = 0x20; //Dato de control para el led rojo EasyHID.Write(controlador, BufferSalida); //Envía los datos
while (Ctrl_ent == 0) //Espera {
... }
BufferSalida[0] = 0; //Report ID
BufferSalida[1] = 0x0A; //Comando de control para indicadores BufferSalida[2] = 0x10; //Dato de control para el led verde EasyHID.Write(controlador, BufferSalida); //Envía los datos
Programación de la interfaz gráfica de control en la computadora
43 Método completar
Diagrama 2-10 Método salida de datos
2.3.3.3.
Método completar
El método completar recibe del método XY, dos datos, la cadena del valor X o Y llamada variable val, y el valor entero de ceros faltantes de cada cadena llamada variable lval, y retorna el valor de la cadena, ya con los ceros faltantes agregados, como lo muestra el ejemplo de la figura 2.4 (vista de la interfaz gráfica), pasando de la caja de texto Separación, a la de Coordenadas, siendo estos valores con cifras de cinco dígitos, como se menciona en el método XY.
Si el valor de los ceros faltantes es cero, la cadena retornada es tal cual. El método completar, retorna una cadena de texto, el método XY el cual recibe la cadena, se encarga de convertir esta cadena a un valor entero, siendo posible enviar este valor a la interfaz de la máquina. El método se muestra en el código 2-9 y diagrama 2-11.
Método salida de datos
Buffer de salida control XY, datos NpapX y NpapY
Buffer de salida control indicador y dato led rojo
Método entrada de datos
No
Ctrl_ent = 0
Si
Buffer de salida control indicador y dato led verde
44 Método completar
private string MetodoAcompletar(string val, int lval) {
if (lval == 1){val = val + "0";} if (lval == 2){val = val + "00";} if (lval == 3){val = val + "000";} if (lval == 4){val = val + "0000";} return val;
}
Código 2-9 Método completar
Diagrama 2-11 Método completar
Método completar
Recibe cadena y valor entero val y lval Retorna val lval = 1 No Si lval = 2 No Si lval = 3 No Si lval = 4 No Si
val = val más un cero
val = val más dos ceros
val = val más tres ceros
Programación de la interfaz gráfica de control en la computadora
45 Comunicación USB, PC con la interface de la máquina