curso avanzado flexsim

108
1 Entrenamiento Avanzado Entrenamiento Avanzado Simulador Flexsim Simulador Flexsim www.flexsim.com.mx

Upload: ohernandez46

Post on 15-Dec-2014

1.037 views

Category:

Documents


57 download

TRANSCRIPT

Page 1: curso avanzado flexsim

1

Entrenamiento AvanzadoEntrenamiento AvanzadoSimulador FlexsimSimulador Flexsim

www.flexsim.com.mx

Page 2: curso avanzado flexsim

21 - Weibull

0.00 0.25 0.50 0.75 1.00 1.25 1.50 1.75 2.00 2.25 2.50

0.00

0.10

0.20

0.30

0.40

0.50

0.60

0.70

0.80

Density Function Plot

X-Value

f(x)

Las distribuciones estadísticas capturan Las distribuciones estadísticas capturan la variabiliad de la vida real.la variabiliad de la vida real.

3 - Normal

0.00 0.50 1.00 1.50 2.000.00-0.50

0.00

0.10

0.20

0.30

0.40

0.50

0.60

0.70

0.80

Density Function Plot

X-Value

f(x)

2 - Exponential

0.0 1.0 2.0 3.0 4.0 5.0 6.0

0.00

0.25

0.50

0.75

1.00

Density Function Plot

X-Value

f(x)

4 - Lognormal

0.0 0.5 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0

0.00

0.10

0.20

0.30

0.40

0.50

0.60

0.70

0.80

0.90

1.00

Density Function Plot

X-Value

f(x)

Page 3: curso avanzado flexsim

33

Modelo

Objectos

Flowitems

Page 4: curso avanzado flexsim

4

Operaciones con el MouseOperaciones con el Mouse• Navegación en la ventana del layout:

– Mover layout: click izquierdo y arrastrar.

– Inclinar y Rotar layout: click derecho y arrastrar.

– Zoom: click en botones derecho e izquierdo y arrastrar (o usar el botón de rueda del mouse).

MOVER

ROTAR

ZOOM

Page 5: curso avanzado flexsim

5

Operaciones con el MouseOperaciones 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).

• Highlighted (destacado) = cubo amarillo: click izquierdo.

• 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. Basta con que toque una parte de un objeto para que se seleccione.

Page 6: curso avanzado flexsim

6

TamaTamaño y Rotación de un objetoño y Rotación de un objeto• A los objetos se les puede cambiar

su posición, rotación y tamaño desde la pestaña General.

• También pueden modificarse desde el layout:– Puedes cambiar la posición haciendo

click izquierdo y arrastrando a la nueva ubicación.

– Da un click derecho sobre un objeto y selecciona “Edit Object Size/Rotation” del menú.

• Click izquierdo y arrastra las flechas para cambiar el tamaño

– Arriba y a la derecha lo crecen.

– Abajo y a la izquierda lo hacen pequeño.

– Down and left are smaller

• Click derecho y arrastra las flechas para rotar sobre cada eje, según la flecha que selecciones.

Page 7: curso avanzado flexsim

7

Conexiones de los PuertosConexiones 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).

Input Output

Page 8: curso avanzado flexsim

8

ConexionesConexiones de los de los PuertosPuertos• Center Ports: los puertos centrales son

usados generalmente para llamar a un TaskExecuter para que procese o bien transporte un flowitem.

Center

Page 9: curso avanzado flexsim

9

Teclas para las conexiones de puertosTeclas para las conexiones de puertos

A

Q W

S

Desconectar

Conectar

Outputs a Inputs Center a Center

Verlas V C

Page 10: curso avanzado flexsim

10

• Los diferentes modos están disponible en el menú de la barra.

• Presiona la tecla ‘ESC’ para regresar el cursor al modo normal

OtraOtra forma de forma de ConectarConectar los los PuertosPuertos

Page 11: curso avanzado flexsim

11

Viendo las conexiones de los puertosViendo 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 “ - ”.

Page 12: curso avanzado flexsim

1212

• FixedResources – objetos que mandan o reciben flowitems.

• TaskExecuters – recursos móbiles que desempeñan tareas asignadas

ClasificaciónClasificación de los de los objetosobjetos

Page 13: curso avanzado flexsim

1313

• 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, creada en el modelo cuando un objeto es arrastrado desde la librería hasta el layout.

BibliotecaBiblioteca de de objetosobjetos o Library o Library

Page 14: curso avanzado flexsim

14

Árbol de la Familia FlexsimÁrbol de la Familia FlexsimFlexsim ObjectFlexsim Object

Fixed ResourceFixed Resource DispatcherDispatcher NavigatorNavigator Network NodeNetwork Node Visual ToolVisual Tool

RecorderRecorder

Traffic ControlTraffic Control

Source

Queue

Sink

Conveyor

Rack

Reservoir

MultiProcessor

Processor

Task Executer Network Navigator

Crane Navigator

MergeSortMergeSort CombinerCombiner

SeparatorSeparator

OperatorOperator

TransporterTransporter

CraneCrane

ASRS VehicleASRS Vehicle

RobotRobot

ElevatorElevator

Page 15: curso avanzado flexsim

15

