decodificación de la comunicación del puerto serie

Espero alguna ayuda para tratar de escribir un software que me permita leer datos de un lector de tarjetas magnéticas en serie que tengo.

tenemos este lector de tarjetas que es un equipo muy antiguo que usamos para capturar los detalles de la tarjeta de membresía de nuestros miembros en nuestros lugares. El lector de tarjetas tiene un software que descarga los detalles de la tarjeta (que se almacenan en el lector de tarjetas), el software luego coloca los detalles en un archivo de texto en la unidad C. Quiero escribir algún software que haga exactamente lo mismo.

Puede que esté ladrando al árbol equivocado o esperando demasiado, pero cualquier ayuda sería genial.

Hasta ahora he conectado el lector de tarjetas al puerto serie de mi máquina, ejecuté el software heredado y usé un monitor de puerto com para capturar la comunicación. Aquí es donde estoy un poco atascado y me preguntaba si alguien podría decirme si lo que he capturado es útil de alguna manera y, con suerte, me indicará la dirección correcta.

Ejecuté la secuencia de descarga cuando el lector de tarjetas no tenía información de tarjeta almacenada y capturé esto.

[12/06/2012 18:28:55] - Open port COM4

[12/06/2012 18:29:02] - Written data
31 00 01 00 00 00 32                                1.....2         

[12/06/2012 18:29:04] - Read data
31 00 06 00 0c 06 0c 00 00 00 00 55                 1..........U    

[12/06/2012 18:29:04] - Written data
33 00 01 00 00 00 34                                3.....4         

[12/06/2012 18:29:05] - Read data
33 00 14 00 06 03 00 00 0c 00 00 0d 00 00 42 00     3.............B.
00 43 00 00 63 00 00 00 01 51                       .C..c....Q      

[12/06/2012 18:29:06] - Written data
34 00 01 00 00 00 35                                4.....5         

[12/06/2012 18:29:08] - Read data
34 00 01 00 00 00 35                                4.....5         

[12/06/2012 18:29:08] - Written data
35 00 07 00 0c 06 0c 12 1c 36 00 00 be              5........6..¾   

[12/06/2012 18:29:10] - Read data
35 00 01 00 00 00 36                                5.....6         

[12/06/2012 18:29:11] - Close port COM4

Luego pasé 1 tarjeta para que el lector de tarjetas tuviera esto almacenado en su memoria y volví a ejecutar la descarga, esta vez obtuve esto

[12/06/2012 18:31:23] - Open port COM4

[12/06/2012 18:31:48] - Written data
31 00 01 00 00 00 32                                1.....2         

[12/06/2012 18:31:50] - Read data
31 00 06 00 0c 06 0c 00 00 00 00 55                 1..........U    

[12/06/2012 18:31:51] - Written data
33 00 01 00 00 00 34                                3.....4         

[12/06/2012 18:31:53] - Read data
33 00 14 00 06 03 00 00 0c 00 00 0d 00 00 42 00     3.............B.
00 43 00 00 63 00 00 00 01 51                       .C..c....Q      

[12/06/2012 18:31:55] - Written data
34 00 01 00 00 00 35                                4.....5         

[12/06/2012 18:31:57] - Read data
34 00 01 00 00 00 35                                4.....5         

[12/06/2012 18:31:57] - Written data
35 00 07 00 0c 06 0c 12 1f 16 00 00 a1              5...........¡   

[12/06/2012 18:32:01] - Read data
35 00 01 00 00 00 36                                5.....6         

[12/06/2012 18:32:01] - Close port COM4

Finalmente, pasé 3 tarjetas, ejecuté la descarga nuevamente y capturé esto

[12/06/2012 18:30:21] - Open port COM4

[12/06/2012 18:30:22] - Written data
31 00 01 00 00 00 32                                1.....2         

[12/06/2012 18:30:24] - Read data
31 00 06 00 0c 06 0c 00 03 00 00 58                 1..........X    

[12/06/2012 18:30:24] - Written data
32 00 04 00 03 00 01 00 00 3a                       2........:      

