Linea de produccion mediante redes de petri correcciones2 wha

30
MODELADO Y GENERACION DE SEÑALES DE CONTROL PARA UNA LINEA DE PRODUCCION MEDIANTE REDES DE PETRI Investigación Seminario De 2013 Alumnos: Carlos Bazaldua Maldonado Diego Enrique Juárez Hernánd Martin Medellín Uriegas Edgar Omar García Sandoval Perla Isamar Torres Martínez Miguel Ángel García Wha Profesor: Ángel Dorantes Salazar Planteamiento Inicial

Transcript of Linea de produccion mediante redes de petri correcciones2 wha

Page 1: Linea de produccion mediante redes de petri correcciones2 wha

MODELADO Y GENERACION DE SEÑALES DE CONTROL PARA UNA LINEA DE PRODUCCION MEDIANTE REDES DE PETRI

Investigación

 

Seminario De

2013

Alumnos: Carlos Bazaldua MaldonadoDiego Enrique Juárez HernándezMartin Medellín UriegasEdgar Omar García SandovalPerla Isamar Torres MartínezMiguel Ángel García Wha

Profesor:Ángel Dorantes Salazar

Planteamiento Inicial

Page 2: Linea de produccion mediante redes de petri correcciones2 wha

MODELADO Y GENERACION DE SEÑALES DE CONTROL PARA UNA LINEA DE PRODUCCION MEDIANTE REDES DE PETRI

1 INTRODUCCIÓN

1.1 PLANTEAMIENTO DEL PROBLEMA

En ocasiones en las empresas, cuando se llega el momento de hacer un cambio, se piensa mucho en si es necesario realizarlo o no, actualizar sus componentes, crear nuevo software, comprar equipo, etc., todo es parte del cambio. Se tiene duda sobre este tema y hasta se teme el resultado que este pueda tener.

Muchas veces esta necesidad no es tan visible, porque hasta el momento la producción va en buen ritmo, se lleva una buena manera de hacer las cosas, pero se quiere avanzar y lograr más.

Existen varios factores que frenan esto, por ejemplo cuando se llegan a encariñan del personal y su forma de trabajar, prefiriendo el valor humano. Pero para incrementar la producción y reducir el margen de error, muchas veces es mejor tener un sistema automatizado de detección de fallas para las líneas de producción, esto realizaría la tarea más rápidamente y los errores que se cometerían serian mínimos a comparación del que sería con humanos.

Dicho esto, se pretende emplear un sistema de diagnóstico de fallas, el cual tendrá mayor precisión y flexibilidad cuando surgen eventos de fallas en líneas de producción, seleccionando una mayor calidad en los productos y/o materiales de las líneas de producción de las empresas.

En esta investigación veremos una alternativa para poder mejorar los tiempos y la calidad de producción haciendo uso de tecnologías actuales como controladores lógicos programables (PLCs), sensores y cámaras fotográficas, logrando con esto poder crear un filtro y una mejor selección de materiales que se transporten por la línea de producción, además modelar está utilizando el algoritmo de Redes de Petri.

Actualmente existen sistemas que pretenden mejorar el proceso de diagnóstico mediante varios métodos y técnicas computacionales, reduciendo el tiempo de respuesta a perturbaciones. Sin embargo, son pocas las propuestas que unifican modelos gráficos de conocimiento con las señales de un proceso que pueden ofrecer dispositivos como PLCs.

Page 3: Linea de produccion mediante redes de petri correcciones2 wha

1.2 OBJETIVOS

Modelar una línea de producción mediante Redes de Petri con la finalidad de generar programas que corran en controladores lógico programables (PLC’s), con un nulo o mínimo número de fallas, evitando así grandes gastos para las empresas al momento de realizar cambios en sus líneas de producción.

Se propone un método de modelado basado en redes de Petri para el diseño de un sistema de fabricación en líneas de producción, identificando fallas con el uso de distintos sensores.

Las redes de Petri permiten modelar diferentes conexiones entre eventos, mediante ellas se pueden modelar una gran variedad de sistemas, por ello se pretende modelar una línea de producción para controlar el ritmo de secuencia de la producción de un producto.