Tasks y TasksequencesTasks y Tasksequences• Task: es una sola instrucción o acción que deberá

ser desempeñada por una objeto del tipo TaskExecuter.

ejemplo: LOAD flowitem.

• Tasksequence: una serie de tasks (actividades) que deben desempeñarse en sequencia.

ejemplo: TRAVEL al queue

LOAD flowitem

TRAVEL al processor

UNLOAD flowitem

Page 16: curso avanzado flexsim

16

Editando Objetos SeleccionadosEditando 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

Page 17: curso avanzado flexsim

1717

• 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++)

ComprendiendoComprendiendo laslasListasListas de de OpcionesOpciones..

Page 18: curso avanzado flexsim

18

PlantillaPlantilla de Cde Códigoódigo

• El texto azul de la Plantilla de Código puede ser reemplazado por culquier número o expresión válidos.

• Estas plantillas pueden ser personalizadas o bien crear nuevas opciones desde la ventana de Edición de Código.

Page 19: curso avanzado flexsim

19

Orden de EjecuciónOrden de Ejecución(push flowitem)(push flowitem)

OnEntryflowitem llega Setup Time Pick Operator

OnSetupFinishProcess Time

demora

Pick Operator

OnProcessFinish

Request Transport From

OnExit

Send To Port

demora

demoraposibledemora

Page 20: curso avanzado flexsim

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

Page 21: curso avanzado flexsim

Reportes de Resultados,Reportes de Resultados,Gráficas y EstadísticasGráficas y Estadísticas

• Conforme corre una simulación en FlexSim, 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; 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).

Page 22: curso avanzado flexsim

Reportes de Resultados,Reportes de Resultados,Gráficas y EstadísticasGráficas y Estadísticas

• Para poder usar FlexSim Chart, primero se deberá habilitar la opción “Full History On” del menú “Statistics”.

• Una vez que se han activado las estadísticas, se puede correr el modelo. Cuando termine, los datos pueden ser grabados en una base de datos que se puede abrir con FlexSim Chart.

Page 23: curso avanzado flexsim

Reporte de resultados Reporte de resultados al final de la simulaciónal final de la simulación

Page 24: curso avanzado flexsim

Gráficos de GanttGráficos de Gantt

Page 25: curso avanzado flexsim

ReporteReporteFinancieroFinanciero

Page 26: curso avanzado flexsim

Listado de Posibles EstadosListado de Posibles Estados

1 - STATE_IDLE 2 - STATE_PROCESSING3 - STATE_BUSY4 - STATE_BLOCKED5 - STATE_GENERATING6 - STATE_EMPTY7 - STATE_COLLECTING8 - STATE_RELEASING9 - STATE_WAITING_FOR_OPERATOR10 - STATE_WAITING_FOR_TRANSPORTER11 - STATE_BREAKDOWN12 - STATE_SCHEDULED_DOWN13 - STATE_CONVEYING14 - STATE_TRAVEL_EMPTY15 - STATE_TRAVEL_LOADED16 - STATE_OFFSET_TRAVEL_EMPTY17 - STATE_OFFSET_TRAVEL_LOADED18 - STATE_LOADING19 - STATE_UNLOADING20 - STATE_DOWN

21 - STATE_SETUP22 - STATE_UTILIZE23 - STATE_FULL24 - STATE_NOT_EMPTY25 - STATE_FILLING26 - STATE_STARVED27 - STATE_MIXING28 - STATE_FLOWING29 - STATE_ALLOCATED_IDLE30 - STATE_OFF_SHIFT31 - STATE_CHANGE_OVER32 - STATE_REPAIR33 - STATE_MAINTENANCE34 - STATE_LUNCH35 - STATE_ON_BREAK36 - STATE_SUSPEND37 - STATE_AVAILABLE38 - STATE_PREPROCESSING39 - STATE_POSTPROCESSING40 - STATE_INSPECTING

41 - STATE_OPERATING42 - STATE_STANDBY43 - STATE_PURGING44 - STATE_CLEANING45 - STATE_ACCELERATING46 - STATE_MAXSPEED47 - STATE_DECELERATING48 - STATE_STOPPED49 - STATE_WAITING50 - STATE_ACCUMULATING

Page 27: curso avanzado flexsim

Reportes de Resultados,Reportes de Resultados,Gráficas y EstadísticasGrá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 unflowitem se mueve de unobjeto a otro.

•ID del Flowitem•Tiempo de inicio de movimiento•Origen•Destino•Itemtype del objeto

Page 28: curso avanzado flexsim

Reportes de Resultados,Reportes de Resultados,Gráficas y EstadísticasGrá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

Page 29: curso avanzado flexsim

29

NetworkNodesNetworkNodes• 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.

Page 30: curso avanzado flexsim

30

Conectando NetworkNodesConectando 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).

• Cuando los hayas conectado observarás una línea negra entre los nodos. Dos indicadores de dirección verdes muestran que se permite viajar en ambas direcciones de la red.

Page 31: curso avanzado flexsim

31

Conectando un Fixed Resource a la Red.Conectando un Fixed Resource a la Red.

• 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.

• Una línea azul mostrará la conexión. Está línea no está conectada a ningún puerto.

