Tutoriales FlexSim | Tutorial 3
Versión: 2025.0

Tutorial 3

En este modelo, se simula un almacén en que se produce la llegada programada de piezas, su gestión de almacenamiento y posterior procesado para formar kits según demanda del cliente. Al finalizar este tutorial, se debería obtener un modelo como el que se muestra a continuación:

Enunciado

Una empresa se dedica a la venta de kits de piezas para sus clientes. Esta empresa sabe que recibe una petición de un cliente de uno de sus kits cada 72 segundos, siendo completamente aleatorio el tipo de kit que selecciona entre los disponibles.

KIT 1 KIT 2 KIT 3 KIT 4 KIT 5 KIT 6 KIT 7 KIT 8 KIT 9 KIT 10
Prod1 3 3 2 0 2 1 2 2 2 1
Prod2 1 2 2 0 2 1 1 2 1 1
Prod3 1 1 1 1 0 1 1 2 0 0
Prod4 1 1 2 2 0 0 2 2 3 2
Prod5 0 0 1 2 2 0 1 2 3 0
Prod6 1 0 1 2 0 0 1 1 0 1

Estas piezas son almacenadas de forma individual desde la fábrica hasta la elaboración de los kits en un almacén que la empresa debe analizar.

Se sabe que al almacén llegan los camiones siguiendo un esquema de llegadas por tiempo que se repite cada 1500 segundos (ver Tabla inferior) y se sabe que el contenido de los camiones es aleatorio siguiendo una distribución:

Prod 1: 25% / Prod 2: 18% /Prod 3: 11% / Prod 4: 21% / Prod 5: 15% / Prod 6: 10%

Tiempo(s) Productos (Uds)
150 32
450 40
700 24
900 40

El contenido de los camiones se vacía gracias a 4 operarios (PLACERS) que sitúan las piezas en dos Racks diferentes destinados exclusivamente cada uno a productos de clase 1, 2 y 3 y clase 4, 5 y 6 respectivamente.

Cuando el cliente solicita un kit, se utiliza otro tipo de operarios para recoger las piezas de las estanterías y situarlas en la estación de formación de kits, siendo un total 4 los operarios (PICKERS) destinados específicamente a esta tarea.

El criterio de asignación de kits sigue un criterio FIFO y cuando los kits están completos, se les hace un proceso de embalaje automático que necesita 5 segundos, pasando las piezas a una zona de almacenamiento posterior en el suelo (de dimensiones 3x2).

Tras este proceso, los kits son enviado al cliente a través de un camión. Este último transporte se realiza mediante un AGV.

Asumiendo que no hay paradas durante un turno de 8 horas (eliminando de los resultados la primera hora de trabajo por posibles transitorios):

Preguntas:

  • ¿Cuál es la ocupación de los recursos humanos?
  • ¿Cuántas piezas hay de cada tipo en el almacén a lo largo del tiempo?
  • ¿Cuántos kits logran entregarse por hora?

Descarga previa

Antes de entrar al entorno de simulación, es necesario descargar algunos archivos externos que posteriormente se importaran a éste, dando paso al uso de nuevas funcionalidades y mejorando el modelo visualmente y en cuanto a su versatilidad.

Los ficheros que van a usarse en este tutorial son los que se detallan a continuación:

  • Plano de la planta de estudio: CAD_Almacen.dwg
  • Libro de cálculo detallando el stock inicial del almacén, las llegadas de productos y los pedidos solicitados: Inputs.xlsx

Desarrollo del modelo de simulación

Una vez analizado en comportamiento de la planta y los resultados que se desea obtener, procedemos a construir y definir la simulación.

Parte 1 Creación del modelo

Para iniciar con la construcción del modelo, abrimos un modelo en blanco desde la aplicación de FlexSim.

Una vez abierto este nuevo modelo, nos aparece una pantalla para indicar al programa en qué unidades vamos a trabajar. Dejaremos todas las unidades como las establecidas por defecto menos la longitud, que le indicaremos al programa que la definiremos en milímetros.

Una vez definido el modelo, se abre el espacio de construcción de éste.

El primer paso que seguiremos para construir la planta real es importar el CAD (el plano de la planta en cuestión). Para importarlo, tenemos que pulsar sobre Backgrounds y, a continuación, sobre Add a model background.