Se usaran controladores lógicos programables (PLC’s) ya que satisfacen las necesidades de automatización de sistemas de control de las líneas de producción, que necesitan distintos resultados en tiempo real.

1.2.1 OBJETIVO GENERAL

Modelar mediante el algoritmo de redes de Petri soluciones a las líneas de producción para la detección de fallas.

1.2.2 OBJETIVOS ESPECIFICOS

Determinar las implicaciones de modelar una línea de producción con el uso de redes de Petri. Identificar las ventajas y las desventajas de los métodos existentes de detección y prevención de

errores en líneas de producción. Se propondrán nuevos algoritmos o soluciones para resolver el error de minimizado de errores en

línea de producción.

1.3 JUSTIFICACIÓN

El diseño de un sistema de fabricación requiere técnicas de modelado y evaluación a fin de apoyar este proceso, para ello se propondrá un método de modelado basado en redes de Petri. Este método brindará la generación de código para PLC’s, con esto se pretende reducir las fallas en cambios en una línea de producción así como características predictivas de fallas.

Este método también evitará que se realicen grandes gastos a la industria de producción al momento de realizar cambios en sus líneas así como poder conocer el comportamiento de las mismas.

Page 4: Linea de produccion mediante redes de petri correcciones2 wha

Esto se logrará al analizar los datos de los productos que viajen a través de la banda transportadora y saber si aquel producto contiene una falla o no mediante el análisis con diversos sensores y el reconocimiento de patrones de imágenes tomadas con una cámara.

1.4 ALCANCES Y LIMITACIONES DE LA INVESTIGACIÓN

Se investigara acerca de algoritmos que actualmente ayudan a la detección de fallos, también acerca de la programación de controladores lógico programables (PLC’s), así como la detección de patrones en base a imágenes aplicándose todo lo anterior al diseño de un modelo de redes Petri para dar solución a la problemática planteada.

Las limitantes a las cuales nos enfrentamos son que en la metodología de la investigación no se encuentran muchos trabajos realizados previamente dificultando la investigación, por otra parte nos enfrentaremos a las limitantes de utilizar cámaras de laptops para hacer el desarrollo ya que no se cuenta con una cámara exclusiva para la línea de producción.

2 MARCO TEORICO

2.1 ANTECEDENTES DE LA INVESTIGACIÓN

Actualmente hay niveles de producción elevados en las empresas, pero también muchas pérdidas por el los errores generados en la producción. Estoy es algo grave ya que las pérdidas son un factor importante en la economía de la empresa, sin embargo la tecnología avanza cada vez más rápido al punto de proveer métodos para la mitigación de errores en la producción.

La actividad de producción en las distintas regiones del planeta es muy importante ya que cada vez las empresas implementan nuevas tecnologías para poder tener una mejora en la producción haciendo el mercado cada vez más competitivo [1].

Por ello se pretende llegar a detectar errores en la línea de producción, para la mejora de la producción y la reducción de los costos por pérdidas, que a su vez, se convierten en ganancias para las empresas que los poseen.

2.2 MARCO CONCEPTUAL Un Sistema de Eventos Discretos, SED, es un sistema de estados discretos dirigido por eventos, es decir, su evolución de estados depende únicamente de la ocurrencia de eventos discretos asíncronos en el tiempo (ver Fig. 1). [2] Las características típicas de los SED incluyen concurrencia, comportamiento asíncrono, selección no determinista, exclusión mutua, y restricciones de tiempo real.

Page 5: Linea de produccion mediante redes de petri correcciones2 wha

Uno de los campos de acción más fuerte, es el control automatizado de procesos, ya que se cuenta con una cantidad determinada de entradas y salidas que caracterizarán el sistema; adicionalmente, los SED se implementan sistemas tales como los de comunicaciones, de tráfico, de computación digital, de circuitos secuenciales, entre otros [3].

Fig. 1 Conjunto de partes inter-relacionadas de un evento discreto

Un modelo es una representación inteligible de un sistema. Cuando dos modelos representan la misma realidad a diferentes niveles de detalle o fidelidad, el modelo menos detallado se dice que es el modelo más abstracto. Los modelos se pueden clasificar desde distintos puntos vista (ver Fig. 2). [1]

Fig. 2 Tipos de modelos de un sistema discreto

