1 # TP 01-00 Problem Approach 2 3 Sebastian Branda - sbranda@fi.uba.ar 4 Martin Klöckner - mklockner@fi.uba.ar 5 6 ## Requerimientos 7 8 Se debe contar con un sensor electromagnético que detecte la proximidad de un 9 vehículo a la barrera 10 11 Un sensor que detecte que un vehículo esta atravesando la barrera, para evitar 12 que la barrera se cierre cuando el vehículo esta "pasando" 13 14 Un botón para que el conductor del vehículo indique al sistema que abra la 15 barrera 16 17 Un actuador o barrera que permita o indique al vehículo que esta habilitado o no 18 para circular. 19 20 ## Modelos de comportamiento 21 22 El sistema se puede dividir en tres módulos que se encargan de escrutar, 23 procesar y actuar, y se modelan como Sensor, System y Actuator, respectivamente. 24 25 ### Escrutar 26 27 En el modulo de escrutar, se captura información o sucesos del entorno, como ser 28 la proximidad de un vehículo, o que se ha presionado el botón para abrir la 29 barrera. Luego esta información se comparte con el modulo de procesar. 30 31 ### Procesar 32 33 En el modulo de procesar se analiza la información obtenida en el modulo 34 escrutar y en base a eso se decide que acciones tomar en el modulo actuador. 35 36 ### Actuar 37 38 En el modulo actuador se ejecutan las acciones de acuerdo a la información 39 analizada en el modulo procesar, en el ejemplo de la barrera seria el control de 40 la misma, si se abre o se cierra, si se detiene o si se mueve en una dirección, 41 etc. 42 43 ## Eventos y Acciones del modelo Sensor 44 45 Para el sensor electromagnético que detecta si un auto se aproxima a la barrera 46 se utiliza como modelo un botón, de acuerdo al estado del botón (presionado o 47 no) se modela como si un vehículo estuviera próximo a la barrera. 48 49 ### Estados 50 51 Los estados del botón que modelan el sensor pueden ser: 52 53 * `ST_BTN_HIGH`: cuando el botón no se encuentra presionado 54 * `ST_BTN_LOW`: cuando el botón esta presionado 55 * `ST_BTN_FALLING`: estado intermedio entre no presionado y presionado 56 * `ST_BTN_RISING`: estado intermedio entre presionado y no presionado 57 58 ### Eventos 59 60 * `EV_BTN_UP`: se detecta que el botón se dejó de presionar 61 * `EV_BTN_DOWN`: se detecta que el botón se presiona 62 63 ### Señales 64 65 * `EV_SYS_BTN_DOWN`: se emite cuando el botón se detecta que ha sido presionado 66 y no hubo un glitch o bounce 67 * `EV_SYS_BTN_UP`: se emite cuando el botón se detecta que ha sido presionado 68 y no hubo un glitch o bounce 69 70 ### Acciones 71 72 * `start_timer_debounce`: se inicializa una variable como TICK la cual se 73 utiliza para evitar el proceder erróneo como consecuencias de glitch. 74 * `decrement_timer_debounce`: se decrementa la variable TICK en una unidad. 75 * `raise_down_signal`: en caso que la variable TICK llegue a cierto valor (0), 76 se detecta que el botón fue realmente presionado. 77 * `raise_up_signal`: en caso que la variable TICK llegue al valor deseado (0), 78 se detecta que el botón no está siendo apretado. 79 80 ## Eventos y Acciones del modelo System 81 82 El modelo System modela el modulo de procesar, este modelo lleva una cuenta de 83 todos los estados de los sensores y actuadores. 84 85 ### Estados 86 87 * `ST_SYS_LOOP_IN`: un vehículo se encuentra próximo a la barrera. 88 * `ST_SYS_LOOP_OUT`: el vehículo esta saliendo de la barrera. 89 * `ST_SYS_IR_PASSING`: un vehículo se encuentra atravesando la barrera 90 * `ST_SYS_BTN_WAITING`: un vehículo se encuentra en la barrera pero no ha 91 presionado aún el botón 92 * `ST_SYS_DELAY`: estado intermedio para evitar cerrar la barrera encima del 93 vehículo 94 95 ### Eventos 96 97 * `EV_SYS_LOOP_CAR_IN`: ocurre cuando ingresa un auto al sensor 98 * `EV_SYS_LOOP_CAR_OUT`: ocurre cuando sale un auto del sensor 99 * `EV_SYS_IR_CAR_PASSING`: el auto esta atravesando la barrera 100 * `EV_SYS_DELAY_TIMEOUT`: cuando el tiempo de espera termina 101 * `EV_SYS_BTN_PRESSED`: ocurre cuando el botón ha sido presionado 102 103 ### Señales 104 105 * `EV_ACT_BARRIER_RAISE`: se emite cuando se debe abrir la barrera 106 * `EV_ACT_BARRIER_LOWER`: se emite cuando se debe cerrar la barrera 107 108 ### Acciones 109 110 * `raise_barrier`: se notifica al modulo actuador que abra la barrera 111 * `lower_barrier`: se notifica al modulo actuador que cierre la barrera 112 * `start_delay`: se inicia un timer con un tiempo determinado y envía el evento 113 `EV_SYS_DELAY_TIMEOUT` cuando finaliza 114 115 ## Eventos y Acciones del modelo Actuator 116 117 El modelo Actuator modela el modulo actuador, en este caso se modela la barrera. 118 119 ### Estados 120 121 Estados en los que se puede encontrar la barrera 122 123 * `ST_ACT_OPEN`: la barrera se encuentra abierta 124 * `ST_ACT_CLOSED`: la barrera se encuentra cerrada 125 * `ST_ACT_OPENING`: la barrera se encuentra en estado de transición entre 126 abierta y cerrada 127 * `ST_ACT_CLOSING`: la barrera se encuentra en estado de transición entre 128 cerrada y abierta 129 130 ### Eventos 131 132 Eventos que se obtienen del modelo System 133 134 * `EV_ACT_RAISE`: este evento se obtiene cuando se debe abrir la barrera 135 * `EV_ACT_LOWER`: este evento se obtiene cuando se debe cerrar la barrera 136 137 Eventos que se obtienen del final de carrera de la barrera 138 139 * `EV_ACT_OPENING_END`: este evento se obtiene cuando la barrera se estaba 140 abriendo y llega a la posición maxima o final. 141 * `EV_ACT_CLOSING_END`: este evento se obtiene cuando la barrera se estaba 142 cerrando y llega a la posición minima o de reposo. 143 144 ### Acciones 145 146 * `raise_barrier`: se comienza a mover la barrera desde la posición inicial 147 * `lower_barrier`: se comienza a mover la barrera desde la posición final 148 * `stop_barrier`: se detiene el movimiento de la barrera, esto ocurre cuando se 149 llega a las posiciones de los extremos
