Problema de multipunto RS485

0

Tengo una red RS485 multipunto con un maestro (PC con convertidor RS232-RS485) y 2 nodos utilizando el Max13487 (esquema adjunto). La comunicación está bien en ambas direcciones usando un nodo. Sin embargo, me sale sin sentido (envío y recepción) cuando se agrega otro nodo. Si apago el micro en uno de los nodos, el otro se comunicará bien. Este parece ser el caso con y sin resistencias de terminación y resistencias de polarización. El código está escrito para que cada nodo solo responda si su ID es correcta. ¿Tiene algún consejo para solucionar este problema?

    
pregunta user3446990

1 respuesta

2

Debería poder demostrar que el nodo no deseado está interrumpiendo cosas utilizando su alcance. Verifique que la línea de salida de datos de su MCU no esté cobrando vida cuando el nodo deseado esté respondiendo. Estoy empezando a sospechar que la respuesta del primer nodo contiene un byte que parece una dirección para el segundo nodo.

  

Sí, el nodo no deseado parece estar transmitiendo cuando el otro nodo   Respuestas al maestro.

Este es un problema común al diseñar enlaces de datos. Por lo general, lo que se puede hacer es enviar un encabezado de primer byte que sea único y nunca esté contenido en ningún dato de carga útil. Después de ese encabezado, coloca la dirección de destino del esclavo, por lo que cualquier esclavo solo puede considerar responder cuando se recibe el encabezado único más la dirección. Después de esos bytes estarán los datos de la carga útil y, finalmente, un byte de comprobación de errores (o dos).

Para evitar que los datos de carga útil se vean como el encabezado único, use una técnica conocida como relleno de bytes O, espere hasta que se reciba la suma de comprobación para verificar que se haya recibido un mensaje correcto y no un fragmento de datos de otro esclavo.

También puede buscar interrupciones entre las transmisiones para volver a sincronizarse cuando busque una dirección. También debe considerar no transmitir a ciegas cuando se envía otro byte, ya que una interrupción de al menos 10 bits suele ser suficiente para obtener un sistema más robusto.

    
respondido por el Andy aka

Lea otras preguntas en las etiquetas