Page 6: Linea de produccion mediante redes de petri correcciones2 wha

Un formalismo proporciona un conjunto de convenciones para especificar una clase de objetos con precisión y sin ambigüedades. En la literatura podemos encontrar numerosos formalismos (DEVS (Discrete Event System Specification), Statecharts, ACD, Redes de Petri, TTM/RTTL, CCS).

Las redes de Petri son un formalismo con herramienta gráfica y matemática de modelación que se puede aplicar en muchos sistemas. Particularmente son ideales para describir y estudiar sistemas que procesan información y con características concurrentes, asíncronas, distribuidas, paralelas, no determinísticas y/o estocásticas. Se dispone de una profunda base teórica desarrollada y, además, permiten una representación gráfica, lo cual hace que las especificaciones formuladas mediante redes de Petri sean bastante intuitivas [4].

Una línea de producción es un seguimiento de componentes discretos, que pasan de una estación de trabajo a otra a un ritmo controlado, siguiendo la secuencia requerida para la fabricación de un producto.

Mediante redes de Petri se pueden modelar una gran variedad de sistemas. Estas redes son idóneas para representar aquellos sistemas que tienen un comportamiento asíncrono, distribuido, paralelo y/o no deterministas. Las redes de Petri permiten reflejar la ejecución concurrente de distintos procesos, representar la disponibilidad de recursos, representar la imposición de restricciones de acceso a zonas compartidas, representar la evolución dinámica del sistema, representar la causalidad, los conflictos y las confusiones [5].

Los Controladores lógico programables (PLC) son utilizados en muchas industrias y máquinas. A diferencia de las computadoras de propósito general, el PLC está diseñado para múltiples señales de entrada y de salida, rangos de temperatura ampliados, inmunidad al ruido eléctrico y resistencia a la vibración y al impacto. Los programas para el control de funcionamiento de la máquina se suelen almacenar en baterías, copia de seguridad o en memorias no volátiles. Un PLC es un ejemplo de un sistema de tiempo real duro donde los resultados de salida deben ser producidos en respuesta a las condiciones de entrada dentro de un tiempo limitado, que de lo contrario no producirá el resultado deseado.

El PLC es el dispositivo ideal utilizado para el diseño de sistemas de control de las líneas de producción, contribuyendo con su automatización. La finalidad de dicha automatización es lograr niveles de producción elevados y la reducción de los costos por pérdidas, que a su vez, se convierten en ganancias para las empresas que los poseen [6].

Page 7: Linea de produccion mediante redes de petri correcciones2 wha

3 DESARROLLO

3.1 Descripción de desarrollo

En la parte de desarrollo del sistema a implementar con las redes de Petri primero que nada se realizo una pequeña prueba basándose en el programa C++ usando imágenes en una tarjeta madre con base para poder así detectar algunos puntos en una imagen y poder ver cómo se comporta la imagen checando cada uno de sus puntos detectando, sus bordes así como su forma normal y la partes que esta imagen de la tarjeta madre contiene (ver Fig. 3).

Utilizamos y realizamos pruebas en dicha imagen es por el motivo que la banda transportadora debe de detectar a través de sensores un producto u objeto que cada vez que pasa encima de la banda el sensor se activara y al hacerlo así podrá detectar dicho objeto capturando su imagen a través de la programación en este caso fue el código que se implementara a continuación parte por parte y como vayamos avanzando en el desarrollo de dicho programa se alcanzara a contemplar, el funcionamiento de la aplicación con el código en uso para que se pueda alcanzar a apreciar el resultado de detectar una imagen ya con los bordes y pixeles(ver Fig. 4).

Esta aplicación es hecha como aplicación de escritorio en la cual se usaron muchas variables y código para poder detectar lo que pasa con la imagen al momento de darle cambios en su textura como se llevo desde una imagen normal hasta ya con todo implementado.

