Sistemas_Integrados_Fabricacion_Pr4
Model was written in NetLogo 5.3.1
•
Viewed 155 times
•
Downloaded 12 times
•
Run 0 times
Do you have questions or comments about this model? Ask them here! (You'll first need to log in.)
Info tab cannot be displayed because of an encoding error
Comments and Questions
Please start the discussion about this model!
(You'll first need to log in.)
Click to Run Model
;; Indice de funciones ; setup - Inicializa ; create-path - Crea la ruta ; create-workers - Crea las personas ; create-AGVs - Crea los Auto Guided Vehicles ; move-AGVs - Mueve tanto las personas como los vehiculos ; go - realiza todas las tareas que hay que realizar en un ciclo ;; Creamos los subgrupos de turtles: people y trucks breed [ people person ] breed [ trucks truck ] ; Los trucks tendran como propiedades las tres siguientes, que seran de cada truck, aunque sean iguales trucks-own [ time-load time-unload velocity ] ; Idem con las personas people-own [ velocity ] ; Indicamos que variables seran globales. No hay que indicar las de los sliders de la otra pestaña, aunque tambien lo son. ; Las variables globales no hay que inicializarlas con el comando 'let' globals [ cycletime lasttick delivery-rate ncycles ] ;; Funcion setup to setup clear-all ; Borramos reset-ticks ; Reiniciamos ticks ask patches [set pcolor white ] ; Ponemos el fondo de color blanco create-path ; Llamamos a las siguientes tres funciones create-workers create-AGVs set lasttick 0 ; lasttick sera una variable que indica en que segundo termino el ultimo ciclo end to create-path let xbor [-20 35] ; x min , xmax let ybor [-20 20] ; y min , ymax let x0 mean xbor ; x media let y0 mean ybor ; y media let xl (max xbor - min xbor ) / 2 ; semirango de x let yl (max ybor - min ybor ) / 2 ; semirango de y ask patches ; Para cada punto de la pantalla, pintamos las lineas con su color [ if (abs( pxcor - x0 ) < xl and abs( pycor - y0 ) = yl) ; Horizontales [ set pcolor yellow] if (abs( pycor - y0 ) < yl and abs( pxcor - x0 ) = xl) ; Verticales [ set pcolor yellow] if (abs( pycor - y0 ) = yl and abs( pxcor - x0 ) = xl) ; Esquinas [ set pcolor black ] if ((pxcor = 0) and (pycor = -20)) ; Punto de carga [ set pcolor blue ] if ((pxcor = 0) and (pycor = 20)) ; Punto de descarga [ set pcolor red ] ] end to create-AGVs create-trucks 1 [ ; Creamos un camion set color green ; De color verde set heading 90 ; Mirando hacia la derecha setxy 0 -20 ; Colocado en (0 , -20) set shape "truck" ; Con forma de camion set size 3 ; Y de tamaño 3. Ojo con esto, pues parece que el camion choca, pero su tamaño real es 1 set velocity velocidad / 60 ; ; set velocity velocidad / 60 + (( random 10 ) - 5) / 100 ; Esta linea esta comentada porque solo se descomenta para el apartado 5 ] end to create-workers create-people numpeople [ ; Creamos las personas set color red ; Color rojo setxy random 100 random 100 ; Las colocamos aleatoriamente set heading random 360 ; Mirando aleatoriamente set shape "person" ; Con forma de personas set size 3 ; Y de tamaño tres set velocity ((random 100) / 50 + 0.05) ; Ojo con esta linea. Todas las personas deben moverse, pues si alguna al crearse se crea en la ruta y no se mueve, no evoluciona el ciclo ] end to go let n count trucks ; n es una variable local que indica el numero de camiones move-AGVs ; Ejecutamos un movimiento if n != count trucks ; Si n ya no es el numero de camiones, es porque alguno ha muerto (ha terminado un ciclo). Entonces, realizamos lo que sigue [ set cycletime ( ticks - lasttick ) ; Recalculamos el tiempo de ciclo como el tiempo actual menos el tiempo que termino el ciclo anterior set lasttick ticks ; Asignamos el nuevo tiempo a lasttick set ncycles ncycles + 1 ; Aumentamos en 1 el numero de ciclos realizados ; set delivery-rate ( cycletime ^ -1 * 60 ) ; Esta forma de calcular el delivery rate seria la instantanea set delivery-rate ncycles / ticks * 60 ; Esta forma de calcular el delivery rate seria la media acumulada ;; A continuacion, pintamos las graficas ; set-current-plot selecciona la figura en la que queremos pintar. Es equivalente a figure(i) ; set-plot-y-range selecciona el rango de y, va de 0 a aproximadamente dos veces el delivery-rate, redondeado para que no este continuamente fluctuando ; plotxt pinta lo que le digas. Primer argumento x, segundo y set-current-plot "Average-Delivery-Rate" set-plot-y-range 0 ceiling ( delivery-rate / 50 ) * 100 plotxy ncycles ( delivery-rate * 60 ) ; Mostramos por la grafica, en paquetes / hora set-current-plot "Instant-Delivery-Rate" set-plot-y-range 0 ceiling ( delivery-rate / 50 ) * 100 plotxy ncycles ( cycletime ^ -1 * 3600 ) ; Mostramos por la grafica, en paquetes / hora if ncycles = 1 ; Si es la primera vez, calculamos el tiempo empleado, que sera el correspondiente a 1 AGV, y mostramos por el terminal de instrucciones. Esta es la respuesta al apartado a, creo [ print (word "Datos: v = " velocidad " m/min ; load-time = " load-time " m unload-time = " unload-time " m" ) print (word "Tiempo de ciclo 1 AGV = " cycletime " s") ] create-AGVs ; Recordemos, estamos en el if, que se entra si hemos matado un camion. Por tanto, creamos otro, que se crea en la posicion de carga. ] if count trucks < nAGVs ; Si todavia no tenemos en pista el numero maximo de camiones ... (esto solo ocurre al principio, en el regimen transitorio. Luego esto no ocurre) [ let free true ; Definimos la variable free y le asignamos el valor true ask trucks[ ; Si algun camion se encuentra sobre una casilla azul, que recordemos, es la casilla de carga if pcolor = blue [ set free false ] ; Entonces no podemos sacar un camion al path, puesto que la casilla esta ocupada. No haremos nada, y volveremos a entrar en el ciclo en el proximo tick ] if free = true [ create-AGVs ] ; Si por el contrario, la casilla de carga esta vacia, generamos un nuevo camion ] tick end to move-AGVs let tl load-time ; trabajamos con variables locales let tu unload-time set tl ( tl * 60 ) ; pasamos de min -> s set tu ( tu * 60 ) ask people [ if-else any? trucks-on patch-ahead 1 [ left 90 ][ left random 20 right random 20] ; Le preguntamos a las personas: ¿Hay un camion delante tuya?, si lo hay, gira 90º a la izquierda, si no, gira ligeramente fd velocity ; En cualquier caso, avanza la velocidad que tengas asiganada ] ask trucks [ ;; Load and unload stations if pcolor = blue ; Si estamos en la zona de carga [ if (time-load > tl) ; time-load empieza en cero, mientras que tl es un parametro que es dato de entrada. No entrara en el bucle hasta que haya pasado un tiempo tl [fd velocity ; avanzamos la distancia recorrida en un segundo, que es por definicion, v (m/s) set time-load 0 ; Cuando hayamos entrado en el bucle, reiniciamos el contador del tiempo que lleva en la estacion de carga ] set time-load time-load + 1 ] ; Si no hemos entrado en el bucle anterior, es que el tiempo que lleva en la estacion es < tl, por tanto, aumentamos en 1 time-load if pcolor = red ; Si estamos en la zona de descarga, idem caso anterior pero con time-unload , tu [ if (time-unload > tu) ; [fd velocity ; set time-unload 0] set time-unload time-unload + 1 ] if [ pcolor ] of patch-ahead ceiling ( 1 ) = blue ; Si estamos a punto de volver a la zona de carga, matamos al camion [ die ] ;; Driving the AGV if (([pcolor] of patch-here != blue) and ([pcolor] of patch-here != red)) ; Si no estamos en las zona de carga o descarga [ if (not any? turtles-on patch-ahead ceiling velocity ) [ fd velocity ] ; Si no hay ni camiones ni personas (turtles = trucks + people) en la distancia que vamos a avanzar. Se podria usar neighbor en vez de patch-ahead, pero daria fallo if [pycor] of patch-here = -20 [ if [pxcor] of patch-here = 35 [ set heading 0 ] ; southeast if [pxcor] of patch-here = -20 [ set heading 90 ] ; southwest ] if [pycor] of patch-here = 20 [ if [pxcor] of patch-here = 35 [ set heading -90 ] ; northeast if [pxcor] of patch-here = -20 [ set heading 180 ] ; northwest ] ] ; Esto no se puede hacer porque a veces se queda colgado si por casualidad para en la esquina, o la velocidad es muy lenta y para avanzar una casilla tarda mas de 2 ticks ; [pcolor] of patch-here = black ; Si estamos en la esquina ; [ left 90 ] ; Giramos 90º antihorario ] end
There is only one version of this model, created over 7 years ago by Manuel Alcazar.
Attached files
File | Type | Description | Last updated | |
---|---|---|---|---|
Sistemas_Integrados_Fabricacion_Pr4.png | preview | Preview for 'Sistemas_Integrados_Fabricacion_Pr4' | over 7 years ago, by Manuel Alcazar | Download |
This model does not have any ancestors.
This model does not have any descendants.