Implentacion de tarjetas Wiegand

  • 15 Respuestas
  • 10669 Vistas

coloriginal

  • Aprendiz
  • **
  • Mensajes: 37
Implentacion de tarjetas Wiegand
« : noviembre 30, 2015, 11:32:26 am »
Hola Boris quería saber en que estado esta la implementación en el PLC de la lectura de tarjetas de proximidad Wiegand, ya que es una de las pocas cosas que me falta para completar la implementación del PLC en mi desarrollo.

Desde ya te agradezco la buena predisposición para apoyar mi desarrollo.
A.S.: Cristian M. Colovatto
M.P.:3076
Del.:3512635979
WWW.E-PARKING.COM.AR

Soporte

  • Global Moderator
  • Experto
  • *****
  • Mensajes: 2326
  • Soporte Técnico
Re:Implentacion de tarjetas Wiegand
« Respuesta #1 : noviembre 30, 2015, 11:59:49 am »
Buenas tardes, en estos días iba a comenzar a implementarlo.

Te mantengo al tanto del progreso.

Estamos en contacto.

Enviado desde un dispositivo móvil usando Taptalk.

SOPORTE TÉCNICO

Slicetex Electronics
www.slicetex.com

Soporte

  • Global Moderator
  • Experto
  • *****
  • Mensajes: 2326
  • Soporte Técnico
Re:Implentacion de tarjetas Wiegand
« Respuesta #2 : diciembre 03, 2015, 20:14:14 pm »
Buenas tardes Cristian,

Ya esta terminado la implementación del protocolo Wiegand, funcionando con el hardware que suministraste.

Falta que actualice el software del del entorno para que pueda descargarse y usarse.

Aprovecho para adjuntarte el ejemplo de uso (Wiegand.zip) para StxLadder, así lo tenes en cuenta para adaptarlo a tu código.

Luego voy a subir las descripciones de las funciones.

Saludos
SOPORTE TÉCNICO

Slicetex Electronics
www.slicetex.com

coloriginal

  • Aprendiz
  • **
  • Mensajes: 37
Re:Implentacion de tarjetas Wiegand
« Respuesta #3 : diciembre 04, 2015, 08:02:17 am »
De 10 Boris muy bueno, en que pin se conecta el lector?, podre pasar esta tarde para que me muestre la conexión física?
A.S.: Cristian M. Colovatto
M.P.:3076
Del.:3512635979
WWW.E-PARKING.COM.AR

Soporte

  • Global Moderator
  • Experto
  • *****
  • Mensajes: 2326
  • Soporte Técnico
Re:Implentacion de tarjetas Wiegand
« Respuesta #4 : diciembre 04, 2015, 08:57:10 am »
Después te voy a pasar la información de conexión.
Igual creo necesitas el cable modificado para conectar también al puerto serie.

Estoy de viaje ahora. Pero para el primer día hábil de la semana que viene (miércoles) , te puedo tener el conector así directamente lo conectas al sensor.

A su vez, luego te voy a pasar la actualización de soft, así lo podes dejar implementado teóricamente en tu proyecto.

Estamos en contacto.

Enviado desde un dispositivo móvil usando Taptalk.

SOPORTE TÉCNICO

Slicetex Electronics
www.slicetex.com

coloriginal

  • Aprendiz
  • **
  • Mensajes: 37
Re:Implentacion de tarjetas Wiegand
« Respuesta #5 : diciembre 04, 2015, 09:16:07 am »
Ok gracias, disculpa el apuro es que pensaba aprovechar el fin de semana lardo para realizar algunas pruebas, de todas formas ya tengo armado el código (pero no puedo compilarlo) la única duda es como transformar el nro. que obtengo con la nueva función WiegandGetCardNumber() a bytes para poder mandarlo con TcpServerSend.

Espero con ansias la actualización del software para poder realizar pruebas.

Gracias y buen viaje.
A.S.: Cristian M. Colovatto
M.P.:3076
Del.:3512635979
WWW.E-PARKING.COM.AR