Esta aplicación fue hecha en C++ para Pc de escritorio con el fin de poder manejarla más rápido y fácil al momento de ejecutarla en el manejo de imágenes. El Modelado de las piezas de la tarjeta madre fueron seleccionadas de tal forma que la imagen pueda ser visualizada de diferentes maneras y al final poder ser detectada con los ciclos anidados que se comentaran más adelante para finalizar en esta breve y general descripción del sistema de la banda transportadora (ver Fig. 5). Cabe mencionar que el desarrollo fue hecho y probado por todos muchos antecedentes sobre este método o uso de las variables o inclusive la detección de las imágenes en una tarjeta madre para detectar pixeles, bordes etc. Se ha implementado con anterioridad por diferentes personas en diferentes áreas y con el paso del tiempo ha ido evolucionando la detección de imágenes a través de diferentes programas y con diferentes códigos pero tomando el mismo rumbo o camino hacia el objetivo que es detectar la imagen.

Page 8: Linea de produccion mediante redes de petri correcciones2 wha

Fig. 3 Imagen de la “MotherBoard” la cual se le detectara los bordes, pixeles al igual que se le agregara lo necesario para poder detectarla usando cada uno de los algoritmos de petri así como también se podrá

implementar la imagen en la visualización dentro la aplicación de escritorio y así usar esta aplicación dentro del sensor.

Fig.4 Imagen de la “MotherBoard Characteristics” donde se detectan cada uno de los componentes que contiene esta tarjeta madre al igual que se puede apreciar su base esto solo pretende con la imagen

“MotherBoard” identificar sus partes o características para el dado caso que no se entienda como funciona la imagen o alguna otra causa que luego pueda surgir a futuro en el desarrollo.

Page 9: Linea de produccion mediante redes de petri correcciones2 wha

Fig. 5 Imagen final la “MotherBoard edges and pixeles detected ” donde la imagen “MotherBoard” paso a ser una imagen con todos los puntos detectados como bordes, pixeles, y colores ya agregados a dicha imagen

arrojando el resultado de la imagen que fue detectada por los puntos de los bordes de la imagen “MotherBoard”.

3.2 DESCRIPCIÓN DE FUNCIONAMIENTO DEL SISTEMA

A continuación de hará una descripción del funcionamiento del sistema el cual se ira detallando paso por paso denotando parte del código fuente.

La pantalla de la aplicación al ejecutar el programa muestra un pequeño menú donde se alcanza a apreciar 3 botones conteniendo la imagen de la “Motherboard” donde cada uno de los botones hace distinta función (Vea Fig. 6). El primer botón muestra solo las partes de la imagen, el segundo botón muestra como se puede abrir esa imagen y poder visualizarla mejor el tercer y último botón del menú sirve ya para poder mostrar la imagen ya con todos los bordes, colores y pixeles detectados, por último se menciona que la ventana del menú se muestra como el sensor pues esta aplicación se usara en el sensor para detectar cualquier imagen que se use para la banda transportadora.

Page 10: Linea de produccion mediante redes de petri correcciones2 wha

Fig. 6 Imagen de aplicación ejecutándose donde muestra el menú principal dando las diferentes herramientas a utilizar.

La Imagen que se muestra es la primera opción del primer botón del menú del sensor(“Partes de la Motherboard”) en donde se alcanza a apreciar parte por parte cada uno de los componentes que contiene la motherboard y lo que hace cada uno de estos con sus características únicas y como se puede simular en la manera de poder alcanzar a entender cómo funcionan como por ejemplo en la base de la motherboard se ven partes muy importantes que son los circuitos los cuales llevaran el manejo y control de la información que se le agregara a los microchips o microprocesadores los cuales cabe mencionar que son la memoria principal de la motherboard (Vea Fig. 7).

Fig. 7 Imagen denotando la estructura de la motherboard el cual servirá como referencia en las comparaciones.

Page 11: Linea de produccion mediante redes de petri correcciones2 wha

La Imagen que se muestra es la segunda opción del segundo botón del menú (“Abrir imagen de la Motherboard”) del sensor solo se puede apreciar la imagen de la motherboard tal cual es en un esquema muy general solo muestra la imagen para poder apreciarla y así poder alcanzar a ver como se puede manejar dicha tarjeta ya como se compone de los diferentes componentes en este caso hardware para poder checar cada parte de estos para ver mucho mejor el funcionamiento físico de la tarjeta (Vea Fig. 8).

Fig. 8 Imagen de la Motherboard almacenada en el botón (“Abrir imagen de la Motherboard”) especificando la imagen de la motherboard.

