Discusiones sobre Productos NI

cancelar
Mostrando los resultados de 
Buscar en lugar de 
Quiere decir: 

Checksum no conocido

Buen día a todos en el foro,

 

Estoy implementando la comunicación serial con un equipo MUUUUY VIEJO del cual no hay documentación que especifique lo suficientemente cómo implementar la comunicación con él. Lo único que tenemos es el software de configuración (en DOS), pero se está haciendo una interfase para monitorearlo como parte de un HMI....

 

Tengo identificados casi todos los comando que necesito pero no sé qué algoritmo de CHECKSUM utiliza como parte de su comunicación... la documentación del equipo y del software de configuración en DOS no dice nada al respecto.... y no soy muy bueno para eso de los algoritmos... y más cuando ni siquiera sé sobre cual estoy buscando.

 

¿Podría alguien en el foro ayudarme a identificar cuál CHECKSUM es el que está implementado a partir de un mensaje del mismo?

 

Este es el comando que emite la aplicación DOS:

02 02 FD 05 00 1C 04 03

 

Y esta es la respuesta del equipo:

02 08 F7 00 09 04 29 18 09 57 04 E7 B1 03

 

Los bytes marcados en rojo son el CHECKSUM de acuerdo a un montón de pruebas que ya he hecho, pero no sé cuál están implementando... ¿alguien podría ayudarme identificandolo?

Antes de que me digan que el CHECKSUM va al final de las comunicaciones, he observado que todos los comandos y respuestas comienzan con 02 y terminan con 03, parecen ser caracteres de inicio y terminación de transmisión... he aislado la parte que compone el comando, número de bytes, sección de datos, pero no identifico lo que según yo es el CHECKSUM... espero que alguien me pueda hechar una mano.

 

Gracias anticipadas!!

 

 

0 kudos
Mensaje 1 de 7
4.856 Vistas

Mucho me temo que no estás en una condición tan feliz Emoticono triste

Efectivamente loas caracteres 0x02 (STX) y 0x03 )ETX) pueden ser usados para inicio y fin de un mensaje: ellos pertenecen a un rango de códigos ASCII nombrados códigos de control que se han usado mucho en los protocolos de comunicación. En algunos casos, tal y como has imaginado tú, los dos bytes antes del ETX son el CRC, pero no hay un método solamente para calcularlos, ya que se han establecido en el tiempo muchos diferentes: en esta página de la wikipedia se habla del CRC y hay enlaces a sitios que presentan fuentes para el cálculo con métodos diferentes. Yo he probado con el CRC calculado para comunicaciones con el protocolo Modbus y con el CRC16 usado en las comunicaciones segundo el protocol CCITT sin resultado (considerando la parte del mensaje desde el carácter que sigue el STX hasta el que precede el CRC): si no hay ninguna documentación sobre el protocolo usado tendrás que hacer un montón de pruebas y podrías no llegar a un resultato cierto.

Mensaje editado por Roberto Bozzolo


Proud to use LW/CVI from 3.1 on.

My contributions to the Developer Community
________________________________________
If I have helped you, why not giving me a kudos?
Mensaje 2 de 7
4.832 Vistas

Buen día Roberto,

 

Gracias por tomar el tiempo de hacer un intento de identificar el CRC.

 

Bueno, qué bueno que me confirmaste la idea de los bytes de inicio y fín de comunicación... Todos los mensajes que he visto entre la aplicación DOS y el equipo siguen esta "regla".

 

Tengo una pregunta que a lo mejor sirve para reducir la lista de posibles CRC's implementados por este equipo: ¿si el CRC lo componen 2 bytes, pudiera pensar que se trata de alguna variante de CRC-16? (según yo, si se tratara de una variante de CRC-32 tendría 4 bytes como CRC ¿te suena lógico esto?)

 

Saludos

0 kudos
Mensaje 3 de 7
4.821 Vistas

Bueno, no tengo tanta experiencia de cálculo de los CRC, pero por lo que veo en esta página podría tratarse de cualquier algoritmo entre el CRC-10 y el CRC-16 Emoticono sorprendido Emoticono sorprendido

A ver si los nombres que vienen en la lista te ayudan a detectar le método correcto (quizás en la escasa documentación se haga referencia a algo similar a uno de ellos...)



Proud to use LW/CVI from 3.1 on.

My contributions to the Developer Community
________________________________________
If I have helped you, why not giving me a kudos?
0 kudos
Mensaje 4 de 7
4.814 Vistas

Bueno, eso me deja 8 variantes...   Emoticono triste

 

Parece que tengo tarea....   Guiño

 

Luego comento si hubo resultados...

 

Saludos y gracias nuevamente!!

0 kudos
Mensaje 5 de 7
4.811 Vistas

Hola:

 

Ese tipo de codigo lo he visto en alguna parte (02 de inicio y 03 de final). Con el programa que te adjunto en formato jpg calculaba el Checksum. De esta manera se obtiene el último bit aplicando el string desde el inicio 02 (sin incluir) hasta el Checksum (también sin incluir). No se como se obtendrá el primero.

 

Espero que te ayude.

Saludos.... Moises

_________________________________________
https://aulamoisan.uva.es

Descargar todos
Mensaje 6 de 7
4.792 Vistas

Moises

 

Gracias por compartir tu código... lo he probado con varios de los mensajes que tengo capturados entre la aplicación DOS y el equipo y es consistente en proporcionarme el último byte del Checksum... voy a ver si en base a tu código puedo determinar el otro byte que me falta.

 

Gracias de nueva cuenta!!

0 kudos
Mensaje 7 de 7
4.784 Vistas