Page 32: curso avanzado flexsim

32

Conectando unConectando unTaskExecuter a la Red.TaskExecuter a la Red.

• Haz click y arrastra una conexión entre el TaskExecuter y el NetworkNode mientras presiones la letra “A”.

• Una línea roja indica que la conexión se ha realizado. Esta línea no está conectada a ningún puerto.

Page 33: curso avanzado flexsim

33

Caminos de una sola direcciónCaminos 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.

• El indicador de dirección verde ahora se pone en rojo, mostrando la dirección restringida.

Page 34: curso avanzado flexsim

34

Caminos de no rebasarCaminos 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.

• El indicador de dirección se hará amarillo, mostrando la direccion del tipo “non-pasing”.

• Conectando nuevamente con la letra “A” provoca que vuelva al estado anterior en color verde.

No hay paso.

Si hay paso pero no se puede rebasar

Page 35: curso avanzado flexsim

35

Menu del Indicador de DirecciMenu del Indicador de Direcciónón

Haciendo click izquierda y presionando la “X” sobre el indicador de dirección también permite cambiar entre los diferentes modos de dirección.

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.

Otra forma más sencilla que conectar con la “A” para definir el tipo de segmento, consiste en hacer un click derecho sobre un indicador de dirección y escoger la opción deseada desde el menú.

Page 36: curso avanzado flexsim

36

Puntos de control de curvas y rectasPuntos de control de curvas y rectas

• Para crear un segmento curvo selecciona “Curved” desde el menú contextual del indicador de dirección.

• Aparecerán puntos de control sobre el camino.

• Arrastra los puntos de control para crear un camino curvo.

Page 37: curso avanzado flexsim

37

5. A

6. a

1. a

2. A

3. A

4. A

Diferentes Modos para ver los NetworkNodesDiferentes Modos para ver los NetworkNodes

• 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.

Page 38: curso avanzado flexsim

38

Pestaña de los segmentos de camino.Pestaña de los segmentos de camino.

• Cada camino de un NetworkNode puede ser editado de varias maneras.

• Modos diferentes de dirección pueden especificare usando la lista “Connection Type”.

• Puede definir el espacio mínimo que debe mantenerse entre los viajeros de la red.

• Se puede especificar una velocidad máxima específica para cada segmento.

• Una distancia virtual (Virtual Distance) puede establecerse. Este es un valor que de distancia forzado. Usando la distancia virtual, puedes dar a cualquier segmento una distancia artificial.

¿Cuándo puede ser conveniente especificar una distancia virtual?

Page 39: curso avanzado flexsim

39

Concepto de los TriggersConcepto de los Triggers• Cuando ocurren eventos clave en un objeto, en

ese momento se dispara un trigger.

• Puedes especificar que quieres que sucenda cuando se disparara un trigger.

• Existen triggers que se activan cuando un flowitem entra o sale de un objeto. 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.

Page 40: curso avanzado flexsim

40

TriggersTriggers

• Una oportunidad para definir y personalizar el comportamiento del sistema cuando ocurre un evento en específico.

– Leer o escribir información de un flowitem.

– Cambiar las propiedades visuales tanto de flowitems como de objetos.

– Mandar mensajes a otros objetos.

– Cambiar el comportamiento de otros objetos.

– Y muchas cosas más…

Page 41: curso avanzado flexsim

41

¿Qué es un Nodo¿Qué es un Nodo??

• La estructura básico de datos de Flexsim es un árbol (tree) jerárquico.– main tree (objetos y datos del modelo y del proyecto).

– view tree (objetos de GUIs y picklist).

– model tree (objetos y datos relacionados con el modelo).

• El nodo es el elemento básico de construcción del árbol.

• Los nodos contienen toda la información (no toda visible fuera del árbol) de los objetos, GUIs y datos.

Page 42: curso avanzado flexsim

42

Estructura de los NodosEstructura de los Nodos

• Los nodos tienen un nombre.

• Nodos pueden contener estos tipos de información– number (numérica)

– string (texto)

– object (objeto)

• Si los nodos tienen datos de objeto, usa para ver una lista separada de toda la información del objeto (datos y funciones de los miembros).

• Si los nodos contienen subnodos, usa para expander y ver los nodos hijos.

Page 43: curso avanzado flexsim

43

SSímbolos de los Nodosímbolos de los Nodos

Standard Folder

Object

Object data

Function (C++)

Function (FlexScript)

Page 44: curso avanzado flexsim

44

Ejemplo delEjemplo del ÁrbolÁrbol del Modelodel Modelo

Page 45: curso avanzado flexsim

45

¿Qué es una función?¿Qué es una función?

Nombredelafunción(argumento1, argumento2, etc)

• Los argumentos pueden ser:– Valores numéricos. – Textos (“string“).– Apuntador Pointer (*) a un objeto o node.

• 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.

Page 46: curso avanzado flexsim

46

• A cualquier objeto en un modelo se le puede programar tiempos operacionales y no operacionales.

• Los programas pueden definirse gráficamente o mediante tablas

Tablas de de Tiempos o Time Tables

Page 47: curso avanzado flexsim

47

• 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.

Tablas de Tiempo o Time Tables

Page 48: curso avanzado flexsim