La imagen que se muestra es la tercera opción del tercer botón del menú del sensor (“Detectar bordes y guardar”) lo cual solo muestra ya finalizada la imagen detectada con los parámetros necesarios y las pruebas ya hechas con el sensor es el resultado final de nuestra aplicación que solo manda una imagen original de la otra la motherboard pero ya con los bordes y pixeles y colores que se aplicaron el código en C++ como se alcanza a apreciar se ve claramente como se detectaron más que nada los bordes de la imagen y pues con el color negro se refiere a que la imagen como es la mezcla de colores es común que aparezca así debido a los pixeles manejados durante el proceso de desarrollo de la aplicación (Vea Fig. 9).

Page 12: Linea de produccion mediante redes de petri correcciones2 wha

Fig. 9 Imagen de motherboard después de seleccionar la opción de (“Detectar bordes y guardar”) en el menú principal. La imagen denota los bordes de la motherboard facilitando la comparación entre diferentes imágenes.

La imagen que se muestra el entorno de visual Studio montando la pequeña aplicación en C++ para poder tomar una captura con la cámara de la imagen de la “motherboard”, la aplicación maneja las cámaras que enfocan a la imagen tomando en sus diferentes puntos los bordes de la imagen al igual que los pixeles y los colores que la imagen presenta como sabemos la imagen una vez captada por las cámaras ya captada la imagen se pasara después a comparar con otra imagen la cual se le verán las semejanzas y diferencias de ambas imágenes con las figuras que se presentarían tanto en una como en otra pero eso se verá mas adelante con la continuación de la aplicación(Vea Fig. 10).

Page 13: Linea de produccion mediante redes de petri correcciones2 wha

Fig. 10 Imagen referente al entorno de desarrollo de la aplicación.

3.3 DESCRIPCIÓN DE CODIGO FUENTE

3.3.1 Primera Especificación de código

La Función que recibe el nombre de CSensorDlg::OnBnClickedButton1 que recibe operacnes y parámetros para poder ser ejecutada.

void CSensorDlg::OnBnClickedButton1()

{

Esta línea de código se puede abrir imagen del “Motherboard” y el tipo de formato que esta contiene en nuestro caso la imagen es formato .png es donde mandas a llamar la imagen inclusive puedes poner la ruta donde esta se encuentra.

También se uso un puntero llamado img1 de tipo IplImage pasándole como parámetro la función de cvLoadImage con la ruta de la imagen a abrir, en este caso la imagen está en la raíz del proyecto.

IplImage *img1 = cvLoadImage("Motherboard.png");

Esto sirve para mostrar la imagen, llamando a la función cvShowImage que recibe como parámetros el nombre de la ventana que creara y el puntero img1 anterior.

Page 14: Linea de produccion mediante redes de petri correcciones2 wha

cvShowImage("Imagen de la Motherboard", img1);

Esto sirve para redimensionar la ventana que abierta 1500 de ancho, 1000 de alto

cvResizeWindow("Imagen de la Motherboard",1500,1000);

Esto sirve para esperar una tecla del teclado.

cvWaitKey(0);

Esto sirve para destruir específicamente esa ventana que se genero anteriormente

cvDestroyWindow("Imagen de la Motherboard");

Y por ultimo esto sirve para liberar la memoria asociada al puntero img1

cvReleaseImage(&img1);

}

3.3.2 Segunda Especificación de código

La 2 Función que recibe el nombre de CSensorDlg::OnBnClickedButton2 que recibe operaciones y parámetros para poder ser ejecutada.

void CSensorDlg::OnBnClickedButton2()