Dentro de la pestaña que se abre, buscamos y cargamos el archivo deseado pulsando sobre el icono de carpeta que se muestra junto al campo File Path, que abre el explorador de archivos de nuestro ordenador. Dentro de éste accedemos a la carpeta que contenga el archivo descargado, pulsamos sobre el archivo y seleccionamos Abrir. Dentro de esta ventana es posible ajustar dimensiones, rotación y posición del plano si fuese necesario.

Después de la importación de este CAD, procedemos a construir el modelo 3D que replicará la planta mostrada en él.

En primer lugar, situamos un Rack en el modelo, que cogemos del menú Library (ubicado a la izquierda de la ventana de FlexSim). Este objeto se encuentra en el apartado de Warehousing. Para añadir este Rack al espacio 3D basta con arrastrarlo desde el menú mencionado y soltarlo en cualquier lugar de este espacio.

Este Rack presenta las dimensiones por defecto del objeto, que no se corresponden con las dimensiones que presenta la planta, así que procedemos a redimensionarlo. Haciendo clic una vez sobre el objeto se abre a la derecha su menú de Properties, de donde nos interesa el apartado Storage Object, en el cual pulsaremos sobre Edit Dimensions.

De esta manera se nos abre una ventana que nos permite cambiar las dimensiones del objeto. En este caso, el Rack deseado tiene 18 Bays (con un Bay Width de 1500 mm), 6 Levels (con un Level Hight de 500 mm) y 2 Slots Per Bay (con un Slot Width de 750 mm). Una vez introducidos los valores deseados, cerramos la ventana, volviendo al espacio 3D y visualizando el nuevo Rack.

Con las dimensiones correctas, posicionamos el Rack en su lugar correspondiente del CAD arrastrándolo con el ratón y reajustamos el ancho con las flechas para que coincida correctamente. Esto proceso también se podría hacer cambiando las dimensiones, coordenadas y rotación en el menú de propiedades del modelo.

Repetimos el proceso anterior para colocar otro Rack idéntico frente al creado. Para tener acceso a ambos racks des del centro del almacén, giramos este segundo objeto 180º en Z.

Una vez colocados estos almacenes, hay que añadirles un stock inicial. Para ello, vamos a utilizar una Source, que se encuentra de nuevo en el menú Library (a la izquierda de la ventana) en el apartado de Fixed Resources. Igual que con el objeto anterior, la añadimos a nuestro modelo arrastrándola desde el menú y soltándola en el espacio 3D.

Para poder seguir mejor el tutorial y tener más ordenado el modelo, cambiaremos el nombre a los diferentes objetos 3D que se van añadiendo a uno que represente su función. En este caso, cambiaremos el nombre de esta Source a “Source_StockInicial”. Para hacerlo, simplemente introducimos el nombre deseado en el menú Properties del objeto, que se abre pulsando una vez sobre él.

Esta fuente tiene dos posibles salidas, los dos Racks de que disponemos. Para que los productos creados por esta fuente vayan a estos objetos, tenemos que conectarlos en el espacio 3D.

Para hacerlo, mantendremos pulsada la tecla "A" (el símbolo del ratón se sustituye por una cadena, indicando que vamos a realizar una conexión) y haremos clic con el botón izquierdo del ratón primero en la Source y después en uno de los Racks (sin soltar la tecla A), repitiendo después el proceso para el otro. Siguiendo estos pasos, nos deberían aparecer las conexiones realizadas como líneas entre los objetos.

Una vez definidas las salidas de la fuente, tenemos que indicar cómo será la generación de productos de este stock inicial. Abrimos de nuevo el menú de Properties de la Source y nos centramos en el apartado también llamado Source. En Arrival Style, abrimos el desplegable y seleccionamos Arrival Schedule. Estas llegadas las sacaremos del Excel descargado previamente, que importamos pulsando sobre Edit Table y, en la nueva ventana emergente, sobre el icono de Excel.

Siguiendo los pasos anteriores se abre una nueva ventana donde abrimos el explorador de archivos pulsando sobre el icono de la carpeta que se encuentra al lado del campo Excel Workbook. Seleccionamos el archivo que contiene estas entradas e indicamos en Excel Sheet Name el nombre de la hoja que las contiene dentro del archivo. Finalmente, rellenamos el campo Import con un nombre distintivo (por ejemplo, “Importar_StockInicial”) e importamos los encabezados tanto de filas como de columnas.

