Pregunta

Yo escribo un protocolo RS485 multipunto simple para las comunicaciones en serie dentro de un sistema distribuido. Estoy usando un modelo direccionable, donde los dispositivos esclavos se les da una ventana de 20 ms para responder. El maestro encuestas uC los dispositivos conectados para que las actualizaciones y responder en consecuencia. He empleado sumas de comprobación y tomar las precauciones de rebasamiento necesarias para garantizar que los dispositivos conectados no responderá a los mensajes con formato incorrecto. Este método ha demostrado ser eficaz en aproximadamente el 99% de las situaciones, pero perder el paquete si se introduce un nuevo dispositivo durante una sesión de comunicación. La conexión de un nuevo dispositivo "caliente" tendrá efectos negativos sobre la señal que está siendo supervisado por los dispositivos esclavos, aunque sólo sea por un tiempo extremadamente corto. Estoy en el lado del software de ingeniería, pero ¿cómo puedo mitigar esta situación sin intentar recrear TCP? Utilizamos un modelo de votación porque es rápido y hace el trabajo bien para nuestra aplicación, sin necesidad de funcionalidad RTOS. Tengo una gran cantidad de ciclos en cada CPU, pensar en términos básicos.

¿Fue útil?

Solución

Envío de paquetes a través de la RS485 no es una comunicación fiable. Tendrá que manejar la perdida de paquetes de todos modos. Por supuesto, usted no tendrá que reinventar TCP. Pero tendrá que detectar paquetes perdidos por medio de los números de secuencia y control de retraso. En aplicaciones sencillas esto se puede hacer a nivel de aplicación, lo que le mantiene lejos de la complejidad de TCP. Cuando los descartes de votación modelo todos los paquetes con la suma de comprobación no válida esto podría ser integrados con menos esfuerzo.

Si desea comprobar las colisiones, que pueden ser causadas por tapones calientes o dispositivos porta mal es probable que haya algunas mejoras. Algunos dispositivos de hardware permite leer de nuevo la propia transmissing. Si encuentra una diferencia entre los datos enviados y recibir datos, puede suponer una colisión y repetir el paquete. Esto también requerirá una especie de secuencia de numeración.

Otros consejos

Tal vez me he perdido algo en su pregunta, pero no puedo que acaba de escribir el maestro de manera que si una respuesta no es visto desde un dispositivo dentro del tiempo permitido, se re-urnas ese dispositivo?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top