{

Los comentarios del botón anterior aplican para este botón ya que son las mismas líneas solo cambia en que se abre otra imagen.

Esta línea de código se puede abrir imagen del “Motherboard” y el tipo de formato que esta contiene en nuestro caso la imagen es formato .png es donde mandas a llamar la imagen inclusive puedes poner la ruta donde esta se encuentra.

También se uso un puntero llamado img1 de tipo IplImage pasándole como parámetro la función de cvLoadImage con la ruta de la imagen a abrir, en este caso la imagen está en la raíz del proyecto al igual abrir la imagen de la Motherboard comentada para ver sus partes MotherboardComent.png

IplImage *img1 = cvLoadImage("MotherboardComent.png");

Esto sirve para mostrar la imagen, llamando a la función cvShowImage que recibe como parámetros el nombre de la ventana que creara y el puntero img1 anterior.

cvShowImage("Imagen de la Motherboard Comentada", img1);

Page 15: Linea de produccion mediante redes de petri correcciones2 wha

Esto sirve para redimensionar la ventana que abierta 1500 de ancho, 1000 de alto

cvResizeWindow("Imagen de la Motherboard",1500,1000);

Esto sirve para esperar una tecla del teclado

cvWaitKey(0);

Esto sirve para destruir específicamente esa ventana que se genero anteriormente

cvDestroyWindow("Imagen de la Motherboard Comentada");

y por ultimo esto sirve para liberar la memoria asociada al puntero img1

cvReleaseImage(&img1);

}

3.3.3 Tercera Especificación de código

La 3 Función que recibe el nombre de CSensorDlg::OnBnClickedButton2 que recibe operaciones y parámetros para poder ser ejecutada y aquí es donde se detectan los bordes de la imagen.

void CSensorDlg::OnBnClickedButton3()

{

En esta parte se crea un arreglo de caracteres con la imagen

char name0[]="Motherboard.png";

Enseguida se va a inicializar el puntero imagen en NULO

IplImage* image=NULL;

Después cargamos la imagen del arreglo de caracteres con el puntero image

image=cvLoadImage(name0);

Aquí una variable para medir la altura de la imagen que fue cargada con el puntero image

int a = image->height;

También se agregó una variable para medir el ancho de la imagen que fue cargada con el puntero image

int l = image->width;

Page 16: Linea de produccion mediante redes de petri correcciones2 wha

Esta línea de código sirve para limitar el tamaño de la máscara a aplicar

int tamM = 1;

Aquí se declara la máscara 1

int mascara[9]={1,2,1,0,0,0,-1,-2,-1};

Aquí se declara la máscara 2

int mascara2[9]={1,0,-1,2,0,-2,1,0,-1};

En esta parte el puntero de tipo IplImage llamado imgBoard se usa para crear una imagen de 3 canales con los tamaños de las variables l y a anteriormente utilizadas

IplImage* imgBoard=cvCreateImage(cvSize(l,a),IPL_DEPTH_8U,3);

Esta parte es la más importante ya que aquí se usan 2 ciclos for para recorrer todos los pixeles de la imagen y aplicar las mascaras y cambios de color para la detección de los bordes en la imagen usando distintos colores para poder captar los diferentes puntos.

for (int m = 1 ; m<a-1;m++){

for (int n = 1 ; n < l-1;n++){

Aquí se declaran las variables que se van a usar para los 2 ciclos for ósea los colores que se mencionaron anteriormente

int red = 0; int blue = 0; int green = 0; int red2 = 0; int blue2 = 0; int green2 = 0;

int indice =0;

for(int x = -tamM;x<=tamM;x++){

for (int y = -tamM ; y<=tamM;y++){

Se le van aplicando en esta parte los colores a la imagen en la máscara1 y 2 y así poder pasarle al igual los canales para ir incrementando cada color

blue+=mascara[indice]*((uchar*)(image->imageData+(x+m)*image >widthStep))[(y+n)*image->nChannels + 0];

green+=mascara[indice]*((uchar*)(image->imageData+(x+m)*image->widthStep))[(y+n)*image->nChannels + 1];

Page 17: Linea de produccion mediante redes de petri correcciones2 wha

red+=mascara[indice]*((uchar*)(image->imageData+(x+m)*image->widthStep))[(y+n)*image->nChannels + 2];

blue2+=mascara2[indice]*((uchar*)(image->imageData+(x+m)*image->widthStep))[(y+n)*image->nChannels + 0];

green2+=mascara2[indice]*((uchar*)(image->imageData+(x+m)*image->widthStep))[(y+n)*image->nChannels + 1];

red2+=mascara2[indice]*((uchar*)(image->imageData+(x+m)*image->widthStep))[(y+n)*image->nChannels + 2];

Al último el contador se incrementa para que lo haga el número de veces que se indico en los 2 ciclos for

indice++;

}

}

Esta parte del código solo se puede indicar el numero mínimo y máximo de colores que se pueden usar y claro que se declararon y poder castear o convertir para poder pasarle a los colores usado mas colores con un pow y así poder llegar a un rango de 0 a 255.

if(blue<0)

blue=0;

if(green<0)

green=0;

if(red<0)

red=0;

if(blue>255)

blue=255;

if(green>255)

green=255;

if(red>255)

red=255;

if(blue2<0)

blue2=0;

Page 18: Linea de produccion mediante redes de petri correcciones2 wha

if(green2<0)

green2=0;

if(red2<0)

red2=0;

if(blue2>255)

blue2=255;

if(green2>255)

green2=255;

if(red2>255)

red2=255;

blue = (int)((255.0/360.63)*sqrt(pow((float)blue,2)+pow((float)blue2,2)));

green = (int)((255.0/360.63)*sqrt(pow((float)green,2)+pow((float)green2,2)));

red = (int)((255.0/360.63)*sqrt(pow((float)red,2)+pow((float)red2,2)));

if(blue<0)

blue=0;

if(green<0)

green=0;

if(red<0)

red=0;

if(blue>255)

blue=255;

if(green>255)

green=255;

if(red>255)

red=255;

Para terminar aquí se da una asignación de los datos generados anteriormente al nuevo puntero imgBoard en sus tres canales de color rojo, verde y azul

Page 19: Linea de produccion mediante redes de petri correcciones2 wha

((uchar*)(imgBoard->imageData+m*imgBoard->widthStep))[n*imgBoard->nChannels + 0]= blue;

((uchar*)(imgBoard->imageData+m*imgBoard->widthStep))[n*imgBoard->nChannels + 1]= green;

((uchar*)(imgBoard->imageData+m*imgBoard->widthStep))[n*imgBoard->nChannels + 2]= red;

}

}

Esta es la última parte del código generado para las imágenes al finalizar se podrá notar que lo que hace es simple ya mostrar la imagen con sus colores ya detectados y los bordes y además ya cargadas las imágenes bien como anteriormente se menciono.

Esto es para mostrar la imagen original

cvShowImage("Motherboard Original",image);

Aquí es para mostrar la imagen ya con la detección de bordes

cvShowImage("Motherboard con Bordes",imgBoard);

Esto sirve para guardar la imagen que fue generada

cvSaveImage("CopiaconBordes.png", imgBoard);

Esto sirve para esperar una tecla del teclado

cvWaitKey(0);

}