48

Reglas GeneralesReglas Generales• Las letras son sensibles (A no es lo mismo que a).

• No se necesita un formato específico (el uso de espacios, tabuladores y renglones en blanco es libre, pero se sugiere se usen para hacer mas “leíble” el código).

• Los valores de texto (string) deben introducirse entre comillas. “mi texto”

• Los paréntesis le siguen a un llamado de una función y las comas separan los argumentos de dicha función. moveobject(object1, object2);

• Una función o un comando siempre termina con PUNTO Y COMA (;)• Los paréntesis pueden usarse libremente para crear asociaciones entre las

declaraciones matemáticas y lógicas. ((x+3)*2)

• Las llaves { } se usan para definir bloques de declaraciones.

• Para poner como comentario el resto de una línea usa // y escribe aquí.• Comentarios multilínea empiezan con /* y terminan con */

• No uses espacios o caracteres especiales (ñ,á, . , %, etc.) en los nombres.

( _ si puedes usarlo).

• Los nombre pueden incluir números pero no pueden empezar con un número (maquina9 está bien, pero 9máquina no).

Page 49: curso avanzado flexsim

49

Tipos de VariablesTipos de Variables

• int

• double

• string

• treenode

integer “entero”.(1, 2, 3, 14324)

double precision “con decimales“(2.5, 3.14159)

text string “texto”(“Reparando Montacargas”)

apunta a un nodo del árbol Flexsim

Page 50: curso avanzado flexsim

50

Declarando y dandoDeclarando y dandoun valor a las variablesun valor a las variables

• int index = 1;

• double peso = 175.8;

• string categoria = “exportacion”;

• treenode montacargas = centerobject(current,1);

Page 51: curso avanzado flexsim

51

Operadores MatemOperadores Matemáticosáticos

• x + y• x - y• x * y• x / y• sqrt(x)• pow(x,y)• round(x)• frac(x)• fmod(x,y)

• min(x,y)

• max(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

Page 52: curso avanzado flexsim

52

ComparandoComparando

• 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

Page 53: curso avanzado flexsim

53

RelacionandoRelacionando

• &&

• ||

• !

Y lógico

O lógico

NO lógico

Page 54: curso avanzado flexsim

54

ActualizandoActualizando

• 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

Page 55: curso avanzado flexsim

55

Referencias BReferencias Básicas de los Objetosásicas de los Objetos

• current el objeto actual, el dueño del código.• item el flowitem involucrado que dispara el evento. • model() hace referencia al árbol del modelo.

• rank(node, ranknum) rank(current,3)• node(“relativepath”, object) node(“/Operator1”,model())

• inobject(object, portnum) inobject(current,1)• outobject(object, portnum) outobject(current,1)• centerobject(object, portnum) centerobject(current,1)

Page 56: curso avanzado flexsim

56

EstadEstadísticas Básicas de los Objetosí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);

• int produccion = getoutput(current);

Page 57: curso avanzado flexsim

57

Atributos de espacio de los ObjetosAtributos de espacio de los Objetos

• xloc( object ) yloc( object ) zloc( object )

• setloc( object, xnum, ynum, znum )

• xsize( object ) ysize( object ) zsize( object )

• setsize( object, xnum, ynum, znum )

• xrot( object ) yrot( object ) zrot( object )

• setrot( object, xdeg, ydeg, zdeg )

Page 58: curso avanzado flexsim

58

ItemtypesItemtypes

• Itemtype: todos los flowitems tienen un atributo llamado itemtype. 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.

Page 59: curso avanzado flexsim

59

Atributos básicos de los ObjetosAtributos básicos de los Objetos

• getname( object )

• setname( object, “name” )

• getitemtype( object )

• setitemtype( object, num)

• setcolor( object, red, green, blue )

• colorred( object ) – blue,green,random...

– ¿Cómo puedes encontrar los nombres de los otros colores?

Page 60: curso avanzado flexsim

60

Listados y AvisosListados y Avisos• Sintáxis

– pt( text string ); imprime texto.

– pf( float value ); imprime números con decimales.

– pd( discrete value ); imprime números enteros.

– pr( ); salto de renglón.

– msg( “título de ventana”, “texto del mensaje” ).

• La información se muestra en la consola de salida (Output Console).Selecciona View -> Output Console

Ejemplo:pt(“Producto en “); pt(getname(current)); pt(“. Tiempo: “); pf(time()); pr();

Page 61: curso avanzado flexsim

61

Parámetros de un ProcessorPará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)?

Page 62: curso avanzado flexsim

62

Variables de Acceso y ReturnsVariables de Acceso y ReturnsCampo de Edición Variables de Acceso Returns

Setup Time current, item, port tiempo de demora

Process Time current, item tiempo de demora

MTBF current tiempo de demora

MTTR current tiempo de demora

Send To Port current, item número de puerto

Pull From Port current número de puerto

Pull Requirement current, item, port verdadero/falso (1/0)

Request Transport From current, item, port apuntador numérico

Pick Operator current, item apuntador numérico

OnReset current N/A

OnMessage current, msgsendingobject,

msgparam1, msgparam2, msgparam3

N/A

OnEntry current, item, port N/A

