Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Simulador para Control y Automatizacion Utilizando Un Entorno Virtual 3D Interactivo y Configurab PDF
Simulador para Control y Automatizacion Utilizando Un Entorno Virtual 3D Interactivo y Configurab PDF
AUTOMATIZACIÓN UTILIZANDO UN
ENTORNO VIRTUAL 3D INTERACTIVO Y
CONFIGURABLE
Universidad de Sevilla.
Diciembre 2012
2 INTRODUCCION TEORICA 12
2.1 SITUACION DE PARTIDA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.2 DESCRIPCION DE LA APLICACIÓN OBJETIVO . . . . . . . . . . . . . . . . . 12
2.2.1 Conexión mediante Server OPC . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.2.2 Conexión mediante puerto USB . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.3 TECNOLOGIAS Y HERRAMIENTAS DE DESARROLLO . . . . . . . . . . . . . 14
2.3.1 INTRODUCCIÓN A C# Y XNA . . . . . . . . . . . . . . . . . . . . . . . 14
2.3.2 ENTORNOS DE MODELADO 3D. INTRODUCCION A AC3D. . . . . . . 18
2.3.3 OPC (OLE FOR PROCESS CONTROL) . . . . . . . . . . . . . . . . . . . 20
5 MANUAL DE USUARIO 71
5.1 INSTALACIÓN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
5.2 CONFIGURACIÓN DE UNITY PRO . . . . . . . . . . . . . . . . . . . . . . . . . 71
5.3 CONFIGURACIÓN OPC OFS 3.31 . . . . . . . . . . . . . . . . . . . . . . . . . . 72
5.4 DESCRIPCIÓN DEL SIMULADOR . . . . . . . . . . . . . . . . . . . . . . . . . . 74
5.5 OBJETIVOS DEL ESCENARIO . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
5.6 DESCRIPCIÓN DE LOS ACTUADORES Y SENSORES DEL ESCENARIO . . 77
5.7 NORMAS PARA LA IMPLEMENTACIÓN DEL PROGRAMA DE CONTROL EN
UNITY PRO XL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
5.8 CONEXIÓN Y EJECUCIÓN PLC-OPC-SIMULADOR . . . . . . . . . . . . . . . 81
5.9 MODIFICACIONES DEL PROYECTO EN UNITY PRO . . . . . . . . . . . . . . 83
5.10 VIDEO DE EJEMPLO DE CONEXION Y FUNCIONAMENTO DE LA PLANTA 84
6 CONCLUSIONES Y FUTURAS LINEAS DE TRABAJO 85
7 BIBLIOGRAFIA 86
Lista de Figuras
1 Usuarios de Half-Life 2 interactuando con objetos del escenario. . . . . . . . . . . 7
2 Imagenes de varios escenarios de ITS PLC. a) Almacen automatizado. b) Mezclado
de pintura. c) Selección y empaquetado de piezas. . . . . . . . . . . . . . . . . . . 8
3 Imagen mostrando la asignación estática de los sensores y actuadores en un escenario
de ITS PLC. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
4 Captura de pantalla de una parte del modelo 3D de la grúa en AC3D. . . . . . . . 19
5 Captura de pantalla de la texturización de un modelo en AC3D . . . . . . . . . . . 20
6 Esquema de conexión mediante OPC Server. . . . . . . . . . . . . . . . . . . . . . 20
7 Esquema de conexión, entradas/salidas e interfaces. . . . . . . . . . . . . . . . . . . 21
8 Ejemplos de uso de Bullet Physics. . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
9 Ejemplos de uso de JigLibX. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
10 Contacto entre 2 objetos penetrando . . . . . . . . . . . . . . . . . . . . . . . . . . 27
11 Objetos con composición geométrica simple a), y compuesta b). . . . . . . . . . . . 28
12 Estructura del proyecto JigLibX en Visual Express C#. . . . . . . . . . . . . . . . 28
13 Estructura de la aplicación. Diagrama de flujo. . . . . . . . . . . . . . . . . . . . . 29
14 Estructura del proyecto de la aplicación en Visual Express C#. . . . . . . . . . . . 29
15 Ejemplo de código en C# de la declaración de las variables para incluir mesas
giratorias. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
16 Código en C# de la carga de contenidos 3D. . . . . . . . . . . . . . . . . . . . . . 30
17 Código C# de uso repetitivo para inicializar un elemento. . . . . . . . . . . . . . . 31
18 Código C# de la aplicación. a) Código repetitivo en bucle “for” para la actualización
de elementos de una misma clase. b) Código repetitivo para el renderizado de
modelos 3D. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
19 Estructura de métodos de la clase Elemento Industrial. . . . . . . . . . . . . . . . 32
20 Código en C# mostrando la llamada a métodos “Opcionales”, de las clases Grúa y
Cinta2, tras la llamada al motor físico. . . . . . . . . . . . . . . . . . . . . . . . . . 32
21 Imágenes pruebas de transporte de un objeto físico por la cinta transportadora. . . 33
22 Imágenes de la Cinta transportadora parcialmente texturizada. a) Imagen en reposo.
b) Imagen transportando objetos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
23 Imágenes del modelado final de la cinta transportadora y la zona de caída de cajas. 35
24 Imágenes del renderizado de los objetos físicos que realizan la simulación de la cinta
transportadora. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
25 Código en C# que describe el movimiento de la cinta giratoria mediante las variables
de velocidad. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
26 Imágenes del renderizado de los modelos físicos y 3D de la plataforma giratoria. . . 39
27 Código en C# que calcula la posicion y ángulos de los modelos 3D de los rodillos
en función de la velocidad lineal del objeto físico. . . . . . . . . . . . . . . . . . . . 39
28 Código en C# del método “Update2” de la plataforma giratoria que se ejecutará
tras el paso por el motor físico. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
29 Imagen del modelo completo de la grúa del proyecto, garra abierta y bajada. . . . 40
30 Imagen del modelo completo de la grúa del proyecto, garra abierta y subida. . . . . 41
31 Imagen del modelo físico que simulará el funcionamiento de la grúa. . . . . . . . . 41
32 Imagen del modelo físico que simulará el funcionamiento de la grúa. . . . . . . . . 42
33 Imagen de la grúa sosteniendo una caja. . . . . . . . . . . . . . . . . . . . . . . . . 42
34 Imagen de la grúa soltándo una caja en movimiento. . . . . . . . . . . . . . . . . . 43
35 Código C# que se encarga del funcionamiento de la garra mediante detección de
colisiones añadidas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
36 Imágenes de los modelos a) 3D , b) físico de la rampa. . . . . . . . . . . . . . . . . 45
37 Código en C# de la declaración e inicialización de un elemento Rampa. . . . . . . 46
38 Imágenes del renderizado 3D de un Destructor. . . . . . . . . . . . . . . . . . . . . 46
39 Imágenes del renderizado del modelo físico de un Destructor. . . . . . . . . . . . . 47
40 Código en C# para chequear las colisiones del objeto físico del Destructor con otros
objetos del escenario y eliminarlos encaso positivo. . . . . . . . . . . . . . . . . . . 47
42 Código en C# donde se declaran las variables de objetos físicos. . . . . . . . . . . . 48
41 Imágenes del Pistón. a) Modelo 3D pistón recogido b) Modelo 3D pistón extendido. 49
43 Código en C# para la simulación del movimiento del pistón. . . . . . . . . . . . . 50
44 Imagen del pistón doble en resposo sobre la cinta transportadora. . . . . . . . . . . 50
45 Imagen del pistón doble empujando una caja. . . . . . . . . . . . . . . . . . . . . . 51
46 Imagen del Sensor de barrera. Modelo 3D del Sensor con rayo. . . . . . . . . . . . 51
47 Imágenes del Sensor de barrera. a) Contacto límite entre objeto y sensor activandose.
b) Objeto cercano sin colisionar con el sensor de barrera. . . . . . . . . . . . . . . . 52
48 Código C# que muestra como se detecta la colisión con el segmento y la
comprobación de ID’s. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
49 Imagen del modelado 3D del montacargas detenido. . . . . . . . . . . . . . . . . . 53
50 Imagen del modelado 3D del montacargas subiendo un objeto. . . . . . . . . . . . . 54
51 Imagen de la estructura física que conforma el montacargas. . . . . . . . . . . . . . 54
52 Código en C# del método Update de la grúa donde se controla el movimiento de
las distintas partes y se reajustan al comienzo del mismo. . . . . . . . . . . . . . . 55
54 Imágenes de los modelos físicos del brazo de 5 grados. 4 elementos más la garra. . 56
53 Imágenes del brazo en 3 posiciones diferentes. . . . . . . . . . . . . . . . . . . . . 57
55 Código en C# de los objetos físicos y otras variables del brazo. . . . . . . . . . . . 58
56 Código en C# de la inicialización y adición al motor físico de los objetos. . . . . . 59
57 Código en C# del control de la primera sección del brazo. La sección 0 es la base. 59
58 Código en C# del control de la segunda sección del brazo. . . . . . . . . . . . . . . 60
59 Código en C# del control de la tercera sección del brazo. . . . . . . . . . . . . . . 60
60 Código en C# del control de la garra sección del brazo. . . . . . . . . . . . . . . . 61
61 Captura de pantalla del formulario de conexión Cliente - Servidor OPC. . . . . . . 62
62 Código del método para la lectura de actuadores del servidor. . . . . . . . . . . . . 63
63 Código del método de escritura de sensores no prioritarios en el servidor OPC. . . 63
65 Código de la declaración de variables que contendrán las imágenes para los elementos
del cuadro de control. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
64 Imágenes del cuadro de actuadores de la aplicación. a) Cuadro de actuadores, b)
Cuadro de sensores y c) Cuadro de conexión OPC. . . . . . . . . . . . . . . . . . . 65
66 Código para posicionar los elementos en el mismo lugar sin importar el tamaño de
la ventana. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
67 Código para la detección de pulsado de botones en la aplicación. En este caso se
comprueban los 15 primeros actuadores. . . . . . . . . . . . . . . . . . . . . . . . . 66
68 Captura de la planta de clasificado de cajas. Vista superior. . . . . . . . . . . . . . 67
69 Captura de la planta de clasificado de cajas. . . . . . . . . . . . . . . . . . . . . . . 68
70 Captura de la planta de clasificado de cajas. . . . . . . . . . . . . . . . . . . . . . . 68
71 Captura de la planta de clasificado de cajas. . . . . . . . . . . . . . . . . . . . . . . 69
72 Capturas de pantalla del Editor de Escenarios. . . . . . . . . . . . . . . . . . . . . 70
73 Captura de pantalla creación de un dispositivo en OFS . . . . . . . . . . . . . . . . 72
74 Captura de pantalla creación de un dispositivo en OFS . . . . . . . . . . . . . . . . 73
75 Captura de pantalla parámetros de un dispositivo en OFS . . . . . . . . . . . . . . 73
76 Escenario del Simulador. Pestaña Actuadores y cuadro de control. . . . . . . . . . 74
77 Rampa de salida para las cajas grandes (DANGER escrito en laterales) . . . . . . 75
78 Rampa de salida para las cajas pequeñas . . . . . . . . . . . . . . . . . . . . . . . . 76
79 Posiciones y sensores de la grúa. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
80 Sensores de la Plataforma giratoria. . . . . . . . . . . . . . . . . . . . . . . . . . . 78
81 Sensores de barrera prioritario llegada y clasificación de cajas. . . . . . . . . . . . . 80
82 Sensores de barrera para el envío de cajas a sus respectivas salidas. . . . . . . . . . 80
83 a) Imagen de la pestaña de conexión OPC, b) Imagen de los formularios de conexión. 82
1 INTRODUCCIÓN
1 INTRODUCCIÓN
1.1 INTRODUCCIÓN
El uso de simuladores facilita en gran medida el trabajo de los especialistas. Su uso produce
resultados que permiten prevenir errores en los sistemas reales. Mediante el uso de un simulador
para entornos industriales se reduciría el tiempo de programación y depuración de las mismas. Pero
se puede ir más allá de estos conceptos si se habla en materias de educación y prácticas mediante el
desarrollo de una plataforma de simulación de maquinaria industrial, mediante realidad virtual en
3D, para la realización de prácticas de programación de PLC’s (Programable Logic Controllers).
Año tras año, la industria de los videojuegos nos sorprende con sus lanzamientos. A medida
que pasan los años, los videojuegos mejoran en calidad gráfica, jugabilidad, interactividad con el
usuario etc. El volumen de ventas de videojuegos crece con los años y esto repercute directamente
en el propio desarrollo de posteriores lanzamientos.
Actualmente existen diferentes tipos de videojuegos como los RTS (Real Time Strategy), FPS
(First Person Shooter), RPG (Role Playing Game) etc. Pero si bien todos los tipos de juegos
generan importantes ingresos anualmente, 631M€ en España en 2010 obtenida de [6], para este
proyecto interesan especialmente los FPS. Éstos son juegos en primera persona en los cuales el
usuario se introduce en la piel del personaje en un mundo virtual con ciertos objetivos. El primer
FPS apareció en el año 1973 de la mano de Steve Colley bajo el nombre Maze Wars. A medida
que pasaron los años, los FPS mejoraron en varios aspectos y aunque el primero de ellos fue la
calidad gráfica, en la actualidad no es el único en desarrollo y mejora. Actualmente los aspectos
más valorados son la conectividad, interactividad con el entorno y la calidad del sistema físico del
videojuego.
En los videojuegos actuales los usuarios interactuan con los objetos de su entorno; pueden
cogerlos, tirarlos y empujarlos para sus propios propositos. Un ejemplo de esto se da en Half-Life
2, la secuela de Half-Life, lanzado al mercado en 2004 y que permite una gran interacción con el
entorno, ver Figura 1. Llegados a este punto, surge la cuestión: si a los videojuegos se les incluye
un sistema físico muy realista para hacerlos más atractivos, ¿por qué no hacer lo mismo con los
simuladores industriales y diseñarlos en 3D? Una simulación de entornos industriales realista con
los objetos del propio sistema sería útil para la programación y prevención de fallos que pudieran
ocurrir debido a los mismos objetos. Además, implícitamente, se hace más atractiva visualmente.
a)
b) c)
Proporciona un cuadro de mandos para que el usuario pueda detener, pausar, resetear y cambiar
de manual a automático la ejecución de la planta.
Por último, se dispone de una sección de fallos. Se puede decidir si un actuador o un sensor
tiene un fallo, simulando de esta forma que los dispositivos de la planta se pueden estropear.
Sin embargo, está formado por un número determinado de plantas industriales preprogramadas.
Otra limitación es el número de actuadores y sensores disponibles y su asignación rígida a los
elementos de los escenarios.
Aunque la aplicación es muy realista respecto a la física de los objetos y la sección de creación
de fallos en los dipositivos de los escenarios, se limita a:
• Funcionamiento normal.
Aunque se ha encontrado otra aplicación parecida no se va a comentar, por ser ITS PLC la más
completa y con mejor calidad observada, además de haberse utilizado por el autor del documento
en el laboratorio.
1.3 OBJETIVOS
La decisión de realizar esta plataforma como Proyecto Final de Carrera viene tras haber
comprobado las carencias de las aplicaciones existentes en el ámbito de la educación en control y
automatización. Es decir, el objetivo de este proyecto es el de obtener una aplicación que incluya
todas posibilidades que se creen necesarias para que la experimentación en laboratorio con PLC’s
y su programación sea más completa.
• Configurabilidad.
• Conectividad.
1. Simulador Principal.
El simulador es la aplicación básica y la primera en desarrollarse. Será un simulador en 3D
e incluirá un sistema físico.
2. Editor de escenarios.
Esta aplicación, aunque secundaria, es la clave para que la plataforma goce de una gran
escalabilidad a nivel de usuario. Con esta herramiento un usuario podrá diseñar un simulador
mediante el uso de los elementos industriales disponibles. Ofrecerá al usuario la posibilidad
de escoger de entre un listado de elementos, posicionarlos, orientarlos, añadir sensores etc.
Básicamente será un constructor de mundos más comunmente llamado, en terminología
anglosajona de videojuegos, “WorldBuilder”.
Posteriormente al diseño del escenario se generará un archivo que podrá utilizar en elsimulador.
El simulador obtenido deberá ser capaz de conectarse con un PLC o bien con un simulador de
PLC. Para esto se han barajado diferentes opciones:
• La primera sería realizar una conexión física con un PLC comercial mediante los puertos
USB o Serie RS232C adaptando las señales mediante una tarjeta de adquisición de datos.
• La segunda opción para la conexión sería utilizar un OPC Server (Ole Process Control)
como plataforma intermedia para el paso de datos entre PLC - Simulador. Parece ser una
buena opción ya que es una solución abierta y flexible al clásico problema de los drivers
propietarios, con la ventaja añadida que la mayoría de los grandes fabricantes incluyen OPC
en sus productos.
Algunos fabricantes de PLC’s suministran una aplicación que simula el comportamiento del
PLC [9] y al ejecutarse constituye un proceso independiente que utiliza los drivers propios para
comunicar con el entorno de programación. Esto permite contar con la ventaja de no necesitarse
un PLC comercial para realizar la programación del simulador. Con todo esto un usuario sería
capaz de diseñar, programar, compilar, ejecutar y comprobar los errores de una planta industrial,
sin necesidad de acceso a la maquinaria real. Los aspectos más importantes para la realización de
este software, que serán tratados en los siguientes apartados, son el sistema físico, el sistema de
colisiones y el desarrollo de maquinaria industrial.
Aunque los objetivos principales se han descrito, queda un último objetivo que se va a comenzar
en este proyecto pero que no se va a desarrollar por completo por el tiempo que ello conllevaría.
Éste último objetivo se desarrollará en la sección 6 “Futuras Líneas de Trabajo”. Se inciará la
tarea de modificar la solución para que la plataforma pueda ser ampliada y mejorada por personas
ajenas al proyecto de forma remota.
El documento está dividido en varias secciones que se pueden dividir en tres partes fundamentales:
1. Una parte de introducción teórica.
Donde se describirán aspectos teóricos generales necesarios para un buen entendimiento del
resto del documento.
2 INTRODUCCION TEORICA
Como se ha comentado anteriormente, este proyecto se comenzó desde la iniciativa propia y la visión
de un software con unas posibilidades que no se encuentra en la actualidad de forma comercial.
Debido a esto la situación de partida ha sido prácticamente desde cero. Se sabía lo que se quería
de la aplicación pero no muy bien como realizarla.
Inicialmente, como en todo proyecto, se buscaron las posibilidades para poder diseñar y
programar la plataforma 3D. Se indagó en el mundo de los videojuegos, pues el autor ya conoce
algunos juegos que incluyen algunos constructores muy utilizados por los usuarios, como es el
caso de “Garry’s MoD”. De esta forma se iban recogiendo diferentes posibilidades de lenguajes
de programación para el desarrollo de la aplicación en cuestión. También se investigó un poco el
contenido de ITS PLC por si se pudiera obtener alguna idea acerca de su estructura de archivos.
Y así es como ocurrió. Se averiguó como estabá desarrollada la parte gráfica de ITS PLC. Ésto
aceleró el trabajo de busqueda pues ya no se buscaba a ciegas sino algo más concreto.
Aunque al principio se pensó que el desarrollo de la aplicación llevaría mucho tiempo, una vez
se decidieron tanto el lenguaje de programación como la base para el desarrollo de objetos en 3D, el
avance de la aplicación fue bastante rápido. Aproximadamente la situación de partida se desarrolló
temporalmente como sigue:
• 1 mes para la busqueda y aprendizaje del lenguaje de programación y la base de desarrollo
en 3D.
• 1 mes para comenzar a tener los primeros resultados viables en cuanto a elementos
industriales.
A partir del comienzo del tercer mes todo fue fluido y se desarrollaron sin demasiados problemas
otros elementos industriales que se detallarán más adelante.
Antes de empezar a programar la aplicación, hay que pensar cuidadosamente como va a ser. Hay
que razonar como de lejos se prentede llegar con esta plataforma y ver como sería la plataforma
si ya estuviera realizada. Ésto conlleva un problema. Es posible que se exija demasiado y no se
pueda llevar a cabo. Aunque dadas las características de los lenguajes de programación orientados
a objetos, se concluyó que la mejor opción de conseguir el software deseado era de la forma que
se ha planteado. Decidir el alcance que va a tener la aplicación es fundamental pues a la hora de
realizar la programación del mismo se tendrán en cuenta las características, y el código se ajustará
a las funciones que tenga que realizar. De otra forma se tendría que ir modificando toda la solución.
No obstante, las características que se comentarán son las básicas que debe tener la plataforma
en conjunto, siendo necesario a medida que avance la programación modificar o añadir parte del
código ya existente para optimizar e incluir nuevas funcionalidades.
No solo debe ser escalable sino que también debe ser configurable. A la hora de incluir un
dispositivo, como por ejemplo una cinta transportadora, el usuario debería ser capaz de configurar
su comportamiento. Las cintas no son todas iguales, ni en forma, tamaño o dinámica. Aquí entra
en juego el término configuración. El usuario podrá incluir la función de transferencia que modela
la dinámica de la cinta transportadora. En este caso podría ser la función de transferencia de los
motores que mueven la cinta. De esta forma con un único dispositivo programado en la aplicación el
usuario tiene posibilidades de adaptar su comportamiento y con ello obtener dispositivos diferentes.
Dado que se está hablando de diseñar una plataforma para el entrenamiento con PLC’s es muy
importante pensar en como se va a hacer la conexión con el PLC. Aquí se tienen varias posibilidades
de las cuales solo una de ellas es la que se realizará en este proyecto.
Con un servidor OPC (Ole Proccess Control), se puede establecer una conexión entre un PLC real
y un PC que contenga el simulador y un cliente OPC. El servidor OPC será el intermediario para
el intercambio de datos entre ambos equipos. Para la conexión de los equipos solo haría falta una
red ethernet pues actualmente los PLC’s disponen de puerto ethernet así como los PC’s.
Esta sería una conexión física posible. Pero si se hace uso de un servidor OPC, también se puede
hacer una conexión no física entre los equipos. Se puede conseguir si se utilizan simuladores de PLC.
Algunas compañías como Schneider Electric incluyen en el software de sus PLC’s herramientas de
simulación de PLC’s. En pocas palabras, se puede tener en un mismo PC las tres aplicaciones para
establecer una conexión local interna y poder realizar la simulación y el control sin la necesidad de
usar un PLC real.
El hecho de no necesitar un PLC real implica un ahorro importante pues son dispositivos caros.
Otro aspecto importante son las averías. Con esta forma de conexión el riesgo de avería debido
a un mal uso por parte del usuario es inexistente. Otra ventaja añadida de no usar PLC’s, es el
número de puestos de trabajo que se pueden utilizar. Ahora solo son necesarios PC’s, pudiendose
ampliar a un costo menor el número de estaciones disponibles para el alumnado. El único requisito
de los PC’s, que se comentará más adelante, es que dispongan de una buena tarjeta gráfica.
A parte de poder establecer comunicación tanto por red como de forma local entre el PLC y el
simulador, también es conveniente tener la posibilidad de realizar una comunicación física directa.
Una de las opciones es hacerla por USB, mediante el uso de una tarjeta de adquisición de datos.
En éste apartado se describirán las herramientas que se han utilizado para desarrollar la aplicación.
Entre otros, se detallan el lenguaje de programación, las librerías 3D y otros programas utilizados
para llevar a cabo este proyecto.
Debido a que este proyecto es el desarrollo de una aplicación escoger un lenguaje de programación
adecuado es fundamental. Aunque en principio se podría utilizar cualquier lenguaje orientado
a objetos actual tales como JAVA, C++, C# o Lua, éste último muy utilizado en el desarrollo
de videojuegos, se optó por indagar cuál de ellos sería un lenguaje óptimo para el desarrollo del
simulador dado que se comenzaba este proyecto desde cero.
Los programas en Lua no son interpretados directamente, sino compilados a código bytecode,
que es ejecutado en la máquina virtual de Lua. El proceso de compilación es normalmente
transparente al usuario y se realiza en tiempo de ejecución, pero puede hacerse con anticipación
para aumentar el rendimiento y reducir el uso de la memoria al prescindir del compilador. También
es posible la compilación en tiempo de ejecución utilizando LuaJIT.
Debido a que Lua compilado es pequeño, veloz y tiene una licencia permisiva ha ganado
seguidores entre los desarrolladores de videojuegos. Algunos usos de Lua:
• World of Warcraft.
• S.T.A.L.K.E.R.: Shadow of Chernobyl.
Tras conocer un poco sobre Lua, pasó a ser la primera de las opciones en cuanto a lenguaje
de programación. No obstante se continuó la busqueda viendo lo que ofrecía C#. C# si es,
a diferencia de Lua, un lenguaje orientado a objetos. Finalmente la opción de usar Lua como
lenguaje se desechó, no porque no ofreciera las características necesarias, sino por la renderización
en 3D. Paralelamente a la busqueda del lenguaje de programación también se realizó la busqueda
de librerías que permitieran programar el renderizado en 3D para el simulador. Se encontró un
framework desarrollado por Microsoft para el desarrollo de juegos independientes para la consola
de videojuegos XBox. Con este framework los programadores independientes podían desarrollar
videojuegos y colgarlos gratuitamente o de pago en la comunidad de jugadores online. Este
framework es XNA y permite el renderizado en 3D incluyendo una buena documentación. Dado
que el disponer de una buena documentación es importante y tras observar algunos de los resultados
que obtenian los programadores utilizando XNA, se decidió que sería la librería para realizar la
programación 3D del simulador. Debido a que está implementada utilizando C# y que tanto XNA
como C# gozaban de las características necesarias para la implementación del simulador en 3D
deseado, se escogio el dúo C# - XNA para el desarrollo de este proyecto.
Aunque C# forma parte de la plataforma .NET, ésta es una API, mientras que C# es
un lenguaje de programación independiente diseñado para generar programas sobre dicha
plataforma. Ya existe un compilador implementado que provee el marco Mono - DotGNU,
el cual genera programas para distintas plataformas como Windows, Unix, Android, iOS,
Windows Phone, Mac OS y GNU/Linux.
• Todo método debe ser parte de una clase, no existen métodos globales (funciones).
• Por defecto, los parámetros se pasan por valor. (Notese que las listas y otras colecciones
son variables por referencia (referencias al espacio reservado para esa lista en la pila) y
que se pasa por valor al método la referencia , pero el espacio reservado para la lista es
común, por lo que si elimina un elemento lo hace también de la original)
• El modificador ref fuerza a pasar los parámetros por referencia en vez de pasarlos por
valor y obliga a inicializar la variable antes de pasar el parámetro.
• El modificador out es similar al modificador ref, con la diferencia de que no se obliga a
inicializar la variable antes de pasar el parámetro.
• Cuando ref y out modifican un parámetro de referencia, la propia referencia se pasa por
referencia.
• El modificador params sirve para definir un número variable de argumentos los cuales
se implementan como una matriz.
• Un método debe tener como máximo un único parámetro params y éste debe ser el
último.
• Un método puede devolver cualquier tipo de dato, incluyendo tipos de clase.
• Ya que en C# las matrices se implementan como objetos, un método también puede
devolver una matriz (algo que se diferencia de C++ en que las matrices no son válidas
como tipos de valores devueltos).
• C# implementa sobrecarga de métodos, dos o más métodos pueden tener el mismo
nombre siempre y cuando se diferencien por sus parámetros.
• El método Main es un método especial al cual se refiere el punto de partida del programa.
2. Microsoft XNA
XNA Framework se basa en la implementación nativa de .NET Compact Framework 2.0 para
el desarrollo de la Xbox 360 y .NET Framework 2.0 en Windows.
El XNA Framework por lo tanto encapsulado bajo nivel tecnológicos detalles relacionados
en un juego de codificación, asegurándose que el propio marco se encarga de la diferencia
entre plataformas cuando los juegos son portados desde una plataforma compatible a otra
lo que permite que los desarrolladores de juegos para concentrarse más en el contenido y la
experiencia de juego. XNA Framework se integra con una serie de herramientas, tales como
la plataforma múltiple audio creación herramienta (XACT), para ayudar en la creación de
contenido. XNA Framework proporciona apoyo para la creación de juego 2D y 3D y permite
el uso de los controladores de Xbox 360 y vibraciones. Sólo los juegos de marco XNA
actualmente destinadas a la plataforma Xbox se pueden ser distribuidos a los miembros de
Club de la Microsoft XNA Creator que lleva un $ 99/año suscripción. Desktop applications
pueden ser distribuidas gratuitamente bajo licencia actual de Microsoft.
XNA Game Studio 2.0 fue lanzado en 13 de diciembre de 2007.8 XNA Game Studio
2.0 ofrece la posibilidad de que se utiliza con todas las versiones de Visual Studio 2005
(incluido el free Visual C# 2005 Express Edition), una API de red usando Xbox Live
en Windows y Xbox 360 y mejor dispositivo manipulación.
• XNA Game Studio 3.0 (para Visual Studio 2008 o para free Visual C# 2008 Express
Edition).
sistema de parte de Xbox Live y soporte para juegos utilizar la Xbox 360 Avatars.
Esta versión del software está disponible para su descarga como parte del programa de
DreamSpark de Microsoft por parte de los alumnos.
Es lo que dará la competencia directa con el iPod de Apple ya que permite desarrollar
juegos y aplicaciones para el Windows Phone 7 aparte de tener un mercado en línea,
en donde los desarrolladores suben sus aplicaciones y los usarios del teléfono inteligente
pueden comprar o probar las aplicaciones, como se ha visto en el Xbox 360. Cabe
destacar la adicion de México para el mercado y que este estará disponible para uso en
30 países.
En este momento del proyecto se tienen los elementos principales para poder programar el simulador
y realizar el renderizado 3D de los objetos mediante C# y XNA. No obstante, es necesario diseñar
los objetos 3D antes de poder renderizarlos por pantalla. Para poder hacer ésto se necesita un
software de diseño 3D.
• Blender 3D.
Blender es un programa informático multiplataforma, dedicado especialmente al modelado,
animación y creación de gráficos tridimensionales.
El programa fue inicialmente distribuido de forma gratuita pero sin el código fuente, con
un manual disponible para la venta, aunque posteriormente pasó a ser software libre.
Actualmente es compatible con todas las versiones de Windows, Mac OS X, Linux, Solaris,
FreeBSD e IRIX.
Tiene una interfaz gráfica de usuario muy peculiar , que es criticada como poco intuitiva,
pues no se basa en el sistema clásico de ventanas; pero tiene a su vez ventajas importantes
sobre éstas, como la configuración personalizada de la distribución de los menús y vistas de
cámara.
Tanto 3ds Max, como Blender son programas excesivamente complejos y requieren de numerosas
horas de estudio para el diseño de modelos 3D. Por lo que se buscaron otras opciones para realizar
los modelos 3D que se incluirán en el simulador.
Tras buscar otros programas que permitieran el modelado 3D se encontró uno que incluía
muchas de las opciones de 3ds Max y Blender, con una interfaz gráfica muy parecida, pero con una
simplicidad de implementación de modelos mediante menús intuitivos que hacen de este software
una herramienta fácil de utilizar. Este software es AC3D.
En la figura 4 se muestra una captura de pantalla del software con uno de los modelos que se
ha incluido en el simulador 3D desarrollado en este proyecto.
Todos los modelos que se han desarrollado están formados por objetos cúbicos, cilíndricos y
esféricos. De esta forma el diseño de un elemento nuevo en 3D en el AC3D se llevará a cabo de
forma rápida y sencilla. El programa dispone de funciones básicas booleanas para aplicar entre 2
objetos 3D como:
• Unión
• Intersección
• Substracción
• Cortar y Eliminar
La adición de texturas se hace de forma muy simple. Simplemente se agrega al objeto la textura
destino en un formato de dibujo, png, jpeg etc, y se asignarán las diferentes texturas a las diferentes
superficies según el objeto. A los modelos desarrollados se les aplicará una optimización de vértices
y superficies para no sobrecargar los modelos y que la renderización sea óptima.
Anteriormente se han comentado las posibilidades de conexión entre PLC y simulador 3D. En
este proyecto se ha realizado el diseño para una conexión directa entre un simulador de PLC y el
simulador 3D. La conexión directa se refiere a una conexión interna en el mismo ordenador donde
se ejecutarán todas las aplicaciones, con lo que se realizan conexiones locales. Todo se ejecuta en
el mismo PC, lo que permitirá que un usuario pueda llevarse el trabajo a casa. De esta forma
no será necesario el uso de un PLC real para poder llevar a cabo la programación del autómata
y la programación de la planta simulada. Para realizar la conexión entre el simulador de PLC y
el simulador 3D mediante conexión directa se ha optado por la utilización de un servidor OPC.
Se ha escodigo un servidor OPC por ser un estandar de comunicaciones en el campo del control
y supervisión de procesos industriales. De ésta forma la conexión establecida tendra un sistema
intermedio que será el servidor OPC que se encargará del intercambio de datos entre simulador de
PLC y simulador 3D.
OPC está basado en tecnología Microsoft, que ofrece un interfaz común para comunicación que
permite que componentes software individuales interaccionen y compartan datos. La comunicación
OPC se realiza a través de una arquitectura Cliente-servidor. El servidor OPC es la fuente de
datos (como un dispositivo hardware a nivel de planta) y cualquier aplicación basada en OPC
puede acceder a dicho servidor para leer/escribir cualquier variable que ofrezca el servidor. Es una
solución abierta y flexible al clásico problema de los drivers propietarios. Prácticamente todos los
mayores fabricantes de sistemas de control, instrumentación y de procesos han incluido OPC en
sus productos.
El propósito principal del estándar OPC es proporcionar a las aplicaciones una forma común
de acceder a los datos de cualquier fuente, como un dispositivo o una base de datos. Gracias a esta
forma común de acceso a datos que proporciona OPC los fabricantes de hardware sólo tienen que
hacer un conjunto de componentes de programa para que los clientes los utilicen en sus aplicaciones
y los fabricantes de software no tienen que adaptar los drivers ante cambios de hardware.
OPC está diseñado principalmente para acceder a datos de un servidor en red. Distintas
aplicaciones podrán coger datos de aparatos físicos y llevarlo a SCADA o DCS, o de un servidor
SCADA o DCS a una aplicación.
Una aplicación cliente OPC, puede conectarse, por medio de una red, a varios servidores OPC
proporcionados por uno o más fabricantes. De esta forma no existe restricción por cuanto a tener
un Software Cliente para un Software Servidor, lo que es un problema de interoperabilidad que
hoy en día se aprecia con sistemas del tipo propietario. Sistemas de control supervisorio como lo
son SCADA o DCS pueden comunicarse con un Servidor OPC y proveer a este, información de
los dispositivos de campo asociados. De esta forma, aplicaciones cliente OPC de otros fabricantes
tendrán acceso a estos datos por medio del servidor.
F = ma = mp̈ (2)
1
p̈ = F (3)
m
F = mg (5)
La aceleración de la gravedad que se aplicará a los objetos será por tanto, un vector.
0 Fx
g = −g F = Fy (6)
0 Fz
Los objetos podrán estar tanto en reposo como en movimiento. En movimiento cualquier objeto
sufre rozamiento. La fuerza de rozamiento viene dada por la ecuación (7), donde Fr es la fuerza
de rozamiento, N la normal y µ el coeficiente de rozamiento. Aunque se deben tener en cuenta los
dos tipos de coeficientes de rozamiento, el estático y el dinámico µs y µk . Estos coeficientes son
característicos para cada par de materiales que se encuentran en conctacto y dependen de otros
factores como la temperatura. Una opción sería usar valores aproximados para ciertos materiales,
como los extraídos de [7] que se muestran en la tabla 1.
Fr = µN (7)
Material 1 Material 2 µs µk
Steel Steel 0.74 0.57
Aluminium Steel 0.61 0.47
Copper Steel 0.53 0.36
Rubber Concrete 1 0.8
Wood Wood 0.25-0.5 0.2
Glass Glass 0.94 0.4
Waxed wood Wet snow 0.14 0.1
Waxed wood Dry snow - 0.04
Metal Metal 0.15 0.06
Ice Ice 0.1 0.03
Teflon Teflon 0.04 0.04
Synovial Joints
- 0.01 0.003
in Humans
Otro aspecto importante a tener en cuenta para la simulación de objetos rígidos será el momento
de inercia de un objeto de masa uniforme, el cual viene dado por (8). Para la simulación se hará
uso de los tensores de inercia de un sólido rígidoIxx , Iyy e Izz y los productos de inercia Ixy , Ixz e
Izy .
ˆ
I= ρr2 dV (8)
V
Para procesar todas las fuerzas que están actuando sobre un mismo objeto en el simulador se
utilizará el principio de DÁlambert. Este principio implica que si, en un sistema de partículas,
se tiene un objeto sobre el cual actúan una serie de fuerzas, se puede obtener una única fuerza a
partir del conjunto de fuerzas [4]. Se hará la suma vectorial de fuerzas a las que está sometido
un objeto para obtener una única fuerza total, ver (9). Otras características como el centro de
masas, orientación (ángulos de Euler), momentos de inercia y de fuerza o par deberán aplicarse
para conseguir realismo en la simulación.
X
F = Fi (9)
i
• Bullet Physics
Dado que los motores encontrados tenían las características necesarias y todos eran muy
similares como para hacer una elección y dado que no se disponía de tiempo para realizar un
examen exhaustivo del código para hacer la elección del idóneo se escogío JigLibx tras ver algunas
de las simulaciones realizadas con el mismo.
Como muchas otras librerías en C#, JigLibx es una librería portada a C# desde C++, JigLib.
Aunque el objetivo principal de JigLibX Beta es conesguir que la librería se “más” .NET. Como
está completamente escrita en C# es particularmente ajustable a su uso con XNA. El motor físico
posee un sistema de colisiones, física de objetos rígidos y es gratuito y de código abierto. Por lo
que se integrará bien en la aplicación de la que es objeto este proyecto.
La colisión entre objetos ocurre cuando existe un contacto entre éstos. Dado que se tiene un
sistema de simulación en 3D y por tanto objetos modelados en base a polígonos, se debe hacer
distinción entre colisiones punto-punto, arista-arista, arista-cara, cara-cara. Uno de los problemas
al desarrollar el sistema de colisiones es el tiempo de ejecución. En la vida real dos objetos chocan,
pero en una simulación de ordenador debido a que el tiempo es tratado de forma discreta, lo que
ocurrirá es que penetrarán el uno en el otro, ver figura 10. Esto se resolvería separando los objetos
en direcciones opuestas a las que tenían inicialmente hasta que dejen de tocarse.
Uno de los métodos más utilizados se denomina penalty-based method, donde usa la
profundidad de penetración definida como la distancia de traslación mínima requerida para separar
dos objetos en intersección [2]. En este método se permite la interpenetración entre objetos y para
realizar la separación se opta por aplicar fuerzas proporcionales a la cantidad de penetración. Al
resolver la colisión se tendrán en cuenta todas las magnitudes de los objetos involucrados, velocidad
lineal, angular, fuerzas etc. Al producirse en una colisión entre dos objetos debe cumplirse el
principio de conservación en el momento del choque y que viene expresado por (10). Dos objetos a
velocidades de choque va y vb , con masas ma y mb , tras el choque adquirirán una nueva velocidad
en otras direcciones y sentidos. La conservación ocurrirá en el momento justo del choque, tras el
cual el movimiento de los objetos deberá responder al resto de fuerzas externas como la fuerza de
rozamiento.
El sistema de colisiones deberá comprobar si existen colisiones entre cada par de objetos del
simulador. Comprobar una colisión supone conocer la geometría de cada objeto y obtener todos
los puntos de colisión existentes entre dos objetos. Si existen muchos objetos, esta comprobación
puede consumir demasiado tiempo de procesado y ralentizar la simulación. Una solución a este
problema es utilizar dos tipos de detectores de colisiones. El primero de ellos haría una localización
de los objetos con posibilidad de contacto sin entrar en detalles. El segundo recibiría la lista de
objetos y realizaría un chequeo más exacto hallando las colisiones y la información necesaria para
que sean tratadas por el motor físico. De las posibles colisiones también se eliminarían aquellas
colisiones que se producen entre un par de objetos que no poseen velocidad alguna y se encuentran
en reposo. Es decir, sólo se tendrán en cuentan las posibles colisiones entre objetos reposo-activo
y activo-activo [5].
a) b)
Figura 11: Objetos con composición geométrica simple a), y compuesta b).
El proyecto JigLibX en Visual Express C# está formado por los siguientes elementos:
Como muchas aplicaciones, se basa en un bucle infinito que el usuario deberá poder ser capaz de
detener en cualquier momento. Al tratarse de una aplicación con renderizado en 3D se deberá
actualizar el dibujado en pantalla en cada paso de ejecución. Los modelos 3D son parte del
contenido de la aplicación. Para ahorrar carga de trabajo, todos los modelos que serán necesarios
para la ejecución se cargarán al comienzo del programa. La estructura del programa está dividida
en varios métodos, de los cuales algunos se ejecutarán una única vez, y otros en cada paso de
ejecución. La estructura es como sigue:
Figura 15: Ejemplo de código en C# de la declaración de las variables para incluir mesas giratorias.
Al comienzo de la clase Simulador.cs se declaran todas las variables que se van a necesitar,
así como las propias clases de elementos industriales que existen. En la figura 15 se muestra una
porción de código donde se observan las variables necesarias para introducir “5” cintas giratorias
en el simulador.
Posteriormente, en el método LoadContent, se cargan todos los modelos 3D que dicha clase va
a necesitar, ver figura 16. En el método Initialize se inicializarán los parámetros necesarios básicos
y son los siguientes, ver figura 17:
• Posición del elemento
Una vez que se tiene todo ésto, ya se puede empezar la ejecución de los métodos Update y
Draw. En el método Update, se llamará mediante un bucle “for” al método Update de cada una de
las Cintas transportadoras que existan en el escenario. De la misma manera, en el método Draw
se llamará al método Draw de cada una de las cintas mediante un bucle “for”. De esta forma si se
pretende añadir una nueva cinta, solo hay que aumentar el valor “num_Cintas2 ”, y copiar/pegar
la porción de código de otra cinta cambiando sus parámetros de posición. Al aumentar el valor
“num_Cintas2 ” ya se está incluyendo en los bucles “for” de los métodos Update y Draw la nueva
cinta transportadora, luego el mecanismo de introducción de elementos es relativamente sencillo,
ver figura 18.
a)
b)
Figure 18: Código C# de la aplicación. a) Código repetitivo en bucle “for” para la actualización
de elementos de una misma clase. b) Código repetitivo para el renderizado de modelos 3D.
En este apartado se va a describir como se han desarrollado los elementos industriales para la planta
piloto en pruebas del simulador 3D. Cada una de ellas se encapsula en una clase con unos métodos
obligatorios y otros opcionales como se ha descrito anteriormente. Ésto hará que el desarrollo de
nuevos elementos y su adición al programa principal sea más rápido, sencillo y seguro ante fallos
de compilación y ejecución.
Cuando se habla de métodos opcionales, se está haciendo referencia a un método extra que es
necesario ejecutar una vez que el motor físico ha realizado su pasada, cosa que ocurre al final del
método Update del programa principal en “Simulador.cs”. Este método extra puede ser necesario
para truncar o mejorar el rendimiento del motor físico. Debido a que vamos a simular elementos
mecánicos basados en objetos diferentes que interacturan entre sí pero que no están gobernados
por ninguna mécanica entre ellos más que la física clásica, la reorientación, ajuste de velocidades
y/o detección extra de colisiones pueden llegar a ser necesarios tras el paso de los objetos por el
motor físico. Así pues se deja esta opción en caso de ser necesitada, y se ejecutaría siempre al final
del método Update de la clase “Simulador.cs”, después de la llamada al motor físico, ver figura 20.
Figura 20: Código en C# mostrando la llamada a métodos “Opcionales”, de las clases Grúa y
Cinta2, tras la llamada al motor físico.
Una vez que se había estudiado el motor físico y su comportamiento ya era posible comenzar
con el desarrollo de un dispositivo industrial muy común en las plantas industriales, la cinta
transportadora. Aunque las cintas trasnportadoras las hay de muchos tipos y tamaños, la que se
ha diseñado es una cinta lineal rectilínea.
Dado que el motor físico integrado en la solución trabaja con cuerpos rígidos, la mejor opción
para diseñar los dispositivos es basarlo en las figuras geométricas más básicas, cubo, esfera y
cilindro. En base a estas tres figuras se desarrolla todo el modelo, tanto físico como 3D.
Figure 21: Imágenes pruebas de transporte de un objeto físico por la cinta transportadora.
Una vez que se comprobó que el sistema ideado y programado funcionaba, se procedió a incluir
los objetos físicos cúbicos necesarios para tener una cinta transportadora completa. La dinámica
de la cinta es lineal. Una vez activada va de 0 a 0.5m/s de forma lineal. Todavía no se han incluido
las opciones de funciones de transferencia personalizadas pues será en el editor de plantas donde se
configurarán estas opciones. En la figura 22 se puede observar el primer prototipo, parcialmente
texturizado, del primer prototipo de cinta transportadora. Aunque sigue siendo algo tosco, ya se
han incluido los elementos que conforman la cinta, las placas de la cinta, los engranajes que mueven
las placas y los soportes. Esta cinta está formada por aproximadamente unos 50 obejtos cúbicos
físicos sobre un soporte rígido y estático que basicamente forman la cinta transportadora.
a)
b)
El modelo final tras varias modificaciones se muestra en la figura 23. Aunque la versión anterior,
que estaba formada por 50 objetos cúbicos que se encargaban de mover los objetos encima de
un punto a otro, funcionaba correctamente, el consumo computacional y gráfico era algo elevado
incluso estando parcialmente texturizado. Se fueron reduciendo el número de objetos que formaban
la cinta y aumentando su tamaño para seguir cubriendo toda la longitud de la cinta. También se
eliminaron objetos 3D que realmente eran innecesarios para mejorar el rendimiento gráfico, llegando
a una solución más optimizada que la versión anterior y con un funcionamiento prácticamente
idéntico.
a)
b)
Figure 23: Imágenes del modelado final de la cinta transportadora y la zona de caída de cajas.
a)
b)
Figure 24: Imágenes del renderizado de los objetos físicos que realizan la simulación de la cinta
transportadora.
4. Esto provocará que el efecto sea el de una cinta. El objeto moverá cualquier otro objeto que
tenga en su superficie una determinada distancia, volverá a la posición inicial, pero si ese
objeto sigue sobre su superficie, aunque en otra zona distinta ahora, seguirá desplazandolo
igual.
5. El movimiento que se aplica es de dinámica lineal. Partiendo de 0 m/s y llegando a 0.3m/s.
Una velocidad que se ha visto razonable para el escenario que se ha dispuesto y que se
presentará en un apartado posterior de este proyecto.
Figura 25: Código en C# que describe el movimiento de la cinta giratoria mediante las variables
de velocidad.
Figure 26: Imágenes del renderizado de los modelos físicos y 3D de la plataforma giratoria.
El modelo en 3D debe seguir fielmente a la simulación física interna. Lo que nos lleva a que
los rodillos del modelo en 3D que se observa en la Figura 26, deberán actualizar su posición en
el espacio y ángulo dependiendo de la velocidad angular y lineal del objeto dinámico para lo cual
habrá que hacer equivalencias de velocidades angulares con lineales, ver Figura 27.
Figura 27: Código en C# que calcula la posicion y ángulos de los modelos 3D de los rodillos en
función de la velocidad lineal del objeto físico.
En las líneas de código presentadas en la Figura 28, se muestra un claro ejemplo del
reposicionamiento y reorientación del elemento dinámico para evitar errores en la simulación de la
mesa. Ésto es debido a que en realidad el objeto dinámico no está unido a ningún otro elemento
como lo estarían las partes que componen a un elemento así en la realidad por ejemplo mediante
engranajes. Es en realidad un objeto libre que se está controlando para que simule ciertas acciones.
Cuando, por ejemplo, tiene una caja que está transportando, ésta está ejercienzo fuerzas sobre
la mesa, lineal/angular, e inevitablemente el motor físico lo tendrá en cuenta y se producirán
movimientos no deseados en los ejes x, z. Estos errores deben ser corregidos al comienzo del
método Update. Existe la posibilidad de realizar esto último mediante el método opcional del que
se comentó que se disponía, siendo necesario su uso en este caso.
Figura 28: Código en C# del método “Update2” de la plataforma giratoria que se ejecutará tras
el paso por el motor físico.
3.4.3 GRÚA
El caso de la grúa es más complejo que los anteriores. El modelo completo en 3D puede verse en
las figuras 29 y 30. En este caso el modelo de la grúa tiene varias partes implicadas.
Figure 29: Imagen del modelo completo de la grúa del proyecto, garra abierta y bajada.
Figure 30: Imagen del modelo completo de la grúa del proyecto, garra abierta y subida.
La primera parte implicada es la estructura principal, los soportes sobre los que descansa la
grúa y por los cuales se mueve, formada por varios cuerpos físicos estáticos. La estructura principal
nunca se moverá, será estática durante toda la simulación, no adquirirá velocidad, aceleración o
fuerza alguna, ver figuras 31 y 32.
Figure 31: Imagen del modelo físico que simulará el funcionamiento de la grúa.
Figure 32: Imagen del modelo físico que simulará el funcionamiento de la grúa.
En segundo lugar está el brazo de la grúa, formado por dos cuerpos físicos, en principio
inamovibles pero que cambiarán al imprimirle movimiento. Estos dos cuerpos forman un único
objeto en el simulador. Se puede mover linealmente en dos sentidos y subir/bajar. El brazo debe
poder interactuar con el resto de objetos del simulador sin que éstos tengan efectos sobre su posición
y velocidad pero si al contrario. Para ello se dota al brazo de una masa elevada, de esta forma si
un objeto choca con el brazo no repercutirá en su estado. El último de los elementos es la garra
que está formada por dos cuerpos cúbicos que serán los encargados de interactuar con los objetos,
ver figuras 33 y 34.
Para realizar la simulación de la sujeción de un objeto se ha optado por usar “choque conjunto”.
Si una de las dos partes de la garra colisiona con un objeto, el sistema físico se encarga del
movimiento necesario entre garra y objeto. En el momento en que exista una colisión en ambas
partes de la garra, se comprueba que el objeto definitivamente se encuentra en una posición en la
que es posible sujetarlo físicamente. Si éste es el caso, se procede a declarar al objeto inamovible
y a la grúa se le da la orden de aplicar al objeto sus mismas velocidades en cualquier dirección.
Las líneas de código que gobiernan la garra se presentan en la figura 35. De ésta forma el objeto
seguirá a la grúa en el recorrido que haga sin moverse de su posición relativa a la grúa. Una vez
que se envié la orden de abrir la garra, la grúa devolverá el estado inicial al objeto, quedando así
nuevamente expuesto a cualquier tipo de fuerza externa.
Para la detección de colisión se utiliza un método extra de colisiones entre objetos. Como los
únicos objetos dinámicos libres que actualmente existen en el simulador son cajas, lo que se hace
es un barrido por cada una de las cajas. Se comprueban las “ID’s” de colisión y si existe una
colisión de los modelos físicos o “BoundingBox” de la caja con los objetos que forman la garra.
Si se detecta una colisión se procede al movimiento de la caja para alinearla con la garra según
el avance de la garra tal y como sucedería en la realidad. En el momento de la colisión doble, si
la orientación de la caja es cercana a la orientación de la garra, el objeto se podrá agarrar. En
otro caso, supongamos que la caja estuviera a 45º, las garras al cerrarse expulsarán el objeto por
rozamiento.
Figura 35: Código C# que se encarga del funcionamiento de la garra mediante detección de
colisiones añadidas.
3.4.4 RAMPA
Las rampas no son más que objetos físicos estáticos que servirán para guiar las cajas hacia las
salidas, en este caso los destructores, que serían paso a otras zonas de la planta. Están formadas
por varios objetos y poseen unos coeficientes de rozamiento adecuados para simular una superficie
metálica pulida que permitirá a las cajas deslizarse facilmente por su superficie. En la figura 36 se
presenta el modelo en 3D y el modelo físico. Las rampas no disponen de actuadores, ni sensores.
No tienen control alguno y están completamente gobernadas por el motor físico. En la figura 37 se
puede ver lo más relevante de la clase “Rampa.cs”. Se observa que tan solo es una declaración de
objetos y su posicionamiento en el escenario mediante las variables correspondientes a cada cuerpo
o “Body”.
a)
b)
3.4.5 DESTRUCTOR
Dado que para el escenario prototipo se han utilizado cajas de madera, es necesario crear un
elemento que sea capaz de “destruirlas”. Es decir, si una caja ya no es necesaria en el escenario, si
que será necesario liberar o destruir dicha caja para liberar recursos de la ejecución. En las figuras
38 y 39 se pueden observar tanto el modelo 3D como el modelo físico que detecta las colisiones
mediante su “BoundingBox”.
El código del destructor es muy simple y solo se basa en unas “ID’s” que contienen las cajas.
Un objeto cúbico físico simple se encargará de comprobar si se ha producido alguna colisión con el
mismo. En ese caso se comprobará la ID del objeto en colisión y se liberarán los recursos de dicho
objeto. El código que gobierna las colisiones es similar al caso de la garra en la grúa y se muestra
en la figura 40.
Figura 40: Código en C# para chequear las colisiones del objeto físico del Destructor con otros
objetos del escenario y eliminarlos encaso positivo.
3.4.6 PISTON
Cuando los actuadores que gobiernan la activación del pistón son pulsados, ver figura 43,
se modifica la posición del elemento dinámico/estático que se encuentra en el tope del pistón
mediante las variable correspondiente. Tras la actualización de posiciones del elemento, se hace
pasar por el motor físico y sistema de colisiones. El truco que se ha utilizado para que se comporte
dinámicamente siendo estático y que no se caiga el objeto físico cúbico por gravedad tiene que ver
con el propio sistema de colisiones.
Si se quiere una velocidad de 0.2m/s se hacen los calculos necesarios según el tiempo de paso de
ejecución y se calcula aproximadamente la cantidad de espacio que debe recorrer en cada uno de
los pasos. Es decir que entre un paso y otro se fuerza la posición del objeto. Si existe otro objeto
dinámico, como una caja, cercano al pistón y se fuerza la posición del pistón , éste penetrará en
la caja. Esta situación será detectada por el sistema de colisiones que se encargará de hacer los
movimientos correspondientes al objeto dinámico, en este caso la caja. De esta forma se consigue
el comportamiento deseado.
a)
b)
Figure 41: Imágenes del Pistón. a) Modelo 3D pistón recogido b) Modelo 3D pistón extendido.
Figure 44: Imagen del pistón doble en resposo sobre la cinta transportadora.
Dado que se está hablando de simular una planta industrial, un elemento básico que no debe faltar
es el sensor de barrera. Aunque son sensores muy simples, son muy utilizados y darán mucho juego
en el simulador para practicar con PLC’s.
La implementación final del sensor de barrera con la que se obtuvieron los mejores resultados
fue mediante el uso de un segmento de colisión. Este segmento, de longitud igual a la separación
entre los elementos que forman el sensor será el implicado en la detección de los objetos. En cada
iteración de la aplicación se comprueba si este segmento ha intersectado con alguno de los objetos
físicos del escenario. En el caso de obtener una intersección, el sensor se activa cambiando a true
el valor de una variable booleana que se utilizará para otros propósitos en el escenario.
Figure 46: Imagen del Sensor de barrera. Modelo 3D del Sensor con rayo.
a) b)
Figure 47: Imágenes del Sensor de barrera. a) Contacto límite entre objeto y sensor activandose.
b) Objeto cercano sin colisionar con el sensor de barrera.
Figura 48: Código C# que muestra como se detecta la colisión con el segmento y la comprobación
de ID’s.
Dado que en el simulador desarrollado en este proyecto los únicos objetos dinámicos que existen
son las cajas, al detectarse una colisión se comprobará a que caja corresponde la “ID” del objeto
que ha colisionado con el segmento. En las colisiones se modifican los valores de los colores del
rayo y las luces de control para una mejor visualización por parte del usuario como se muestra en
la figura 48.
3.4.8 MONTACARGAS
Tras varias pruebas se utilizó la velocidad lineal en el eje vertical para realizar la simulación.
La clave para evitar inclinaciones y efectos parásitos en la carga fue resetear el elemento movil en
cada una de las iteraciones. Al ejecutarse el método Update del montacargas, se anulan las posibles
fuerzas, aceleraciones y velocidades, que se han grabado en sus variables internas, productos del
paso por el motor físico y sistema de colisiones. Asimismo se reorienta el elemento y se le vuelve
a asignar la velocidad que debería tener. De esta manera se mantiene el realismo de la acción de
subida y bajada de la carga. En la figura 52 se muestra la parte del código relacionada con la
activación del actuador correspondiente y la actualización de la posición de la plataforma.
Figura 52: Código en C# del método Update de la grúa donde se controla el movimiento de las
distintas partes y se reajustan al comienzo del mismo.
El brazo se ha diseñado siguiendo la estructura de una brazo real. Consta de un bloque cúbico
físico por cada una de las partes que lo componen, 4 más la garra. El brazo se podría haber
programado utilizando las matrices de traslación y la de rotación, al igual que se hace de forma
teórica, donde los ejes están en las articulaciones, en los extremos de los elementos. El problema es
que en el motor físico, los ejes de los elementos están en el centro por lo que habría que trasladar
este punto hacia los extremos. En vez de realizar la conversión se decide programar la posición de
cada una de las partes respecto de la anterior y partiendo desde cero.
Figure 54: Imágenes de los modelos físicos del brazo de 5 grados. 4 elementos más la garra.
a)
b) c)
en cada una de las articulaciones. El modelado está basado en el Scorbot. El objetivo de aplicar
una masa elevada a cada una de las partes del brazo es porque se va a utilizar el mismo método
que en el caso del pistón. Debido a que los movimientos de cada una de las partes tendrán varias
componentes, se hace dificil el control de la posición sin que ocurran efectos parásitos debido a
la falta de unión mecánica fija, a la fuerza de la gravedad y resto de elementos del escenario. El
movimiento del brazo está totalmente basado en movimiento articular. Mediante cambios en las
variables articulares se aplicará la nueva posición de cada una de las partes.
Figura 55: Código en C# de los objetos físicos y otras variables del brazo.
Una vez calculada la posición, simplemente se sitúa el elemento en dicha posición y se recalculan
las posiciones de los elementos superiores en función de la variable inferior. En caso de estar
activado algún otro actuador superior se realizaría la misma operación, pero eliminando los cálculos
inferiores.
Figura 57: Código en C# del control de la primera sección del brazo. La sección 0 es la base.
Para esta aplicación en pruebas, y como se ha comentado anteriormente, se ha optado por una
conexión no física. Es decir, para realizar la simulación de la planta 3D con un programa escrito
para el PLC, no será necesario el uso de un PLC real. Se utilizará el simulador de PLC que incluye
el software Unity Pro XL de Schneider Electric. Este simulador se conectará de forma local en
el mismo PC con el servidor de OPC de Schneider OFS. La conexión con el OFS se realizará a
través del menú de pestañas que incluye el simulador 3D. El cliente OPC que se ha integrado en la
solución, está escrito en C#. Para ahorrar tiempo en el desarrollo de la aplicación se ha utilizado
un cliente OPC libre de licencias en C#.
Aunque existen diversos clientes OPC escritos en este lenguaje, se descartaron por no
proporcionar el código fuente o ser de pagos y no es el objetivo de este proyecto. En un futuro
se podría utilizar el conjunto de librerías de la OPC Foundation para el desarrollo de clientes
OPC optimizados para el simulador 3D. Durante la conexión del cliente con el servidor OPC, se
muestran el listado de variables que están incluidas en los archivos de la programación realizada
para el PLC con Unity Pro. Actualmente todas las variables que se permiten en el simulador 3D
son boolenas, true/false o 0/1 según se prefiera. Lo comentado no implica que el OFS no admita
variables analógicas. Para éste escenario no se han implementado aunque si se implementarán en
futuras modificaciones de la aplicación.
Para la conexión con el servidor OPC de Schneider, OFS (OPC Factory Server), se utilizará un
cliente OPC escrito en C# que se ha integrado en la solución. El cliente esta basado DA o “Direct
Access” y se utiliza de forma directa en el mismo PC donde se encuentra tanto el servidor OPC
como el programa del PLC Unity Pro. Se disponen de dos botones en el cuadro de control para la
conexión y desconexión con el OPC.
Figura 61: Captura de pantalla del formulario de conexión Cliente - Servidor OPC.
Existirán hilos de escritura y lectura, así como hilos prioritarios y secundarios, ver figuras 62
y 63. La creación de hilos diferentes se basa en que variables se están leyendo o escribiendo. Se
comprobó tras varias pruebas que la lectura/escritura individual de actuadores y sensores en el
servidor OPC era lenta, en especial en el caso de la escritura en el OPC. La solución escogida
que mejor resultado ofreció fue la lectura en bloque y la escritura individual. La lectura de todo
un conjunto de 20 actuadores lleva un tiempo aproximado de 30-40ms. Mientras que la escritura
individual de 1 único sensor en el OPC puede llevar unos 15ms. El OPC utilizado parece ser
bastante lento en escritura y lectura. Por ello se necesitan hilos.
Figura 62: Código del método para la lectura de actuadores del servidor.
Figura 63: Código del método de escritura de sensores no prioritarios en el servidor OPC.
El hilo de lectura estará continuamente en ejecución. Este hilo se detiene cuando existe algun
cambio en algún sensor. Entonces se toman todos los sensores que han cambiado de estado y se
escriben uno a uno.
En el simulador existen sensores prioritarios que corresponden a los sensores de barrera. Dado
que estos sensores son críticos pues dependen del paso de objetos dinámicos que cambian de
posición, se deberán escribir inmediatamente en el OPC para que el PLC reciba los datos y actue
la programación de la planta en el PLC en consecuencia. En este caso la escritura del resto de
sensores se detendrá para proceder a escribir los prioritarios, tras lo cual se volverá a escribir por
donde se dejaron los sensores no prioritarios Sxx.
Para el control de la aplicación, tanto en modo manual como automático, se ha diseñado una
interfaz amigable formada por un cuadro de control dividida en pestañas. En cada una de las
pestañas se encuentran diferentes controles, actuadores, sensores y conexión de OPC, ver figura
64. En el cuadro de operación a la derecha se encuentran los controles de activación de modo
manual/automático y otros que se pueden utilizar junto con variables que se declaren en el PLC.
Figura 65: Código de la declaración de variables que contendrán las imágenes para los elementos
del cuadro de control.
a)
b) c)
Figure 64: Imágenes del cuadro de actuadores de la aplicación. a) Cuadro de actuadores, b) Cuadro
de sensores y c) Cuadro de conexión OPC.
Figura 66: Código para posicionar los elementos en el mismo lugar sin importar el tamaño de la
ventana.
Figura 67: Código para la detección de pulsado de botones en la aplicación. En este caso se
comprueban los 15 primeros actuadores.
La planta prototipo que se ha desarrollado para las primeras pruebas incluye algunos de los
dispositivos más utilizados en la industria como pueden ser cintas transportadoras, grúa y pistones.
En la Figuras 68, 69, 70 y 71 se muestran capturas del escenario.
A lo largo del proyecto se ha hablado de las partes de la aplicación, los elementos desarrollados y
las técnicas utilizadas. Pero la parte más interesante se ha mencionado al comienzo del proyecto,
cuando se comentó el “Worldbuilder”. Se pretende que la aplicación sea tan escalable y configurable
como sea posible. El desarrollo de todo el proyecto ha sido programado teniendo en cuenta que el
objetivo final es obtener un editor de escenarios.
El propósito del editor es que el usuario pueda diseñar diferentes plantas industriales según
sea necesario. Por lo tanto, el software desarrollado proporcionaría una característica muy
interesante de escalabilidad. El editor también incluirá todos los parámetros y opciones que son
interesantes cuando se realiza la simulación de elementos industriales, tales como el tiempo de uso
de dispositivos, el error, la probabilidad de fallo, el tiempo medio entre reparaciones, etc. Todos
estos parámetros serán configurables por el usuario y permitirá un uso más eficiente y alargará la
vida del software.
El editor está en desarrollo, aunque que ya se ha obtenido los primeros resultados. La figura
72 muestra capturas de pantalla del editor. La programación del editor es relativamente simple ya
que se se basa enteramente en el simulador desarrollado. Con esta otra aplicación el usuario será
capaz de seleccionar la posición y ajustar los parámetros deseados de los elementos de la planta.
Esto proporcionará al usuario un entorno de programación basado en formularios de edición de
Windows con una ventana principal donde se puede ver el resultado de lo que se está diseñando.
5 MANUAL DE USUARIO
5.1 INSTALACIÓN
4. Instalación de Unity Pro XL. Rellenar los campos necesarios, nombre etc. Cuando el
programa solicite el número de referencia y serie, se escogerá de entre las posibilidades,
la última de todas referente a updateUnity. No es necesario instalar los drivers de
comunicaciones de Unity Pro pues son para conexiónes físicas.
Sistemas Operativos:
1. Win XP, Win Vista. (32bits)
No se han encontrado incidencias en la ejecución de los programas mencionados.
2. Win 7 (32bits)
Los siguientes archivos deben ejecutarse en modo “Compatibilidad con Windows XP SP2”.
• OFS Factory Server.
• OFS Configuration Tool.
• Unity Pro.
3. Win 7 (64bits)
Se han visto errores en alguna distribución de Windows 7 64bits. Aunque en otras como
Windows 7 Home Premium se ha realizado una instalación correcta de los programas
comentados anteriormente. Es posible que no se pueda instalar el paquete .NetFramework
1.1 desde el instalador de OFS. En este caso se podría instalar via WindowsUpdate.
El modo de compatibilidad para los programas será el mismo que en el caso de Windows
7(32bits).
5.2 CONFIGURACIÓN DE UNITY PRO
Antes de proceder a la configuracón del servidor OPC, se va a crear el proyecto en UNITY PRO,
donde realizaremos la programación.
Ahora se puede guardar el proyecto con el nombre que se desee, y pasar a la siguiente etapa de
la guía. La guía de programación en UNITY PRO XL es otro documento aparte.
3. Una vez creado y nombrado el dispositivo se deberán aplicar las propiedades que se muestran
en la imagen de la figura 3.
4. En el apartado “Symbol Table File” se debe indicar el fichero del programa *.STU que se ha
creado en Unity PRO XL para realizar la automatización de la planta. El archivo *.STU se
crea desde UNITY PRO, será el archivo donde realizaremos la programación, GRAFCET,
LD, etc de la planta. Este archivo debe estar creado previamente, aunque esté vacio, para
incluirlo en las opciones de “Symbol Table File”.
5. Una vez se han terminado los pasos 1, 2 y 3, solo nos queda guardar la configuración con
“Save Configuration” en la pestaña “File”.
Para lanzar el Simulador 3D, ejecutar el archivo “Simulador.exe” dentro de la carpeta Sim3DAC.
Junto al cuadro principal se encuentra un segundo cuadro donde se pueden observar varios
controles, como Play, Stop, Pause, Reboot, Emergency y el activador de Automatico/Manual. En
esta versión en pruebas están disponibles los botones Play, Stop y el activador Automatico/Manual.
Si el activador Automatico/Manual esta en posición OFF, el simulador se encuentra en modo
Manual y se pueden utilizar los actuadores para activar los dispositivos del escenario. En caso
contrario, se encuentra en modo ON, y será cuando esté conectado al servidor OPC, y por tanto
no se permite un actuación directa sobre la planta mientras la está controlando el PLC.
La navegación por el simulador se realiza utilizando las teclas “W,S,A,D” (Delante, atras,
izquierda y derecha) y con el boton derecho del raton pulsado y moviendo el raton se puede hacer
girar la camara a voluntad del usuario. También se dispone de una serie de vistas predefinidas a
las que se puede acceder con los botones flecha de la esquina superior derecha del simulador.
El escenario es un clasificador de cajas por tamaños. Esta compuesto por los siguientes
elementos:
Exiten 3 tipos de cajas. Grande, mediana y pequeña. El objetivo del escenario es enviar las cajas
grandes por la rampa que se indica en la figura 5, las cajas pequeñas por la rampa que se indica en
la figura 6, y las medianas deben ser recogidas por la grua y soltadas en la segunda cinta. Haciendo
uso de los sensores dispuestos para la clasificación deberá programarse una serie de actuaciones
sobre los elementos de la tabla teniendo en cuenta los retrasos debido a la comunicación, la cual
es complemtamente local en el PC.
Figure 77: Rampa de salida para las cajas grandes (DANGER escrito en laterales)
ON/OFF
(Para soltar más
A15 Activador Añadir Caja al Escenario de una caja hay
que pasar antes
por OFF, ciclo
completo)
Los sensores que llamaremos “prioritario” disponibles para este escenario son los siguientes,
(ver las figuras 9, 10):
Figure 82: Sensores de barrera para el envío de cajas a sus respectivas salidas.
Se recomienda que antes de empezar a programar en Unity Pro, se familiarice con el simulador
3D mediante el uso de los actuadores, para tener en cuenta que pasa por ejemplo al pulsar 2
actuadores que tengan relación directa, como es el caso de Abrir y Cerrar Grúa. Una vez se vean
las características de los actuadores y los sensores, cuando se activan y cuando se desactivan, será
el momento para comenzar a programar el autómata.
En la programación del PLC en UNITY PRO XL, las variables se llamarán como en el simulador
“AXX, SXX y PXX ”. Las variables para usar los botones STOP y PLAY, se llamarán “STP
y RUN ”. Todas las variables serán de la clase “BOOL”. Estas son las variables con las que se
comunicarán el PLC y el Simulador. No obstante se pueden utilizar todas las variables auxiliares
que se requieran para obtener un buen rendimiento en el funcionamiento de la planta.
Antes se ha hablado de sensores prioritarios. Se llaman así pues al ser sensores de activación por
paso de elementos, es crucial obtener su estado. Aunque de ésto no se tiene que preocupar el usuario.
Solo se preocupará de su activación o desactivación, pero realizando los cambios pertinentes en
otras variables o estados del PLC inmediatamente.
Los sensores con nomenclatura “SXX ”, permanecen siempre en un estado a lo largo del tiempo
hasta que se activan/desactivan y cambien de estado. No son críticos, como el caso de los
prioritarios. El actuador Automatico/Manual no se programa en el PLC, pues es exclusivo del
simulador.
El simulador está en fase de pruebas. Pueden encontrarse algunos errores con los modelos.
Se ha detectado un fallo de desconexión del simulador con el servidor OPC, al pulsar el botón
correspondiente, cuando se ha estado simulando junto con el servidor y el PLC un periodo de
tiempo largo. En caso de ocurrir, basta con cerrar la aplicación y el Servidor OPC, y volver a
simular.
a)
b)
Figure 83: a) Imagen de la pestaña de conexión OPC, b) Imagen de los formularios de conexión.
Una vez que se ha selecionado el dispositivo, creado en el OFS Configuration Tool, y hayan
aparecido a la derecha las variables que se han creado en el proyecto *.STU en Unity Pro,
como se muestra en la figura 5, se eliminará el formulario pulsando la tecla “Q”, esto es
obligatorio para no tener ese formulario a la vista.
Este paso puede tardar un poco según el PC, y el número de variables totales que se hayan
necesitado. Es posible que parezca que se ha quedado colgado el OFS. Aunque no se ha
llegado a observar este comportamiento, si tras un par de minutos siguen sin aparecer las
variables, entonces si se dará por hecho que se ha quedado colgado.
6. Tras establecer la conexión entre el Simulador y el OPC Server, solo resta ejecutar el programa
cargado en el simulador de PLC de Unity Pro.
7. Para que el simulador 3D empiece a recibir datos, se debe pasar de manual a automatico
mediante el boton indicado en la figura 12. Se recomienda, a la hora de implementar el
programa en el PLC, utilizar las variables “RUN” y “STP” como entradas en el PLC, para
recibir en el PLC las ordenes de los botones PLAY y STOP del simulador.
En caso de hacerse una prueba de un programa realizado en Unity Pro con el simulador, se
prodecerá como se ha comentado en el apartado anterior. Será necesario realizar pruebas para
comprobar si la solución es correcta. En caso de hacerse una prueba y no obtener el resultado
deseado, la solución deberá ser modificada. Para ello habrá que desconectar primero el simulador
del Servidor OPC mediante el botón adecuado. Se comprueba que en el Servidor OPC el número de
clientes conectados es cero. Tras desconectar simulador 3D y Servidor OPC, pararemos la ejecución
del simulador mediante el boton “Stop” que ofrece Unity Pro en la barra de herramientas. Tras
esto, se realiza la desconexión de Unity Pro con el simulador de PLC. A partir de aquí se podrá
modificar la solución y volver a empezar con las pruebas. Siempre debe guardarse el proyecto
*.STU antes de realizar la prueba para que el servidor OPC disponga de las nuevas variables que
se hayan creado.
5.10 VIDEO DE EJEMPLO DE CONEXION Y FUNCIONAMENTO DE LA
PLANTA
Aunque nunca existe una única forma de programar una planta, en el video “Demo Planta” que
se adjunta, se muestra como debería ser aproximadamente el funcionamiento de la planta. En el
video demostrativo también se incluye la conexión al servidor y la puesta en marcha
del programa en el PLC.
Como comentario adicional, este proyecto se ha utilizado para la presentación de dos artículos.
El primer artículo se presentaró en las “XXXII Jornadas de Automática de la CEA” celebradas en
Sevilla los días 7, 8 y 9 Septiembre de 2011. El segúndo artículo fue aceptado y presentado en el
“SICE 2012 Annual Conference” celebrado los días 21, 22 y 23 de Agosto de 2012 en Akita, Japón.
Además se realizó una presentación del mismo en la sede de D+TEC, Asociación de profesionales
de la tecnología, el día 16 de Diciembre de 2012. (www.dmastec.org)
• Adolfo J. Sánchez del Pozo, Juan Manuel Escaño González, Luis Fernando Castaño Castaño:
Realidad Virtual en 3D para Automatización y Control. Actas de las XXXII Jornadas de
Automática (Ja 2011). XXXII Jornadas de Automática (Ja 2011). Sevilla. Universidad de
Sevilla. 2011.
• del Pozo, A.S.; Escano, J.M.; Bordons, C. “Simulator for control and automation using
an interactive and configurable 3D virtual environment”. Proceedings of SICE Annual
Conference 2012 (ISBN: 978-4-907764-40-1, IEEE Catalog Number: CFP12765-DVD),
(2012/8/23, Akita, Japan), Page(s): 2268 - 2273.
7 BIBLIOGRAFIA
[1] Crowe, C. T., Elger, D. F., Williams, B. C., Roberson, J. A.(2009): Engineering Fluid
Mechanics, 9th Edition. John Wiley & Sons, Inc. Chapter 11. Sections 11.2, 11.3.
[2] Kim, Y. J., Otaduy, M. A., Lin, M. C., Manocha, D. (2002): Fast Penetration Depth
Computation for Physically-based Animation. Symposium on Computer Animation - SCA , 2002.
[3] McCormick, B. W. (1979): Aerodynamics, Aeronautics, and Flight Mechanics. John Wiley
& Sons, Inc., New York. pp. 168-178.
[4] Millington, I. (2007): Game Physics engine development. Morgan Kaufmann Publishers.
Elsevier Inc. pp.69-71, 111-119.
[5] Mirtich, B. (2000): Timewarp rigid body simulation. In Proc. SIGGRAPH 2000, 193–200.
[6] Nota de prensa. aDeSe. Balance económico de la industria del videojuego 2010. Gabinete
de prensa de aDeSe: Marta Frau / Juan Gabriel Corral.
[7] Serway, R. A. , Jewett, J. W. (2004): Physics for Scientists and Engineers, 6th Edition, pp.
131-133.
[8] Stewart, D. E. (2000): Rigid-body dynamics with friction and impact. SIAM Review Vol.
42, No. 1, 3–39.
[9] Schneider Electric. Unity Pro. Program Languages and Structure. Reference Manual. April
2009