Una vez aplicados estos cambios, pulsamos sobre Import Tables y esperamos a que FlexSim acabe de importar los datos. Cuando finalice, pulsamos sobre OK para cerrar la ventana y podemos observar como en la ventana anterior aparece la tabla contenida en el archivo indicado.

Con la tabla de entradas lista, tenemos que indicar según qué criterio se enviaran estos productos a un Rack o al otro. Para hacerlo, cerramos la ventana de las llegadas y nos centramos en el apartado Output del menú de Properties del objeto.

En este menú, seleccionamos en el apartado Send To Port y dentro de él la opción de Port By Case. Se nos abre una pequeña ventana para establecer el criterio, que como se puede intuir de la tabla de llegadas, se hará según la etiqueta Producto. Creamos 6 casos pulsando sobre el icono (para 6 tipos de producto) y establecemos que los productos 1, 2 y 3 salgan por el puerto 1 (destino Rack1) y los productos 4, 5 y 6 se vayan por el puerto 2 (destino Rack2).

Una vez finalizado, es posible volver a acceder a este menú que hemos customizado pulsando sobre el icono que aparece junto al desplegable de Send To Port.

Para poder visualizar que esta restricción se aplica correctamente en el funcionamiento del modelo, cambiaremos visuales de los productos. Dentro del menú Properties de la Source, nos centraremos en el apartado Triggers. Crearemos un nuevo Trigger pulsando de nuevo sobre el icono de tipo On Creation. Dentro de este evento, pulsamos el icono y, dentro del apartado Visual, seleccionamos Set Color By Case.

En la ventana emergente establecemos que el valor según el cual se van a dividir los colores es la etiqueta Producto y creamos de nuevo seis casos, seleccionando con los respectivos desplegables el color del cual se pintaran las cajas creadas:

  • Producto 1: color rojo
  • Producto 2: color verde
  • Producto 3: color azul
  • Producto 4: color amarillo
  • Producto 5: color naranja
  • Producto 6: color lila

Con este último paso, ya tenemos el comportamiento de la Source completamente definido. Para verificar que es el esperado, pulsamos sobre Reset y Run del menú superior y observamos las cajas creadas en los Racks.

El modelo debería tener la apariencia que se muestra a continuación. Si llegados a este punto no es así, habría que revisar los pasos previos, asegurándonos de haber aplicado todos los cambios y criterios que se mencionan.

Para obtener una distribución más aleatoria de las cajas en los Racks, abrimos su menú de Properties y, en el apartado Storage Object, seleccionamos Random Bay, Level and Slot with Space para la Slot Assignment Strategy.

Continuando con la construcción del modelo, arrastramos un objeto Queue del menú Library en el apartado de Fixed Resources. Una vez en la vista 3D podemos ajustar sus dimensiones y tamaño.

Para alimentar esta cola, creamos una segunda Source, para la que vincularemos las llegadas con el mismo archivo Excel que la fuente de stock inicial, pero en una hoja diferente, que contiene estas llegadas. Este proceso es idéntico al de la primera Source, con la única diferencia que en este caso vamos a querer que la tabla se repita cíclicamente, marcando Repeat Table en el menú Properties.

Como podemos observar, estos productos no tienen la etiqueta Producto que hemos usado para enviarlos a un Rack u otro, así que tenemos que crearla para poder realizar esta diferenciación. En el apartado de Triggers de la nueva fuente, creamos un Trigger de tipo On Creation y, dentro de éste (pulsando en el icono ), entramos en DataSet Label By Percentage. En la ventana emergente, creamos seis casos (pulsando sobre el icono ) y asignamos a la etiqueta Producto un valor diferente según un porcentaje:

  • Producto 1: 25%
  • Producto 2: 18%
  • Producto 3: 11%
  • Producto 4: 21%
  • Producto 5: 15%
  • Producto 6: 10%

Igual que para la otra fuente, cambiaremos el color de las cajas para que coincida con aquellas que son parte del stock inicial. Para hacerlo, desde el mismo Trigger creado para la etiqueta Producto, pulsamos sobre el icono situado en la parte inferior izquierda de la ventana y añadimos un cambio de color (Visual → Set Color By Case).

