& Construction

Integrated BIM tools, including Revit, AutoCAD, and Civil 3D
& Manufacturing

Professional CAD/CAM tools built on Inventor and AutoCAD
Integrated BIM tools, including Revit, AutoCAD, and Civil 3D
Professional CAD/CAM tools built on Inventor and AutoCAD
[ FlexSim 21.2.4 ]
Saludos. Estoy realizando una simulación en el cual se debe tomar algunos productos de los racks para luego almacenarlos en diferentes colas, estos productos tienen etiquetas las cuales quiero almacenar según su correspondiente etiqueta. Estoy utilizando operarios para que transporten los productos, pero ellos solo los toman de forma aleatoria y no según su etiqueta. Para el desarrollo de este proceso estoy utlizando la herramienta process Flow.
Espero puedan ayudarme. Gracias!
Solved! Go to Solution.
You can use the "Query/Object/Array" field to define conditions that the item has to fulfill in order to be pulled. The query supports two basic SQL commands: "WHERE" and "ORDER BY"
"WHERE" defines a condition, for example a certain label value.
"ORDER BY" orders the eligible list entries by a certain value.
To use these, the list should contain a "field" with the value you want to use in your query. The default "ItemList" has four fields: The "Type" label, the "age" (how long the item has been on the list), the "distance" (physical distance between "puller" and the item) and "queueSize" (how many items are inside the items storage object/location).
You can add more fields via the green plus-symbol at the top of the list properties.
These field values can then be compared to static values or, for example, label values on the "puller". The puller is the object that tries to pull an entry from the list. By default, this will be the token when using the "Pull from List" activity.
"WHERE Type = 1" would only pull items with the type label value of 1 from the list.
"WHERE Type = puller.Type" would only pull items whose type is equal to the token's type label value.
The attached model demonstrates this. Each token in the process flow represents a queue and will only pull items whose type is equal to the "Type" label on the respective queue. They are also ordered by "age" in descending order, meaning the item that has been on the list the longest gets pulled first.
Relevent section of the manual:
Google Translate:
Puede utilizar el campo "Consulta / Objeto / Matriz" para definir las condiciones que el elemento debe cumplir para ser extraído. La consulta admite dos comandos SQL básicos: "WHERE" y "ORDER BY"
"WHERE" define una condición, por ejemplo, un determinado valor de etiqueta.
"ORDER BY" ordena las entradas de la lista elegibles por un valor determinado.
Para usarlos, la lista debe contener un "field" con el valor que desea usar en su consulta. El "ItemList" predeterminado tiene cuatro campos: la etiqueta "Type", la "age" (cuánto tiempo ha estado el elemento en la lista), la "distance" (distancia física entre "puller" y el elemento) y "queueSize" (cuántos elementos hay dentro del objeto / ubicación de almacenamiento de elementos).
Puede agregar más campos mediante el símbolo más verde en la parte superior de las propiedades de la lista.
Estos valores de campo se pueden comparar con valores estáticos o, por ejemplo, con valores de etiqueta en el "puller". El "puller" es el objeto que intenta extraer una entrada de la lista. De forma predeterminada, este será el token cuando se utilice la actividad "Pull from List".
"WHERE Type = 1" solo extraería elementos con el valor de etiqueta de tipo de 1 de la lista.
"WHERE Type = puller.Type" solo extraería elementos cuyo tipo sea igual al valor de la etiqueta de tipo del token.
El modelo adjunto demuestra esto. Cada token en el flujo de proceso representa una cola y solo extraerá elementos cuyo tipo sea igual a la etiqueta "Tipo" en la cola respectiva. También están ordenados por "edad" en orden descendente, lo que significa que el elemento que ha estado en la lista por más tiempo se extrae primero.
Saludos, @Felix Möhlmann
En el caso de querer almacenar cajas, pero este almacenaje se debe basar en una tabla la cual contiene el tiempo, la cantidad y etiquetas: "type" y ''queue''. ¿Como puedo hacer para que los operarios tomen las cajas segun el tipo y lo almacenen en su cola destino tal como lo indica la tabla ?
Estoy usando la herramienta processflow y generando la tabla en (schedule souce)
model
Muchas gracias!
Since the type label on the token determines the type of the item, you use that in the query ("WHERE Type = puller.Type", as the "puller" is the token).
You can use the queue label to reference the correct queue in the "Unload" activity. Either by name with
Model.find("Queue" + string.fromNum(token.Queue)) // Model.find() returns a reference to the object with the given name // To get the correct name I add the number from the label onto the word "Queue"
or by using the label value the rank in their respective group
Group("Queue")[token.Queue] // "Queue" is the name of the group containing the queues
I reduced the arrival times in the example model, so the function can be observed earlier.
Google Translate:
Dado que la etiqueta de tipo en el token determina el tipo de artículo, lo usa en la consulta ("WHERE Type = puller.Type", ya que el "puller" es el token).
Puede utilizar la etiqueta de la cola para hacer referencia a la cola correcta en la actividad "Unload". O por nombre con
Model.find("Queue" + string.fromNum(token.Queue)) // Model.find() devuelve una referencia al objeto con el nombre dado // Para obtener el nombre correcto, agrego el número de la etiqueta a la palabra "Queue"
o usando el valor de la etiqueta el rango en su grupo respectivo
Group("Queue")[token.Queue] // "Queue" es el nombre del grupo que contiene las colas
Reduje los tiempos de llegada en el modelo de ejemplo, por lo que la función se puede observar antes.
Saludos, @Felix Möhlmann
En el ejemplo anterior se observa a cada operario cargar una caja a la vez, ¿Cómo puedo aumentar la cantidad de cajas que transporta cada operario ?
Eh intentado hacerlo aumentando su capacidad máxima tanto en el operario como en el processFlow pero no funciona.
Muchas gracias!
To load more than one item, you first need to pull multiple entries from to list.
Instead of a single reference, the label you assign the pulled values to will be an array of all pulled items. To load and unload them one by one, you can use a "Run Sub Flow" activity. The quantity should be set to the length of the array, and the option "Run Tokens One at a Time" should be active. At the bottom of the activity properties, you have to assign one entry from the array to the sub flow token, that should be loaded.
You can either batch multiple tokens together or only create one token per Type/Section combination. This token should hold the information how many items should be picked in total.
Each time items are pulled from the list, that label is decremented by the respective amount. If it is not zero after the items were unloaded, the token can then loop back around to pull more items.
In the attached example the operators can load a maximum of three items. "Math.min(token.Quantity, 3)" means the token will either pull items up to the required quantity, or 3, whichever is smaller.
Google Translate:
Para cargar más de un elemento, primero debe extraer varias entradas de la lista.
En lugar de una única referencia, la etiqueta a la que asigne los valores extraídos será una matriz de todos los elementos extraídos. Para cargarlos y descargarlos uno por uno, puede utilizar una actividad "Ejecutar subflujo". La cantidad debe establecerse según la longitud de la matriz y la opción "Run Tokens One at a Time" debe estar activa. En la parte inferior de las propiedades de la actividad, debe asignar una entrada de la matriz al token de subflujo, que debe cargarse.
Puede agrupar varios tokens juntos o solo crear un token por combinación de tipo/sección. Este token debe contener la información de cuántos artículos deben seleccionarse en total.
Cada vez que se extraen artículos de la lista, esa etiqueta se reduce en la cantidad respectiva. Si no es cero después de que se descargaron los elementos, el token puede retroceder para extraer más elementos.
En el ejemplo adjunto, los operadores pueden cargar un máximo de tres elementos. "Math.max(token.Quantity, 3)" significa que el token aumentará los artículos hasta la cantidad requerida, o 3, lo que sea menor.
Saludos, @Felix Möhlmann
Para finalizar la simulación;
En el ejemplo anterior se visualiza a los operarios hacer turnos para almacenar las cajas, es decir no trabajan juntos al mismo tiempo completando la misma actividad.
como ejemplo eh modificado la cantidad de productos, pero al tratar que ambos operarios cumplan una misma actividad, lo que hacen es duplican la cantidad de cajas
¿Como podría hacer para que los operarios trabajen juntos completando la misma actividad sin duplicar la cantidad de cajas?
Muchas gracias!
For this I'd suggest to go back to creating one token per item.
Then use a "Batch" activity to combine N tokens together into one, where N is the number of items an operator can carry at a time. As the quantity will not always be a multiple of that capacity, use the "Max Wait Timer" option to release the last token with only partial quantity.
To group the tokens by the combination of Type and Queue I create a label "TypeQueue" that combines those two numbers into one. This is then used in the "GroupBy" field of the batch activity.
As each token will now only represent as many items as an operator can carry, the decide activity and loop back to the start are not needed anymore.
Obligatory Translation from Google:
Para esto, sugiero volver a crear un token por artículo.
Luego, use una actividad de "Batch" para combinar N tokens en uno, donde N es la cantidad de elementos que un operador puede transportar a la vez. Como la cantidad no siempre será un múltiplo de esa capacidad, use la opción "Use Max Wait Timer" para liberar la última ficha con solo una cantidad parcial.
Para agrupar los tokens por la combinación de Tipo y Cola, creo una etiqueta "TypeQueue" que combina esos dos números en uno. A continuación, se utiliza en el campo "GroupBy" de la actividad del lote.
Como cada token ahora solo representará tantos elementos como pueda llevar un operador, la actividad de decisión y el bucle de regreso al inicio ya no son necesarios.
How to buy
Privacy | Do not sell or share my personal information | Cookie preferences | Report noncompliance | Terms of use | Legal | © 2025 Autodesk Inc. All rights reserved
Type a product name