Determine la transmisión y la latencia de recepción de un convertidor de USB a EIA-485

3

¿Cómo puedo determinar la latencia relacionada con la transmisión de datos en un convertidor de USB a EIA-485?

El convertidor es un USOPTL4 de electrónica B & B que usa el chip FTDI, y sé que hay una latencia de rendimiento desde el momento en que mi aplicación de Windows llama a WriteFile y los datos se transmiten.

La misma pregunta se aplica al final de la recepción de las cosas. Sé que hay una latencia desde cuando el FTDI recibe los datos en serie y se proporciona al sistema operativo para su lectura.

¿Alguien ha medido estas latencias con éxito?

    
pregunta cigarman

2 respuestas

3

"¿Cómo podría determinar la latencia"?

Uso un osciloscopio para determinar las latencias típicas.

Investigo el código fuente y el hardware para obtener una estimación conservadora de la latencia más desfavorable.

latencia típica

Si tuviera que medir la latencia típica de transmisión y recepción de alguna configuración particular, comenzaría con la medida más simple: el típico retardo de ida y vuelta. Quizás algo como esto sería relativamente fácil de configurar:

  • El software en el Arduino enciende un LED, y luego envía un mensaje de inmediato a la UART
  • tiene las clavijas UART conectadas al IC de cambio de nivel apropiado conectado a su convertidor de USB a EIA-485.
  • El software en la PC espera una entrada en serie y luego envía un breve mensaje de respuesta
  • El software en el Arduino espera la entrada en serie, y luego enciende de inmediato otro LED.
  • El software en el Arduino espera un tiempo aleatorio, apaga todos los LED, espera un tiempo más aleatorio, y luego vuelve a encender el primer LED.

  • conecta el o'scope a los 2 LED y mide el retraso típico entre el encendido del primer LED y el encendido del segundo LED.

  • recompila con diferentes tamaños de mensajes; Haz una gráfica del tamaño del mensaje frente al retraso típico.

latencia en el peor de los casos

Un sistema en tiempo real debe haber limitado la latencia en el peor de los casos. Lamentablemente, eso no parece posible con Windows, incluso si pudiera obtener el código fuente para Windows, un parche de controlador de dispositivo la próxima semana podría agregar otros 2 milisegundos de latencia en el peor de los casos.

Algunos sistemas operativos en tiempo real admiten USB, en particular, EMC que se ejecuta en Linux ejecutándose en RTAI es compatible con USB - hidcomp , dispositivo de entrada USB personalizado con emc , etc. El USB tiene "transferencias isócronas" y "transferencias de interrupción" que parecen ser útiles para limitar la latencia en el peor de los casos. Por desgracia, nadie parece confiar en USB para tareas en tiempo real: Hardware compatible con EMC2 , ¿Control USB en tiempo real? , Problemas de USB , etc.

Por lo tanto, EMC2 aún usa puertos paralelos para obtener la latencia más desfavorable conocida; otros protocolos de comunicación de baja latencia utilizan una variedad de hardware, incluido el hardware de Ethernet.

    
respondido por el davidcary
1

Bueno, ¿qué estás tratando de hacer?

Lo que vas a encontrar es que cada nivel en esa pila agrega una cantidad variable de latencia aparentemente aleatoria. Si bien suele ser inferior a 1 ms, es probable que ocasionalmente sea mucho mayor que eso.

El sistema operativo en sí tendrá una latencia de programador multitarea aleatoria. Eso podría ser de 0 a 50 ms (o más en sistemas especializados o mal configurados). Si está intentando hacer algo con restricciones de tiempo muy estrictas, es probable que tenga que hacerlo en un controlador de dispositivo personalizado en el espacio del kernel para hacer el tiempo.

Después de eso, USB no es un bus muy compatible con la latencia. Esperar a que el USB envíe los datos agregará una pequeña latencia aleatoria. El lado de lectura es en realidad un poco peor ... ya que la raíz USB debe sondear los dispositivos conectados para ver si tienen datos. No puedo darle mucha información sobre los rangos de estos retrasos ... quizás alguien más pueda ayudar aquí. Sin embargo, es probable que sea bastante variable dependiendo de cosas como si se está conectando a través de un concentrador y cuántos otros dispositivos están conectados. Por lo tanto, si lo mide usted mismo, asegúrese de probar al menos algunas combinaciones de dispositivos USB. Pruébelo con cámaras web y unidades de memoria USB conectadas y activas, a través de un hub y direct, etc.

    
respondido por el darron

Lea otras preguntas en las etiquetas