curso avanzado flexsim

Entrenamiento Avanzado Simulador Flexsim

www.flexsim.com.mx

1

Las distribuciones estadísticas capturan la variabiliad de la vida real.
Density Function Plot
0.80 0.70 0.60 0.75 1.00

Density Function Plot

f(x)

0.40 0.30 0.20 0.10 0.00 -0.50

f(x)
0.00 0.50 1.00 1.50 2.00

0.50

0.50

0.25

0.00 0.0

1.0

2.0

3.0

4.0

5.0

6.0

X-Value
3 - Normal 2 - Exponential

X-Value

Density Function Plot
1.00 0.90 0.80 0.70
0.70 0.60 0.80

Density Function Plot

f(x)

0.50 0.40 0.30 0.20 0.10 0.00 0.0 0.5 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0

f(x)

0.60

0.50 0.40 0.30 0.20 0.10 0.00 0.00

0.25

0.50

0.75

1.00

1.25

1.50

1.75

2.00

2.25

2.50

X-Value
4 - Lognormal
1 - Weibull

X-Value

2

Modelo Objectos

Flowitems
3

– Inclinar y Rotar layout: click derecho y arrastrar.Operaciones con el Mouse • Navegación en la ventana del layout: – Mover layout: click izquierdo y arrastrar. – Zoom: click en botones derecho e izquierdo y arrastrar (o usar el botón de rueda del mouse). MOVER ROTAR ZOOM 4 .

Basta con que toque una parte de un objeto para que se seleccione. • Highlighted (destacado) = cubo amarillo: click izquierdo.Operaciones con el Mouse • En los Objetos: – Mover en el eje X y en Y: click izquierdo y arrastrar – Mover en el eje Z (altura) : click en botones derecho e izquierdo y arrastrar (o usar el botón de rueda del mouse). • Selected (seleccionado) = cubo rojo: shift-click o ctrl-click – Puedes seleccionar múltiples objetos haciendo click con shift o ctrl y dibujando un recuadro o ventana alrededor de un grupo de objetos. 5 .

según la flecha que selecciones. – Da un click derecho sobre un objeto y selecciona “Edit Object Size/Rotation” del menú. 6 . rotación y tamaño desde la pestaña General.Tamaño Tama ño y Rotación de un objeto • • A los objetos se les puede cambiar su posición. • Click izquierdo y arrastra las flechas para cambiar el tamaño – Arriba y a la derecha lo crecen. También pueden modificarse desde el layout: – Puedes cambiar la posición haciendo click izquierdo y arrastrando a la nueva ubicación. – Down and left are smaller • Click derecho y arrastra las flechas para rotar sobre cada eje. – Abajo y a la izquierda lo hacen pequeño.

Input Output 7 .Conexiones de los Puertos • Output/Input Ports: puertos de entrada y salida que definen las posibles rutas de los flowitems (productos) hacia o desde los Fixed Resources (recursos fijos).

Conexiones de los Puertos • Center Ports: los puertos centrales son usados generalmente para llamar a un TaskExecuter para que procese o bien transporte un flowitem. Center 8 .

Teclas para las conexiones de puertos Outputs a Inputs Center a Center Desconectar Q A V W S C 9 Conectar Verlas .

• Presiona la tecla ‘ESC’ para regresar el cursor al modo normal 10 .Otra forma de Conectar los Puertos • Los diferentes modos están disponible en el menú de la barra.

11 .”.Viendo las conexiones de los puertos • El mostrar las conexiones de los puertos puede ser activado o desactivado desde la barra izquierda en la opción “View Settings” seleccionando “Show Connections”. • El tamaño de los conectores de los puertos puede ajustarse con los botones “ + ” y “ .

• TaskExecuters – recursos móbiles que desempeñan tareas asignadas 12 .Clasificación de los objetos • FixedResources – objetos que mandan o reciben flowitems.

Biblioteca de objetos o Library • Library – una lista de clase de objetos para ser utilizados al construir un modelo. • Instancia – una copia de uno de los objetos de la librería. 13 . creada en el modelo cuando un objeto es arrastrado desde la librería hasta el layout.

Árbol de la Familia Flexsim Flexsim Object Fixed Resource Source Dispatcher Task Executer Operator Navigator Network Node Network Navigator Visual Tool Recorder Queue Transporter Crane Navigator Traffic Control Sink Crane ASRS Vehicle Robot Rack Reservoir Elevator MultiProcessor Conveyor MergeSort Processor Combiner Separator 14 .

Tasks y Tasksequences • Task: es una sola instrucción o acción que deberá ser desempeñada por una objeto del tipo TaskExecuter. ejemplo: TRAVEL al queue LOAD flowitem TRAVEL al processor UNLOAD flowitem 15 . • Tasksequence: una serie de tasks (actividades) que deben desempeñarse en sequencia. ejemplo: LOAD flowitem.

Editando Objetos Seleccionados • Editar un grupo de objetos puede hacerse en los objetos seleccionados usando el menu “Edit Selected Objects” de la barra izquierda. • Solamente un objeto puede estar highlighted • Múltiples objetos pueden estar seleccionados 16 .

Opciones.Comprendiendo las Listas de Opciones. • El código o selección actual • • • • Añadir otra instrucción al código Borrar todo el código completo La plantilla de código (edición amigable) El editor de código (acceso a Flexscript/C++) 17 .

