XBee descargando paquetes y la velocidad de datos real más baja de lo esperado

5

Estoy transmitiendo continuamente a 9600 bps usando las configuraciones predeterminadas para mis dos XBees XB24-B. La comunicación es de una sola manera, el transmisor está conectado a la UART ATMega328 y el receptor está conectado a la PC a través de USB (FTDI). Aquí está la tasa de datos real para un programa dado:

  • Conexión por cable (sin XBee): 7694 bps
  • desde el enrutador ZNET 2.5 / Dispositivo de extremo AT hasta el coordinador ZNET 2.5 EN: 6800 bps (algunos paquetes perdidos)
  • del ZNET 2.5 Coordinator AT to ZNET 2.5 Router / End Device AT: 0356 bps (muchos paquetes perdidos)
  • desde el enrutador / dispositivo final Zigbee AT hasta el coordinador Zigbee AT: 0000 bps (no funciona)
  • desde Zigbee Coordinator AT hasta Zigbee Router / End Device AT: 0328 bps (muchos paquetes perdidos)

¿Por qué es eso? ¿Hay algo que pueda hacer para mejorar estas tarifas?

Editar Para velocidades de transmisión más altas (115200) Tengo tasas de caída de paquetes aún peores:

  • Conexión por cable (sin XBee): 94200 bps
  • utilizando XBee XB24-B ZNet 2.5: 27900 bps

Editar Si hago que el Coordinador se dirija al dispositivo final, la tasa de caída de paquetes cae a los niveles normales (6800 bps), lo cual no es ideal pero es mejor que el escenario anterior

    
pregunta Jader Dias

3 respuestas

4

Puede reducir a cero los paquetes caídos asignando la dirección de destino correcta antes de iniciar la transmisión .

    
respondido por el Demetris
3

¿Cuál es la intensidad de la señal y la velocidad del enlace inalámbrico? Verifique los documentos de la API XBee para poder acceder a esta información. ¿Qué antenas estás usando?

La velocidad de datos sin procesar de Zigbee es de solo 250 kbit / s en la banda de 2.4 Ghz y es un protocolo de sobrecarga muy alta. Con la potencia de la señal casi perfecta y el cifrado habilitado, solo debe esperar un rendimiento máximo de datos de ~ 20-25 kbit / seg sin personalizar la pila, un poco más sin cifrado. El protocolo de Zigbee realmente solo admite el envío de datos que se ajustan a un solo paquete, que desde el principio es algo así como 100 bytes. Si está enviando un flujo de datos, la capa de aplicación tiene que dividir esos datos en paquetes e incluir información adicional en el espacio de datos del paquete para que pueda volver a ensamblarse. Este proceso puede ser bastante lento e ir más lejos en el rendimiento de los datos.

La pila de Digimesh de Digi es un poco más rápida, ya que recorta los gastos generales y permite paquetes más grandes.

No estoy seguro de cuál es tu aplicación final prevista, pero Zigbee no está diseñado para transmitir datos. Es para enviar pequeños bits de información, lecturas de sensores, instrucciones, etc. que encajan en un solo paquete. Es muy probable que haya elegido el protocolo incorrecto para su aplicación.

    
respondido por el Mark
1

ACTUALIZACIÓN: con la reciente revalorización de que Zigbee no está hecho para transmitir datos, sugeriría tirarlo a la basura y comprar un mejor transceptor con más funcionalidad, más rendimiento y aproximadamente 1/4 del precio e

Recomiendo utilizar el control de flujo, si es posible, para abordar los paquetes perdidos. Las posibilidades son, pequeños pero significativos periodos de tiempo cuando un dispositivo se está procesando, no está mirando sus pines UART y por lo tanto pierde bits / bytes y puede colgar cosas. Al implementar el control de flujo de hardware (RTS & pines CTS), cada dispositivo puede decirle al otro cuándo está listo o no para obtener más datos.

Una vez que conecte el control de flujo, creo que logrará el mayor rendimiento que está buscando =)

Trabajo con dispositivos Bluetooth OBD que conectan mi aplicación de Android con redes de vehículos, por lo que trabajo bastante con la tecnología inalámbrica / Bluetooth.

    
respondido por el Brad Hein

Lea otras preguntas en las etiquetas