ANEXO A El software WITNESS A.1 INTRODUCCIÓN La aplicación WITNESS permite modelar y simular un sistema dinámico con eventos discretos. Los eventos aleatorios se pueden modelar mediante distribuciones probabilísticas estándar. También incorpora herramientas para el análisis de los resultados generados en las simulaciones. Otra de sus mejores propiedades es la representación de la información y del estado del proceso de una manera muy visual, de forma que se facilita la comprensión del funcionamiento del sistema modelado así como la extracción de conclusiones a partir de las simulaciones realizadas. A continuación se detallan los elementos de WITNESS empleados para este proyecto. Primero se detallan las características generales del entorno y a continuación los aspectos relacionados con la implementación de modelos de sistemas. A.2 WITNESS Y SU ENTORNO A.2.1 Menús El menú de WITNESS está dividido en siete grupos: File, Edit, View, Model, Reports, Run, Help (Ver figura A.1). A.2.2 Cajas de diálogo y propiedades de las hojas WITNESS hace uso de las cajas de diálogo de Microsoft Windows para visualizar la información y recoger la información del usuario. Estas pueden tener una serie de tabuladores superpuestos y además tenemos cuadros que podemos rellenar (Ver figura A.2). Las hojas de WITNESS contienen entradas o campos del siguiente tipo: • Campos Display: Sólo dan información y no se pueden editar. • Campos Input: En estos es donde se puede editar o introducir información como cambiar el nombre del elemento por ejemplo. • List-boxes: Son cajas que dan un listado de items. Para visualizar la listas de opciones basta con hacer click en la flecha que tienen a la derecha. • Botones: Se seleccionan haciendo click sobre ellos y algunos pueden abrir nuevas hojas donde introducir datos. 149 Figura A.1 Menú Witness Campos Display List-Boxes Campos Input Botones Figura A.2 Cajas de diálogos de Witness 150 A.2.3 Visión gráfica y pantallas WITNESS permite durante la ejecución de la simulación la visualización activa de los cambios que se suceden; las máquinas cambian de color para indicar cuando están ocupadas, rotas, etc., y las Parts (en nuestro caso piezas) se mueven de estación conforme se están procesando. Ya que se pueden hacer modelos largos y complejos, WITNESS permite tener diferentes pantallas de animación donde se puede visualizar parte o todo el modelo implementado. A.3 MODELOS A.3.1 Elementos básicos Los modelos son construidos con una serie de elementos o bloques. Ésta sección describe los tres elementos básicos que forman parte de un modelo. • PARTS O ENTIDADES (Ver figura A.3): Son usadas para representar los ítems discretos que se mueven alrededor de la planta. Pueden ser usadas para representar pequeños componentes electrónicos, grandes tanques de aceite, o cualquier cosa entre ambos. Parts también pueden ser usadas para representar llamadas de teléfonos y otro tipo de información que fluya. WITNESS “crea” Parts e introduce dentro de la simulación en el lugar y tiempo que le indique el modelo. Parts se pueden mover; e incluso pueden combinarse en varias mientras se van moviendo por el modelo. Son extremadamente versátiles. Cuando se hace el detalle de las Parts es necesario decidir si son Activas (una cantidad concreta de Parts se ponen en el modelo un momento concreto ) o algún elemento en la simulación tira de ellas desde un suministro infinito. Pueden ser destinadas a tener Active Arrivals seleccionando en la caja de Arrivals de la caja de diálogo de las Parts. Inicialmente no asumen las llegadas activas. En el Detail se indica cuándo y cómo las Parts deben aparecer en la simulación; cuándo las acciones deben hacerse a las Parts que lleguen o cuando dejen la simulación; y cuándo los estadísticos deben ser controlados. Para todo ello deben tener Reglas definidas. • BUFFERS O COLAS (Ver figura A.4): En ellos se almacenan las Parts. Las Parts no son activos, deben ser lanzados hacia otros elementos desde los Buffers o empujados desde estos hacia otros elementos mediante las reglas de salida. La opción delay del Buffer puede alterar el comportamiento del Buffer. Seguidamente están las opciones que se pueden ejecutar: El Buffer None significa que el Buffer se comporta como pasivo, es decir, las Parts pueden ser llevadas en cualquier momento a otros elementos. El Buffer Min significa que el Buffer se comporta como de retraso, es decir, las Parts pueden estar un tiempo en el Buffer hasta que otro elemento llegue a él. El Buffer Max significa que el Buffer se comporta como de detención, es decir, que un elemento puede llevar Parts en cualquier momento, pero si una Part permanece en el Buffer por un período mayor al período máximo especificado, será movido del Buffer usando una regla de salida. Así si la regla de salida falla la Part permanecerá en el Buffer indefinidamente, o hasta que otro elemento se la lleve. El Buffer Both significa que el Buffer retrasa las Parts que están en él por el mínimo tiempo establecido en detail, entonces se comporta como un Buffer de detención para las Parts que están en el Buffer por el máximo tiempo (Buffer Max). 151 Figura A.3 Ventana de definición de una Part (Detail) Figura A.4 Ventana de definición de un Buffer (Detail) 152 • El Buffer Max Repeat significa que el Buffer se comporta como un Buffer de detención doble, es decir, como un Buffer normal de detención, excepto que si falla la regla de salida, retrasa el suceso hasta que el tiempo de salida de Part es igual al máximo del tiempo de retraso. El proceso se repite indefinidamente hasta que la regla se cumpla u otro elemento tire de la Part. MACHINES O ACTIVIDADES (Ver figura A.5): Son uno de los elemento más usados y representan cualquier trabajo que se ha de realizar a las Parts en cualquier momento, procesarlos y enviarlos al próximo destino. En las Machines es donde las Parts pueden ser moldeadas y cambiadas, gastando tiempo procesándolas, cambiando de un estado a otro al tiempo que las hace avanzar. Una Manchine puede procesar una Part o más de una a la vez. Puede ensamblar diferentes Parts juntas dentro de una o disgregar una en varias. Seguidamente se describen diferentes tipos de maquinas que pueden implementar: Figura A.5 Ventana de definición de una Machine (Detail) Single Machina (Figura A.6): Procesa Parts de una en una. IN OUT MACHINE Figura A.6 Esquema de una máquina simple Batch Machina (figura A.7): Procesa un lote o grupo de Parts cada vez. Es necesaria especificar el número mínimo y máximo de Parts que constituyen el lote o grupo. 153 IN OUT MACHINE Figura A.7 Esquema de una máquina por lotes Assembly Machina (figura A.8): Toma más de una Part y de salida proporciona únicamente una Part. Es necesario especificar el número de Parts que serán ensambladas en una única Part. IN Assembly Quantily=2 OUT MACHINE Figura A.8 Esquema de una máquina ensamblaje Production Machina (figura A.9): Toma varias Parts y como salida produce varias Parts. Es necesario especificar el número de Parts que se producirán de manera que el número de Parts que saldrán será la cantidad que se produce más una. También es necesario indicar el tipo de Part que se crea. IN OUT MACHINE Figura A.9 Esquema de una máquina de producción General Machina (Figura A.10): Saca diferentes cantidades de diferentes Parts. Es necesario especificar el número de entradas y de salidas. ANY NUMBER IN ANY NUMBER OUT MACHINE Figura A.10 Esquema de una máquina general 154 Multi Machina (Figura A.11): Una multi-station Machine, procesa una o más Parts a través de un número de estaciones. Es necesario especificar el número de estaciones y de Parts por estación. Si el número de Parts es mayor que 1, la Machine es una multi-station batch Machine. MACHINE Stations = 6 Parts = 2 Figura A.11 Esquema de una máquina multiestación A.3.2 Elementos no básicos • LABOUR (Ver figura A.12): Pueden ser operarios, inspectores, herramientas u accesorios. Se pueden usar en los procesos, reparaciones o mantenimientos de las Machines o para las averías de los Conveyors. Figura A.12 Ventana de definición de un operario 155 Es necesario definir el tipo y la cantidad que son necesarios y especificarlos en la caja de diálogo del elemento que necesite el Labour. En el momento en que un elemento necesite un Labour, su estado cambiará a “Labour en espera” y esperará hasta que un Labour pase a disponible. Si hay más de un elemento esperando a Labour, acudirá al que tenga la prioridad más alta; si más de uno tiene la misma prioridad entonces irá a la tarea más antigua. La prioridad se indica en el Detail del elemento. Normalmente un Labour permanecerá en un elemento hasta que el proceso sea completado. No obstante se puede sustituir un Labour de su tarea para que efectúe operaciones más críticas. • CONVEYORS (Ver figura A.13): Se utilizan para satisfacer los requerimientos de movilidad de las entidades por el modelo. En Witness existen dos tipos de Conveyors: o Conveyor Fixe: Mantienen la distancia constante entre las Parts. Si el Conveyor para, la distancia entre las Parts en él se mantiene. o Conveyor Queueing: Permite acumular Parts hasta que el Conveyor esté lleno. Figura A.13 Ventana de definición de una manutención o conveyor En ambos casos es necesario indicar los siguientes parámetros en la pantalla Detail (Ver Figura A.13): o Length in Parts: Se refiere a la longitud del Conveyor en unidades de posiciones de Parts en el Conveyor (por ejemplo, si el Conveyor mide 30 metros de largo, y una Part mide 0.5 metros de largo, hay como máximo 60 posiciones de Parts). o Max. Capacity: Puede suceder que existan restricciones de no poner más de un cierto número de Parts aunque quepan, por ejemplo por motivos de peso. 156 o Index Time: Es el tiempo requerido para indexar una posición, o lo que se conoce como tiempo ciclo, que es el tiempo que se tarda en recorrer desde el principio hasta el fin, partido por la longitud de las Parts. El ejecutar muchos Conveyors en el modelo puede afectar a la velocidad de ejecución. Los Conveyors sólo atentan a los inputs y outputs de los ciclos, mientras que en las Machines los inputs se realizan tan pronto como haya Parts disponibles y los outputs cuando hay espacio libre. A.3.3 Reglas de entrada y salida Las reglas de entrada y salida se usan para describir como fluyen las Parts a través de los elementos del modelo. Las reglas de entrada se utilizan para llevar una Part al elemento y las reglas de salida para echarlas fuera. Si un elemento no tiene activas las órdenes de “tirar de” entonces está en “espera”, con lo cual nunca recibirá una Part a no ser que le sean empujadas. De igual forma, un elemento que no tenga activadas las órdenes de salida “empujar a” estará en “espera” y las Parts no saldrán de él hasta que otro elemento tire de ellas. El estado “esperando” es el que tienen todos los elementos por defecto al ser creados. • REGLAS BÁSICAS DE ENTRADA Y SALIDA: Son PULL y PUSH respectivamente. La construcción de las órdenes es la siguiente: PUSH to ELEMENTO1 Las Parts salen de un elemento que las empuja hasta otro llamado ELEMENTO1. PULL from ELEMENTO2 Las Parts entran en un elemento que tira de ellas desde otro llamado ELEMENTO2. Estas órdenes deben estar describas en el Detail del elemento. • RESUMEN DE REGLAS DE ENTRADA: A continuación se explica la estructura de las reglas de entrada más usadas. WAIT: El elemento está “esperando” hasta que las Parts son empujadas hacia él. Es la regla por defecto de todos los elementos. PULL: Tira de una lista de estaciones por orden preferente. MOST: Tira de la Part que esté en el elemento con más entidades (se especifica la entidad) de una lista. LEAST: De una lista coge el elemento que tenga menos entidades (se especifica la entidad). PERCENT: De una lista coge un porcentaje de cada elemento que aparezca en ella, previamente especificado. SEQUENCE: Toma las Parts de una lista siguiendo una secuencia y unas reglas en caso de no disposición. IF: Si una expresión es cierta entonces realiza una serie de acciones. SELECT: Selecciona de donde toma Parts en función de una expresión. BUFFER: Sólo para Machines; crea una buffer de entrada. MATCH: Permite a una machine tener distintas entradas. • RESUMEN DE REGLAS DE SALIDA: A continuación se explica la estructura de las reglas de salida más usadas. WAIT: El elemento está “esperando” hasta que las Parts son estiradas desde él. Es la regla por defecto de todos los elementos. PUSH: Empuja a una lista de estaciones por orden preferente. 157 MOST: Empuja la Part hacia el elemento con más entidades (se especifica la entidad) de una lista. LEAST: De una lista empuja hacia el elemento que tenga menos entidades (se especifica la entidad). PERCENT: De una lista empuja un porcentaje a cada elemento que aparezca en ella, previamente especificado. SEQUENCE: Empuja las Parts de una lista siguiendo una secuencia y unas reglas en caso de no disposición. IF: Si una expresión es cierta entonces realiza una serie de acciones. SELECT: Selecciona hacia donde empuja Parts en función de una expresión. BUFFER: Sólo para Machines; crea una buffer de salida. Las Parts pueden ser estiradas del WORLD (entran en el modelo) o empujadas a SHIP, SCRAP o ASSEMBLE (dejan el modelo). Figura A.14 Ventana de Detail de una Machine A.3.4 Acciones y elementos lógicos Usando Acciones se pueden especificar instrucciones lógicas al modelo, permitiendo modelar los cálculos y fórmulas que se deciden en la vida real. Estas acciones pueden llevarse a cabo en la ejecución de la simulación. Las acciones pueden usarse para las siguientes operaciones: • Manipular variables y atributos 158 • • • • • • • Controlar Parts Leer y escribir datos en un fichero Producir informes estadísticos Crear diálogos entre el modelo y el usuario Cambiar el tipo de las Parts Grabar valores en un histograma Etc.... Las acciones ocurren cuando se produce un cambio de estado en un elemento, y en cada caso se editan en una ventana distinta: • Machines: ACTIONS ON START..................... Cuando la máquina comienza el ciclo. ACTIONS ON FINISH..................... Cuando la máquina termina el ciclo, cuando la Part abandona la máquina. ACTIONS ON DOWN..................... Cuando la máquina entra en avería. ACTIONS ON REPAIR................... Cuando finaliza la avería. ACTIONS ON START SETUP........ Cuando la máquina entra en mantenimiento. ACTIONS ON FINISH SETUP….... Cuando la máquina acaba el mantenimiento. • Part: ACTIONS ON CREATE................. Cuando la Part es creada, cuando entra en la simulación. ACTIONS ON LEAVE.................... Cuando la Part deja la simulación. • Conveyors: ACTIONS ON JOIN....................... Cuando la Part se une al Conveyor por la parte de atrás. ACTIONS ON REACH FRONT….. Cuando la Part deja el Conveyor por la parte de delante. • Buffer: ACTIONS ON IN............................ Cuando la Part se encuentra en el Buffer. ACTIONS ON OUT........................ Cuando la Part sale del Buffer. A.3.5 Atributos Los atributos son características de las Parts, por ejemplo, color, tamaño, tiempo de ciclo, etc. Cada atributo puede ser un número real, entero, una referencia a otro elemento del modelo, etc. Cada Part puede tener un número de Atributos asociados a él y cada uno puede tener distintos valores en diferentes tiempos de la simulación. Cada Atributo y el valor del mismo siguen a la Part durante la ejecución del modelo. • ATRIBUTOS UNIVERSALES: Hay 5 atributos que todas las Parts tienen automáticamente (predefinidos o Atributos de sistema). Estos son: DESC: Una descripción de 4 caracteres para la Part. PEN: El color con el que la Part está representada en la pantalla. ICON: El icono con el que la Part está representada en la pantalla. Se necesita además el uso de DESC y para el color del icono el uso de PEN. STAGE: Se usa en la ruta de una Part y es la etapa actual en la ruta. TYPE: El nombre de la Part. 159 Cuando se usan Part Routin (en una ruta) hay otros dos atributos universales: R_CYCLE: El tiempo ciclo del STAGE (etapa) actual en la ruta. R_SETUP: El tiempo de setup del STAGE (etapa) actual en la ruta. • GRUPOS NUMERADOS DE ATRIBUTOS: Ciertas características son relevantes sólo para ciertas Parts; por esta razón Atributos y Parts son asignados a grupos, hay 10 grupos numerados de 1 a 10. Una Part podrá tener los Atributos definidos en un mismo grupo. • ATRIBUTOS FIJOS O VARIABLES: Las Parts pueden ser definidas con Atributos fijos o variables; las Parts con Atributos fijos toman menos memoria que las Parts con Atributos variables.Las Parts con Atributos variables pueden tener diferentes valores para cada individuo, y estos valores pueden cambiar en cualquier momento. Las Parts con Atributos fijos no pueden tener diferentes valores para cada individuo, es decir, los Atributos sólo pueden tener un valor. • ATRIBUTOS MODIFICADOS: Normalmente los atributos sólo pueden ser usados cuando la Part está en curso, y sólo el Atributo de la Part en curso puede ser referenciado. Por ejemplo, si en acción al final del ciclo existe una acción de cambiar un atributo, sólo se cambiará en de la Part que en la máquina. Añadiendo una modificación Modificar el atributo podemos inspeccionar o cambiar el valor de los Atributos de las Parts en cualquier parte del modelo. La expresión para modificar un atributo es la siguiente: Element {AT position} : Attribute A.3.6 Variables Las variables son muy usuales cuando los datos van a almacenarse o los usos no son relativos a Parts individuales o no se pueden usar directamente en el Detail del elemento. Las variables son valores a los que se puede acceder desde cualquier parte del modelo. Las variables usualmente tienen sus valores asignados en un grupo de Acciones. Las más importantes pueden tener una cantidad de más de uno, autorizando la creación de listas. Estas variables pueden ser agrupadas en forma de matriz de dos dimensiones, poniendo la cantidad x, y. A.3.7 Funciones del sistema Una función puede retornar un número real, entero, nombre o string, y puede ser usado en cualquier plazo en que la Variable o constante del mismo tipo se use. WITNESS tiene una lista de funciones “intrínsecas”: • INFORME Y ESTADO DE LAS FUNCIONES: Estas funciones tienen los valores en los informes e informan del estado en curso de los elementos especificados. ISTATE: Número que indica el estado del elemento especificado. NCREATE: Número de Parts del tipo especificado que han sido creadas. NFREE: Cantidad del espacio libre del elemento especificado. NPARTS: Número de Parts en el elemento especificado. PUTIL: Porcentaje de tiempo del elemento especificado que se ha gastado en el estado especificado. LIFE: El tiempo de vida de permanencia de tiempo de mantenimiento de la Machine en términos de número de operaciones. 160 • FUNCIONES ARITMÉTICAS: Estas Funciones llevan incorporadas operaciones aritméticas. FLOAT: Especifica un entero como número real. IFIX: Parts enteras de un número real. MAX: Máximo de la lista de número enteros. MIN: Mínimo de la lista de números enteros. MOD: Devuelve el resto de dividir un entero por otro entero. Una lista llena de funciones disponibles y Details sobre su uso está en el User Manual o en el Quick Reference Booklet. A.3.8 Histogramas El histograma es un gráfico de barras, y es útil para determinar el rango de los valores observados para algunos parámetros de la simulación. Los histogramas de WITNESS permiten representar gráficamente los resultados de la simulación en pantalla. WITNESS permite crear todos los gráficos que se desee y grabar valores en ellos según convenga. Las barras deben ser dibujadas vertical u horizontalmente, permitiendo producir “Gantt type charts”. Los valores deben ser grabados en un histograma usando el comando RECORD en un grupo de acciones en cualquier lugar del modelo: RECORD Valor en un Histograma Una barra de una altura específica se puede dibujar usando el comando de acción DRAWBAR: DRAWBAR Valor de Histograma, altura, color La altura de una barra en el histograma puede ser incrementada usando el comando de acción ADDBAR: ADDBAR Valor de Histograma, altura, color Ejemplos de uso de histogramas pueden ser tiempos de reparación, el tiempo que tardan las piezas en desplazarse a través del sistema. Las siguientes características deben ser preparadas y representadas como convenga en el histograma: Nombre del Histograma Histograma Los valores Máximo y Mínimo que graba Color de las barras Icono A.3.9 Ficheros WITNESS proporciona la facilidad de utilizar ficheros de datos en el modelo. Se pueden meter valores en un fichero (fichero de lectura), y se pueden sacar valores (fichero de escritura). Los ficheros de entrada y los de salida tienen diferentes usos, por ejemplo: 161 • Valores específicos para ser usados en el Detail de los elementos, como el tiempo de ciclo de una máquina. • Producir informes en función de los requisitos, con el layout y contenidos propios. Estos ficheros son de texto, y pueden ser editados utilizando un procesador de texto o editor e imprimir en la impresora. Los valores que se leen deben ser valores constantes de uno de los cuatro tipos de datos de WITNESS; entero , real, nombre o cadena de caracteres. • FICHEROS DE LECTURA: El comando de la acción de leer “READ” se usa para leer datos de un fichero. Esto se usa en cualquier declaración de acciones: Acciones de inicialización o Acciones de principio de ciclo de una máquina. Cada vez que WITNESS encuentra una declaración “READ” leerá una nueva línea del fichero. No obstante, si un punto y coma (;) se encuentra al final de la declaración “READ” la siguiente lectura la hará donde acabo la última lectura. Si la declaración “READ” intenta leer más valores de los que existen en el fichero tendremos un error. Los datos de un fichero deben ser leídos en variables o atributos. El formato de la declaración “READ” es: READ nombre del fichero lista de variables o atributos. • FICHEROS DE ESCRITURA: El comando de la acción escribir “WRITE” se usa para escribir en un fichero de datos. Los valores que se escriben deben ser también enteros, reales, nombres o cadena de caracteres. Cualquier declaración “WRITE” cera una nueva línea en el fichero. Cuando se usa el comando “WRITE” un número de caracteres especiales se utilizan para realizar el formato del fichero: \f: Introduce la alimentación de formatos. \n: Introduce una nueva línea. \t: Introduce un espacio tabulado. El nombre del fichero de WITNESS se usa para referenciar el fichero en WITNESS, en declaraciones “READ” y “WRITE”. El nombre actual del fichero se refiere al fichero se refiere al fichero del disco duro o disquete. Esto no tiene por que ser el mismo nombre que el fichero de WITNESS. También es posible especificar el directorio en el cual se encuentra el fichero. Esta facilidad es útil cuando se comparan distintas posibilidades de datos. Los datos se pueden guardar en un número de ficheros y el nombre del fichero actual cambiar para cada experimento para referenciar el fichero correcto. El formato de la declaración “WRITE” es: WRITE nombre del fichero lista de variables o atributos. Los datos obtenidos en los ficheros de texto que se obtienen de WITNESS pueden importarse desde una hoja de Excel, convertirlos en tablas y obtener gráficas que nos expresan claramente la evolución del modelo a lo largo del tiempo. 162