• Estas plantillas pueden ser personalizadas o bien crear nuevas opciones desde la ventana de Edición de Código.Plantilla de Código Código • El texto azul de la Plantilla de Código puede ser reemplazado por culquier número o expresión válidos. 18 .

Orden de Ejecución (push flowitem) flowitem llega OnEntry Setup Time Pick Operator Pick Operator Process Time OnSetupFinish demora demora OnProcessFinish Send To Port OnExit demora Request Transport From posible demora 19 .

Análisis estadístico en tiempo real del modelo .

el cual puede ser accedido desde el botón de inicio de Windows (para analizar datos que ya fueron recolectados) o bien desde FlexSim (si el analista desea revisar información nueva de un modelo a correr).Reportes de Resultados. automáticamente almacena información estadística básica referente a los objetos en el modelo. • Estas estadísticas pueden verse usando una aplicación especial llamada FlexSim Chart. . Gráficas y Estadísticas • Conforme corre una simulación en FlexSim.

primero se deberá habilitar la opción “Full History On” del menú “Statistics”. los datos pueden ser grabados en una base de datos que se puede abrir con FlexSim Chart.Reportes de Resultados. Gráficas y Estadísticas • Para poder usar FlexSim Chart. se puede correr el modelo. Cuando termine. • Una vez que se han activado las estadísticas. .

Reporte de resultados al final de la simulación .

Gráficos de Gantt .

Reporte Financiero .

STATE_GENERATING 46 .STATE_PURGING 23 .STATE_MIXING 7 .STATE_CONVEYING 34 .STATE_SCHEDULED_DOWN 33 .STATE_OFF_SHIFT 31 .STATE_CLEANING 24 .STATE_TRAVEL_LOADED 36 .STATE_RELEASING 29 .STATE_TRAVEL_EMPTY 35 .STATE_WAITING_FOR_TRANSPORTER 30 .STATE_MAINTENANCE 13 .STATE_IDLE 42 .STATE_FILLING 5 .STATE_STANDBY 22 .STATE_ALLOCATED_IDLE 49 .STATE_CHANGE_OVER 11 .STATE_BREAKDOWN 32 .STATE_MAXSPEED 26 .STATE_EMPTY 47 .STATE_POSTPROCESSING 19 .STATE_PREPROCESSING 18 .STATE_LUNCH 14 .STATE_FULL 3 .STATE_WAITING_FOR_OPERATOR 50 .STATE_COLLECTING 48 .STATE_NOT_EMPTY 4 .STATE_INSPECTING 20 .STATE_PROCESSING 43 .STATE_SUSPEND 16 .STATE_BUSY 44 .STATE_UTILIZE 2 .Listado de Posibles Estados 41 .STATE_STARVED 6 .STATE_SETUP 1 .STATE_FLOWING 8 .STATE_DECELERATING 27 .STATE_ACCUMULATING 10 .STATE_LOADING 39 .STATE_REPAIR 12 .STATE_ON_BREAK 15 .STATE_OFFSET_TRAVEL_LOADED 38 .STATE_OPERATING 21 .STATE_ACCELERATING 25 .STATE_DOWN .STATE_STOPPED 28 .STATE_WAITING 9 .STATE_AVAILABLE 17 .STATE_OFFSET_TRAVEL_EMPTY 37 .STATE_UNLOADING 40 .STATE_BLOCKED 45 .

Reportes de Resultados, Gráficas y Estadísticas
Existen dos bases de datos de Flexsim Chart muy importantes: “Movement Table” y “State Table”

“Movement Table” registra cada vez que un flowitem se mueve de un objeto a otro. •ID del Flowitem •Tiempo de inicio de movimiento •Origen •Destino •Itemtype del objeto

Reportes de Resultados, Gráficas y Estadísticas
“State Table” registra cada vez que un objeto cambia de estado. •Momento que sucede el cambio •Estado nuevo del objeto •Nombre del objeto que cambió

Estas dos tablas básicas proporcionan la información necesaria para que se puedan elaborar gráficas más avanzadas y reportes más detallados

NetworkNodes
• Los NetworkNodes se usan para definir el camino que seguirá un TaskExecuter cuando realice tareas de viajes. • Un network path está compuesto por un grupo de NetworkNodes inteconectados. • A un TaskExecuter se le dice que debe moverse sobre la red de caminos conectándolo a alguno de los NetworkNode del camino. El nodo al que se conecte se convierte en su nodo “casa”. • Si un FixedResource (FR) es visitado por un TaskExecuter que viaja por una red, ese FR debe estar conectado por lo menos a un solo NetworkNode, lo que le permite el acceso mediante la red. 29

• 30 .Conectando NetworkNodes • Haz click sobre un nodo y arrastra el mouse hacia el otro nodo mientras presionas la letra “A” (se verá una línea amarilla). Dos indicadores de dirección verdes muestran que se permite viajar en ambas direcciones de la red. Cuando los hayas conectado observarás una línea negra entre los nodos.

31 . • Una línea azul mostrará la conexión. • Haz click sobre un nodo y arrastra presionando la letra “A” para crear la conexión entre el NetworkNode y el objeto desde donde debe realizarse la carga o la descarga.Conectando un Fixed Resource a la Red. Está línea no está conectada a ningún puerto.