Esta fuente la podemos renombrar como “Source_LlegadaMaterial”, por ejemplo. También debemos hacer una conexión de tipo entrada-salida entre la Queue y el Rack1 y entre la Queue y el Rack2.

Estas conexiones las hacemos pulsando la tecla "A" y haciendo clic con el botón izquierdo primero en la Queue y finalmente en el Rack1. Repetimos el proceso, pero esta vez con el Rack 2.

Igual que antes, cambiamos la salida de la Queue para que envíe los productos por una salida u otra según su etiqueta Producto en OutputSend To PortPort By Case.

Estas salidas no se harán de manera automática, sino que serán realizadas por unos operarios. Procedemos, entonces, a colocar cuatro operarios en el modelo. Podemos arrastrar objetos del tipo Operator del menú Library en el apartado de Task Executers o, pulsando sobre el icono que se muestra en el lado derecho de este objeto, podemos acceder a una pestaña con más tipos de operarios, para tener una plantilla más diversa. En nuestro caso pondremos, por ejemplo, dos hombres y dos mujeres.

En el menú de Properties de cada Operator, le cambiaremos el nombre a, por ejemplo, "Placer_1", "Placer_2", "Placer_3" y "Placer_4", para distinguirlos de otros posibles operarios con funciones diferentes en el modelo.

Para que estos operarios actúen como grupo y sea el propio FlexSim el que gestione de forma automática su selección, utilizaremos el objeto Dispatcher del menú Library en el apartado de Task Executers.

Este Dispatcher debe conectarse mediante una conexión central (con la tecla "S") a la Queue. Finalmente, establecemos una conexión de tipo "A" entre el Dispatcher y cada uno de los cuatro operarios creados (manteniendo pulsada la "A").

Finalmente, pulsamos sobre la Queue y, en su menú Properties en el apartado de Output, marcamos la casilla Use Transport.

Una vez completada esta nueva entrada de productos en los almacenes, pulsamos Reset y Run y, tras un cierto tiempo (150 segundos, concretamente), deberíamos poder observar como los operarios transportan las cajas a sus Racks correspondientes.

Para no tener que esperar tanto, la velocidad del modelo se puede acelerar en el menú superior de FlexSim (Run Speed); podemos desplazar la barra azul hacia la derecha, abrir el desplegable y manipular la velocidad desde su ventana.

Habiendo finalizado la parte de las entradas a los Racks, pasamos a crear las salidas, al otro lado de éstos. En primer lugar, añadimos un objeto Combiner (LibraryFixed Resources) al espacio 3D de nuestro modelo y lo dimensionamos adecuadamente en PropertiesVisuals (X=2000 mm, Y=2670 mm, Z=1400 mm).

Añadimos también una Queue y una Source (LibraryFixed Resources). La Source la renombramos como “SourcePedidos” y en Properties, apartado Source, cambiamos el tiempo entre objetos (Inter-Arrival Time) a 72 y el tipo de producto a crear por un Pallet (desplegable FlowItem Class).

En el apartado de Triggers de esta fuente, creamos un trigger de tipo On CreationDataSet Label and Color. Con este trigger crearemos la etiqueta Type, que se elige por defecto, y cambiaremos el color de los Pallets según ésta a un color aleatorio según una distribución uniforme entre 1 y 10.

Finalmente, conectamos esta fuente con la cola, manteniendo pulsada la tecla "A", y comprobamos que el modelo tenga el comportamiento deseado.

A continuación, creamos una tabla para indicar cómo se van a combinar estos 10 tipos de Pallets con los 6 tipos de productos disponibles en los Racks. Para hacerlo, accedemos al menú Toolbox y pulsamos el icono , eligiendo la opción del desplegable nombrada Global Table.

En la nueva pestaña que se abre, cambiamos el número de filas (Rows) y columnas (Columns) a 6 y 10, respectivamente, en el menú Properties de la derecha. La tabla la importamos de Excel como hemos hecho hasta ahora o copiamos directamente los valores del archivo a la tabla de la pestaña actual.

Una vez introducidos estos datos, vinculamos la GlobalTable creada con el Combiner. Entramos en las Properties de este Combiner y, en primer lugar, cambiamos el Process Time a 5 segundos (en el apartado de Processor). A continuación, accedemos al apartado Triggers y creamos un Trigger de tipo On EntryUpdate Combiner Component List With Labels y en Table añadimos la GlobalTable (abriendo el desplegable) que contiene estos pedidos.