OnExit current, item, port N/A

OnSetupFinish current, item N/A

OnProcessFinish current, item N/A

OnBreakDown current N/A

OnRepair current N/A

Page 63: curso avanzado flexsim

63

‘if’ ‘if’ (SI(SI Lógico)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);

}

Page 64: curso avanzado flexsim

64

Labels o Labels o EtiquetasEtiquetas

• Labels: la información puede ser almacenada en los flowitems (y en otros objetos) en la forma de etiquetas o labels.

• Los flowitems y otros objetos de Flexsim pueden tener una cantidad ilimitada de labels.

• Los labels deben tener nombre y datos. Los datos pueden ser numéricos, texto, lista o tabla.

Page 65: curso avanzado flexsim

65

Labels de los ObjetosLabels de los Objetos• sintáxis

– getlabelnum( object, “labelname” );

– setlabelnum( object, “labelname” , value );

– getlabelstr( object, “labelname” );

– setlabelstr( object, “labelname” , string );

– label( object, “labelname” );

• ejemplos– getlabelnum( item, “numero de serie” );– setlabelnum( item, “numero de serie”, 5 );– getlabelstr( current, “categoria” );– setlabelstr( current, “categoria”, “congelados” );– inc( label(item, “numero de retrabajos”), 1 );

• Este comando para incrementar solo funciona con valores numéricos.

Page 66: curso avanzado flexsim

66

switch ( switchvariable ){

case casenum:{code blockbreak;

}case casenum2:{code blockbreak;

}default:{code blockbreak;

}}

int type = getitemtype(item);

switch (type){

case 1:{

coloryellow(item);break;

}case 5:{

colorred(item);break;

}default:{

colorgreen(item);break;

}}

‘switch’ lógico‘switch’ lógico

Page 67: curso avanzado flexsim

67

‘while’ ‘while’ ((mientrasmientras) ) lógicológicowhile (test expression){

code block

}

while (content(current) > 0)

{

destroyobject(last(current));

}

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.

Page 68: curso avanzado flexsim

68

‘for’ ‘for’ lógicológico

for (int index=1; index<=content(current); index++){

colorblue(rank(current,index));}

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. Escribe la variable que cambia y dale un valor inicial.

2. Escribe la condición para que salga del loop.

3. Escribe el incremento de la variable que se hará automáticamente al final de cada iteración o repetición.

Evita loops infinitos asegurando que la expresion de prueba eventualmente sea falsa.