Conectando un TaskExecuter a la Red. • Haz click y arrastra una conexión entre el TaskExecuter y el NetworkNode mientras presiones la letra “A”. 32 . Esta línea no está conectada a ningún puerto. • Una línea roja indica que la conexión se ha realizado.

El indicador de dirección verde ahora se pone en rojo.Caminos de una sola dirección • Los segmentos de un camino pueden restringirse para que solo se pueda viajar en una sola dirección presionando la letra “Q” y haciendo un click y arrastrando en la dirección en la que quieras desactivar el viaje. • 33 . mostrando la dirección restringida.

mostrando la direccion del tipo “nonpasing”. El indicador de dirección se hará amarillo. • No hay paso. • Si hay paso pero no se puede rebasar 34 .Caminos de no rebasar • Un camino de no rebasar (non-passing) puede activarse conectando con al letra “A” entre dos nodos que ya estén previamente conectados. Conectando nuevamente con la letra “A” provoca que vuelva al estado anterior en color verde.

Menu del Indicador de Dirección Dirección Otra forma más sencilla que conectar con la “A” para definir el tipo de segmento. Utiliza la sección “Travel Networks” de la barra del lado izquierdo para definir el tipo de conexiones predeterminadas e incrementar el tamaño de los nodos de la red. consiste en hacer un click derecho sobre un indicador de dirección y escoger Haciendo click izquierda y presionando la la opción deseada desde el “X” sobre el indicador de dirección también menú. 35 . permite cambiar entre los diferentes modos de dirección.

36 . • Aparecerán puntos de control sobre el camino. • Arrastra los puntos de control para crear un camino curvo.Puntos de control de curvas y rectas • Para crear un segmento curvo selecciona “Curved” desde el menú contextual del indicador de dirección.

A 6.Diferentes Modos para ver los NetworkNodes 1. a 4. a • Las 6 diferentes opciones para ver la red pueden ser vistas presionando la letra “X” y haciendo click varias veces en cualquier NetworkNode. Cada click que se haga hará que se cambie a una vista diferente. 2. A 37 . A 5. A 3.

Este es un valor que de distancia forzado.Pestaña de los segmentos de camino. ¿Cuándo puede ser conveniente especificar una distancia virtual? • • • 38 . Se puede especificar una velocidad máxima específica para cada segmento. puedes dar a cualquier segmento una distancia artificial. Una distancia virtual (Virtual Distance) puede establecerse. Usando la distancia virtual. • • Cada camino de un NetworkNode puede ser editado de varias maneras. Puede definir el espacio mínimo que debe mantenerse entre los viajeros de la red. Modos diferentes de dirección pueden especificare usando la lista “Connection Type”.

en ese momento se dispara un trigger. • Existen triggers que se activan cuando un flowitem entra o sale de un objeto.Concepto de los Triggers • Cuando ocurren eventos clave en un objeto. 39 . • Puedes especificar que quieres que sucenda cuando se disparara un trigger. Otros se disparan cuando se termina el tiempo de proceso o se completa una reparación. • Cada tipo de objeto tiene su propia clase de triggers.

– Cambiar las propiedades visuales tanto de flowitems como de objetos. – Cambiar el comportamiento de otros objetos. – Leer o escribir información de un flowitem. – Y muchas cosas más… 40 . – Mandar mensajes a otros objetos.Triggers • Una oportunidad para definir y personalizar el comportamiento del sistema cuando ocurre un evento en específico.

41 . – main tree (objetos y datos del modelo y del proyecto). – model tree (objetos y datos relacionados con el modelo). • Los nodos contienen toda la información (no toda visible fuera del árbol) de los objetos. – view tree (objetos de GUIs y picklist). GUIs y datos. • El nodo es el elemento básico de construcción del árbol.¿Qué es un Nodo? Nodo? • La estructura básico de datos de Flexsim es un árbol (tree) jerárquico.

usa para expander y ver los nodos hijos. • Nodos pueden contener estos tipos de información – number (numérica) – string (texto) – object (objeto) • Si los nodos tienen datos de objeto. 42 . • Si los nodos contienen subnodos. usa para ver una lista separada de toda la información del objeto (datos y funciones de los miembros).Estructura de los Nodos • Los nodos tienen un nombre.

Símbolos de los Nodos Standard Folder Object Object data Function (C++) Function (FlexScript) 43 .

Ejemplo del Árbol del Modelo 44 .