Page 20: Linea de produccion mediante redes de petri correcciones2 wha

Fig. 11 Imagen referente al entorno de desarrollo de la aplicación.

Esta imagen muestra como se agregan no solo poco a poco mas botones si no que la aplicación ya está completa esta es la ultima ventana de la aplicación donde se agregaron mas botones para el manejo de la cámara y más que eso se agrego lo más importante que se menciono anteriormente la comparación de dos o más imágenes para así poder que semejanzas o diferencias puede haber entre dichas imágenes algo más que hace la aplicación es que al comparar las dos imágenes te arroja el resultado de dichas dos imágenes como es la comparación entre ambas con sus respectivas características.

Page 21: Linea de produccion mediante redes de petri correcciones2 wha

Cuarta Especificación de código

Estas tres funciones del código indican cómo controlar cada cámara que se enfoca en la imagen capturando video dando clic a los botones elegir cámara, iniciar cámara y detener cámara en donde estos tres botones se accionaran de acuerdo a las tres funciones que se muestran con sus respectivos atributos y métodos para que arrojen un resultado de manejo de la cámara para poder ver en diferentes formas las posiciones no solo de la cámara sino que también la imagen.

void CSensorconcamaraDlg::OnBnClickedSourcebutton()

{

// TODO: Agregue aquí su código de controlador de notificación de control

VideoCapture.ShowVideoSourceDialog();

}

void CSensorconcamaraDlg::OnBnClickedStartbutton()

{

// TODO: Agregue aquí su código de controlador de notificación de control

VideoCapture.Start();

}

void CSensorconcamaraDlg::OnBnClickedStopbutton()