for (start expression; test expression; count expression){

//code block}

Page 69: curso avanzado flexsim

69

Orden de EjecuciónOrden de Ejecución(pulled flowitem)(pulled flowitem)

Pull Requirement Flowitem se encuentra

disponibleen el objeto anterior

Setup Timedemora Pick Operator

Send To Port

OnEntry

OnSetupFinish

Process Time Pick Operator demora

Request Transport From

Pull FromPort

demorademoraOnExit

if true

demora

Page 70: curso avanzado flexsim

70

Comandos de Tablas GlobalesComandos de Tablas Globales(Global Tables)(Global Tables)

• gettablenum( “tablename”, rownum, colnum )

• settablenum( “tablename”, rownum, colnum, value )

• gettablestr( “tablename”, rownum, colnum )

• settablestr( “tablename”, rownum, colnum, string )

Page 71: curso avanzado flexsim

71

Control BControl Básico de Objetosásico de Objetos• closeinput( object ); openinput( object );• stopinput( object ); resumeinput( object );• closeoutput( object ); openoutput( object );• stopoutput( object ); resumeoutput( object );

• sendmessage( toobject, fromobject, parameter1, parameter2, parameter3 );

• senddelayedmessage( toobject, delaytime, fromobject, parameter1, parameter2, parameter3 );

• stopobject( object ); resumeobject( object );• moveobject( object, containerobject );

Page 72: curso avanzado flexsim

72

MensajesMensajes• Message: información enviada de un

objeto a otro objeto.

• Cuando un objeto recibe un mensaje, un trigger se dispara.

• 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().

Page 73: curso avanzado flexsim

73

Orden de EjecuciónOrden de Ejecución(Messages)(Messages)

sendmessage()

demora

OnMessage triggerdel objeto querecibe el mensaje

senddelayedmessage()

OnMessage triggerdel objeto que

recibe el mensaje

Page 74: curso avanzado flexsim

74

Control de un TaskExecuterControl de un TaskExecuter• Comandos simples:

requestoperators( taskexecuter, station, involvedobj, nrofops, priority, preempting )

freeoperators( taskexecuter, involvedobj )

• TaskSequence personalizada y creada por el usuario:createemptytasksequence( taskexecuter, priority, preempting)

Returns a pointer (fsnode *) to the task sequence created

inserttask(tasksequence, tasktype, involved1, involved2, parameter1, parameter2, parameter3 )

dispatchtasksequence( tasksequence )

Page 75: curso avanzado flexsim

75

CCódigo de ejemplo deódigo de ejemplo de tasksequencetasksequencefsnode* montacargas = centerobject(current, 1);fsnode* origen = centerobject(current, 2);fsnode* destino = centerobject(current, 3);fsnode* item = first(origin);

fsnode *ts = createemptytasksequence(montacargas, 0, 0);

inserttask(ts, TASKTYPE_TRAVEL, origen, NULL);inserttask(ts, TASKTYPE_FRLOAD, item, origen);inserttask(ts, TASKTYPE_TRAVEL, destino, NULL);inserttask(ts, TASKTYPE_FRUNLOAD, item, destino);

dispatchtasksequence(ts);

Page 76: curso avanzado flexsim

76

TiposTipos de de TareasTareas ((Task)Task)TASKTYPE_LOAD: flowitem, pickup

TASKTYPE_FRLOAD: flowitem, pickup, [outputport]

TASKTYPE_UNLOAD: flowitem, dropoff

TASKTYPE_FRUNLOAD: flowitem, dropoff, [inputport]

TASKTYPE_UTILIZE: involved, station, [state]

TASKTYPE_STOPREQUESTFINISH: stoppedobject, NULL

TASKTYPE_TRAVEL: destination, NULL

TASKTYPE_TRAVELTOLOC: NULL, NULL,xloc,yloc,zloc, [endspeed]

TASKTYPE_TRAVELRELATIVE: NULL, NULL,xloc,yloc,zloc, [endspeed]

TASKTYPE_BREAK: NULL, NULL

TASKTYPE_DELAY: NULL, NULL, delaytime, [state]

TASKTYPE_SENDMESSAGE: receiver, NULL, [param1,param2,param3]

TASKTYPE_MOVEOBJECT: flowitem, container, [port]

TASKTYPE_DESTROYOBJECT: object, NULL

Parámetros Cafés son requeridos, parámetros [Grises] son opcionales.** utiliza profiletasksequence(ts) para enviar una descripción detallada al Output Console.

Page 77: curso avanzado flexsim

Experimentación con FlexsimExperimentación con Flexsim

• El Experimenter se encuentra en el menú “Statistics”

• Permite correr el modelo a través de diferentes escenarios, cambiando ciertas variables en cada uno de ellos.

• Puede usarse con varias réplicas por escenario recolectando datos

Page 78: curso avanzado flexsim

Experimentación con FlexsimExperimentación con Flexsim

Page 79: curso avanzado flexsim

Activa la herramienta “Experimenter”

Si se marca, el modelo grabará su estado al final de cada réplica. Los estados son guardados con un archivo .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”.

Experimentación con FlexsimExperimentación con Flexsim

Page 80: curso avanzado flexsim

Cuando el modelo ha corrido por este tiempo, el modelo se detiene y arranca la siguiente réplica o

escenario su los hay.

Después que el modelo ha corrido durante este tiempo, las estadísticas se borran y arrancan otra vez, pero el modelo sigue corriendo.

Cuántas réplicas por cada escenario

Número de escenarios en el experimento

Número de la réplica que está

corriendo en el escenario

vigente

Escenario Actual

Experimentación con FlexsimExperimentación con Flexsim

Page 81: curso avanzado flexsim
Page 82: curso avanzado flexsim
Page 83: curso avanzado flexsim
Page 84: curso avanzado flexsim
Page 85: curso avanzado flexsim

• Optimización es el análisis automático de diferentes escenarios a partir de los modelos de simulación creados en Flexsim, variando las distintas condiciones que se le especifiquen para. encontrar la Solución Óptima.

Las condiciones pueden ser el número de personas, montacargas, inventario, tamaños de lote, velocidades de las bandas transportadoras, personal de mantenimiento, demandas y cualquier otra variable que se desee.

¿Qué es Optimización?¿Qué es Optimización?

Page 86: curso avanzado flexsim

• Uno mismo define el criterio para optimizar, según el problema que se quiera resolver.

• Los objetivos en las optimizacionespueden ser:

• Maximizar Utilidades.

• Minimizar tiempos de Surtido.

• Maximizar el servicio al cliente.

• Cualquier otro objetivo que desee.

• Pueden combinarse varios objetivos como una sola meta y darle una importancia diferente a cada uno de ellos.

¿Qué es Optimización?¿Qué es Optimización?

Page 87: curso avanzado flexsim

• Utilizando potentes algoritmos, el módulo de optimización OptQuestde 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.

¿Qué es Optimización?¿Qué es Optimización?

Page 88: curso avanzado flexsim

• La primera parte al diseñar una optimización es seleccionar lasvariables de decisión del modelo.

• Las variables de decisión generalmente pueden resolverse al plantear el problema que quieres resolver. Por ejemplo, un problema puede ser: ¿qué capacidad de producción necesitoen cierta área para aumentar mi flujo de producción?

• Este planteamiento define las variables de decisión del modelo, que son la capacidad de la máquina y el producto terminado del modelo.

• Pero hay que destacar que estas variables tienen roles totalmente diferentes…

• La capacidad de la máquina es un valor que queremos cambiary experimentar mientras que el producto terminado es nuestraretroalimentación pues refleja el resultado de los cambiosrealizados, permitiendo comparar que tan bueno es un escenario con respecto a otros.

Variables de DecisiónVariables de Decisión

Page 89: curso avanzado flexsim

Tipos de Variables de DecisiónTipos de Variables de Decisión

• El motor del OptQuest manipula las variables de decisiónbuscando los valores óptimos. Existen 7 tipos de variables de decisión diferentes. Las 3 principales son las siguientes:

• User-Controlled: se utilizan como variables de retroalimentación para poder comparar y calificar entre distintos escenarios.

• Integer: una variable discreta con un rango de valoresenteros con incrementos de 1.

• Permutation: variable de permutación que permiteresolver problemas de sequenciado o programación de la producción y de surtidos de órdenes. Por ejemplo parasaber el orden en el cual se debe mezclar la pintura paraminimizar los tiempos de limpieza entre los cambios de color. El valor de la permutación representa el ordendentro de la secuencia.

Page 90: curso avanzado flexsim

• 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.

• Continuous: variable contínua que puede tomar cualquier valor entre un mínimo y un máximo especificados por el usuario.

• Binary: una variable discreta binaria con valores de 0 o 1.

• Design: las variables de diseño se usan para decisiones en donde las variables representan una alternativa y no unacantidad. 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. Por ejemplo, la opción #10 podría no ser más costosa o unamejor opción que la opción #1. Se le define un límite inferior, un límite superior y un valor de salto que controla el número de opciones disponibles dentro de un rango específico.

Tipos de Variables de DecisiónTipos de Variables de Decisión

Page 91: curso avanzado flexsim

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

Variables de DecisiónVariables de Decisión

Page 92: curso avanzado flexsim

• Una vez que especificaste el nombre de la variable y el tipo, presiona el botón“Browse” para asociar estavariable con un nodo del modelo.

• Se abrirá la ventana del “Tree” para seleccionar el nodo que tiene el valor de la variable de decisión.

• Debes seleccionar un nodoque tenga un valor numéricode la contrario la optimizaciónno funcionará correctamente.

Variables de DecisiónVariables de Decisión

Page 93: curso avanzado flexsim

RestriccionesRestricciones

• Opcionalmente puedes definir restricciones, las cualessirven para nulificar ciertos escenarios en caso de queno se cumplan las restricciones. De esta forma nosaseguramos que el optimizador no seleccione un escenario inválido como óptimo.

• Algunos ejemplos de restricciones son:

• Producción > 1000

• Porcentaje de Ocio <= 0.10

• Costo Total <= 350,000

• Para añadir una restricción presiona el botón “Add” y escribe la restricciones en la columna de ecuaciones.

Page 94: curso avanzado flexsim

Función ObjetivoFunción Objetivo• La función objetivo es la expresión que se quiere

maximizar o minimizar. Esta podría ser simplemente unaexpresió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, 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, 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.

Page 95: curso avanzado flexsim

Condiciones de ParoCondiciones de Paro

• Maximum Time for Optimizationes el tiempo máximo (en tiemporeal) que el optimizador tendrá pararealizar la optimización.

• AutoStop: si esta opción estáseleccionada, la optimizaciónparará cuando el valor de la función objetivo deje de mejorarse. Esto se cumple cuando el valor de la función objetivo de la mejorsolución encontrada no varía en al menos 0.0001 después de 100 iteraciones.

Page 96: curso avanzado flexsim

EscenariosEscenarios• Máximum Scenarios aquí puede limitarse el número máximo

de diferentes escenarios que el optimizador probará. Cadaescenario es una configuración diferente en la búsqueda del optimizador.

• Current Scenario es el valor de la función objetivo del escenario actual.

• Best Solution es el valor del función objetivo del mejorescenario encontrado hasta ese momento.

• Simulation Time per Scenario/Real Time per Scenario se refieres al tiempo máximo en el que la simulación trabajará en cada escenario, en tiempos de la simulación en el primer casoy en tiempo real en el segundo caso.

Page 97: curso avanzado flexsim

RéplicasRéplicas

• Si deseas correr la simulaciónvarias veces para un mismoescenario para incrementar la confianza en la media de la función objetivo, utiliza el panel de “Replications” para especificarcuantas réplicas se efectuarán.

• Perform multiple replications per scenario si está activadoel optimizador ejecutará más de una réplica por cadaescenario.

• Minimum number of replications es el número mínimo de réplicas a correr por cada escenario diferente. Si no hay un critero de salida temprana (Early Exit Criterion) definidoentonces el optimizador siempre correrá el número mínimo de réplicas.

Page 98: curso avanzado flexsim

RéplicasRéplicas• Maximum number of replications es el número máximo de

réplicas a correr por cada escenario. Si se definió un critero de salida temprana (Early Exit Criterion) entonces el optimizadorcorrerá el escenario hasta que el criterio haya sido alcanzado, 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ásréplicas para el mismo escenario basándose en el critero que se seleccione.

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. Si especificas un 80% de confianza y un 5% de error, el optimizador parará las replicas tan pronto esté 80% seguro que el valor verdaderode la media está dentro del 5% de la media muestreada.

Si se selecciona “Best Solution Outside Confidence” el optimizador parará lasréplicas para cierto escenario si puede determinar, dados los porcentajes de confianza y error, que la mejor solución no podrá encontrarse nunca con eseescenario.

Page 99: curso avanzado flexsim

Optimizando…Optimizando…• Una vez que tengas configurados los

parámetros, presiona el botón “Apply” paraguardar tu configuración y despuéspresiona el botón “Optimize”.

• Ahora debes esperar a que una mensajeaparezca indicando que la optimización yafinalizó. No debes hacer nada hasta quetermine la optimización.

Page 100: curso avanzado flexsim

¿Cuántas máquinas necesito ¿Cuántas máquinas necesito de cada tipo para obtener la de cada tipo para obtener la

mayor utilidad posible?mayor utilidad posible?• El sistema de producción comprende 2 procesos:

• El proceso inicial puede ser realizado por 2 diferentes tipos de máquinas, cada una con una velocidad de producción diferente y también un costo de operación diferente. El tipo de máquina mas rápido es también más caro de operar.

• En el proceso final se evalúa un solo tipo de máquina. El inventario entre el primer proceso y el último no puede ser mayor a 30 unidades por restricciones de espacio.

Page 101: curso avanzado flexsim

Máquinas Tipo A para Proceso Inicial.Tiempo de producción por unidad = 10 seg.

Costo de operación por hora = $4,000.Cantidad de máquinas = 1 a 7.

Máquinas Tipo C para Proceso Final.Tiempo de producción por unidad = 13 seg.

Costo de operación por hora = $3,200.Cantidad de máquinas = 1 a 8.

Máquinas Tipo B para Proceso Inicial.Tiempo de producción por unidad = 18 seg.

Costo de operación por hora = $2,600.Cantidad de máquinas = 1 a 5.

Precio de Venta por unidad = $45.

Nuestro Proceso a Optimizar…Nuestro Proceso a Optimizar…

Page 102: curso avanzado flexsim

Objetivo: Maximizar UtilidadUtilidad = Ingresos – Costos de Operación

Precio de Venta por unidad = $45.00Costos de Operación: Máq. Tipo A = $4,000

Máq. Tipo B = $2,600Máq. Tipo C = $3,200

La Solución Óptima obtenida automáticamente:Utilizar 5 máquinas tipo A, 2 tipo B y 8 del tipo C, para obtener una

producción de 2,186 unidades con una utilidad de $47,570.

Evaluó en segundos una cantidad de 280 escenarios para encontrar la utilidad más alta que fue de $47,570

(Solución Óptima).

Rango mínimo y máximo de la cantidad de máquinas que se quieren evaluar.

Datos del último escenario analizado

El último escenario analizado arrojó una pérdida de $5,540

Page 103: curso avanzado flexsim

Oprima “Generate Report”

Guarde el archivo .mdb

Flexsim ChartFlexsim ChartPara 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”.

Page 104: curso avanzado flexsim

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

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.

Page 105: curso avanzado flexsim

Pasos para importar un Pasos para importar un layoutlayoutdesde desde AutoCADAutoCAD

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

Page 106: curso avanzado flexsim

Pasos para importar un Pasos para importar un layoutlayoutdesde desde AutoCADAutoCAD

En Flexsim:

1) Poner un VisualTool sobre el layout.