etc) • Los argumentos pueden ser: – Valores numéricos. argumento2.¿Qué es una función? Nombredelafunción(argumento1. 45 . – Apuntador Pointer (*) a un objeto o node. – Textos (“string“). • Ejemplo de una función: colorrandom(item) • Muchas de las funciones de Flexsim son usadas para leer datos desde el árbol y salvar datos en el árbol.

Tablas de de Tiempos o Time Tables • A cualquier objeto en un modelo se le puede programar tiempos operacionales y no operacionales. • Los programas pueden definirse gráficamente o mediante tablas 46 .

47 .Tablas de Tiempo o Time Tables • Los programas pueden ser por día o semanales • Los bloques llenos son tiempos operacionales y los vacíos son tiempos caídos o de descanso.

á. etc.Reglas Generales • • • • • • • • • • • Las letras son sensibles (A no es lo mismo que a). ( _ si puedes usarlo). %. . “mi texto” Los paréntesis le siguen a un llamado de una función y las comas separan los argumentos de dicha función. pero se sugiere se usen para hacer mas “leíble” el código). . moveobject(object1. Una función o un comando siempre termina con PUNTO Y COMA (. Los nombre pueden incluir números pero no pueden empezar con un número (maquina9 está bien. Para poner como comentario el resto de una línea usa // y escribe aquí. Los valores de texto (string) deben introducirse entre comillas. 48 . No se necesita un formato específico (el uso de espacios. object2). pero 9máquina no).) en los nombres. ((x+3)*2) Las llaves { } se usan para definir bloques de declaraciones. Comentarios multilínea empiezan con /* y terminan con */ No uses espacios o caracteres especiales (ñ.) Los paréntesis pueden usarse libremente para crear asociaciones entre las declaraciones matemáticas y lógicas. tabuladores y renglones en blanco es libre.

14324) double precision “con decimales“ (2. 3.Tipos de Variables • int • double • string integer “entero”.14159) text string “texto” (“Reparando Montacargas”) • treenode apunta a un nodo del árbol Flexsim 49 . 2.5. 3. (1.

• treenode montacargas = centerobject(current. 50 . • string categoria = “exportacion”.8.1). • double peso = 175.Declarando y dando un valor a las variables • int index = 1.

y) max(x.y) min(x.y) x más y x menos y x por y x entre y raíz cuadrada de x X elevada a la potencia de y (xy) x redondeado al entero más cercano regresa la parte decimal de x regresa el residuo de x/y regresa el mínimo de x y y regresa el máximo de x y y 51 .Operadores Matemáticos Matemáticos • • • • • • • • • • • x+y x-y x*y x/y sqrt(x) pow(x.y) round(x) frac(x) fmod(x.

Comparando • • • • • • • x>y x<y x >= y x <= y x == y x != y comparetext(texto1.texto2) x mayor que y x menor que y x mayor o igual que y x menor o igual que y x igual que y x no igual que y texto1 igual a texto2 Recuerda: ‘=‘ no es lo mismo que ‘==‘ = se usa para dar un valor == se usa cuando se compara 52 .

Relacionando • && • || • ! Y lógico O lógico NO lógico 53 .

Actualizando • • • • • • • x=y x += y x -= y x *= y x /= y x ++ x -x vale igual que y mismo que poner x = x + y mismo que poner x = x .y mismo que poner x = x * y mismo que poner x = x / y mismo que poner x = x + 1 mismo que poner x = x .1 Recuerda: ‘=‘ no es lo mismo que ‘==‘ = se usa para dar un valor == se usa cuando se compara 54 .

model()) • inobject(object.Referencias Básicas Básicas de los Objetos • current • item • model() el objeto actual. el dueño del código. object) node(“/Operator1”. hace referencia al árbol del modelo.3) • node(“relativepath”. • rank(node. ranknum) rank(current.1) 55 . portnum) inobject(current. el flowitem involucrado que dispara el evento. portnum) • outobject(object.1) centerobject(current. portnum) • centerobject(object.1) outobject(current.

Estadísticas Estad ísticas Básicas de los Objetos • content( object ) contenido o inventario • getinput( object ) entradas al objeto • getoutput( object ) salidas del objeto • int inventario = content(current). • Int entradas = getinput(current). 56 . • int produccion = getoutput(current).

xnum. ynum. zdeg ) zloc( object ) zsize( object ) zrot( object ) 57 .Atributos de espacio de los Objetos • xloc( object ) yloc( object ) • setloc( object. ynum. ydeg. xdeg. xnum. znum ) • xrot( object ) yrot( object ) • setrot( object. znum ) • xsize( object ) ysize( object ) • setsize( object.

Este es un identificador numérico utilizado para distinguir cierto “tipo” de producto de otros en decisiones de tiempos de proceso o de ruteo de productos en el modelo. 58 .Itemtypes • Itemtype: todos los flowitems tienen un atributo llamado itemtype.

green. – ¿Cómo puedes encontrar los nombres de los otros colores? 59 .Atributos básicos de los Objetos • • • • • • getname( object ) setname( object. num) setcolor( object.random. blue ) colorred( object ) – blue.green... “name” ) getitemtype( object ) setitemtype( object. red.

salto de renglón. – msg( “título de ventana”. pr(). imprime texto. – pr( ). pt(getname(current)). pf(time()).Listados y Avisos • Sintáxis – pt( text string ). Tiempo: “). 60 . pt(“. – pf( float value ). “texto del mensaje” ). • La información se muestra en la consola de salida (Output Console). Selecciona View -> Output Console Ejemplo: pt(“Producto en “). – pd( discrete value ). imprime números con decimales. imprime números enteros.

Parámetros de un Processor • Comprendiendo los campos de edición de un Procesador te ayudará a entender mejor Flexsim. • Debes de ser capaz de responder a las siguientes 4 preguntas de cada uno de los campos de edición: – – – – ¿Cuál es su propósito? ¿En qué momento se evalúa? ¿Cuáles son las variables de acceso? ¿Qué valor regresa (return)? 61 .

msgsendingobject. item current current Returns tiempo de demora tiempo de demora tiempo de demora tiempo de demora número de puerto número de puerto verdadero/falso (1/0) apuntador numérico apuntador numérico N/A N/A N/A N/A N/A N/A N/A N/A 62 . item current current. msgparam2. port current. item. port current. item. item. port current. item. item current.Variables de Acceso y Returns Campo de Edición Setup Time Process Time MTBF MTTR Send To Port Pull From Port Pull Requirement Request Transport From Pick Operator OnReset OnMessage OnEntry OnExit OnSetupFinish OnProcessFinish OnBreakDown OnRepair Variables de Acceso current. item current current current. item. port current. msgparam1. port current. item current current. msgparam3 current.

} 63 .‘if’ (SI Lógico) if (expresión de prueba) { bloque de código } else { bloque de código } if (content(item) == 2) { colorred(item). } else { colorblack(item).

Labels o Etiquetas • Labels: la información puede ser almacenada en los flowitems (y en otros objetos) en la forma de etiquetas o labels. • Los labels deben tener nombre y datos. lista o tabla. 64 . • Los flowitems y otros objetos de Flexsim pueden tener una cantidad ilimitada de labels. Los datos pueden ser numéricos. texto.

1 ). “congelados” ). “labelname” ). label( object. “numero de retrabajos”). “labelname” ). setlabelnum( object. “labelname” ). “categoria”. “labelname” . 65 . setlabelnum( item. inc( label(item. setlabelstr( current. setlabelstr( object. “labelname” . 5 ). “numero de serie” ).Labels de los Objetos • sintáxis – – – – – getlabelnum( object. value ). • ejemplos – – – – – getlabelnum( item. string ). “numero de serie”. getlabelstr( current. • Este comando para incrementar solo funciona con valores numéricos. “categoria” ). getlabelstr( object.

break. break.‘switch’ lógico int type = getitemtype(item). } case casenum2: { code block break. } } 66 . switch ( switchvariable ) { case casenum: { code block break. } default: { colorgreen(item). } } switch (type) { case 1: { coloryellow(item). } case 5: { colorred(item). break. } default: { code block break.

} En programación un while loop es una estructura de control que permite que un bloque de código sea repetida varias veces siempre y cuando la expresion que se prueba (test expression) siga siendo verdadera. Evita loops infinitos (repeticiones infinitas) asegurándote que la expresion de prueba eventualmente sea falsa. 67 .‘while’ (mientras mientras) ) lógico while (test expression) { code block } while (content(current) > 0) { destroyobject(last(current)).

Evita loops infinitos asegurando que la expresion de prueba eventualmente sea falsa. count expression) { //code block } for (int index=1. 3. Escribe el incremento de la variable que se hará automáticamente al final de cada iteración o repetición. index++) { colorblue(rank(current. index<=content(current). 68 .‘for’ lógico for (start expression. Escribe la variable que cambia y dale un valor inicial. test expression. Escribe la condición para que salga del loop. } Un for loop te permite repetir un bloque de código un número determinado de veces. El encabezado del for loop define las condiciones de repetición: 1. 2.index)).

Orden de Ejecución (pulled flowitem) if true Flowitem se encuentra disponible en el objeto anterior Pull Requirement demora OnEntry OnSetupFinish demora Pick Operator Setup Time Process Time Pick Operator demora Send To Port Pull From Port OnExit demora Request Transport From demora 69 .

• • • • Comandos de Tablas Globales (Global Tables) gettablenum( “tablename”. colnum. colnum ) settablestr( “tablename”. rownum. rownum. value ) gettablestr( “tablename”. colnum ) settablenum( “tablename”. string ) 70 . rownum. rownum. colnum.

openinput( object ). parameter3 ). • moveobject( object. parameter2. 71 . resumeinput( object ). openoutput( object ). delaytime. • sendmessage( toobject. resumeoutput( object ). fromobject. containerobject ). • senddelayedmessage( toobject. parameter1. parameter2. resumeobject( object ). • stopobject( object ). stopinput( object ). stopoutput( object ). parameter1. fromobject.Control Básico Básico de Objetos • • • • closeinput( object ). parameter3 ). closeoutput( object ).

72 .Mensajes • Message: información enviada de un objeto a otro objeto. • Cuando un objeto recibe un mensaje. • Los mensages pueden enviarse con comandos. Pueden enviarse inmediatamente con el comando sendmessage() o después de un periodo específico de tiempo utilizando el comando senddelayedmessage(). un trigger se dispara.

Orden de Ejecución (Messages) sendmessage() OnMessage trigger del objeto que recibe el mensaje senddelayedmessage() demora OnMessage trigger del objeto que recibe el mensaje 73 .

parameter2. parameter1. tasktype. station. priority. involvedobj ) • TaskSequence personalizada y creada por el usuario: createemptytasksequence( taskexecuter. parameter3 ) dispatchtasksequence( tasksequence ) 74 . nrofops. priority. involved2. involved1. preempting) Returns a pointer (fsnode *) to the task sequence created inserttask(tasksequence. involvedobj. preempting ) freeoperators( taskexecuter.Control de un TaskExecuter • Comandos simples: requestoperators( taskexecuter.

dispatchtasksequence(ts). 75 . origen. NULL). fsnode* origen = centerobject(current. item. NULL). 0. TASKTYPE_FRLOAD. fsnode* item = first(origin). inserttask(ts. inserttask(ts. destino. inserttask(ts. fsnode *ts = createemptytasksequence(montacargas. TASKTYPE_FRUNLOAD. item. inserttask(ts.Código de ejemplo de tasksequence fsnode* montacargas = centerobject(current. destino). 0). fsnode* destino = centerobject(current. 3). 2). TASKTYPE_TRAVEL. TASKTYPE_TRAVEL. origen). 1).

Tipos de Tareas (Task) TASKTYPE_LOAD: flowitem. NULL Parámetros Cafés son requeridos. container. NULL TASKTYPE_TRAVEL: destination. [state] TASKTYPE_STOPREQUESTFINISH: stoppedobject.yloc. NULL TASKTYPE_TRAVELTOLOC: NULL. parámetros [Grises] son opcionales. [outputport] TASKTYPE_UNLOAD: flowitem.param2. pickup TASKTYPE_FRLOAD: flowitem. delaytime. [state] TASKTYPE_SENDMESSAGE: receiver. [endspeed] TASKTYPE_BREAK: NULL. [param1. NULL. ** utiliza profiletasksequence(ts) para enviar una descripción detallada al Output Console. dropoff.xloc. [port] TASKTYPE_DESTROYOBJECT: object. NULL TASKTYPE_DELAY: NULL. NULL. pickup. NULL. NULL. dropoff TASKTYPE_FRUNLOAD: flowitem. [endspeed] TASKTYPE_TRAVELRELATIVE: NULL. station. [inputport] TASKTYPE_UTILIZE: involved.xloc. 76 .yloc.zloc.param3] TASKTYPE_MOVEOBJECT: flowitem.zloc.

• Puede usarse con varias réplicas por escenario recolectando datos . cambiando ciertas variables en cada uno de ellos.Experimentación con Flexsim • El Experimenter se encuentra en el menú “Statistics” • Permite correr el modelo a través de diferentes escenarios.

Experimentación con Flexsim .

fsp en la carpeta “experiment” Estos archivos pueden ser abiertos después para ver los resultados de cada réplica usando la opción “Load State” del menú “File”. el modelo grabará su estado al final de cada réplica. Los estados son guardados con un archivo .Experimentación con Flexsim Activa la herramienta “Experimenter” Si se marca. .

Cuando el modelo ha corrido por este tiempo. pero el modelo sigue corriendo. las estadísticas se borran y arrancan otra vez.Experimentación con Flexsim Después que el modelo ha corrido durante este tiempo. Número de escenarios en el experimento Cuántas réplicas por cada escenario Número de la réplica que está corriendo en el escenario vigente Escenario Actual . el modelo se detiene y arranca la siguiente réplica o escenario su los hay.

.

.

.

.

Las condiciones pueden ser el número de personas. encontrar la Solución Óptima. montacargas. variando las distintas condiciones que se le especifiquen para. velocidades de las bandas transportadoras.¿Qué es Optimización? • Optimización es el análisis automático de diferentes escenarios a partir de los modelos de simulación creados en Flexsim. . demandas y cualquier otra variable que se desee. inventario. personal de mantenimiento. tamaños de lote.

• Maximizar el servicio al cliente. . • Los objetivos en las optimizacionespueden ser: • Maximizar Utilidades. • Cualquier otro objetivo que desee. • Minimizar tiempos de Surtido. según el problema que se quiera resolver.¿Qué es Optimización? • Uno mismo define el criterio para optimizar. • Pueden combinarse varios objetivos como una sola meta y darle una importancia diferente a cada uno de ellos.

¿Qué es Optimización? • Utilizando potentes algoritmos. el módulo de optimización OptQuest de Flexsim evalúa cientos de escenarios en segundos en forma automática y encuentra la solución óptima. • Realiza un análisis exhaustivo mediante simulaciones aceleradas que sería imposible de igualar en precisión y tiempo si se realizaran de forma manual. .

Por ejemplo. que son la capacidad de la máquina y el producto terminado del modelo. . permitiendo comparar que tan bueno es un escenario con respecto a otros. • Pero hay que destacar que estas variables tienen roles totalmente diferentes… • La capacidad de la máquina es un valor que queremos cambiar y experimentar mientras que el producto terminado es nuestra retroalimentación pues refleja el resultado de los cambios realizados. • Las variables de decisión generalmente pueden resolverse al plantear el problema que quieres resolver.Variables de Decisión • La primera parte al diseñar una optimización es seleccionar las variables de decisión del modelo. un problema puede ser: ¿qué capacidad de producción necesito en cierta área para aumentar mi flujo de producción? • Este planteamiento define las variables de decisión del modelo.

Existen 7 tipos de variables de decisión diferentes. Por ejemplo para saber el orden en el cual se debe mezclar la pintura para minimizar los tiempos de limpieza entre los cambios de color. Las 3 principales son las siguientes: • User-Controlled: se utilizan como variables de retroalimentación para poder comparar y calificar entre distintos escenarios. El valor de la permutación representa el orden dentro de la secuencia. • Integer: una variable discreta con un rango de valores enteros con incrementos de 1. .Tipos de Variables de Decisión • El motor del OptQuest manipula las variables de decisión buscando los valores óptimos. • Permutation: variable de permutación que permite resolver problemas de sequenciado o programación de la producción y de surtidos de órdenes.

Son útiles cuando la variable de decisión consiste en seleccionar la mejor alternativa de un catálogo de opciones y un número mayor no implica el compromiso de mayores recursos.Tipos de Variables de Decisión • Las 4 restantes son las siguientes: • Discrete: variable discreta que comienza con un valor mínimo y se va incrementando hasta llegar al valor máximo. Se le define un límite inferior. la opción #10 podría no ser más costosa o una mejor opción que la opción #1. • Design: las variables de diseño se usan para decisiones en donde las variables representan una alternativa y no una cantidad. un límite superior y un valor de salto que controla el número de opciones disponibles dentro de un rango específico. • Binary: una variable discreta binaria con valores de 0 o 1. . Por ejemplo. • Continuous: variable contínua que puede tomar cualquier valor entre un mínimo y un máximo especificados por el usuario.

Este hace que se despliegue una ventana que permite editar la nueva variable. Selecciona esta variable al posionarte sobre alguna celda del renglón de la nueva variable. ahora presiona el botón “Modify”. presiona el botón “Add” en el panel de Variables. Esto añade una nueva variable a la tabla de variables.Variables de Decisión • Para añadir una variable de decisión. .

• Se abrirá la ventana del “Tree” para seleccionar el nodo que tiene el valor de la variable de decisión. presiona el botón “Browse” para asociar esta variable con un nodo del modelo.Variables de Decisión • Una vez que especificaste el nombre de la variable y el tipo. . • Debes seleccionar un nodo que tenga un valor numérico de la contrario la optimización no funcionará correctamente.

000 • Para añadir una restricción presiona el botón “Add” y escribe la restricciones en la columna de ecuaciones. • Algunos ejemplos de restricciones son: • Producción > 1000 • Porcentaje de Ocio <= 0. De esta forma nos aseguramos que el optimizador no seleccione un escenario inválido como óptimo. .Restricciones • Opcionalmente puedes definir restricciones. las cuales sirven para nulificar ciertos escenarios en caso de que no se cumplan las restricciones.10 • Costo Total <= 350.

entonces la función objetivo podría ser: Maximizar Producción * 5 – NúmeroMaximoDeMáquinas * 50 Otros ejemplos son los siguientes: • Maximizar utilidades • Minimizar tiempos de surtido • Maximizar producción minimizando inventario en proceso. Esta podría ser simplemente una expresión como “producción” si es que definiste una variable de decisión llamada de esa forma. • La función objetivo puede calcular la utilidad o pérdida de un proceso. . Por ejemplo.Función Objetivo • La función objetivo es la expresión que se quiere maximizar o minimizar. si cada producto producido genera un ingreso de $5 y el costo de cada máquina (ponderado por la duración de la corrida de simulación) es de $50.

Esto se cumple cuando el valor de la función objetivo de la mejor solución encontrada no varía en al menos 0.Condiciones de Paro • Maximum Time for Optimization es el tiempo máximo (en tiempo real) que el optimizador tendrá para realizar la optimización.0001 después de 100 iteraciones. • AutoStop: si esta opción está seleccionada. la optimización parará cuando el valor de la función objetivo deje de mejorarse. .

• Simulation Time per Scenario/Real Time per Scenario se refieres al tiempo máximo en el que la simulación trabajará en cada escenario.Escenarios • Máximum Scenarios aquí puede limitarse el número máximo de diferentes escenarios que el optimizador probará. en tiempos de la simulación en el primer caso y en tiempo real en el segundo caso. . • Best Solution es el valor del función objetivo del mejor escenario encontrado hasta ese momento. • Current Scenario es el valor de la función objetivo del escenario actual. Cada escenario es una configuración diferente en la búsqueda del optimizador.

• Minimum number of replications es el número mínimo de réplicas a correr por cada escenario diferente. .Réplicas • Si deseas correr la simulación varias veces para un mismo escenario para incrementar la confianza en la media de la función objetivo. • Perform multiple replications per scenario si está activado el optimizador ejecutará más de una réplica por cada escenario. utiliza el panel de “Replications” para especificar cuantas réplicas se efectuarán. Si no hay un critero de salida temprana (Early Exit Criterion) definido entonces el optimizador siempre correrá el número mínimo de réplicas.

Si se definió un critero de salida temprana (Early Exit Criterion) entonces el optimizador correrá el escenario hasta que el criterio haya sido alcanzado. Si especificas un 80% de confianza y un 5% de error. dados los porcentajes de confianza y error. Si seleccionaste “Confidence Interval Satisfied” el optimizador parará las replicas una vez que pueda determinar el valor verdadero de la media del escenario de acuerdo al los porcentajes de confianza (Percent Confidence) y error (Error Percent) especificados.Réplicas • Maximum number of replications es el número máximo de réplicas a correr por cada escenario. . hasta el número máximo de réplicas definido después del cuale el optimizador parará ese escenario. • Early Exit Criterion permite al optimizador dejar de correr más réplicas para el mismo escenario basándose en el critero que se seleccione. que la mejor solución no podrá encontrarse nunca con ese escenario. Si se selecciona “Best Solution Outside Confidence” el optimizador parará las réplicas para cierto escenario si puede determinar. el optimizador parará las replicas tan pronto esté 80% seguro que el valor verdadero de la media está dentro del 5% de la media muestreada.

No debes hacer nada hasta que termine la optimización. presiona el botón “Apply” para guardar tu configuración y después presiona el botón “Optimize”. Ahora debes esperar a que una mensaje aparezca indicando que la optimización ya finalizó.Optimizando… • Una vez que tengas configurados los parámetros. • .

. • En el proceso final se evalúa un solo tipo de máquina. cada una con una velocidad de producción diferente y también un costo de operación diferente.¿Cuántas máquinas necesito de cada tipo para obtener la mayor utilidad posible? • El sistema de producción comprende 2 procesos: • El proceso inicial puede ser realizado por 2 diferentes tipos de máquinas. El tipo de máquina mas rápido es también más caro de operar. El inventario entre el primer proceso y el último no puede ser mayor a 30 unidades por restricciones de espacio.

. Cantidad de máquinas = 1 a 8.600. Precio de Venta por unidad = $45. Costo de operación por hora = $2.Nuestro Proceso a Optimizar… Máquinas Tipo A para Proceso Inicial. Costo de operación por hora = $4. Máquinas Tipo B para Proceso Inicial. Tiempo de producción por unidad = 10 seg. Costo de operación por hora = $3.200. Cantidad de máquinas = 1 a 5. Máquinas Tipo C para Proceso Final. Tiempo de producción por unidad = 13 seg.000. Tiempo de producción por unidad = 18 seg. Cantidad de máquinas = 1 a 7.

200 Evaluó en segundos una cantidad de 280 escenarios para encontrar la utilidad más alta que fue de $47.La Solución Óptima obtenida automáticamente: Utilizar 5 máquinas tipo A. El último escenario analizado arrojó una pérdida de $5. Datos del último escenario analizado Rango mínimo y máximo de la cantidad de máquinas que se quieren evaluar.00 Costos de Operación: Máq. 2 tipo B y 8 del tipo C. Objetivo: Maximizar Utilidad Utilidad = Ingresos – Costos de Operación Precio de Venta por unidad = $45. Tipo C = $3.186 unidades con una utilidad de $47.570.600 Máq. Tipo A = $4.540 .570 (Solución Óptima).000 Máq. para obtener una producción de 2. Tipo B = $2.

Flexsim Chart
Para ver los resultados primero se debe activar la opción “Full History On” y después se corre la simulación

Al finalizar la corrida selecciona “Reports and Statitiscs”.

Oprima “Generate Report” Guarde el archivo .mdb

No existe un límite para la cantidad de pestañas que se pueden crear. Cada una de estas es un reporte específico a la medida del usuario.

Botones para crear gráficas: Cada uno de estos botones crea una pestaña nueva en la parte superior de la ventana; cada uno contiene diferentes tipo de registros que pueden desplegar

Pasos para importar un layout desde AutoCAD
En AutoCAD: 1) Elimina todo el detalle extra que no necesites del layout (para hacerlo más ligero). Borra achurados y demás elementos no escenciales. 2) Mueve el layout cerca del origen (coordenadas 0,0,0) utilizando el comando MOVE o MOVER. 3) Seleccionar “Save as…” o “Guardar como…” y guardarlo como .DXF

