Cómo prevenir el sondeo usando RS485

2

Se me recomendó usar RS485 ya que tengo aproximadamente 7 dispositivos que necesitan hablar entre ellos (y no puedo hacer que CAN funcione).

Aunque quiero comenzar de manera simple (dos dispositivos donde uno envía y otro recibe), más adelante podría haber varios remitentes. Uno de los puede ser visto como Maestro, pero otros también deberían poder iniciar mensajes. Así que necesito algún tipo de protocolo de sondeo.

El problema es que, en RS-485, cada vez que un dispositivo envía un mensaje, todos los dispositivos lo 'escucharán' y tendrán que procesarlo (aunque la mayoría está comprobando un byte para saber que no está diseñado para ellos).

Pero si obtendría unos 100.000 mensajes por segundo (en el peor de los casos), esto todavía costaría mucho tiempo de procesamiento. Y el dispositivo maestro (que es el que más inicia) necesita hacer bastante procesamiento no relacionado con la comunicación.

¿Cómo puedo reducir el sondeo? Estaba pensando en desacoplar el dispositivo maestro directamente de RS-485 agregando algún tipo de dispositivo de comunicación que pase RS-485 atrás / adelante del maestro (por ejemplo, a través de SPI). Sin embargo, esto parece una solución extraña (convertir / reenviar todos los mensajes a través de SPI, también se verá afectada la latencia).

O usando alguna línea dedicada (como una de las líneas RS485-A / B) que los dispositivos pueden configurar ALTO para anunciar que tienen datos. Pero no estoy seguro de si debo tratar esto como una señal RS-485 (por lo que esencialmente tiene 1.5 señales RS-485).

    
pregunta Michel Keijzers

1 respuesta

5
  

¿Cómo puedo reducir el sondeo?

Teniendo en cuenta las ventajas del bus CAN, es decir, el protocolo peer-to-peer y, considerando cómo funciona, los dispositivos con una dirección más baja naturalmente anulan los dispositivos con direcciones más altas, puedo ver una manera en que algo como esto podría funcionar en RS485 pero dispositivos limitados.

Se supone que los 7 dispositivos pueden reconocer el final de un mensaje válido anterior. Cuando esto sucede, cada dispositivo cuenta un período de tiempo proporcional a su dirección (de 1 a 7 intervalos de tiempo) pero verifica si el bus se ha activado mediante un dispositivo con un recuento más bajo. Si eso sucede, el dispositivo se da por vencido y espera hasta que el mensaje finalice y vuelva a intentarlo.

Si el dispositivo en cuestión alcanza "su conteo" y el bus no se ha activado, entonces toma el control.

Este protocolo solo es realmente útil cuando el número de dispositivos es bajo porque cientos de dispositivos perderían mucho tiempo, PERO, es probable que los 7 dispositivos sean más rápidos que enviar un byte de dirección típico.

Para completar el ciclo, si no hay dispositivos que deseen comunicarse, un dispositivo (probablemente el último) debe emitir un mensaje corto que vuelva a sincronizar el ciclo al principio nuevamente.

Debe decidir la duración del intervalo de tiempo con cuidado: no puede ser tan corto como para que un dispositivo distante piense que puede tomar el control del bus, pero de hecho, simplemente no ha visto a otro dispositivo tomar el control del bus, pero CAN tiene el mismo problema potencialmente.

    
respondido por el Andy aka

Lea otras preguntas en las etiquetas