{

// TODO: Agregue aquí su código de controlador de notificación de control

VideoCapture.Stop();

}

Page 22: Linea de produccion mediante redes de petri correcciones2 wha

En estas últimas líneas de código son las finales ya que la aplicación contiene integrados los botones de la cámara al igual que el botón final de la comparación de las imágenes primeramente en estas líneas se crea una función para comparar ambas imágenes se declararon las variables necesarias al igual que se manejaron variables que pueden controlar el manejo de imágenes las imágenes son comparadas de acuerdo a el uso adecuado de las referencias de los punteros los cuales son los encargados de cargar almacenar y ocultar los bordes de cada imagen, también se almacenan estas en ventanas internas y las cuales se van visualizando poco a poco de acuerdo a el manejo de la aplicación.

void CSensorconcamaraDlg::OnBnClickedButton6()

{

// TODO: Comparar Imagen

int a=3;

IplImage *img1;

IplImage *img2;

IplImage *imggray1;

IplImage *imggray2;

IplImage *imggray3;

if(a==3)

{

img1 = cvLoadImage("CopiaconBordes.png");

img2 = cvLoadImage("OriginalconBordes.png");

}else {exit(0);}

IplImage *imgsize1,*imgsize2;

imggray1 = cvCreateImage( cvGetSize( img1 ), IPL_DEPTH_8U, 1);

imggray2 = cvCreateImage( cvGetSize( img2 ), IPL_DEPTH_8U, 1);

imggray3 = cvCreateImage( cvGetSize( img1 ), IPL_DEPTH_8U, 1);

Page 23: Linea de produccion mediante redes de petri correcciones2 wha

int k = 0;

while(k != 'm')

{

cvCvtColor( img1, imggray1, CV_RGB2GRAY );

k = cvWaitKey( 500 );

cvCvtColor( img2, imggray2, CV_RGB2GRAY );

cvAbsDiff( imggray1, imggray2, imggray3 );

cvNamedWindow( "image", 1 );

cvShowImage( "image", imggray3 );

}

cvReleaseImage( &img1 );

cvReleaseImage( &img2 );

cvDestroyWindow( "image" );

}

//codigo del boton para comparar imagen

Page 24: Linea de produccion mediante redes de petri correcciones2 wha

BIBLIOGRAFIA

[1] Edward Jhohan Marín García, Sistema de Automatización de Eventos Discretos,

Involucrados en la Línea de Producción de la Estación de Gabinetes que se Encuentra en la Empresa mabe Colombia S.A., Tesis Maestría, Pereira Colombia, UNIVERSIDAD TECNOLÓGICA DE PEREIRA FACULTAD DE INGENIERÍA ELÉCTRICA, 2008.

[2] Dra. María Elena Meda Campaña, “Identificación de sistemas de eventos discretos” [en línea],

http://www.gdl.cinvestav.mx/ofelia/uploads/6.%20Dra.%20Maria%20Elena%20Meda%20%20Campa%C3%B1a%20-%20Identificaci%C3%B3n%20SED%20una%20aproximaci%C3%B3n%20de%20mod%20elado.pdf , 23/10/2013.

[3] Johana estela castellano arias, “Sistemas de eventos discretos, una aproximación a la teoría de redes de Petri y grafcet”, Trabajo de grado para optar por el título de Ingeniero en Mecatrónica, Universidad militar nueva granada, 2008. [4] Amilcar Meneses Viveros, Herramienta para la Modelación y Simulación de Redes de Petri, 22/11/2008, http://computacion.cs.cinvestav.mx/~ameneses/pub/tesis/mtesis/

[5] Luis Diego Murillo,” Redes de Petri: Modelado e implementación de algoritmos para autómatas programables”, Tecnología en marcha, Vol. 21, N.° 4, Octubre-Diciembre 2008, pp. 102-125.

http://www.tec-digital.itcr.ac.cr/servicios/ojs/index.php/tec_marcha/article/download/231/228

[6] Controlador lógico programable- PLC, Departamento de electrónica, Universidad Nacional de Córdoba, Facultad de ciencia Exactas, Físicas y Naturales, http://www.efn.uncor.edu/departamentos/electro/cat/eye_archivos/apuntes/a_practico/CAP%209%20Pco.pdf