Soporte

  • Global Moderator
  • Experto
  • *****
  • Mensajes: 2326
  • Soporte Técnico
Re:Implentacion de tarjetas Wiegand
« Respuesta #6 : diciembre 04, 2015, 11:03:55 am »
La función WiegandGetCardNumber()  retorna un valor de 16 bits. Por lo tanto necesitas dos bytes para transmitir.

Podes hacer :

Código: (Pawn) [Seleccionar]
new Tx[2]
new Value

Value = WiegandGetCardNumber()

Tx[0]  = Value
Tx[1]  = Value >> 8

El operador >> desplaza 8 bits a la derecha, por lo que primero transmitis el valor menos significativo y luego el más significativo.

Al recibirlos en la PC debes hacer el proceso inverso.



Enviado desde un dispositivo móvil usando Taptalk.

« Última Modificación: diciembre 09, 2015, 19:17:47 pm por Soporte »
SOPORTE TÉCNICO

Slicetex Electronics
www.slicetex.com

Soporte

  • Global Moderator
  • Experto
  • *****
  • Mensajes: 2326
  • Soporte Técnico
Re:Implentacion de tarjetas Wiegand
« Respuesta #7 : diciembre 08, 2015, 19:37:30 pm »
Buenas tardes Cristian,

Ya esta actualizado el software para el soporte del protocolo Wiegand 26 para leer tarjetas RF de identificación.

Lo primero que hay que hacer es actualizar:

Una vez actualizado firmware y software, hay que configurar la placa para usar el protocolo Wiegand 26 en el puerto de expansión.

Esto se hace una vez por cada placa desde StxLadder, en "PLC > Configurar PLC". Conectar al PLC y luego en pestaña "Expansión" hacer click en "Wiegand: Hardware compatible". Ver imagen que paso adjunta.

Luego, el harware Wiegand debe conectarse al puerto de expansión HP2/HP3 de la siguiente forma:

  • DATA0 conectar a /EXP_INT (pin 6). Tensión no debe sobre pasar +5Vcc.
  • DATA1 conectar a /BOOTL (pin 7). Tensión no debe sobre pasar +5Vcc.
  • GND a GND, es importante que esten conectados para así compartir masas entre equipos (puede ser al puerto de expansión o bornera del PLC).
  • Alimentación a 12VCC (puede ser del puerto de expansión o bornera del PLC).

Importante-1: La conexión debe hacerse con el PLC apagado y luego de configurar el hardware desde StxLadder.
Importante-2: Consultar hoja de datos del dispositivo para limites eléctricos e identificación de pines en puerto de expansión.

Así mismo te tengo armado un cable especial para conectar al lector de tarjeta y al puerto RS232.
Llámame para coordinar.



FUNCIONES PAWN DISPONIBLES PARA PROTOCOLO WIEGAND 26

El ejemplo Wiegand.zip que se adjunta en este mensaje contiene el modo de uso.


WiegandInit(): Inicializa la librería Wiegand. Debe llamarse antes de cualquier función.

RETORNO:
  • 0 : Operación exitosa.
  • -500: Error, Wiegand hardware no esta declarado desde StxLadder / Config.


WiegandCheckValidity(): Comprueba si el ultimo dato recibido con el protocolo Wiegand 26 es valido.

RETORNO:
  • 0 : Datos no validos.
  • 1 : Datos validos.
  • -500: Error, Wiegand hardware no esta declarado desde StxLadder / Config.

Nota: El software del PLC comprueba validez del protocolo utilizando los Bit de paridad Par/Impar provistos por la trama recibida. Si la paridad coincide con los datos recibidos, se acepta como valida. Esto permite identificar tramas erroneas generadas por ruido o por hardware no compatible.


WiegandGetCardNumber(): Obtiene el ultimo "Card Number" recibido con el protocolo Wiegand 26.