3) En la parte superior donde dice Visual Display seleccionar de la lista “Imported Shape”. presionar el botón de los 3 puntos (…) y buscar el el layout con extensión .Pasos para importar un layout desde AutoCAD En Flexsim: 1) Poner un VisualTool sobre el layout. . 7) Activar el campo “luminous” para que se vean todos los colores sin que se afecten por las sombras y luces. 2) Doble click sobre éste para entrar a los parámetros.DXF 6) En RX poner -90 (para que acueste el layout sobre el suelo). 4) En la parte de abajo donde dice “Filename”.

SY = 0. SZ = 0. buscando el nombre del layout y haciendo doble click sobre el icono. Si necesitas volverlo a editar no lo vas a poder seleccionar desde el layout. SZ = 1 (como viene por default). debes poner lo siguiente: Si las unidas son centímetros poner SX = 0. SZ = 0.3.001 Si está en pies poner SX = 0.3 Una vez listo tu layout.01.3.Pasos para importar un layout desde AutoCAD En Flexsim: Si las unidas del dibujo del layout son metros poner SX = 1. activa la opción “No Select”. . para dejarlo fijo y no que lo muevas por error. SZ = 0. SY = 1. Si no está en metros.01. Si las unidas son milímetros poner SX = 0.01.001.001. pero si presionas el botón tree de arriba puedes hacerlo. SY = 0. SY = 0.

Américas No. Providencia.flexsim. 44630 Guadalajara. C.48.08.Ing. Jorge Toucet Torné. Prol.com.flexsim. México.15 Oficina 01(33) 36.43. Col. 108 . 1551 Piso 1.35.mx www. Prol.P. Jalisco.mx www.03 Av. FLEXSIM MEXICO Simulación y Optimización jorgetoucet@flexsim.com.com Celular: 045(33) 38.

Sign up to vote on this title
UsefulNot useful