Re: Convertir Hexadecimal A Decimal
Hola Miguel
Toda la información sobre el protocolo Contact-ID la tienes aquí:
http://www.smartelectron.ru/files/DC-05_Contact_ID.pdf
Desconozco la manera en que te llegan las tramas, si es con espacios o sin ellos. En cualquier caso te recomiendo eliminar los espacios de la cadena mediante la función Replace (
http://gambasdoc.org/help/lang/replace?es ). Por ejemplo:
laTrama = Replace("1234 18 1131 01 015 8", " ", "")
De esta manera laTrama valdrá 1234181131010158 y entonces será más fácil emplear las funciones de cadenas para extraer y/o posicionarnos en un determinado carácter, ya que el número de caracteres es siempre
invariable.
Por ejemplo para extraer el número de abonado (account code), que son los 4 primeros caracteres:
sAccount = Left$(laTrama, 4)
' sAccount valdrá 1234
Luego puedes usar Mid$ para extraer por ejemplo los 2 siguientes caracteres, que corresponden al Tipo de Mensaje (que siempre será 18 ó 98) de esta forma:
sMsgType = Mid$(laTrama, 5, 2)
' sMsgType será = 18
Extraemos 2 caracteres a partir del 5º incluyendo éste.
Y así sucesivamente, viene muy bien explicado en la página 5 del pdf de Ademco - Contact-ID
Otra cosa a tener en cuenta es la comprobación de la validez de la trama mediante el último dígito, que es el Checksum o suma de verificación.
La fórmula para saber si es válida es:
(suma de todos los dígitos + digito de checksum) MOD 15 = 0
Es decir, sumando los 15 dígitos más el propio dígito de control, si lo dividimos entre 15 (que es el nº de dígitos totales excluyendo el de control) el resto de la división debe ser igual a 0. A tener en cuenta que si el dígito es un cero, habrá que interpretarlo como si fuera 10 para sumarlo.
Otra cosa es que el único grupo que puede contener caracteres hexadecimales creo que es sólo el primero (4 primeros caracteres) y que representa el identificador de un cliente. Se debe guardar tal cual en la base de datos, y solo será necesario convertirlo a entero a la hora de hacer la suma de verificación. El resto siempre son números (según recuerdo).
Por lo tanto lo primero es verificar la validez de la trama y si no es válida, salir del procedimiento, y sólo si lo es, analizarla y guardarla en la BD.
Bueno, si tienes más dudas vuelve a preguntar. Podría ayudarte con la función para iterar sobre los caracteres y sumarlos,
Saludos