RETORNO:
  • >=0 : Card Number, valor de 16-bits.
  • -500: Error, Wiegand hardware no esta declarado desde StxLadder / Config.


WiegandGetFacilityCode(): Obtiene el ultimo "Facility Code" recibido con el protocolo Wiegand 26.

RETORNO:
  • >=0 : Facility Code, valor de 8-bits.
  • -500: Error, Wiegand hardware no esta declarado desde StxLadder / Config.


WiegandGetFrame(): Obtiene el ultimo "Frame" recibido con el protocolo Wiegand 26. Es decir la secuencia completa de 26 bits sin procesar.

RETORNO:
  • >=0 : Frame, valor de 26-bits.
  • -500: Error, Wiegand hardware no esta declarado desde StxLadder / Config.


WiegandSetEvent(): Activa el evento @OnWiegand() que es llamado cuando datos son recibidos del hardware Wiegand conectado al puerto de expansión.

RETORNO:
  • 0: Evento activado.
  • -1: Error, no pudo activarse evento.
  • -500: Error, Wiegand hardware no esta declarado desde StxLadder / Config.


WiegandClrEvent(): Desactiva el evento @OnWiegand().

RETORNO:
  • 0: Evento desactivado.
  • -1: Error, no pudo desactivarse el evento.
  • -500: Error, Wiegand hardware no esta declarado desde StxLadder / Config.


EJEMPLO

Ver archivo Wiegand.zip adjunto.

Código: (Pawn) [Seleccionar]
// ********************************************************************************
// Funcion     : PlcMain()
// Descripcion : Punto de entrada principal del PLC.
// ********************************************************************************

PlcMain()
{
   //
   // Incializar puerto de expansion para
   // utilizar protocolo Wiegand.
   //

   WiegandInit()
   WiegandSetEvent()
   
   //
   // Mensaje de bienvenida.
   //
   
   LcdClear()
   LcdPrintf(0,0, "PASS CARD")
   LcdPrintf(0,1, "PLEASE")

   //
   // Loop principal
   //
   
   for(;;)
   {
   DelayMS(500)
   LedToggle()
   }

   // Retorno.
   return 0
}

// ********************************************************************************
// Funcion     : @OnWiegand()
// Descripcion : Evento generado cuando se recibe una trama del protocolo
//               Wiegand 26 a traves del hardware conectado al puerto de expansion.
// ********************************************************************************

@OnWiegand()
{
if(WiegandCheckValidity())
{
// Datos validos.

LcdClear()
LcdPrintf(0, 0, "Facility: %d", WiegandGetFacilityCode())
LcdPrintf(0, 1, "Card #: %d", WiegandGetCardNumber())
}
else
{
// Datos recibidos con error.
// Comprobar hardware.

LcdClear()
LcdPrintf(0, 0, "Invalid")
LcdPrintf(0, 1, "Code")
}
}
« Última Modificación: diciembre 09, 2015, 19:06:24 pm por Soporte »
SOPORTE TÉCNICO

Slicetex Electronics
www.slicetex.com

Soporte

  • Global Moderator
  • Experto
  • *****
  • Mensajes: 2326
  • Soporte Técnico
Re:Implentacion de tarjetas Wiegand
« Respuesta #8 : diciembre 09, 2015, 19:03:03 pm »
Buenas tardes Cristian,

Una nueva  versión 213 del firmware de la STX8081 esta disponible para descargar, la misma corrige la interpretación de bits en el protocolo Wiegand 26.

Antes se interpretaba mal el orden de los bits. Ahora decodifica correctamente el numero de las tarjetas.

Probalo y avísame.

Saludos
« Última Modificación: diciembre 09, 2015, 19:09:02 pm por Soporte »
SOPORTE TÉCNICO

Slicetex Electronics
www.slicetex.com

coloriginal

  • Aprendiz
  • **
  • Mensajes: 37