A continuación, conectamos (pulsando la tecla "A") la Queue con el Combiner, tres veces el Rack1 con el Combiner y lo mismo para el Rack2 (ya que tenemos tres tipos de producto en cada almacén).

Para que las salidas de los Racks se realicen correctamente, respetando los 3 puertos de salida que hemos creado en cada uno, cambiamos la estrategia de salida (PropertiesOutputSend To Port) a Port By Case, creamos tres casos según la etiqueta Producto y enviamos cada caso por un puerto de salida.

Añadimos también 4 Operators y un Dispatcher para controlarlos. Para poder usarlo, tenemos que marcar la casilla de Use Transport en el Output (menú Properties) de los dos Racks. Después, establecemos conexiones centrales (pulsando la tecla "S") entre los Racks y el Dispatcher y conexiones tipo "A" entre el Dispatcher y los operarios, que podemos renombrar como "Picker_1", "Picker_2", "Picker_3" y "Picker_4".

En último lugar, añadimos un objeto tipo Floor Storage (en Library, Warehousing) y lo redimensionamos tal y como aparece en la siguiente imagen. Además, en el menú Properties, apartado Storage Object, le pediremos que no ordene los objetos en Z (cambiar desplegable de “Z+” a “None”).

Además, debemos determinar el tamaño en Z del almacén para que todos los tipos de pallet definidos puedan caber en él. En este caso, una altura de 1200 mm será suficiente.

Acabado de definir el objeto, creamos una conexión tipo "A" entre el Combiner y este Floor Storage.

Como queremos que las salidas de este objecto se hagan también con transporte, arrastramos un objeto de tipo TaskExecuter (LibraryTask Executers) al modelo, le creamos una conexión central (manteniendo pulsada la tecla "S") y en el Floor Storage marcamos la casilla de Use Transport en el apartado de Output.

Como destino de estas salidas, arrastraremos un objeto tipo Sink (LibraryFixed Resources) y conectamos el Floor Storage con éste (conexión tipo "A").

En el CAD se puede observar que hay una cuadrícula rectangular donde no hemos colocado ningún objeto 3D. En este espacio, la planta real contiene una sección que no es de interés para el modelo de estudio. Sin embargo, queremos que el TaskExecuter no viaje a través de la zona, así que tenemos que indicárselo. Para hacerlo, extendemos un objeto tipo Barrier (en LibraryA* Navigation) en la zona que no queremos que sea de paso (es decir, a lo largo y ancho de la cuadrícula).

Una vez creados y colocados los objetos anteriores, tenemos que configurar el navegador. Haremos doble-clic sobre el objeto A* Navigator que ha aparecido en ToolBox y, en la ventana emergente, cogeremos el Sampler (el icono del cuentagotas) y pulsaremos sobre el TaskExecuter, el Combiner, el Floor Storage, todos los Operators y los dos Racks, uno a uno. De esta manera nos aseguramos de que todos los objetos que tienen que viajar en el modelo lo hagan “esquivando” los demás objetos de la planta. Se puede comprobar que los objetos se han añadido bien al navegador si les aparece un círculo azul debajo de su forma 3D.

Si pulsamos Reset en el modelo, aparece un rectángulo azul en el cual están contenidos todos los objetos que hemos añadido a este navegador, que podemos redimensionar (con las flechas rojas que aparecen pulsando sobre él) para que se ajuste a las paredes de la planta.

Una vez finalizada la creación del modelo, creamos otras condiciones de simulación para poder comparar los resultados a obtener entre ambos. Cambiaremos, por ejemplo, el criterio de colocación de los objetos en los Racks (que ahora mismo tenemos fijado como aleatorio siempre y cuando haya espacio). Este cambio debería provocar diferencias en las utilizaciones de los operarios, ya que sus viajes se verán afectados por la posición de los productos en estos Racks.

En el menú LibraryWarehousing seleccionamos Paint Slot Labels. A la derecha de la ventana se nos abre el menú Properties y escribimos “Producto” en el campo Label. En Value, vamos cambiando el valor del 1 al 6 y, cada vez que introducimos un valor, pintamos con el ratón (que ahora aparece con un icono de brocha) los Slots o huecos de los Racks donde queremos que se ubique cada producto.

