El sistema de control de acceso tendrá dos componentes principales
: el control central ( computador ) y el
control de la puertas que conforman el sistema ( uno por cada puerta )
. El módulo de control de la puerta estará
en contacto directo con el usuario del sistema y el control central con
el administrador. La figura 1 muestra el
diagrama de árbol para la división general del sistema de
control de acceso.
Figura 1 : División general del sistema de control de acceso.
Módulos de uacceso.
1- CONTROL
CENTRAL
2- CONTROL
DE LA PUERTA
2. Control central ( ucontrol ).
El módulo CONTROL CENTRAL se
encargará de la administración del acceso a las diferentes
puertas
que conforman el sistema. Estará en contacto directo con el operador
del sistema y en ella podrán
programarse los códigos de acceso para cada usuario, las prioridades
de acceso del mismo y la configuración
de forma de apertura de cada puerta. Además ofrecerá una
interfaz gráfica para el operador en la cual indicará
constantemente el estado de las puertas del sistema y posibles problemas
con las mismas, lo cual ya he
explicado detalladamente en las especificaciones.
CONTROL CENTRAL estará implementado en software con LABWindows en
una computadora personal
( PC ) teniendo a Windows95 como sistema operativo.
En la figura 2 se observan los módulos que componen CONTROL CENTRAL.
Figura 2 : Diagrama
de árbol para CONTROL CENTRAL.
Descripción : unidad de almacenamiento de los códigos
para cada usuario, configuración de cada puerta
y administración de la seguridad a su acceso estableciendo
contraseñas para los operadores del sistema.
Implementación : SyBase(Software).
Interfaz con CONTROL CENTRAL : Para casos de consulta CONTROL CENTRAL
realizará pedidos
al administrador de la base de datos escribiendo en un archivo. El administrador
de la base de datos
responderá con el pedido hecho escribiendo en un archivo la respuesta.
En casos en que se deba escribir
un dato en la base de datos CONTROL CENTRAL enviará los datos a
escribir y la posición en la cual
serán escritos.
Pedidos a la BASE DE DATOS.
CCP
Cosulta de configuración de puerta
CCB
Consulta de código de ibuttom
CCT
Consulta de código de teclado
CCO
Consulta de contraseña de operador
Respuestas a los pedidos.
CP
Código de puerta
DB
Datos del código de ibuttom
DT
Datos del código de teclado
ECO
Existe contraseña de operador.
Escritura en la base de datos. ( con la orden van seguidos los datos )
ACP
Actualizar configuración de puerta
ACU
Actualizar campo de usuario
INU
Introducir nuevo usuario.
TRANSPORTE_C. ( Capa de transporte en la red )
Descripción : capa de transporte dentro del esquema de comunicación
en red. Su función en brindar una
comunicación segura de datos con las puertas y realizar un control
del estado de las mismas a fin de
constatar posibles problemas.
Implementación : LABWindows(Software)
Interfaz con CONTROL_CENTRAL: a través de paquetes para transmisión y recepción de mensajes.
CONTROL CENTRAL a TRANSPORTE_C
TX_PA Paquete de transmisión
TX_E Orden
de transmisión
TRANSPORTE_C a CONTROL_CENTRAL
RX_PA Paquete de recepción.
RX_I
Aviso de paquete recibido.
PD
Puerta desconectada de la red por no haber respondido las últimas
tres veces.
Módulos.
TEMPORIZADOR.
Descripción : contador de tiempos utilizado para la espera de respuesta de la puerta.
Implementación : LABWindows (Software)
Interfaz con TRANPORTE_C :
TRANSPORTE_C a TEMPORIZADOR
TMAX Valor máximo de conteo
HC
Habilitación de conteo
TEMPORIZADOR a TRANSPORTE_C
TIMEOUT Final de conteo
ENLACE_C.
Descripción : capa de enlace en el esquema de red. Provee
una conexión física confiable y con la mínima
probabilidad de errores.
Implementación : LABWindows ( Software )
Interfaz con TRANPORTE_C:
TRANSPORTE_C a ENLACE_C.
P_TX Paquete a transmitir por
la capa de enlace.
HTX Habilitación
para transmisión
ENLACE_C a TRANSPORTE_C.
P_RX Paquete recibido correctamente
ERR Error en la recepción
Módulos.
TRANSMISION_C
Descripción : formación del frame de transmisión
con el paquete de transmisión recibido de la capa de
transporte y posterior secuencia de transmisión utilizando el puerto
serial de la computadora.
Implementación : LABWindows ( Software )
Interfaz con ENLACE_C.
ENLACE_C a TRANSMISION_C.
P_TX Paquete de tx recibido de la capa de transporte.
HAB Habilitación de transmisión
RECEPCION_C
Descripción : formación del frame de recepción
con los datos recibidos por el puerto serial de la
computadora.
Implementación : LABWindows ( Software )
Interfaz con ENLACE_C.
RECEPCION_C a ENLACE_C.
P_RX Paquete recibido a través del
puerto serial.
A_RX Aviso de recepción
CONTROL DE ERRORES.
Descripción: detección de errores en el frame recibido
por RECEPCION_C utilizando el algoritmo de
código de redundancia cíclica CRC-16.
Implementación : LABWindows ( Software)
Interfaz con ENLACE_C.
CONTROL DE ERRORES a ENLACE_C.
A_ERR Aviso de error
Conexión a la red de la computadora que actúa como control central.
La computadora se conectará a través de su puerto serial
a la red. Como el puerto serial de la computadora
genera tensiones RS-232, se requerirá de un circuito de interface
que convierta de niveles RS-232 a
niveles RS-485.
Figura 3 : Conexión de la PC de control a la red.
Módulo del sistema encargado del control de acceso a una determinada
puerta según las indicaciones
recibidas de CONTROL CENTRAL a través de la red de comunicaciones
establecida.
Figura 4 : Diagrama explicativo del módulo de control de la puerta.
CONTROL DE LA PUERTA ( uacceso) estará implementado con el microcontrolador
AT89C52 ,
el cual posee un juego de instrucciones similar al MCS8051 de INTEL,
así como la disposición de patillas.
Módulos
de HW.
El sistema de control del módulo estará en el AT89C52, el
cula dispondrá de ciertas interfaces para
comunicarse con los elementos de la interface con el usuario y de la puerta.
Figura 5 : Diagrama en bloques del módulo de control de la puerta.
El
TRANSCEIVER RS485
se encarga de la conversión de las señales TTL del puerto
del MCS-8051 a sus
correspondientes valores
RS485 para el caso de transmisión y viceversa en el caso de recepción.
También
provee el control para poner
en alta impedancia al módulo en la red ( solo está disponible
la recepción ).
La
INTERFAZ DE POTENCIA
provee el nivel necesario de tensión para activar
al pestillo ( 12 VAC ) desde
un pin del microcontrolador,
además de un aislamiento eléctrico entre el circuito de potencia
y el microcontrolador.
El SENSOR DE LA PUERTA indica el estado de la puerta ( abierta o cerrada ).
El
CONTROLADOR de LCD
se encargará de brindar todas las señales necesarias para
el despliegue de
mensajes en el LCD, liberando
de tal tarea al microcontrolador.
La
INTERFAZ DE TECLADO se
encarga de la correcta conexión del teclado a los pines del micro.
El filtrado
de rebotes se realiza por
software.
La
INTERFAZ CON EL IBUTTOM permite
la correcta interconexión del lector ibuttom con el microcontrolador.
Módulos de SW.
La figura
6 muestra la disposición de los módulos de SW dentro
del MCS-8051, que se encargarán de realizar
el sistema de control de
acceso a la puerta a través de comunicación bidireccional
con el control central a través de la
red de comunicaciones establecida.
Figura 6: Diagrama de árbol de CONTROL
DE LA PUERTA.
Rutina
principal.
upuerta
Descripción
: rutina principal donde se implementará el sistema de control de
la puerta. Deberá responder a
todas las solicitudes de
control central a través de la red, para lo cual tendrá que
conocer su condición en cada
momento( puerta abierta,
botón leído, pestillo accionado, etc.). Conoce en que modo
de funcionamiento se
encuentra el módulo
y actúa de acuerdo a ello.
Funciones de inicialización.
iniciar_puerta
Descripción : inicialización
del puerto serial, de los temporizadores utilizados, interrupciones, de
la capa de
enlace de red, envío
de comandos de inicialización al controlador de LCD e inicialización
de todas las variables
utilizadas en las diferentes
rutinas.
Interfaz con upuerta
: al terminar de inicializar todos los parámetros citados
retorna el control del programa a
upuerta. Recibe como parámetro
la dirección del módulo en la red.
iniciar_red
Descripción :
inicialización del módulo en la red. Se copia el parámetro
pasado al módulo en la variable que
contendrá la dirrección
de red del módulo. Se inicializa el puerto serial del microcontrolador
a la velocidad
definida, modo UART con
9°bit ( esquema multiprocesador).
Interfaz con iniciar_puerta
: iniciar_puerta
le pasa como parámetro la dirección de red del módulo.
Al terminar de inicializar
le devuelve el control .
lcd_iniciar
Descripción :
envío de comandos de inicialización al controlador del LCD,
tales como número de líneas, forma
de los caracteres, ancho
del bus de datos, dirección de desplazamiento.
Interfaz con iniciar_puerta
: al terminar el envío de comandos le devuelve el control
a iniciar_puerta.
Funciones de transferencia de paquetes a través de la red.
enviar_condicion
Descripción :
se envía la condición actual del módulo utilizando
los servicos de la capa de enlace, para lo cual
se arma un frame de transmisión
en el buffer de tx utilizando la información sobre condición.
Son posibles
botón leído
o no leído , teclado leído o no leído, puerta abierta
o cerrada y pestillo accionado o apagado.
Interfaces :para
transimitir el byte llama a a_enlace pasándole el buffer
de transimisión formado con la condición
del módulo. Luego
de que a_enlace devuelva el control devuelve el control a upuerta.
enviar_boton
Descripción :
se envía el buffer del código del botón leído
utilizando los servicos de la capa de enlace,
para lo cual se arma un
frame de transmisión y se lo almacena en el buffer de tx.
Interfaces :para
transimitir el byte llama a a_enlace pasándole el buffer
de transimisión formado con el código del
botón. Luego de que
a_enlace devuelva el control devuelve el control a upuerta.
enviar_teclado
Descripción :
se envía el buffer del código del teclado leído utilizando
los servicos de la capa de enlace,
para lo cual se arma un
frame de transmisión y se lo almacena en el buffer de tx.
Interfaces :para
transimitir el byte llama a a_enlace pasándole el buffer
de transimisión formado con el código del
teclado. Luego de que a_enlace
devuelva el control devuelve el control a upuerta.
a_enlace
Descripción :
inicializa la transmisión por interrupciones a través del
puerto serial del frame contenido en el
buffer de transmisión
que recibe como parámetro y transmite el primer byte ( el de dirección
con 9°bit=1).
Interfaces:
recibe como parámetro el buffer de tx y al terminar de transmitir
el byte de dirrección del
protocolo de enlace devuelve
el control a quien lo llamó. Retorna ERROR si hay otra trama
transmitiéndose y
NOEERROR si el byte de dirrección
pudo transmitirse, comenzando así la transmisión del frame.
Funciones de recepción de datos a través de la red.
de_enlace
Descripción
: pregunta por la existencia de un frame de recepción, indagando
a la recepción por
interrupciones por el puerto
serial que implementa el protocolo de enlace. En caso de haberse obtenido
un frame
reinicializa la recepción
por interrupciones.
Interfaces:si ya
está listo un frame recibido devolverá la dirrección
del buffer que contiene el frame recibido.
En caso contrario devuelve
ERROR.
Funciones de lectura del teclado.
leer_teclado
Descripción :
Se prueba si se puede realizar barrido de teclas utilizando a prueba_tecla_pres.
En caso afirmativo busca
una tecla a través
de leer_tecla. En caso de ser capturada una tecla , la codifica en ASCII
y la guarda en el buffer del
código de teclado,
en caso de que no haya sido * . Si fue *,
se borra todo el buffer de teclado y se comienza de nuevo
con el código. De
esta manera se soluciona el problema de que uncódigo incompleto
haya quedado almacenado en el
buffer, y entonces llegue
otra persona a intentar ingresar.
Interfaces : devuelve
el control a upuerta en dos casos : en el primero de ellos se produjo un
mensaje desde control
central, por lo tanto hay
que ir a tenderlo. En el segundo caso se produjo el ingreso del código
completo, por lo tanto
ya solo se espera el momento
para transmitirlo.
prueba_tecla_pres
Descripción
: Se prueba si una tecla está presionada, de ser así
no posibilitará la búsqueda de una
nueva tecla. Su finalidad
es no volver a repetir la lectura de la tecla anterior. La búsqueda
de una nueva tecla
luego de que alguna
haya sido presionada solo será permitida por esta función.
Interfaces: Habilitará
o no la búsqueda de una nueva tecla. Luego de realizar su encuesta
devuelve el
control a leer_teclado.
leer_tecla
Descripción
:procede a realizar el barrido de las columnas del teclado y la lectura
de filas para detectar
una tecla. En caso
de que se haya detectado una tecla se almacena su código en valores
lógicos de fila y columna.
Se sigue realizando
el barrido. Si esta tecla aparece diez veces se la toma como válida,
en caso contrario, no hay
tecla válida
y se sale de la función. Si es que ninguna tecla válida estuvo
presente ninguna vez realiza un solo barrido y
sale la función.
El procesamiento de la tecla capturada filtra los rebotes mecánicos
en el teclado.
Interfaces:
Devuelve a leer_teclado la condición de tecla válida
o no. En caso de tecla válida devuelve también
a leer_teclado el
código de la tecla en el formato de barrido de columna y lectura
de fila correspondiente a la tecla en
cuestión.
codificar_tecla
Descripción
:Recibe el valor de la tecla codificada en el formato barrido de columna
y lectura de fila
y procede a codificarla
en ASCII.
Interfaces: Recibe
como parámetro la tecla no codificada de leer_teclado y devuelve
a leer_teclado la tecla
codificada en ASCII.
Funciones de lectura del ibuttom.
leer_boton
Descripción :
Se pregunta por la existencia de un botón en el lector a través
de boton_reset. En caso afirmativo se
procede a leerlo,
a través boton_hab y boton_leer_byte.
Una vez completada
la lectura del código ( 8 bytes = 7 de código + 1 de crc),
se procede a verificar posibles
errores a través
de boton_crc, si el paquete está libre de errores se da por
válido y se avisa que ya hay botón leído.
Interfaces :
Devuelve a upuerta la condición de botón leído
o no.
boton_reset
Descripción :
envío del pulso de reset al ibuttom.
Interfaces :
Informa a leer_boton si hay o no un botón en el lector.
boton_hab
Descripción :
una vez que un botón ha sido detectado, se procede a enviar un byte
de habilitación para
lectura del botón.
Interfaces :
devuelve el control a leer_boton luego de haber enviado el comando
de habilitación.
boton_leer_byte
Descripción :
lectura de un byte de la memoria ROM interna del ibuttom.
Interfaces :
devuelve a leer_boton el byte leído
boton_crc
Descripción :
detección de errores en la transmisión con el botón
utilizando un código crc de polinomio de 8 bits,
brindado por el fabricante
del ibuttom. Se realiza cálculo para un byte de entrada. Por lo
tanto en el procedimiento
principal debe repetirse
para el número de bytes de tx con el ibuttom.
Interfaces :
recibe como parámetros al byte de entrada y al crc calculado anteriormente,
devuelve el nuevo valor
del byte crc. Su interface
está dada con la función leer_boton.
Funciones de temporización
temp_ini
Descripción
: inicializa el temporizador que corre por interrupciones, generando
una interrupción cada 30 ms.
Se utiliza para
medir el tiempo de apertura y para la duración y desplazamiento
de mensajes en el LCD.
Interfaces:
una vez realizada la inicialización y habilitación del temporizador
retorna el control a upuerta.
Funciones para el LCD.
lcd_men1
Descripción
: Despliegue del mensaje " Codigo
correcto" o " Codigo
incorrecto" de acuerdo al parámetro
recibido, luego de borrar
el LCD con lcd_borrar.
Interfaces : upuerta
le envía un parámetro informándole acerca del
mensaje a enviar al controlador del LCD.
Se utiliza a lcd_enviar_dato
para enviar las letras. Una vez enviado el mensaje se entrega se
retorna a upuerta.
lcd_men2
Descripción
: Despliegue del mensaje " Ingresar
codigo por teclado" sacando las letras a un intervalo
de
200ms, produciendo un desplazamiento
del LCD a la izquierda.
Interfaces : Se utiliza
a lcd_enviar_dato para enviar las letras y a lcd_enviar_instruccion
para el envío de
comando de desplazamiento.una
vez finalizado devuelve el control a upuerta.
lcd_men3
Descripción
: Despliegue del mensaje " Puerta
bloqueada" .
Interfaces : Se utiliza
a lcd_enviar_dato para enviar las letras. Una vez finalizado devuelve
el control a upuerta.
lcd_borrar
Descripción
: se envía comando de borrado al lcd y se espera hasta que este
lo haya procesado.
Interfaces : se utiliza
a lcd_enviar_instruccion y a lcd_espera. Una vez finalizado devuelve el
control a quien lo
llamó.
lcd_enviar_dato
Descripción
: se produce temporización para envío de un byte de dato
al controlador del LCD.
Interfaces : recibe
el dato a enviar desde la función que lo llame y le devuelve el
control una vez finalizada
la transferencia.
lcd_enviar_instruccion
Descripción
: se produce temporización para envío de un byte de instrucción
al controlador del LCD.
Interfaces : recibe
la instrucción a enviar desde la función que lo llame y le
devuelve el control una vez finalizada
la transferencia.
lcd_espera
Descripción
: se espera por final de procesamiento en el controlador del LCD, de tal
forma a no sobreescribirlo
sin aún haber terminado
de realizar su función anteriormente enviada. Se encuesta a un pinde
bus de datos para
obtener esta condición.
Interfaces :
Una vez finalizado devuelve el control a la rutina que lo llamó.