Re:Implentacion de tarjetas Wiegand
« Respuesta #9 : diciembre 10, 2015, 20:36:17 pm »
Hola Boris, te cuento que esta funcionando a la perfección.
A.S.: Cristian M. Colovatto
M.P.:3076
Del.:3512635979
WWW.E-PARKING.COM.AR

coloriginal

  • Aprendiz
  • **
  • Mensajes: 37
Re:Implentacion de tarjetas Wiegand
« Respuesta #10 : diciembre 15, 2015, 20:41:28 pm »
Hola Boris te cuente que estuve haciendo un par de pruebas ya con todos los equipos conectados al plc (barrera, espira de detección metálica, impresora, botón y lectora de tarjetas Wiegand) y encontré que al activar la barrera con el relé 1 para subir o con el relé 2 para bajar me activaba el evento @OnWiegand() y la función WiegandCheckValidity() me indica que es erróneo o incluso me devuelve un números de tarjetas a la zar, para solucionar este problema lo que hice fue desactivar el evento antes de activar los relés y volver a activarlo tras 800 MS de liberado los relés. Te cuento esto para que me des tu opinión sobre esta solución que encontré o si se te ocurre alguna otra.

Por otro lado te comento que una vez resuelto el tema anterior me ocurrió que aleatoriamente la función WiegandCheckValidity() me indica varias veces que la lectura de la tarjeta es errónea y cuando vuelve a tomar un dato válido me devuelve otro número de tarjeta de forma constante, la única forma de sacar de ese error al PLC es reiniciándolo. Incluso algunas veces me paso al comenzar, sin activar ningún relé ya se presenta la indicación de la función WiegandCheckValidity() de que la lectura es incorrecta. Me gustaría si podes probar esto que te menciono ya que no puedo estar reiniciando el PLC cuando esto ocurre.

Te adjunto una imagen con el nro de tarjeta y el nro que toma, cualquier cosa que necesites más datos para poder replicar el problema por favor avisame y nos ponemos en contacto.

Como siempre desde ya muchas gracias.
A.S.: Cristian M. Colovatto
M.P.:3076
Del.:3512635979
WWW.E-PARKING.COM.AR

Soporte

  • Global Moderator
  • Experto
  • *****
  • Mensajes: 2326
  • Soporte Técnico
Re:Implentacion de tarjetas Wiegand
« Respuesta #11 : diciembre 16, 2015, 19:48:44 pm »
Buenas tardes Cristian,

Citar
Hola Boris te cuente que estuve haciendo un par de pruebas ya con todos los equipos conectados al plc (barrera, espira de detección metálica, impresora, botón y lectora de tarjetas Wiegand) y encontré que al activar la barrera con el relé 1 para subir o con el relé 2 para bajar me activaba el evento @OnWiegand() y la función WiegandCheckValidity() me indica que es erróneo o incluso me devuelve un números de tarjetas a la zar, para solucionar este problema lo que hice fue desactivar el evento antes de activar los relés y volver a activarlo tras 800 MS de liberado los relés. Te cuento esto para que me des tu opinión sobre esta solución que encontré o si se te ocurre alguna otra.

Al detectar por flanco descendente, cada bit de señal del protocolo Wiegand en el puerto de expansión genera una interrupción. Al conmutar el rele se introduce un ruido que genera falsas interrupciones y secuencias de bits, por ello WiegandCheckValidity() indica error.

Al desactivar el evento, desactivas las interrupciones y no se generan bits por ruido.

Entonces, esto puede mejorarse con:

  • Capacitor en salida de contactor de rele, 0.47 uF ceramico o poliester y asi bajar el ruido. Habria que jugar con dichos valores para ver cual mejora.
  • Capacitor de 100 nF cerámico/multicapa en las señales DATA0 y DATA1 del protocolo Wiegand en el puerto de expansión. Un pin del capacitor a masa.
  • Puesta a tierra de la placa, con jabalina a tierra. Conectar a bornera GND.
  • Capacitor de 470 uF en alimentación de hardware Wiegand, lector de tarjetas.