Por ejemplo, pintaremos seis Bays de cada Rack para cada producto (para hacerlo, es útil seleccionar ModePaint All Slots in Same Bay; de esta forma, pulsando en cualquier espacio de esta Bay, se pinta entera del mismo color).

Con estos Slots asociados a cada tipo de producto, cambiamos la estrategia de almacenaje de los Racks en PropertiesStorage ObjectSlot Assignment StrategyMatching Labels con la siguiente condición:

Parte 2 Obtención de métricas

Una vez creado el modelo y establecida su lógica, crearemos diferentes tablas y gráficos para visualizar y valorar los resultados obtenidos.

En primer lugar, podemos activar la opción Show Heat Map (doble-clic en el objeto A* Navigator, apartado Visual) que dibuja en colores los caminos que por los que se están desplazando los diferentes objetos cuando se ejecuta el modelo. De esta forma, podemos observar si los miembros del navegador viajan evitando los diferentes obstáculos establecidos.

Para visualizar y acceder a la Liberia de métricas abriremos un nuevo Dashboard del menú superior de FlexSim (DashboardsAdd Blank Dashboard).

En este momento nos aparecerá una nueva pestaña. Dependiendo de la resolución y tipo de pantalla que utilicemos nos puede aparecer o bien una pantalla dividida o una nueva pestaña.

Al pulsar sobre esta nueva pestaña automáticamente el menú Library con el que hemos trabajado hasta ahora tendrá referencias de gráficos predefinidos.

Para empezar, nos interesa visualizar la utilización de arrastramos a la pestaña del Dashboard un gráfico State del menú LibraryState.

Una vez creado, pulsamos sobre el gráfico en blanco y accedemos a su menú Properties (a la derecha). Con el Sampler (en OptionsObjects) seleccionamos los Placers en el modelo y cambiamos el nombre del gráfico a, por ejemplo, “Utilización Placers”.

El proceso para obtener las métricas de Pickers es análogo al anterior.

A continuación, queremos visualizar la distancia total que viaja el TaskExecuter. Para obtener este valor, arrastramos una Table de tipo Travel Distance (LibraryTravel Distance) y la vinculamos a este objeto. Para obtener unos resultados más útiles de esta tabla, podemos cambiar las Length Units a meters o kilometers.

Adicionalmente, para observar el contenido de los Racks, arrastramos un gráfico WIP By Type del apartado Content. En su menú Properties, seleccionamos los dos Racks para los Entrance Objects y para los Exit Objects y cambiamos la Type Label y WIP Display a “Producto”.

Además de las estadísticas anteriores, nos interesa observar el valor del Throughput por hora del Combiner, que podría ser uno de los parámetros más críticos de la planta. Para representarlo, arrastramos un gráfico Output/Hour de LibraryOutput y lo relacionamos con este Combiner.

Podemos cambiar también el nombre de éstos últimos gráficos para que sean más representativos y entendibles.

Para poder evaluar los resultados, estableceremos un tiempo de ejecución del modelo. En el desplegable del menú superior que se encuentra junto a Run Time seleccionamos Date and Time, marcamos las casillas Stop Time y Warmup Time y les ponemos el valor deseado (por ejemplo, que termine a las 16:00 y que haga un Warmup a las 9:00).

Una vez elegidas todas las métricas que se van a usar para evaluar el comportamiento del modelo, pulsamos Reset y Run. Tras ejecutar el modelo, podemos ver que los resultados que hemos seleccionado anteriormente en el Dashboard. Los resultados no tienen por qué coincidir exactamente con los que se muestran a continuación, ya que existe un factor de aleatoriedad en el proceso modelado.

Si cambiamos el método de almacenaje a aquél que ordena las cajas según los productos asociados a cada hueco del Rack (establecidos con Paint Slot Label), las utilizaciones de los operarios cambian de la siguiente forma:

Conclusión

¡Enhorabuena! Has completado el último tutorial.

El modelo creado durante el desarrollo de este tutorial está disponible para su descarga en el siguiente enlace: 25.0 Ejercicio3_Almacen logistico.fsm

¿Quieres seguir avanzando y aprender a usar otras funcionalidades de FlexSim? Consulta los tutoriales disponibles en inglés: docs.flexsim.com/en/25.0/Tutorials/Introduction/

No dude en ponerse en contacto con nosotros con cualquier consulta en iberia@grupomitico.com