UDP como protocolo para XBee

1

Mi situación es la siguiente, tengo un robot que tiene 4 controladores de motor conectados a un arduino que tiene un xbee serie 1 conectado. Xbee tiene su configuración predeterminada, excepto la velocidad en baudios, que se establece en 57600. Mi comunicación con el arduino es una forma de PC a arduino enviando 5 bytes cada 40 milisegundos (un byte para el comando 4 bytes para 4 pwms). Todos los cálculos se realizan en la PC, todo lo que hace arduino es leer estos bytes y aplicar los valores de pwm a los pines. El robot nunca está a más de 10 metros del transmisor, nada en el medio.

Lo que estoy viendo a veces es que a pesar de que estoy enviando comandos de un motor al solenoide en los activadores del robot, supongo que algunos paquetes se perdieron y el siguiente byte del flujo es igual a un comando de solenoide.

Lo que estoy tratando de hacer es algo como UDP donde puedo enviar comandos y cualquier comando que se envíe mientras arduino se está procesando para ser descartado básicamente cada vez que leo un comando de xbee. Me gustaría obtener el comando más reciente. enviar desde el pc? ¿Hay alguna manera de lograr esto?

    
pregunta Hamza Yerlikaya

2 respuestas

1

Parece que estás usando tu XBee en 'modo de datos', que simula una conexión en serie (secuencia). Podría estar observando bytes faltantes por varios motivos, incluidos los abandonos reales (aunque XBee debería justificar eso con retransmisiones) o errores en el código de transmisión o recepción, o simplemente un error al leer los datos del puerto serie de XBee lo suficientemente rápido.

XBees también suele tener un modo de API basado en paquetes, sin embargo, que le permite enviar paquetes de datos dirigidos individualmente a los receptores, con configuración de reconocimiento de variables, retransmisión, etc. Este protocolo de nivel inferior está intrínsecamente basado en paquetes, por lo que no es necesario implementar su propia paquetización, aunque puede valer la pena agregar una suma de comprobación de nivel de aplicación como un CRC para verificar la integridad de sus datos.

Hay varios clones de XBees y XBee diferentes por ahí; consulte el manual de su modelo particular para la documentación de la API.

    
respondido por el Nick Johnson
0

La forma más sencilla es implementar un protocolo similar a UDP, simplemente agregando un contador a su paquete. Esto podría ser un byte completo o incluso unos pocos bits si tiene espacio en su byte de comando. Lo que haría es contar y el extremo receptor mantendrá un registro del número del último paquete que recibe. Entonces, simplemente ignoraría cualquier paquete que tenga un recuento menor que el último paquete que recibió.

Tendrá que aplicar alguna lógica para permitir que cuando rebose / vuelva a un recuento de 0. Sin embargo, esto no debería ser demasiado complejo.

Otra cosa que se puede hacer es agregar un CRC a sus paquetes. Esto le permitirá asegurarse de que sus paquetes sean correctos.

    
respondido por el Kellenjb

Lea otras preguntas en las etiquetas