2) Doble click sobre éste para entrar a los parámetros.

3) En la parte superior donde dice Visual Display seleccionar de la lista “Imported Shape”.

4) En la parte de abajo donde dice “Filename”, presionar el botón de los 3 puntos (…) y buscar el el layout con extensión .DXF

6) En RX poner -90 (para que acueste el layout sobre el suelo).

7) Activar el campo “luminous” para que se vean todos los colores sin que se afecten por las sombras y luces.

Page 107: curso avanzado flexsim

Pasos para importar un Pasos para importar un layoutlayoutdesde desde AutoCADAutoCAD

En Flexsim:

Si las unidas del dibujo del layout son metros poner

SX = 1, SY = 1, SZ = 1 (como viene por default).

Si no está en metros, debes poner lo siguiente:

Si las unidas son centímetros poner SX = 0.01, SY = 0.01, SZ = 0.01.

Si las unidas son milímetros poner SX = 0.001, SY = 0.001, SZ = 0.001

Si está en pies poner SX = 0.3, SY = 0.3, SZ = 0.3

Una vez listo tu layout, para dejarlo fijo y no que lo muevas por error, activa la opción “No Select”.

Si necesitas volverlo a editar no lo vas a poder seleccionar desde el layout, pero si presionas el botón tree de arriba puedes hacerlo, buscando el nombre del layout y haciendo doble click sobre el icono.

Page 108: curso avanzado flexsim

108

Ing. Jorge Toucet Torné.Ing. Jorge Toucet Torné.FLEXSIM MEXICOFLEXSIM MEXICO

Simulación y OptimizaciónSimulación y Optimización

[email protected]@flexsim.com.mx

www.flexsim.com.mxwww.flexsim.com.mxwww.flexsim.comwww.flexsim.com

Celular: 045(33) 38.08.43.15 Celular: 045(33) 38.08.43.15 OficinaOficina 01(33) 36.48.35.03 01(33) 36.48.35.03

Av. Av. ProlProl. Américas No. 1551 Piso 1.. Américas No. 1551 Piso 1.Col. Providencia. C.P. 44630Col. Providencia. C.P. 44630Guadalajara, Jalisco. México. Guadalajara, Jalisco. México.