[12/06/2012 18:30:26] - Read data
32 00 1c 00 03 00 01 00 12 1e 58 28 54 08 33 00     2.........X(T.3.
12 1e 58 28 53 96 95 00 12 1e 58 28 54 12 32 00     ..X(S–•...X(T.2.
05 07                                               ..              

[12/06/2012 18:30:27] - Written data
33 00 01 00 00 00 34                                3.....4         

[12/06/2012 18:30:29] - Read data
33 00 14 00 06 03 00 01 0c 00 00 0d 00 00 42 00     3.............B.
00 43 00 00 63 00 00 00 01 52                       .C..c....R      

[12/06/2012 18:30:30] - Written data
34 00 01 00 00 00 35                                4.....5         

[12/06/2012 18:30:41] - Read data
34 00 01 00 00 00 35                                4.....5         

[12/06/2012 18:30:41] - Written data
35 00 07 00 0c 06 0c 12 1e 15 00 00 9f              5...........Ÿ   

[12/06/2012 18:30:43] - Read data
35 00 01 00 00 00 36                                5.....6         

[12/06/2012 18:30:43] - Close port COM4

Todo lo que sé es que el software heredado verifica si el dispositivo está conectado al puerto COM seleccionado, luego descarga los datos y luego borra los datos del lector de tarjetas.

Y en caso de que ayude... Si no tengo el lector de tarjetas conectado e intento descargarlo, aparece este error.

Comando 0x31 no enviado

¿Alguien puede arrojar algo de luz sobre esto?

Gracias de antemano.

preguntado el 12 de junio de 12 a las 18:06

Podría ser mucho más sería más útil si pudiera decirnos el modelo del hardware que está utilizando, así como el tipo de tarjetas. Aún mejor si hizo el esfuerzo de encontrar el manual del hardware con anticipación. -

Todo lo que he intentado, este es hardware personalizado heredado fabricado por una empresa que ya no existe y el hardware no tiene modelo, ya que fue una pequeña empresa bastante personalizada la que lo fabricó. Confía en mí, me he molestado en poner mucho esfuerzo y esta es mi solución y estoy preguntando si alguien puede ofrecer un consejo. -

¿Puedes decirnos el tipo de tarjeta? RFID? ¿banda magnética? ¿Tarjeta electrónica? ¿Puede anotar el registro, anotando dónde pasó cada tarjeta? ¿Hay números de identificación de algún tipo en las tarjetas que podamos alinear con los datos? ¿Qué tipo de datos se espera? ¿Con qué estaba escrito el software anterior? Si fuera algo como VB6 (o si tiene mucha suerte, .NET), podría investigar y tener una mejor idea de cómo usar estos datos. Además, ¿puedes obtener datos cuando deslizas la misma tarjeta varias veces? -

Es un lector de banda magnética. los datos anteriores no son de cuando se desliza una tarjeta, sino de cuando se descargan los datos. los deslizamientos se realizan en el lector de tarjetas y el lector de tarjetas almacena los deslizamientos internamente y luego los descarga desde el lector de tarjetas usando el software. Creo que la aplicación está escrita en VB3, pero no puedo estar 100% seguro. los datos que eventualmente terminan en el archivo de texto tienen el siguiente formato 123412345617:50006/12/12 {número de tarjeta}{hora}{fecha} -

¿Ha considerado comprar un nuevo lector que sea compatible y tenga un SDK y/o un protocolo documentado? Si el proveedor está fuera del negocio y no puede admitir el dispositivo, entonces es un riesgo para su negocio continuar usándolo. Si falla en un momento crítico, no podrá reemplazarlo fácilmente. -

2 Respuestas

Es un protocolo de puerto serie bastante típico. El orden de los bytes es menos endian. Los primeros dos bytes son el número de bloque, así es como la respuesta se compara con la solicitud y cómo se puede detectar la pérdida de un paquete. Los siguientes dos bytes son la longitud del mensaje, en bytes. Los bytes en el mensaje siguen. Los dos últimos bytes son la suma de comprobación, el resultado de sumar los bytes en todo el mensaje. Big-endian por alguna extraña razón, afaict.

Esa es solo la especificación del marco del protocolo, imperfecta porque no muestra lo que sucede cuando los datos se codifican. Qué democracia counts son los bytes de datos en el mensaje. No hay forma de averiguar qué significan esos bytes sin ponerse en contacto con el fabricante y obtener las especificaciones.

Respondido el 12 de junio de 12 a las 23:06

Al estar muy familiarizado con este tipo de protocolos, las únicas formas que se me ocurren para lidiar con esto son:

  1. Comuníquese con el fabricante para que le proporcione la API (formato de mensajería) utilizada por su utilidad de software para comunicarse con la tarjeta.
  2. Ingeniería inversa del protocolo API. Esto puede requerir un gran esfuerzo para descubrir todos los bytes de datos, lo que puede crecer exponencialmente con la cantidad de funcionalidades que ofrece la tarjeta. Un buen comienzo es deslizar una tarjeta y registrar los datos y reiniciar el hardware, deslizar la segunda tarjeta, grabar y reiniciar y lo mismo ocurre con la tercera tarjeta. Luego haga una diferencia binaria entre los mensajes binarios para averiguar los bytes que han cambiado de una tarjeta a otra.

Respondido el 12 de junio de 12 a las 23:06

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.