MANUAL BÁSICO DE WITNESS EL PAQUETE DE SIMULACIÓN WITNESS. 1. INTRODUCCIÓN. En la actualidad hay en el mercado gran cantidad de software de simulación debido a la creciente demanda que está teniendo esta técnica de ayuda a la toma de decisiones. Entre los paquetes disponibles se encuentran Arena, Automod, Instrata, Mentor, Pro-Model, Simple ++, Taylor II y Witness, cada uno con características distintas en cuanto a su capacidad de modelización, su rapidez, su rigurosidad estadística, su capacidad gráfica, su facilidad en el análisis y su coste. Decidirse por uno u otro dependerá de la experiencia que tenga el analista con los diversos programas, del tipo de sistema a simular, así como del coste que supone para la empresa la adquisición del paquete, el hardware necesario para su utilización y el aprendizaje del personal. 2. EL PAQUETE DE SIMULACIÓN WITNESS (V. 8.0). Algunas de las ventajas más importantes que presenta Witness y que le hacen apropiado para su elección como herramienta de trabajo son las siguientes: 1. Las personas pueden conseguir un compromiso trabajando juntos como equipo en la creación y uso de los modelos Witness. 2. Los modelos pueden ser creados y probados con pequeñas variaciones en los distintos estados, esto simplifica de gran manera la construcción del modelo y ofrece la posibilidad de identificar errores en la lógica y hace el modelo más fiable. 3. El modelo puede ser cambiado durante el tiempo de ejecución, los cambios son incorporados inmediatamente, ajustando lo más rápidamente posible el modelo construido. Además Witness puede ser utilizado en una gran variedad de sectores y entornos: • Industria del automóvil. • Industria química. • Electrónica. • Industria aeroespacial. • Ingeniería. • Alimentación. • Papel y cartón. • Banca y finanzas. • Transporte. • Gobierno. El paquete Witness es suministrado por la empresa británica AT&T Istel. En 1979 la compañía Istel fue adquirida por la multinacional ATT, constituyendo así una organización dedicada a proporcionar conocimientos técnicos sobre ordenadores y comunicaciones. AT&T Istel lanzó en 1979 el paquete de simulación interactivo SEE WHY (que ya incluía gráficos animados), el cual derivó en la aparición del paquete Witness en el año 1986. 2.1. CARACTERÍSTICAS GENERALES DEL PAQUETE. Witness es un paquete de simulación interactiva atractivo fundamentalmente para el mundo industrial por los siguientes motivos: • permite crear modelos de sistemas en los que fluye algún elemento (admite hasta 32000 parts) a través de distintos puestos de trabajo (machines), pudiendo modelizarse además almacenes (buffers), transportadores (conveyors), trabajadores (labours), transportes (tracks & vehicles), turnos de trabajo (shifts), etc..., que ayudarán a definir el sistema a modelizar. • permite el empleo de gran cantidad de variables y atributos para, a través de su lenguaje de programación propio, poder modelizar correctamente el funcionamiento de nuestro sistema. • permite crear modelos gráficos con movimiento, dotando a la simulación de gran claridad, entendimiento, rigurosidad e impacto visual. • ofrece gran cantidad de datos como salida de un experimento de simulación para su posterior estudio, bien directamente, a través de los informes generados, o bien volcando los ficheros de datos generados a alguna aplicación informática que permita su tratamiento. • es fácil de comprender para una persona sin conocimientos previos, aunque el dominio de todos sus elementos y su lenguaje propio de programación es algo más complejo. • es fácil de utilizar gracias al entorno Windows con el que trabaja: ventanas, cajas de diálogo y menús desplegables manejables con el ratón. • dispone de un sistema de ayuda on-line, pulsando F1 en cualquier momento. • permite la utilización en un experimento de datos incluidos en ficheros realizados por otro programa (una hoja de cálculo como Excel, por ejemplo) y generar los resultados de la simulación en forma de un fichero manipulable desde otro programa informático. • puede “editarse” (construirse, modificarse) un modelo sin necesidad de correr Witness mediante un programa de edición de texto como Write (Windows), manipulando un archivo librería *.lst. • permite crear ficheros de arranque en formato ASCII (con Write, por ejemplo) para poder concatenar varios experimentos uno tras otro, de modo que se pueda dejar corriendo el ordenador hasta que finalice todas las simulaciones programadas. Después será posible examinar el modelo en aquel punto de la simulación al que ha llegado. • pueden crearse submodelos que puedan ser copiables, borrables, desplazables e interconectables, lo que permite un diseño modular. • permite realizar gráficas (timeseries) e histogramas (histograms) de determinados parámetros del modelo que interese estudiar, para facilitar su comprensión y ver su variación temporal. • pueden emplearse gran cantidad de distribuciones de probabilidad, tanto teóricas como empíricas, para proporcionar aleatoriedad al modelo (dispone de 1000 series de números aleatorias distintas). Así mismo, es posible establecer varios tipos de “roturas” a la vez en cada uno de los centros de trabajo del modelo. 2.2. MODELIZANDO CON WITNESS. Una realidad industrial puede estar formada por un conjunto de piezas que fluyen a través de un conjunto de máquinas en las que son mecanizadas, montadas, divididas, etc... Además de esto, el sistema puede estar compuesto por diversos transportadores (que llevan las piezas de un lugar a otro), almacenes, operarios (necesarios para que una máquina funcione, para hacer reparaciones, para hacer cambios de herramienta, etc...), vehículos (para transportar las piezas), etc... Por otra parte, las piezas deben fluir en un determinado orden y sentido, pueden fluir solas o en grupo, las máquinas y operarios harán una cosa u otra en función de ciertos parámetros, etc... Esta realidad industrial puede ser plasmada en un modelo Witness empleando los elementos de los que dispone el programa así como programando el modelo mediante una lógica de control adecuada. En Witness, los modelos se construyen de acuerdo a unos procedimientos concretos y utilizando unos elementos determinados. Cada elemento modelizará a alguna parte del sistema real que se desea simular, pero no es necesario tratar de plasmar todos y cada uno de los elementos del sistema real, sino sólo los indispensables. Cada elemento de Witness puede simular gran variedad de cosas, y una misma cosa se puede simular por lo general con varios elementos indistintamente. La elección de un elemento u otro debe hacerse en función de la sencillez y facilidad de interpretación del modelo resultante. 2.3. CONSTRUCCIÓN DE UN MODELO CON WITNESS. Primero se va a describir los pasos a seguir para la creación de un modelo Witness, después ya se estaría en condiciones de utilizar el modelo y finalmente se podrán extraer conclusiones con los resultados de los experimentos realizados y con los informes obtenidos, para profundizar en el estudio del sistema modelizado. Figura 1 Pantalla inicial Tras un estudio del sistema que se pretende modelizar se deberán conocer los elementos que constituyen nuestro sistema real y su funcionamiento, para empezar a pensar en elegir los elementos de Witness adecuados para modelizar cada elemento real, teniendo en cuenta hacerlo de un modo sencillo y eficaz. Determinado esto, podemos comenzar a construir el modelo y así entraremos en el programa apareciendo inicialmente la pantalla de la figura 1. Para empezar a trabajar se creará un nuevo modelo, para esto se pinchará sobre Model y del desplegable que aparece sobre Elements y entonces se rellenará los campos que aparecen en la siguiente pantalla, relativos al título del modelo, autor y comentarios. Figura 2 Definición de modelo A partir de ahora se pasará por tres etapas diferentes que son las siguientes: • Define: se crean o definen los elementos de los que consta el modelo (tanto físicos como lógicos), dándoles un nombre y una información básica acerca de los mismos. Sin el desarrollo de esta fase no pueden desarrollarse las otras dos. • Display: se crea la representación gráfica del elemento en el modelo con el objeto de hacer la simulación más intuitiva y fácil de comprender. Esta fase no es imprescindible, pero sí recomendable para obtener la visualización del sistema y detectar errores. • Detail: se detallan todas las características del elemento, las reglas lógicas que permiten su interacción con los demás elementos (reglas de entrada y salida) y las acciones que deben de simularse cuando se produce un hecho determinado en el elemento (actions). Las fases no suelen desarrollarse secuencialmente, sino que se va pasando de una a otra según se va avanzando en la construcción del modelo. A veces habrá que modificar elementos, ya que el proceso de modelización tiene una constante retroalimentación. Figura 3 Opción Model - Elements Para empezar la construcción del modelo seleccionando una vez más las opciones Model y Elements consecutivamente, y así aparecerá la siguiente pantalla de la figura 3., que ofrece múltiples opciones. Para crear los elementos del modelo, se utilizará la opción de selección de elementos, para cada uno de los cuales se puede elegir entre las siguientes opciones, para introducir sus características, las tres primeras corresponden a las anteriormente explicadas: • DEFINE • DISPLAY • DETAIL • CLONE: Es posible clonar elementos, de los que habrá que indicar su nombre y se podrá elegir para estos la opción DISPLAY. • COPY DISPLAY, COPY DETAIL, PASTE DISPLAY, PASTE DETAIL: Se pueden usar estos botones para copiar las características introducidas en DISPLAY o DETAIL de un elemento a otro • FILTER: Permite reducir la lista de todos los elementos definidos en el modelo. Se puede reducir el tamaño de esta lista filtrando los elementos que no se necesitan ver en ese momento, las opciones son: - ALL: Selecciona los elementos (por defecto). - TIPO: Permite elegir algún tipo en concreto. - SELECTION: Antes de pinchar en filtrar se seleccionan los elementos requeridos. Figura 4 Opción para filtrar los elementos del modelo. • SORT: Si el modelo tiene muchos elementos, se pueden reordenar y reducir el tamaño de la lista para hacerla más manejable. Se puede ordenar la lista de las siguientes formas: - DEFAULT: Ordena la lista en el orden en el que los elementos fueron introducidos en el modelo. - ALPHABETICALLY: Ordena los elementos alfabéticamente. - BY TYPE: Los elementos son ordenados por el tipo, o tipos, seleccionados. - BY CUSTOM: Eligiendo esta opción se permite desde otra ventana de diálogo reordenar los elementos moviéndolos arriba o abajo. Figura 5 Opción para ordenar los elementos del modelo • PICK FROM DISPLAY: Permite seleccionar los elementos desde la ventana de simulación. • DELETE: Elimina el elemento o elementos especificados del modelo. Si un modelo es referenciado por otros elementos de ese modelo, no se permitirá que sea eliminado. 2.3.1. ELEMENTOS DE MODELIZACIÓN DE WITNESS. Un modelo de Witness está compuesto por diversos elementos físicos conectados entre sí mediante una serie de reglas lógicas denominadas reglas de entrada y salida. Cada componente del sistema real tendrá una representación mediante uno o más elementos de Witness. El propósito de la simulación será construir un modelo de un escenario particular, ponerlo en marcha y recoger resultados, después hacer cambios en el modelo y ponerlo en funcionamiento otra vez y comparar los resultados con el modelo original. En la vida real esto sería muy caro y requeriría mucho tiempo de experimentación. Para simular un proceso, Witness utiliza la misma combinación de gentes, piezas y máquinas que en la vida real. Cada factor de producción será uno de los llamados ELEMENTOS del modelo. Hay cuatro categorías de elementos: discretos, continuos, lógicos y gráficos, a continuación se describen brevemente para ser tratados con detalle más adelante. 1. ELEMENTOS PROCESOS DISCRETOS PARTS: Se mueven individualmente en el modelo, por ejemplo, componentes físicos, personas moviéndose en un supermercado... BUFFERS: Son lugares donde se almacenan PARTS, por ejemplo, gente en una cola, medicinas en una estantería, tornillos esperando a ser procesados... MACHINES: Son elementos muy potentes que son usados para representar como las piezas se cogen de algún lugar, se procesan y se envían a otro destino. Pueden manejar una o más partes al mismo tiempo. También pueden desarrollar varios ciclos en una estación de trabajo o un ciclo (single cycle) en muchas estaciones. CONVEYORS: Mueven PARTS desde un punto fijo en el modelo a otro en un periodo de tiempo VEHICLES: Transportan PARTS TRACKS: Son las rutas/caminos por donde circulan los VEHICLES LABOUR: Recurso que necesitan otros elementos para desarrollar ciertas operaciones (limpiar, reparar...). MODULES: Contienen grupos de elementos 2. ELEMENTOS PROCESOS CONTINUOS FLUIDS: Fluyen de forma continua a través de los elementos que a continuación se indican. También se pueden utilizar estos elementos en modelos que no emplean líquidos para representar por ejemplo, tráfico denso, el correo,... TANKS: Son los elementos en los que se almacenan los FLUIDS PROCESSORS: Son equivalentes a las MACHINES pero para los FLUIDS. PIPES: Se encargan de conectar PROCESSORS y TANKS. 3. ELEMENTOS LÓGICOS ATTRIBUTES: Son valores vinculados a un elemento PART. Por ejemplo, número de cilindros de un motor. VARIABLES: Son valores que pueden ser accedidos desde cualquier lugar del modelo. DISTRIBUTIONS: Permiten construir la variabilidad del modelo incluyendo datos que habrán sido recogidos del sistema que se está recogiendo en el modelo. FILES: Se pueden emplear para importar valores a la simulación o para exportar datos que pueden ser usados en otros programas o informes. FUNCTIONS: Son información acerca funciones del ya estado preparadas del modelo, para o devolver construir la ruta/comportamiento del modelo. SHIFTS: Son modelos de trabajo que pueden ser referenciados por otros elementos, permitiendo construir el modelo sobre tipos de secuenciación ya definidos. PART FILES: Contiene una lista de partes; para cada parte en el fichero se puede especificar en que momento llega al modelo. Esto es muy útil para los problemas de programación de horarios, producción... 4. ELEMENTOS GRÁFICOS TIMESERIES: Permiten representar sobre la pantalla los resultados de la simulación de forma gráfica (valores de una variable frente al tiempo). Resultan muy útiles para determinar tendencias y ciclos en los modelos representados. HISTOGRAMS: Permiten representa los resultados de la simulación en la pantalla en forma de diagrama de barras. Son útiles para determinar el rango de valores observados de algún parámetro de la simulación. PIE CHARTS: Permiten presentar los resultados de la simulación en la pantalla en forma de gráfico de sectores. Una vez definidos los elementos del modelo, hay que indicar cuáles son las relaciones entre ellos y entre que puntos se mueven, esto se hará utilizando las reglas de salida y entrada que deberán ser especificadas para cada uno de los elementos. Definidas ya las relaciones entre elementos es el momento de poner en funcionamiento el modelo, y se podrán realizar las modificaciones convenientes en cada caso, como puede ser añadir, cambiar o borrar elementos y comparar los efectos que producen estos cambios. La posibilidad de construir un modelo en el que se pueden realizar pequeños incrementos y ver que consecuencias producen, va a resultar ser muy útil para la etapa de validación del modelo. 3. ELEMENTOS: OPCIONES DETAIL Y DISPLAY En este apartado se describen las características que Witness permite que se definan de los elementos definidos, tratando con mayor detalle los elementos utilizados para simular sistemas discretos. 3.1. ELEMENTOS PROCESOS DISCRETOS. 3.1.1. PIEZAS (PARTS) Son los elementos que fluirán a través del modelo, pasando de unos elementos a otros en función de las reglas de entrada y salida de los mismos. La entrada en el modelo se realiza desde un elemento predefinido llamado world o a través de un fichero de piezas -part file- que indica cuándo entra cada pieza en el modelo y en qué número, y la salida del modelo se hace hacia otro elemento predefinido llamado ship o hacia un fichero de piezas -part file- que recoge cuándo sale cada pieza del modelo. Las piezas pueden representar cualquier cosa: paletas, motores, personas, cartas, bebidas, etc.., qué constituyan aquellos elementos que fluyen por el modelo. Las piezas pueden visualizarse en el modelo (display) de una de las siguientes formas: como iconos, como las 4 iniciales de su nombre o como un simple contador que señala el número de parts que hay dentro de un elemento. Para determinar la forma en la que se visualizará este tipo de elementos se elegirá la opción Display ofreciendo la siguiente barra de herramientas. Figura 6 Opción Display Part Cada pieza puede llevar asociada uno o varios atributos que pueden tomar distintos valores en distintos momentos de la simulación, activando o no diferentes eventos lógicos. Las piezas pueden moverse individualmente, en grupo, pueden juntarse o dividirse, pueden transformarse en otro tipo de piezas en el transcurso de la simulación, etc... Las características de las Parts que hay que definir en Witness desde la opción Detail son las siguientes: Figura 7 Opción Detail Part NAME: nombre de la pieza (hasta 8 caracteres). TYPE: indica si los atributos de la part serán fijos (no puede cambiar su valor durante la simulación) o variables (puede variar su valor durante la simulación). VALUES: da valor a los atributos fijos, caso que sean de este tipo. A los variables se les da valor en el campo Actions. GROUP NUMBER: indica en número del grupo de atributos variables al que pertenece el part. ARRIVAL MODE: indica si la llegada activa de piezas al modelo desde el world está activada o no. Se debe emplear el modo PASIVE cuando las piezas entren a través de un Part file). MAXIMUN ARRIVALS: máximo número de piezas que pueden entrar al modelo. INTER ARRIVAL TIME: tiempo entre llegadas de las distintas piezas al modelo. FIRST ARRIVAL AT: momento temporal en que la primera pieza llega al modelo. LOT SIZE: tamaño del lote de piezas que llegan a la vez al modelo. SHIFT: turno de trabajo en el que llegan las piezas. OUTPUT RULE: regla de salida que indica a qué elemento y bajo qué condiciones será enviada la pieza a dicho elemento. PART ROUTE: permite definir la ruta que seguirá la pieza a través del modelo, identificando los distintos puntos o stages por los que deberá pasar. Para utilizar un part route hay que emplear como reglas de entrada/salida de los distintos elementos push/pull to Route. CONTAINS FLUIDS: indica si ese part es un fluido, su tipo y su volumen. ACTIONS: indican las órdenes lógicas programadas a ejecutar cuando una pieza es creada (create) o abandona el modelo (leave). Estas acciones permiten “programar” el modelo de modo que actúe como es deseado que lo haga. REPORTING: sirve para indicar, si se desea, que se tomen estadísticas sobre esa pieza. 3.1.2. MAQUINAS (MACHINES): Son los elementos que operan con las piezas: que reciben de otro elemento, realizan alguna acción con las mismas en un cierto tiempo (cycle time), y las envían a otro elemento. Son el elemento principal de simulación y tienen gran utilidad por poder representar gran variedad de operaciones realizadas por máquinas o personas: una máquina que mecaniza o monta piezas, un trabajador, un elevador, una mesa de giro, etc... Gráficamente pueden representarse por un icono (propio del programa o diseñado por nosotros) que puede cambiar de color en función del estado de la máquina durante la simulación, seleccionando status en el menú display machine como se observa en la figura. Figura 8 Opción Display Icon El significado de cada uno de los colores es: Verde - ocupada (busy) Amarillo - esperando piezas (idle) Magenta - bloqueada (blocked) Roja - averiada (down) Azul - esperando operario para funcionar Cyan - esperando operario para ser configurada Blanco - fuera de turno Sólo los elementos monocromáticos pueden cambiar de color cuando el elemento cambia de estado. Existen varios tipos de máquinas, dependiendo del nº de piezas que procesen a la vez: SINGLE: sólo procesan una pieza cada vez. BATCH: procesa un lote de piezas a la vez. En éste tipo de máquinas, las piezas van entrando hasta completar el tamaño del lote, para el cycle time y el lote sale de la máquina hacia el siguiente elemento detallado en la output rule. El cycle time no empieza a contar hasta no disponer de todas las piezas del lote en la máquina. ASSEMBLY: entran varias piezas, son ensambladas y sale sólo una pieza. El cycle time no empieza a contar hasta no disponer de todas las piezas en la máquina. PRODUCTION: entra una pieza y sale esa pieza más una cantidad fijada de otra pieza que se desea producir. GENERAL: entra una cantidad fijada de piezas y sale otra cantidad fijada de esas piezas. Si entran dos piezas de tipo distinto y sale sólo una pieza, su tipo será el mismo que el de la primera pieza que entró. MULTI-STATION: máquina con varias posiciones a las que van entrando secuencialmente las piezas una tras otra. Las características de las Machines que hay que definir en Witness son las que aparecen en la siguiente pantalla y en cada una de sus pestañas: Figura 9 Opción Detail machine NAME: nombre de la máquina (hasta 8 caracteres) QUANTITY: número de máquinas exactamente iguales (hasta 99) que deseamos modelizar. TYPE: tipo de la máquina (single, batch, general,..). PRIORITY: prioridad de esa máquina frente a las demás cuando una pieza o un labour puede ir a varias máquinas. Un “1” indica máxima prioridad y un “0” indica sin prioridad. LABOUR: indica si la máquina precisa de algún labour (operario, herramienta) para su puesta en marcha (set-up), su funcionamiento normal (cycle) o su reparación (repair). Se indica además la cantidad (quantity) de labour requerida y su tipo. RULES: sirven para indicar a las máquinas los criterios bajo los cuales las piezas entran (Input rules) o salen (Output rules) de las máquinas. CYCLE TIME: indica el tiempo de operación de la máquina. BREAKDOWNS: sirven para establecer cómo la máquina se estropea, fijando la ley o distribución estadística bajo la que lo hace, el tiempo medio de reparación (m.t.t.r. -mean time to repair) y el tiempo medio entre fallos (mtbf- mean time between failures). Las máquinas sólo pueden romperse si tienen dentro pieza/s. Las roturas pueden establecerse en función de: • el tiempo que la máquina esté libre (availible time). En este caso el m.t.b.f. se calculará como el tiempo medio entre el comienzo de una rotura y el comienzo de la siguiente • el tiempo que la máquina esté ocupada (busy time) • el número de operaciones realizadas por la máquina. La versión 8.0 de Witness tiene capacidad para establecer varios tipos de rotura para cada una de las máquinas, de modo que una máquina pueda romperse por distintos motivos, cada uno función de una distribución estadística distinta. ACTIONS: indica las acciones lógicas programadas a ejecutar cuando la máquina comienza a trabajar, cuando finaliza, cuando se rompe o cuando es reparada. SETUP: establece si es requerida una puesta en marcha de la máquina, si se hace siempre o cada cierto tiempo, y su duración. Witness permite hasta 99 configuraciones (setup) distintas para cada elemento. Pueden establecerse tiempos de configuración en función del número de operaciones realizadas (n. of operations), en función del tipo de pieza que llegue a la máquina (part change) o en función del cambio en el valor de alguna variable (value change). Es un campo muy potente que permite muchas opciones. REPORTING: sirve para indicar si deseamos que se tomen estadísticas sobre esa máquina. FLUID RULES: definen las reglas para el manejo de fluidos (llenado y vaciado). SHIFT DETAIL: permite especificar el turno de trabajo en el que opera la máquina. 3.1.3. ALMACENES (BUFFERS) Son elementos que almacenan piezas, sirviendo para representar un almacén, una cola, un conjunto de pedidos a procesar, etc... Los buffers son elementos pasivos que no pueden tomar ni soltar piezas almacenarlas. desde/hacia otros elementos, sino simplemente Puede especificarse la forma en que las piezas entran y salen del buffer, de diferentes formas: definiéndose reglas fifo (por defecto), lifo, por el valor de algún atributo, por una posición concreta, etc... Figura 10 Opción Detail Buffer El número máximo de piezas que cabe en un buffer viene definido por el valor incluido en el campo CAPACITY. Puede desearse que las piezas tengan que estar un tiempo mínimo dentro del buffer antes de poder salir del mismo. Esto puede implementarse por medio del campo DELAY TIME. Otras características de los Buffers que hay que definir en Witness y que se observan en la figura 10., son: NAME: nombre del buffer (hasta 8 caracteres). QUANTITY: número de buffers exactamente iguales (hasta99) INPUT POSITION: indica cómo son colocadas las piezas cuando entran al buffer (rear-última posición-, front -primera posición-, at colocadas en una posición específica-, by attribute -ordenadas según el valor de algún atributo). OUTPUT POSITION: indica cómo abandonan las piezas el buffer (first -la que ocupa la primera posición, max/min- aquella cuyo valor de una expresión es máximo/mínimo, any -aquella que ocupa una determinada posición, condition -aquella que satisfaga una condición). SEARCH FROM: indica como Witness escanea el buffer en busca de la primera pieza que debe salir del mismo (rear -desde atrás hacia delante-, front -desde delante hacia atrás-). ACTIONS: indica las acciones lógicas programadas a ejecutar cuando una pieza entra en el buffer (in), cuando una pieza sale del buffer (out) o cuando una pieza cumple su delay time (end delay). REPORTING: sirve para indicar si deseamos que se tomen estadísticas sobre ese buffer 3.1.4. TRANSPORTADORES (CONVEYORS) Son elementos que sirven para transportar las piezas de un elemento a otro del modelo. Las piezas van en fila a una velocidad dada, atravesando el conveyor. Un conveyor tiene un determinado número de posiciones. Las piezas entran en el conveyor según la regla de entrada programada, van atravesando sucesivamente las distintas posiciones del conveyor (tardando un cycle time en pasar de una posición a otra), hasta llegar a su final o a un punto prefijado, abandonando el conveyor según la regla de salida programada. La entrada y salida de piezas puede realizarse por cualquier punto (posición) del conveyor. Hay dos tipos de conveyors: FIXED: las piezas mantienen siempre la misma distancia entre ellas. Si la primera pieza se bloquea, las demás se detienen, manteniendo las distancias. (Ej: escalera mecánica). QUEUING: las piezas pueden estar a cualquier distancia unas de otras. Si la primera se bloquea, las demás hacen cola detrás de la misma. (Ej: cinta transportadora, rodillos..). Las características de los Conveyors que hay que definir en Witness a través de la pantalla que muestra la siguiente figura 11. son las que se indican a continuación: Figura 11 Opción Detail Conveyor NAME: nombre del conveyor (máximo 8 caracteres) QUANTITY: número de conveyors exactamente iguales. TYPE: tipo de conveyor (fixed o queuing) PART LENGTH: número de posiciones del conveyor. MAX CAPACITY: máximo número de piezas que puede haber a la vez en el conveyor RULE INPUT: regla de entrada que indica cómo las piezas entran en el conveyor. RULE OUTPUT: regla de salida que indica cómo las piezas salen del conveyor. CYCLE TIME: tiempo que tarda una pieza en pasar de una posición a otra del conveyor. BREAKDOWNS: indica cómo son las averías que puede tener el conveyor. Se implementa de modo análogo a los breakdowns de las máquinas descritos anteriormente. PRIORITY: prioridad de ese conveyor frente a otros elementos cuando una pieza o labour puede ir a varios elementos. Un “1” indica máxima prioridad y un “0” indica sin prioridad. LABOUR: indica si es necesaria la presencia de uno o más labours (operario, herramienta) cuando el conveyor sufre una avería para su reparación. SHIFT: permite especificar el turno de trabajo en el que opera el conveyor. ACTIONS: indican las acciones lógicas programadas a ejecutar cuando una pieza entra en el conveyor (join) o cuando una pieza abandona el conveyor (reach front). REPORTING: sirve para indicar si deseamos que se tomen estadísticas sobre ese conveyor. 3.1.5. TRABAJO (LABOUR) En Witness, un labour es un requisito para que otro elemento funcione. Puede representar a un operario, una herramienta, etc... que son indispensables para configurar, hacer funcionar, reparar, realizar un cambio de herramienta, etc..., en algún elemento activo del modelo. Puede priorizarse su uso, de modo que cuando un mismo labour sea requerido a la vez por varios elementos, el labour irá a aquel elemento con mayor priority (número más pequeño). Muchas veces no es necesario modelizar los labours. Por ejemplo, si cada máquina tiene su operario para hacerla trabajar, no hace falta implementar los operarios como labours. Unas características de los labours se definen en el Detail del labour, mientras que otras se definen en el campo labour de los elementos que los emplean. Las características de los labours que hay que definir en Witness en el Detail del labour son como se observa en la siguiente figura: NAME: nombre del labour (máximo 8 caracteres) QUANTITY: número de labours exactamente iguales. SHIFT: indica los turnos de trabajo en los que el labour puede actuar. PRE-EMPT LEVEL: si un labour está realizando una tarea y en ese momento es requerido por un elemento de prioridad superior al que está atendiendo, el labour abandonará la tarea actual sin terminarla en caso de que la diferencia de niveles de prioridad sea mayor o igual que el pre-emp level Figura 12 Opción Detail Labour ALLOWANCE: si al introducir el pre-emp level se ha definido un allowance to finish, entonces la operación actual no se interrumpirá si el tiempo que falta para que termine es menor que el allowance to finish. TIME PENALTY: es el tiempo que tarde de más un labour en terminar la operación por haberla abandonado prematuramente (puede representar el tiempo que tarde el labour en desplazarse de un elemento a otro). LABOUR RULE: indica la regla de elección del labour por ese elemento cuando se cumple alguna condición. REPORTING: sirve para indicar estadísticas sobre ese labour. si deseamos que se tomen 3.1.6. PISTAS (TRACKS) Y VEHÍCULOS (VEHICLES). Son los elementos más complejos de Witness, y sólo deben utilizarse cuando no sea posible modelizar algún elemento de otra forma pues añaden complejidad al modelo y hacen que la simulación corra más lenta. Un vehicle es un elemento que transporta piezas de un track a otro, por lo que ambos son elementos estrechamente vinculados. Los tracks son como las rutas que los vehículos siguen. Los vehicles y tracks son útiles cuando son varios los puntos de carga y descarga, existen diversos trayectos posibles y los vehicles deben atender su demanda de acuerdo a ciertas reglas y prioridades. La forma de funcionamiento es como sigue: un vehicle entra en un track por su parte trasera (rear) y se mueve hacia su parte delantera (front) a una velocidad determinada. Al llegar al final, puede realizar operaciones de carga y descarga si éstas están programadas. Al terminar, pasará al siguiente track de su recorrido o bien al track indicado por su regla Destination. Cada track sólo puede contener un vehículo cada vez, y éstos siempre circulan de rear a front en el interior del track. Puede hacerse que un vehículo quede aparcado en el interior de un track mientras no sea demandado por algún elemento del modelo. Las características que se pueden definir a través de la opción Detail de los tracks son: Figura 13 Opción Detail Track NAME: nombre del track definido. QUANTITY: número de tracks con el mismo nombre. ZONE: forma de agrupar los tracks. CAPACITY: máximo número de vehículo permitidos sobre el track al mismo tiempo. ACTIONS ON: permite definir la acciones que se ejecutarán cuando un vehículo accede a un track. Se pueden utilizar para calcular la velocidad del vehículo. DURATION: permite controlar el tiempo que estará el vehicle en el track. Se puede restringir la velocidad máxima del vehículo con Maximum Speed of Vehicle. ACTIONS ON FRONT: permite definir acciones para ser ejecutadas. STOP: campo que detalla cuando el vehicle debería parar y esperar antes de continuar al siguiente track, se puede hacer que este valor dependa de una variable o una expresión. OUTPUT RULE: especifica la lógica utilizada en la ruta del vehicle al siguiente track. BUSY TIME: indica el tiempo que el track permanece ocupado después de que un vehicle lo haya abandonado. Las características a definir en la opción Detail de los vehicles son las que aparecen en la pantalla de la figura 14.: Figura 14 Opción Detail Vehicle NAME: nombre del vehicle. QUANTITY: es el número de vehicles definidos bajo el mismo nombre. CAPACITY: es el número de parts que puede llevar. SPEED LADED y SPEED UNLOADED: velocidad de cargar y descargar el vehicle. START DELAY y STOP DELAY: se puede añadir estos parámetros a las anteriores velocidades para simular la aceleración y desaceleración del vehículo. ENTRY TO RULE: determina donde empieza en el modelo. ACTIONS ON ENTRY: define las acciones a desarrollar con la entrada del vehículo al modelo. 3.1.7. MODULOS (MODULES) Son agrupaciones de elementos físicos que se realizan para su mejor comprensión y manipulación a la hora de efectuar la modelización de un sistema. Un módulo puede estar compuesto por diversos elementos individuales, de modo que una alteración en uno de estos elementos será automáticamente actualizada en ese elemento del módulo. Los módulos son útiles para modelizar sistemas en los que hay zonas que se repiten, ahorrándonos trabajo. Para ello, el módulo debe ser salvado como submodelo (*.sub). 3.2. ELEMENTOS SISTEMAS CONTÍNUOS. 3.2.1. FLUIDOS (FLUIDS) Pueden representar a líquidos u otro fluido que recorre el modelo, fluyendo a través de tuberías hacia tanques o procesadores. Se emplean para modelizar procesos continuos de producción (por ejemplo en la industria química) o incluso el manejo del correo o tráfico de vehículos. Los fluids pueden mezclarse unos con otros y cambiar de color durante la simulación. 3.2.2. PROCESADORES (PROCESSORS) Son como “máquinas” que operan con fluidos, manipulándolos durante un determinado tiempo de proceso. Al igual que las machines, pueden ser visualizados como iconos que cambian de color en función de su estado, pueden tener breakdowns, pueden precisar de labours en algún momento, pueden tener prioridad, pueden especificarse actions, etc... 3.2.3. TANKS (TANQUES O DEPÓSITOS) Son elementos donde pueden almacenarse los fluids. Equivalen a los buffers para los parts. Su capacidad se mide por volumen de fluid que son capaces de almacenar. Pueden visualizarse como iconos que cambian de color según su estado. Son elementos pasivos en el sentido que no realizan ninguna acción con los fluids, sólo los almacenan. Sin embargo, sí disponen de reglas de entrada/salida para manipular la entrada y salida de los fluids. Así mismo, disponen de posibilidad de prioridad, breakdowns, labours, actions, etc... 3.2.4. TUBERÍAS (PIPES) Son elementos para transportar fluids entre processors y tanks, siendo en cierto modo equivalentes a los conveyors para los parts. Pueden visualizarse de modo que cambien de color según su estado. Disponen de reglas de entrada/salida y posibilidad de breakdowns, labours, actions, etc... 3.3. ELEMENTOS LÓGICOS. Sirven para simular las características y parámetros del sistema necesarios para una correcta modelización, así como para proporcionar información respecto de la simulación. 3.3.1. ATRIBUTOS (ATTRIBUTES) Son nombres o valores numéricos (enteros o reales) asociados a algún part. Su valor se introduce o modifica a través de los actions de los diversos elementos. Un atributo es algo propio e intransferible de un part, que se mueve junto con ella, pudiendo variar su valor en el transcurso de la simulación (si se trata de atributos tipo variables). Un atributo, puede representar el peso de una pieza, su clase, su volumen, etc... de modo, que en función de su valor, una máquina pueda tener un tiempo de ciclo u otro. Hay dos tipos de atributos: FIXED: aquellos cuyo valor ha de ser el mismo para todos los parts del mismo nombre. VARIABLE: aquellos cuyo valor puede ser distinto para cada part individual. A cada tipo de part puede dársele su propio conjunto de atributos, merced a que estos se agrupan en grupos numerados que son seleccionados en el campo Group de las parts. Los atributos pueden aparecer en órdenes lógicas que dan gran flexibilidad y capacidad a la modelización. Las características de los atributos que hay que definir en Witness son: NAME: nombre del atributo (máximo 8 caracteres). QUANTITY: número de atributos con el mismo nombre. TYPE: tipo del atributo (caracteres, real, entero). GROUP: número del grupo al que pertenece el atributo (seleccionar éste número en el campo Group de la part que vaya a utilizar éste tipo de atributo). Estas características se introducen en la pantalla general que aparece al seleccionar Model – Elements, una vez elegido el tipo de elemento Attribute, como se puede ver en la figura 15.: Figura 15 Opción Define Attribute Hay una serie de atributos que ya vienen definidos por el programa para cada pieza, y que pueden manipularse en los actions de cualquier elemento, bien empleándolos en reglas lógicas o bien alterando su valor: TYPE: nombre de la pieza. DESC: 4 primeros caracteres del nombre de una pieza que pueden visualizarse. PEN: color de la pieza. ICON: número del icono que representa a la pieza (1-100). Puede ser un icono creado por el usuario mediante el Icon Editor. 3.3.2. VARIABLES (VARIABLES) Las variables contienen nombres de elementos o valores numéricos (enteros o reales) que pueden emplearse para implementar las reglas lógicas de funcionamiento del modelo. No van asociadas a ningún part, siendo su valor el mismo en cualquier punto de la simulación en un mismo instante, aunque pueden variar su valor en el tiempo a través de los actions. Por ejemplo, puede representarse el tiempo de ciclo de una máquina mediante una variable de modo que, en función del tipo de pieza que le llegue a la máquina, ésta tenga n tiempo de ciclo u otro. En cualquier momento podemos conocer el valor de una variable visualizándola por medio de la fase display. Las características de las variables que hay que definir en Witness son: NAME: nombre de la variable. TYPE: tipo de la variable (caracteres, enteros, real). QUANTITY: número de variables con el mismo nombre (dimensión de la variable). REPORTING: indica si deseamos que se recojan estadísticas sobre esa variable. Al igual que en el caso de los atributos estas características se introducen en la pantalla general de Model – Elements una vez elegido el tipo de elemento como Variable, apareciendo los campos correspondientes: Figura 16 Opción Define Variables Una variable puede representar un sólo valor o bien puede constituir un “array” (cadena) de valores: • si Quantity=1, la variable representa un sólo valor. • si Quantity=x, la variable representa un array unidimensional de x valores. Para referirnos a un valor concreto lo haremos como: Nombre Variable ( posición de 1 a x). • si Quantity=x, y, la variable representa un array bidimensional de x columnas por y filas de valores. Para referirnos a un valor concreto lo haremos como: Nombre Variable (posición columna de 1 a x, posición fila de 1 a y). Existen varias variables definidas por omisión por el programa. Entre ellas la más importante es la variable Time, cuyo valor (número real) corresponde al número de unidades temporales que en ese momento contabiliza el reloj (clock) de la simulación. 3.3.3. DISTRIBUCIONES (DISTRIBUTIONS) Las distribuciones permiten introducir aleatoriedad dentro del modelo. Mediante una distribución podemos representar la aleatoriedad con que las piezas llegan al modelo, la aleatoriedad del tiempo de ciclo de una máquina, la aleatoriedad del tiempo entre fallos (m.t.b.f.) y del tiempo de reparación (m.t.t.r.) de una máquina, etc... Witness viene ya dotado con varios modelos de distribuciones probabilísticas estándar que podemos emplear: Distribuciones enteras: binomial, uniforme, poisson. Distribuciones reales: beta, erlang, gamma, logarítmica normal, negativa exponencial, normal, normal truncada, triangular, uniforme, weibull. Además, podemos crear nuestras propias distribuciones empíricas si lo deseamos, introduciendo los valores numéricos así como sus frecuencias de aparición en la pantalla de la figura 17.: Figura 17 Opción Detail Distribution Para que una distribución pueda funcionar en Witness, será necesario indicar el número de la cadena de números aleatorios que vamos a utilizar. Es importante emplear una cadena distinta para cada evento estocástico que se desee simular, a fin de que un evento no le “robe” aleatoriedad a otro (al ir empleando números de su cadena), desfigurando los resultados de la simulación. Por otra parte, los eventos aleatorios son reproducibles con Witness. Si se dispone de un modelo con diversos eventos estocásticos y se corre varias veces, se observa que el resultado siempre es el mismo, ya que la semilla generadora de las cadenas de números aleatorios no ha variado. Esto es muy útil, ya que si ahora se hace una modificación en el modelo y se ejecuta, se sabe que la diferencia en el resultado está motivada por el cambio efectuado, y no por una variación en la aleatoriedad del modelo. También es posible cambiar la semilla generadora de las cadenas de números aleatorios en un momento dado (opción Model, Random Numbers). Se pueden hacer varias corridas de un mismo modelo variando la semilla generadora. Si se observa que los resultados en todos los casos son semejantes, se habrá probado la robustez y validez del modelo, cuyos resultados no dependerán de la aleatoriedad sino de su funcionamiento. 3.3.4. FICHEROS (FILES) Y FICHEROS DE PIEZAS (PART FILES). Los files son archivos ASCII (*.DAT) que contienen datos. Pueden emplearse para introducir datos en el modelo (fichero de entrado de datos) necesarios para que éste puede correr, o como salida de datos del modelo (fichero de salida de datos) con resultados de la simulación. La lectura y la escritura de valores en un file se lleva a cabo mediante la inclusión de las órdenes READ/WRITE en algún actions del modelo. Los files son elementos muy útiles para crear un modelo estructurado y que tenga en cuenta posibles modificaciones posteriores. Por ejemplo, si se tiene un modelo compuesto por una serie de máquinas cuyos tiempos de ciclo son evaluados cada mes por los ingenieros, se puede construir el modelo de modo que los tiempos de ciclo de las máquinas sean variables que puedan leerse desde un file. De este modo cada mes, para evaluar el sistema por medio del modelo, tan sólo hay que modificar los datos del file y no todo el modelo. Figura 18 Opción Detail File Un Part File es un fichero ASCII (*.PAR) que almacena una serie de parts. Pueden emplearse como ficheros de entrada o salida de parts a/desde la simulación, indicando el instante de entrada/salida de las parts en el modelo, la cantidad del lote y sus atributos. Sirve para crear una secuenciación de piezas en el modelo, pudiendo representar un plan de fabricación. Un Part File de salida de un modelo puede emplearse como entrada para otro modelo. Su ejecución no requiere ninguna orden desde un action. Para ser utilizado como entrada de algún tipo de part, requiere que el campo Arrival Mode de la part esté en modo Passive. Figura 19 Opción Detail File 3.3.5. FUNCIONES (FUNCTIONS) Las funciones son elementos predefinidos por Witness que pueden emplearse en expresiones lógicas en cualquier parte del modelo. También se pueden crear funciones propias que puedan emplearse (se escriben fuera del programa, en Fortran). Existen funciones matemáticas, estadísticas y funciones de estado. • Funciones matemáticas: para realizar cálculos matemáticos en las expresiones. • Funciones estadísticas: para conocer datos estadísticos sobre la simulación. • Funciones de estado: para dar información sobre el estado actual de los elementos durante la simulación que se está efectuando. Las hay de uso general y otras específicas para cada tipo de elemento. Para observar su potencia y como muestra se destaca: ISTATE (elemento): devuelve el nº que corresponde al estado actual de ese elemento. NPARTS (elemento): nº de parts que hay actualmente en ese elemento. APARTS (elemento): nº medio de parts en un buffer o conveyor. NWIP (part): nº de parts actualmente en el modelo. Si se necesita crear una función los campos a definir son los que aparecen en la siguiente pantalla de la figura 20., ofreciendo la posibilidad de escribir el código necesario seleccionando el botón Actions. Figura 20 Opción Detail Function 3.4. ELEMENTOS GRÁFICOS 3.4.1. SERIES TEMPORALES (TIMESERIES) E HISTOGRAMAS (HISTOGRAMS) Son elementos que almacenan una serie de valores y crean un informe estadístico sobre los mismos que contiene la media, la desviación típica, el máximo, el mínimo, etc... Un timeserie recoge la variación de algún parámetro o variable a lo largo del tiempo de simulación, tomando muestras cada cierto tiempo (intervalos de muestreo). Se pueden registrar hasta 7 series temporales distintas en un mismo timeserie, pudiendo visualizarse cada una de ellas sobre una misma gráfica. Las características de los timeseries que hay que definir en la opción Detail de Witness son las correspondientes a los campos de la figura 21: Figura 21 Opción Detail Function NAME: nombre del timeserie. QUANTITY: número de timeseries exactamente iguales. REC INTERVAL: intervalo de muestreo. PLOT EXPRESIONS: expresiones cuyos valores en el tiempo se desean registrar (hasta 7) STATISTICS RESET: indica si se desea borrar la estadística cada vez que se corre el modelo. CTIONS: acciones lógicas a ejecutar antes/después de evaluada cada una de las expresiones cuyos valores se han de registrar. Un histograma es otro elemento que registra y proporciona información sobre el modelo. En éste caso no existe ningún intervalo de muestreo. Las expresiones se registran cuando así lo ordena algún action (mediante mandatos tipo RECHST, DRAWBAR, ADDBAR), tomando nota del valor y frecuencia de aparición de algún parámetro u expresión. 3.5 ELEMENTOS ESPECIALES. Son aquellos que ya vienen definidos por Witness y que pueden emplearse en diversas partes del modelo. 3.5.1. ELEMENTOS DE ENTRADA El único elemento de entrada predefinido es el World (mundo). Este elemento dispone de infinitas piezas, de las que pueden enviarse al modelo el número deseado si se activa la llegada de piezas (Active) desde el Detail de la part. 3.5.2. ELEMENTOS DE SALIDA Hay tres elementos a los cuales se les pueden enviar las piezas que ya han atravesado el modelo y se desea que salgan del mismo: • Ship (embarque): a éste elemento se suelen enviar las parts que deben abandonar el modelo. • Scrap (desperdicios): a éste elemento se suelen enviar las parts que deben abandonar el modelo pero sin haber acabado la simulación satisfactoriamente (por ser el desecho de una máquina tipo production, por ser un desperdicio al haberse roto una máquina, etc...) • Assemble (ensambladas): a éste elemento van a parar los parts que han sido combinados con otros en una máquina tipo assembly. 4. LAS REGLAS DE ENTRADA Y SALIDA. Sirven para direccionar los parts a través de los elementos del modelo, es decir, regulan los mecanismos por los cuales una part entra en un elemento procedente de otro, o sale del mismo hacia otro elemento. Estas reglas se especifican en los campos Input Rule y Output Rule de la fase Detail de los diversos elementos. No todas las reglas son aplicables a todos los elementos. Witness permite introducir reglas de gran complejidad (hasta de 32 Kb cada una). El significado de cada regla depende de si ésta se utiliza como regla de entrada o como regla de salida. Las principales Reglas de Entrada y Salida son: • Wait (esperar): no realiza acción alguna sobre la part. Es la regla por defecto. • Pull (coger): el elemento “coge” la part desde algún otro elemento que esté en su lista de demanda. Sólo puede emplearse como regla de entrada. Ejemplos: PULL from M1, M2. Coge una pieza desde el elemento M1 y si no puede, desde M2. PULL A from M1, B from M2. Coge la pieza A desde M1 y si no puede, pieza B desde M2 • Push (empujar): el elemento “empuja” la part hacia algún otro elemento que esté en su lista. Sólo puede emplearse como regla de salida. Ejemplos: PUSH to M1, M2. Empuja pieza hacia elemento M1 y si no puede, hacia M2. PUSH A to M1, B to M2. Empuja la pieza A hacia M1 y si no puede, pieza B hacia M2. • Sequence (secuencia): estirados/empujados los desde/hacia parts una tratan lista de de ser elementos secuencialmente. Si en un momento dado un part (si se utiliza como regla de entrada) o un elemento ( si se utiliza como regla de salida) no está disponible, hay tres opciones, cuyos significados dependen del tipo de elemento en que sean empleadas: WAIT: Se espera a que esté disponible (la part -Rule input- o el elemento -Rule output-). Ej. SEQUENCE/WAIT B1#(1), B2#(3). En ciclos de trabajo consecutivos, esperará a coger/empujar una part del/al elemento B1. Luego, esperará a coger/empujar sucesivamente tres parts del/al elemento B2. Luego se repite la secuencia, volviendo a esperar a coger/empujar NEXT: Si no está disponible, pasar al siguiente (part -Rule input- o el elemento -Rule output-). Ej: SEQUENCE/NEXT C1#(2), C2#(3). Primero trata de coger/empujar sucesivamente tres parts del/al elemento C1, y si no están disponibles en ese momento (las parts o el elemento), trata de coger/empujar tres parts del/al elemento C2. Luego se repite la secuencia. RESET: Si un part o elemento de la lista no está disponible, se resetea la secuencia y se vuelve a intentar desde el principio. Ej. SEQUENCE/RESET J1#(1), J2#(2), J3#(1). Trata de coger/empujar esas parts de esos elementos en ese orden. Primero, coge/empuja un part desde/hacia J1. Luego, coge/empuja un dos parts sucesivamente desde/hacia J2. Luego, si cuando va a coger/empujar un part desde/hacia J3 no está disponible (la part -Rule input- o el elemento -Rule output), borra la secuencia y trata de nuevo de coger/empujar una part desde/hacia J1. • Select (seleccionar): el part se coge/empuja desde/hacia aquel elemento de la lista que ocupa la posición dada por el valor de alguna variable. Ej. SELECT on V1 B1, B2, B3, B4. Si la variable V1 tiene en ese instante el valor 3, la part se tomará/empujará del/al elemento B3. • Percent (porcentaje): el part se coge/empuja aleatoriamente desde/hacia alguno de los elementos de la lista en función de unos determinados porcentajes de probabilidad. Ej. PERCENT/(semilla aleatoria 1-1000) B1 70.00, B2 30.00. La part se estirará/empujará desde/hacia el elemento B1 con una probabilidad del 70% o hacia B2 con un 30%. • Most (mayor): el elemento coge/empuja el part desde/hacia aquel elemento de su lista que posea el mayor nº de parts (opción parts) o el mayor nº de espacios desocupados (opción free). • Least (menor): el elemento coge/empuja el part desde/hacia aquel elemento de su lista que posea el menor nº de parts (opción parts) o el menor nº de espacios desocupados (opción free). • If (si...): coge/empuja las parts en función de que una expresión condicional del tipo If/Else/Elseif/End sea verdadera. Puede combinarse con otras reglas, excepto con Sequence y Percent por dar un resultado ambiguo y confuso. Ejemplo: IF V1>10 Pull from B1 Elseif V1>5 Pull from B2 Elseif V1>1 Pull from B3 ELSE Wait ENDIF Esta regla empleada como una Input Rule significa que, si (if) la variable V1 es mayor que 10, se estirará part desde el elemento B1, en caso contrario, si (elseif) V1 es mayor que 5 se estirará part desde B2, en caso contrario, si (elseif) V1 es mayor que 1 se estirará part desde B3. En última instancia (else) se esperará (wait). La regla será evaluada por Witness desde arriba hacia abajo. En el momento en que resulte verdadera, se saldrá de la regla sin evaluar el contenido de su parte inferior. • Random (aleatorio): permite introducir una componente aleatoria en el modelo, indicando una serie de elementos y la probabilidad de que una part vaya o venga hacia cada uno de ellos. Por ejemplo, puede crearse un elemento con una Rule input que sea Random de modo que tome distintas parts del world en unas proporciones determinadas de un modo aleatorio. • Part (pieza): permite enviar parts a un elemento a otro, dependiendo del part de que se trate. Sólo puede emplearse como regla de salida. • Buffer (almacén): el part se coge/empuja desde/hacia el buffer interno de una máquina que se ha definido de forma que tenga este buffer interno. 5. LAS ACCIONES (ACTIONS) Permiten dotar al modelo de la lógica necesaria para que funcione correctamente y del modo más parecido a la realidad. Mediante ellas es posible manipular variables y atributos, leer o escribir datos desde/hacia ficheros de disco, controlar las parts, etc... Tanto para los actions como para las reglas de entrada y salida, Witness ofrece una serie de facilidades para su implementación: • pueden hacerse actions/reglas muy complejas (hasta de 32 Kb cada una, sin superar los 256 caracteres por línea ), si bien éstas hacen la simulación más lenta, • puede moverse o copiarse el texto de los actions/reglas de un lugar a otro del modelo, • puede recibirse ayuda del programa para escribir una action/regla cuyo empleo desconocemos seleccionando el botón Prompt en las cajas de diálogo. Instrucciones a emplear Mediante un action pueden realizarse a la vez cálculos matemáticos y lógicos: CÁLCULOS MATEMÁTICOS. Pueden realizarse cálculos con números o variables, empleando operadores aritméticos que, ordenados conforme Witness los evalúa son: paréntesis ( ), potenciación **, multiplicar *, dividir /, sumar +, y restar -. CÁLCULOS LÓGICOS. Pueden implementarse reglas lógicas en las que se incluyan los operadores lógicos y aritméticos que, ordenados por orden de evaluación son: paréntesis ( ), NOT (expresión), potenciación **, multiplicar *, dividir /, sumar +, restar -, igual=, desigual < >, menor que <, mayor que >, menor o igual que <=, mayor o igual que >=, AND (dos subexpresiones), OR (dos subexpresiones). Por ejemplo: IF V1=5 AND NPARTS(B1)>5 CYCLE=10 ELSE CYCLE=20 ENDIF La variable CYCLE tomará el valor 10 si la variable V1 vale en ese momento 5 y además el nº de parts en B1 es mayor que 5. En caso contrario, CYCLE tomará el valor 20. Las expresiones con AND y OR son evaluadas de izquierda a derecha. Lenguaje de programación de acciones. Es posible combinar los cálculos funciones matemáticos y lógicos con matemáticas, estadísticas y de estado para formar action de gran potencia y complejidad (aquí no podrán emplearse ninguna de las reglas de entrada/salida). Además de los ya vistos, pueden emplearse muchos comandos entre los que destacamos: CHANGE: permite modificar el tipo de una part. Por ejemplo: CHANGE P1, P2 modificará el tipo de pieza P1 a P2. CHANGE ALL, P2 modificará cualquier tipo de pieza a tipo P2. READ y WRITE: para leer o grabar datos desde/hacia un fichero. Por ejemplo: READ file1 V1, V2. Lee desde el fichero llamado file1 el valor de las variables V1 y V2. WRITE file2 V3(5) Escribe el valor del array V3 que ocupa la posición 5 en el fichero file2. GOTO y LABEL: se usan conjuntamente para saltar (GOTO) a una línea marcada por la etiqueta (LABEL). IF, ELSEIF, ELSE y ENDIF: se emplean juntas para crear sentencias condicionales. Su modo de empleo ya ha sido tratado anteriormente. FOR y NEXT: se utilizan conjuntamente para realizar algo un nº dado de veces. Ejemplo: FOR X=1 TO 10 STEP 2 PRINT “ El valor de la variable X es de”; X NEXT WHILE y ENDWHILE: se usan conjuntamente para realizar algo mientras se cumpla una condición. Por ejemplo: WHILE X<10 PRINT “El valor de la variable X es de “; X X= X+1 ENDWHILE STOP: se emplea para parar la simulación en un momento dado. 6. ACCIONES ESPECIALES. El paquete Witness permite implementar una serie de acciones en unos momentos determinados que pueden ser muy útiles a la hora de hacer que un modelo funcione correctamente. Si se estima oportuno, pueden emplearse tres tipos de acciones, cada una de las cuales se implementa en una caja de diálogo tras seleccionar la opción oportuna en los menús desplegables de Witness: • Acciones de inicialización (INITIALIZE ACTIONS) son aquellas que se realizarán siempre justo antes de que la simulación comience a correr. Suelen emplearse para dar valores a algunas variables, para leer datos de un fichero necesarios para la simulación, etc... Se ha de tener en cuenta que estas acciones se ejecutarán siempre en cada corrida y que se sobreescriben a los datos leídos desde ficheros de arranque (P.e. si en un fichero de arranque hemos puesto a una variable el valor X=15 y en el Initialize Actions tenemos una orden que dice X=20, la simulación acabará corriendo con el valor X=20). • Acciones de usuario (USUARY ACTIONS) son aquellas que se realizarán sólo cuando el usuario seleccione la opción Run Usuary Actions del menú de Witness, mostrando la pantalla de la figura 22.: Figura 22 User Actions • Acciones inmediatas (INMEDIATE ACTIONS) son aquellas que se ejecutan justo en el momento en el que el usuario escribe la orden, a través del cuadro de diálogo de la figura 23: Figura 23 Actions 7. TIPOS DE FICHEROS MANEJADOS POR WITNESS. Según su utilización, Witness trabaja con diversos tipos de ficheros. Los más importantes según su tipo son: *.mod (modelos): modelizados. guardan los modelos de los sistemas *.sim (simulaciones): guardan el modelo en el instante de simulación que se alcanzó. *.lst (librería): guardan las características del modelo en un formato tal que puede ser editado desde otro programa. Por ejemplo, podemos editar un modelo a través de su fichero *.lst mediante el Write de Windows, y una vez realizadas las modificaciones y salvado con formato No-Write como *.lst, este fichero puede ser leído por Witness, reconstruyendo el modelo con los cambios. *.icn (iconos): contienen los iconos que son empleados por los modelos. Pueden mezclarse juegos de iconos de varios modelos distintos (opción Merged:Yes). *.dat (datos): contienen los datos que son de entrada o salida de la simulación. Por ejemplo, para hacer un fichero de entrada de datos para la simulación, puede emplearse el programa Excel de Windows, escribiendo los valores de las variables o arrays en columnas (cada variable o array en una columna distinta). Se grabará el fichero con formato Tab-delimited y con nombre *.dat. Este fichero, que deberá guardar para su uso posterior. *.rpt (reports): contienen los resultados de una simulación con todos los datos referentes a cada uno de los elementos del modelo. *.dif: contienen los resultados de una simulación en un formato legible por hojas de cálculo tipo Excel o 123. De este modo podremos ver y manipular los resultados de una simulación. *.sub (submodelos): contienen los submodelos creados y que pueden ser empleados en cualquier parte de cualquier modelo de Witness. *.wcl (arranque): permiten programar una secuencia de simulaciones seguidas (con sus características) de modo que, una vez hecho el fichero de arranque y tras su activación mediante el comando File Read Command se puede dejar al ordenador corriendo durante largo tiempo mientras realiza cada una de las simulaciones programadas. Para realizar un fichero de arranque se emplean una serie de instrucciones propias (escritas en ASCII con un editor de texto como Write de Windows) entre las que destacan: LOAD file: cargar un modelo (*.mod) RESTORE file: cargar una simulación (*.sim) NEW file: nuevo fichero, borrar el modelo actual. BATCH TIME, time: corre la simulación hasta que el reloj marca el tiempo indicado. SAVE file: salvar como modelo (*.mod) STORE file: salvar como simulación (*.sim) REPORTS DIFFILE file: salvar los resultados de la simulación como fichero *.dif RUN ACTION variable=? : dar valor a alguna variable. DETAIL, SELECT, Nombre Elemento, Campo a modificar =? Para modificar algún campo de algún elemento del modelo. QUIT: salir del programa Witness. 8. OPCIONES DE VISUALIZACIÓN. Witness ofrece facilidades para realizar el efecto visual del modelo. A todas ellas se accede desde el menú desplegable Edit. Entre ellas destacamos: • Editor de pantalla (Screen Editor): permite dibujar líneas, figuras, tramas, texto, etc..., en la pantalla donde reside el modelo para mejorar su comprensión y hacerlo más visual. Para ello se utiliza la barra de herramientas siguiente: Figura 24 Display Backdrop • Editor de iconos (Icon Editor): permite modificar los iconos por defecto que utiliza el programa así como crear nuestros propios iconos para nuestro modelo particular con las opciones disponibles que se observan en la pantalla: Figura 25 Icon Editor • Ventanas (Windows): se disponen de hasta 4 ventanas distintas donde pueden guardarse vistas de puntos distintos del modelo, para mejorar la rapidez en el acceso a alguna zona. 9. RELOJ DE SIMULACIÓN. Witness dispone de un reloj (Clock) interno para llevar la cuenta del tiempo de simulación. A través de la opción Clock del menú Edit puede especificarse la unidad mínima temporal y sus múltiplos, que se emplearán para confeccionar el modelo y realizar la simulación. Esto es muy importante, ya que si, por ejemplo, seleccionamos como unidad temporal mínima el minuto, deberemos introducir todos los datos referidos a nuestro modelo en minutos. Podemos visualizar el tiempo que se lleva de simulación activando la opción Clock del menú desplegable Windows. Figura 26 Define Clock 10. EJECUCIÓN DE UNA SIMULACIÓN. Una vez se tiene construido el modelo, hay que proceder a comenzar a realizar experimentos con el mismo, es decir, hay que realizar “corridas” del modelo. Witness ofrece desplegable Run diversas opciones para ello: Begin: pone a cero el reloj interno de la simulación. Stop: para una simulación en el acto. Run: activa una simulación en el acto. en su menú Batch: activa una simulación hasta el instante temporal indicado en unidades temporales mínimas. Por ejemplo, si nuestra unidad temporal es el minuto, poniendo: Time+60: correrá la simulación desde el punto actual hasta una hora posterior. 60: correrá la simulación hasta el instante en que el reloj marque 60 minutos. Advance: activa la simulación llevando el reloj hacia delante tantas unidades temporales como el valor introducido. Walk: disminuye la velocidad de la simulación para poder observar mejor los sucesos que ocurren durante la simulación en pantalla. Step: ejecuta la simulación en modo paso a paso, es decir, de modo que cada vez que se haga click con el ratón sólo se ejecute una acción de la simulación. Esta opción es muy útil para depurar la programación lógica del modelo y observar si está bien definida. Por medio de la opción Step y mediante la visualización de la ventana Interactive Box del menú desplegable Windows, podremos observar como se van ejecutando secuencialmente cada una de las acciones de la simulación y así, detectar posibles errores. Una vez la simulación se ha puesto en marcha (directamente a través del menú Run o por medio de un fichero de arranque *.wcl), Witness ejecuta primero las posibles acciones definidas en el Initialize Actions. Hecho esto, el tiempo de la simulación comienza a correr. Witness va testeando todos y cada uno de los elementos que fueron definidos en el modelo siguiendo el orden en que fueron creados. Observará si ese elemento tiene o va a tener part y realizará las acciones oportunas en ese instante. Hecho esto, pasará al siguiente elemento de la lista. Se ha de tener en cuenta que si en un momento dado se borra un elemento del modelo y luego se crea otro, éste último ocupará la posición dejada por el elemento borrado. Hay que tener presente todo esto ya que a veces, en modelos complejos, el orden en el que Witness testea las acciones de los elementos puede resultar un factor determinante. El orden de los elementos puede observarse y modificarse editando el fichero de librería *.lst del modelo (en ASCII) mediante el programa Write de Windows (por ejemplo). 11. GENERACIÓN DE INFORMES Esta es una de las posibilidades más potentes que facilita Witness, así una vez construido el modelo y puesto en marcha, se pueden utilizar los informes que se pueden generar y que ayudarán n a medir los cambios producidos por la influencia de los distintos escenarios en los que se quiere comprobar el comportamiento del citado sistema modelizado. Para visualizar los informes generados durante la ejecución de los experimentos se seleccionará la opción Reports del menú y de nuevo Reports del menú desplegable, proporcionando las siguientes alternativas: Figura 27 Opciones Reports Used: indica donde es utilizado y referenciado cada elemento del modelo. Explode: permite observar si en un determinado elemento hay part, cuántas, de qué tipo, cuáles son sus atributos, etc... Summary: ofrece las características generales de cada elemento del modelo (nombre, tipo, cantidad, regla de entrada/salida, si tiene programado algún action, etc...) Reports: para cada uno de los elementos del modelo, lista muy completa de datos estadísticos recogidos durante el tiempo de simulación. Por ejemplo: A continuación se van a explicar más detalladamente cada uno de los 4 tipos de informes explicando proporcionan a través de sus campos. la información que 11.1. SUMMURY Este informe da una descripción resumida de la información introducida en la opción Detail del elemento, es una forma rápida y cómoda de resumir un grupo de elementos. Cada elemento tiene un tipo diferente de resumen, pues los campos a rellenar en la opción Detail dependen precisamente del tipo de elemento, por este motivo el informe se prepara por grupos de elementos, teniendo en cuenta de que tipo son. Veamos a continuación cuáles son los campos del informe según el tipo de elemento que se esté resumiendo con el fin de facilitar la comprensión del anexo 2 en el que se incluye un informe de ejemplo de cada tipo. Resumen de elementos tipo PART: Nombre de los elementos de este tipo. Tipo de atributos asociados. Regla de salida. Acciones a llevar a cabo en la creación de este tipo de piezas. Resumen de elementos tipo BUFFER: Nombre del buffer. Número de buffers con las mismas características. Retrasos. Si se ha definido ruta a seguir. Capacidad. Regla de entrada al buffer de los elementos tipo part. Regla de salida para buscar el siguiente elemento a extraer. Resumen de elementos tipo MACHINE: Nombre de la machine. Número de elementos con idénticas características. Tipo Reglas de entrada Regla de salida Labour, si son necesarios Acciones: pueden ser de 4 tipos las ejecutadas al llegar un elemento, las llevadas a cabo al procesar las piezas, los posibles paros y la reparación de averías. Resumen de elementos tipo CONVEYOR: Nombre definido para los elementos de este tipo. Cantidad de elementos con las mismas características. Longitud. Elementos Labour asociados a su reparación. Reglas de entrada. Reglas de salida. Acciones a llevar a cabo al llegar un elemento al conveyor. Acciones a ejecutar antes de la salida de un elemento del conveyor. Resumen de elementos tipo ATRIBUTO, VARIABLE: Nombre del atributo o variable. Número definido bajo el mismo nombre y con las mismas características. Tipo de atributo Resumen de elementos tipo FUNCIÓN: Nombre de la función. Número de parámetros. Tipo de función teniendo en cuenta lo que devuelve. 11.2. EXPLODE Este informe permite obtener información acerca del estado actual de los elementos especificados, para cada elemento indica cuáles son los elementos de tipo part que contiene y su posición exacta. Como es lógico no se puede generar este tipo de informe para los elementos de tipo file, distribution, histogram, timeserie, function, attribute, variable o pie chart. En caso de necesitar el valor de alguna variable en el instante en el que se genera el informe se deberá usar el informe “statisticscs”. Los campos del informe generado dependerán del tipo de elemento y teniendo en cuenta esto se agruparán los elementos definidos en el modelo según su tipo, veamos a continuación cuales son estos campos. Status of parts. Nombre del elemento part. Nombre del elemento o elementos en el que se encuentra situado en el momento en el que se genera el informe. Tipo de ese elemento o elementos. Número de parts en el elemento referido. Status of parts in buffers. Nombre del buffer. Tipo de situación en la que se encuentra. Nombre del elemento part que contiene. Posición dentro del buffer en la que se encuentra el elemento referido. Atributos y su valor de cada uno de los elementos part que contiene en el momento en el que se genera el informe. Status of parts in machines. Nombre del elemento machine. Estado en el que se encuentra en el momento en el que se genera el informe (ocupada, esperando piezas,....) Número de una de sus posibles posiciones. Nombre del elemento situado en esa posición. Valor de los atributos de ese elemento en el instante en el que se genera el informe. Status of parts on conveyors. Nombre del elemento tipo conveyor Estado en el que se encuentra (vacío, bloqueado,...) Posición del conveyor a la que se hace referencia. Elemento part situada en esa posición. Valor de los atributos del elemento part en el instante en el que se genera el informe. 11.3. STATISTICS Este tipo de informe es posible generarlo para elementos continuos y discretos, de estos últimos está disponible para los elementos tipo part, machine, buffer, conveyor, labour, track y vehicle. Los campos que proporciona dependen del tipo de elemento del que se haya solicitado el informe, en cualquier caso la información proporcionada es relativa a lo ocurrido a lo largo de la ejecución del experimento, desde el instante en el que se inició hasta el momento en el que se genera el informe. Los parámetros calculados son de gran interés, por ejemplo, número máximo, mínimo de piezas en un almacén, estados en los que ha permanecido una máquina y en que proporción de tiempo, número de piezas en el sistema... A continuación se exponen los campos del informe según el tipo de elemento, haciendo siempre referencia sus valores al total del tiempo que se ha realizado la simulación. Part statistics. Nombre del elemento part. Número de piezas que han entrado al sistema. Número de piezas que han salido del sistema. Número de piezas de rechazo. Número de piezas ensambladas. Media de número de piezas como trabajo en curso. Buffer statistics. Número de elementos que han entrado a lo largo de la simulación. Número de elementos que han salido. Número de elementos en el momento de la generación del informe. Número máximo de elementos que ha llegado a almacenar. Número mínimo de elementos que ha almacenado. Media de elementos almacenados. Tiempo durante el que se ha almacenado la media indicada. Machine statistics. Nombre del elemento tipo machine. Número de operaciones realizadas. Porcentaje del tiempo esperando piezas Porcentaje del tiempo procesando. Porcentaje del tiempo parada. Porcentaje del tiempo en espera (trabajador, set up). Conveyor statistics. Nombre del conveyor. Número de elementos que contiene en el momento de generar el informe. Número total de piezas que ha contenido. Media en unidades de piezas que ha transportado. Media en unidades de tiempo. Porcentaje de tiempo vacío. Porcentaje de tiempo en movimiento. Porcentaje de tiempo bloqueado. Porcentaje de tiempo formando cola con los elementos que contiene. Variable statistics. Nombre de la variable. Índices de la variable. Valores de cada variable en el instante en el que s genera el informe. 11.4. USED Seleccionando este tipo de informe se podrá saber cómo y donde están referenciados cada uno de los elementos del modelo. Los campos disponibles en este informe son: • Nombre: el nombre del elemento. • Tipo: el tipo del elemento. Además para cada otro elemento que usa del que se genera el informe se dice: • Cómo se usa: cómo el elemento es referenciado, por ejemplo, en una input rule, un cycle time,... • Donde se usa: el elemento desde el que se le hace referencia. Como ya se ha dicho anteriormente, los reports ofrecen gran utilidad pudiéndose grabar en un fichero de modo que sean manipulables por hojas de cálculo para analizar los resultados obtenidos.