Citar
Por otro lado te comento que una vez resuelto el tema anterior me ocurrió que aleatoriamente la función WiegandCheckValidity() me indica varias veces que la lectura de la tarjeta es errónea y cuando vuelve a tomar un dato válido me devuelve otro número de tarjeta de forma constante, la única forma de sacar de ese error al PLC es reiniciándolo. Incluso algunas veces me paso al comenzar, sin activar ningún relé ya se presenta la indicación de la función WiegandCheckValidity() de que la lectura es incorrecta. Me gustaría si podes probar esto que te menciono ya que no puedo estar reiniciando el PLC cuando esto ocurre.

Esto puede ser un error de firmware. Hay que ver que esta "confundiendo" el algoritmo. Sospecho que queda una secuencia incompleta de bits, y el algoritmo la espera indefinidamente. Entonces al pasar la siguiente tarjeta, se generan 26 bits, pero como ya había leídos algunos bits anteriormente (incompletos) los nuevos 26 bits se suman a los ya leídos, y se detecta un error de paridad. Y así indefinidamente.

Fíjate si llamando a WiegandInit() podes evitar reiniciar con RESET, ya que eso vuelve a "default" las variables de la librería.

Si eso lo destraba, tenemos un punto para comenzar a ver donde esta la falla.

De ser eso, hay que implementar "un limpiador" automático de secuencias incompletas, que el algoritmo las detecte o mejorarlo para tal situación.

Bueno, avísame que detectas y quedo a disposición.


« Última Modificación: diciembre 16, 2015, 19:55:32 pm por Soporte »
SOPORTE TÉCNICO

Slicetex Electronics
www.slicetex.com

coloriginal

  • Aprendiz
  • **
  • Mensajes: 37
Re:Implentacion de tarjetas Wiegand
« Respuesta #12 : diciembre 17, 2015, 21:34:50 pm »
Hola Boris te cuento que implemente todas las modificaciones que me recomendaste y funciona a la perfección, te cuento que luego de leer cada código y de activar los relé  invoco la función WiegandInit(), de esta forma no tuve más lecturas anómalas. Por otro lado te quería preguntar si era viable cambiar la asignación de los pines del puerto de expansión cambiando el pin 6 por el 5, esto es debido que de dicha forma puedo aprovechar los circuitos del puerto de expansión para soldar los capacitors y los conectores del lector. En la configuración actual tuve que hacer una modificación a la placa. Te adjunto unas fotos para que lo evalúes.
A.S.: Cristian M. Colovatto
M.P.:3076
Del.:3512635979
WWW.E-PARKING.COM.AR

Soporte

  • Global Moderator
  • Experto
  • *****
  • Mensajes: 2326
  • Soporte Técnico
Re:Implentacion de tarjetas Wiegand
« Respuesta #13 : diciembre 18, 2015, 06:59:52 am »
Buenos días Cristian,

Las modificaciones de software que hiciste por si solas, solucionan el problema? O también los capacitores ayudan?.

Igual te recomiendo usarlos, especialmente en la salida del contactor.

Voy a intentar implementar una forma de descartar falsos comienzos del protocolo Wiegand, ya que por eso al usar WiegandInit() mejora. Te aviso por este medio.

Respecto al cambio de pin, el pin 5 no tiene función como puerto I/O, y no es posible usarlo.

Capaz que te convenga soldarlos en la parte de abajo del puerto.

Estamos en contacto.



Enviado desde un dispositivo móvil usando Taptalk.

SOPORTE TÉCNICO

Slicetex Electronics
www.slicetex.com

coloriginal

  • Aprendiz
  • **
  • Mensajes: 37
Re:Implentacion de tarjetas Wiegand
« Respuesta #14 : diciembre 18, 2015, 07:03:25 am »
Buenos días Boris , los cambios que implemente son de software y capacitores.con respecto al pin no te hagas drama se puede hacer igual.
A.S.: Cristian M. Colovatto
M.P.:3076
Del.:3512635979
WWW.E-PARKING.COM.AR