Task Sequences

3,313 views

Published on

Para programar secuencias de tareas, es recomendable que primero domine los temas de Task Executer.

Published in: Education, Technology, Travel
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
3,313
On SlideShare
0
From Embeds
0
Number of Embeds
7
Actions
Shares
0
Downloads
0
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Task Sequences

  1. 1. SIMULACIÓN SECUENCIAS DE TAREAS (TASK SEQUENCES)
  2. 2. ÁRBOL DE LA FAMILIA FLEXSIM
  3. 3. TASK EXECUTERS
  4. 4. TASK SEQUENCES <ul><li>Un task sequence es una serie de tareas que ejecuta en secuencia un TaskExecuter . </li></ul><ul><li>Además de ser una serie de tareas, cada Task Sequence tiene un valor de prioridad que define la importancia de esta secuencia con respecto a otras. </li></ul><ul><li>También cuenta con un valor para adelantarse , indicando si una la necesidad de una determinada secuencia causará que otras secuencias se detengan de forma que la primera pueda terminarse antes. </li></ul>P P Tarea 1 Tarea 2 Tarea 3 Tarea 4 … P P Priority Value (Valor de prioridad) Preempt Value (Valor para adelantarse)
  5. 5. TASK SEQUENCES <ul><li>Todos los recursos fijos (Fixed Resources) tienen un mecanismo predeterminado para crear Task Sequences que mueven los flowitems desde ellos mismos hacia la siguiente estación. </li></ul>Cuando seleccionamos “Use Transport” en la pestaña “Flow” de cualquier objeto fijo, estamos creando un task sequence
  6. 6. TASK SEQUENCES <ul><li>La siguente secuencia se genera cuando se selecciona “Use Transport” en una pestaña Flow: </li></ul><ul><li>1. Viaje hacia el objeto fijo que actualmente tiene al flowitem </li></ul><ul><li>2. Cargue el flowitem contenido en ese objeto </li></ul><ul><li>3. Romper secuencia (Break) </li></ul><ul><li>4. Viaje hacia el objeto destino </li></ul><ul><li>5. Descargue el objeto </li></ul>P P Viaje Cargue Break Viaje Descargue
  7. 7. TASK SEQUENCES <ul><li>Las tareas tipo break le dicen al TaskExecuter que revise si hay en ese instante alguna otra secuencia de tareas que pueda hacer junto con ésta. </li></ul><ul><li>Por ejemplo: si un Transporter tiene dos flowitems que lo estén esperando para que los recoja de la misma ubicación, y este tiene la capacidad de cargar dos o más flowitems, entonces este Transporter tiene dos Task Sequences por hacer. </li></ul>Break
  8. 8. TASK SEQUENCES <ul><li>En cualquier momento de la simulación, un TaskExecuter puede tener UNA secuencia activa, y al mismo tiempo UNA COLA de secuencias esperando. </li></ul>El Dispacther NO EJECUTA secuencia de tareas. Solo administra la cola y reparte las tareas de esa cola en los TE conectados a sus puertos de salida
  9. 9. TASK SEQUENCES <ul><li>Para crear secuencias de tareas personalizadas, se pueden usar tres simples comandos: </li></ul><ul><ul><li>createemptytasksequence() </li></ul></ul><ul><ul><li>inserttask() </li></ul></ul><ul><ul><li>dispatchtasksequence() </li></ul></ul>
  10. 10. createemptytasksequence() <ul><li>Crea una Task Sequence sin tareas en la cola de un Dispatcher. Una vez creada la TS, deben agregarse tareas usando inserttask(). </li></ul><ul><li>createemptytasksequence( taskexecuter,priority,preempting ) </li></ul><ul><li>Parámetros: </li></ul><ul><li>taskexecuter . Es el objeto que ejecutará la secuencia de tareas. Puede ser un Dispatcher o un TaskExecuter. </li></ul><ul><li>priority . Valor asignado por el usuario a la prioridad de esta secuencia de tareas. </li></ul><ul><li>preempting . Valor asignado a la capacidad de esta secuencia de adelantarse a otras. </li></ul>
  11. 11. TASK SEQUENCE PREEMPTING (ADELANTARSE) <ul><li>Cada Task Sequence tiene un valor de adelanto (PREEMPT). </li></ul><ul><li>Este se usa para retirar a un TaskExecuter de su tarea actual, para usarlo en otra operación más importante. </li></ul><ul><li>Si por ejemplo, la responsabilidad más importante del operador A es reparar máquinas; cuando no hay máquinas por reparar, debe transportar materiales dentro del modelo. </li></ul><ul><li>Si una máquina se descompone, dejará de hacer cualquier cosa que esté haciendo para ir a reparar esa máquina, en vez de terminar su operación de transporte. </li></ul><ul><li>Para hacer esto, es necesario usar una Task Sequence de adelanto (Preempt). </li></ul>
  12. 12. TASK SEQUENCE PREEMPTING (ADELANTARSE) <ul><li>Para crear una secuencia de tareas capaz de adelantarse, se debe especificar un valor distinto de cero en el último parámetro del comando createemptytasksequence() . </li></ul><ul><li>createemptytasksequence(operador, 0, PREEMPT_ONLY); </li></ul>
  13. 13. TASK SEQUENCE PREEMPTING (ADELANTARSE) <ul><li>Existen 4 valores posibles para adelantarse: </li></ul><ul><li>0 – PREEMPT_NOT: La tarea no se adelanta </li></ul><ul><li>1 – PREEMPT_ONLY: El TaskExecuter deja de hacer la operación actual y procede a ejecutar la que tiene este valor de preempt. Al terminar, regresa a terminar la tarea que dejó inconclusa, la cual había pasado al primer lugar de la cola de tareas. </li></ul><ul><li>2- PREEMPT_AND_ABORT_ACTIVE: El Task Executer detiene la operación que se encontraba haciendo y la “destruye”, de forma que jamás regresa el TE a terminar esta operación. </li></ul><ul><li>3 – PREEMPT_AND_ABORT_ALL: El TE deja de hacer la operación actual y destruye todas las secuencias de esta Task Sequence de forma definitiva. </li></ul>
  14. 14. TASK SEQUENCE PREEMPTING (ADELANTARSE) <ul><li>Si un TE está realizando una TS 1 con preempt (=ya se adelantó), y recibe el llamado de otra TS 2 que también tiene preempt, entonces usará el valor de “priority” de las TS para decidir cuál adelantar. </li></ul><ul><li>Si priority de TS 1 < priority de TS 2 , TE deja de hacer TS 1 y pasa a hacer TS 2 . </li></ul><ul><li>Si priority de TS 1 ≥ priority de TS 2 , TE continuará haciendo TS 1 y TS 2 se irá a la cola de tareas igual que cualquier otra secuencia de tareas. </li></ul>Si sucede el caso de la segunda viñeta, la TS 2 pasa a la cola de tareas igual que si fuera cualquier TS sin preempt . Si desea que TS 2 pase a los primeros lugares de la cola de tareas, entonces dé a TS 2 un peso más grande en su priority con respecto a las demás tareas de la cola; o bien tome en cuenta el preempt en la queue strategy (la cual no es parte de este tema) .
  15. 15. Inserttask() <ul><li>Inserta una tarea de algún Task Type especificado a una Task Sequence especificada. Dependiendo del tipo de Task Type, los parámetros restantes tendrán siginificados distintos. </li></ul><ul><li>inserttask( tasksequence,tasktype,involved1,involved2,Var1,Var2,Var3, Var4 ) </li></ul><ul><li>Parámetros: </li></ul><ul><li>tasksequence . Nombre del Task Sequence al que se añadirá esta nueva tarea. </li></ul><ul><li>Tasktype . Tipo de Task Type al que pertenece la nueva tarea que estamos agregando. </li></ul><ul><li>Involved1, Involved2, var1, var2, var3 y var4 . Sus valores dependen del tipo de Task Type, refiérase al Manual o a algún resumen de Task Types disponibles. </li></ul>
  16. 16. dispatchtasksequence() <ul><li>Le dice al Dispatcher o al Task Executer en qué TaskSequence debe basarse para hacer sus tareas. Se supone que ya esta TS fue creada previamente con createemptytasksequece() y se le han agregado tareas con inserttask() </li></ul><ul><li>dispatchtasksequence( nombre de la Task Sequence ) </li></ul><ul><li>Parámetros: </li></ul><ul><li>Task Sequence . Es el nombre de la variable treenode a la que llama a la Task Sequence. </li></ul>
  17. 17. Control de un TaskExecuter treenode montacargas = centerobject(current, 1); treenode origen = centerobject(current, 2); treenode destino = centerobject(current, 3); treenode item = first(origin); treenode 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);
  18. 18. Tipos de Tareas (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.

×