¿Protocolo para red RS485?

Tengo que construir una red de sensores que se comunique a través de un solo bus RS485. La red podría tener decenas de nodos. El problema es que tengo que controlar el acceso al bus compartido y encontrar una forma de direccionar cada nodo, similar a TCP/IP. Cada sensor (cuando se activa) puede enviar datos de forma asíncrona al servidor.

¿Existe un protocolo disponible para una red RS485? Si es así, ¿es gratis? El protocolo se implementaría en un microcontrolador.

¿Puedo usar un controlador con pila TCP/IP?

¿Alguien ha diseñado una red de este tipo? Tengo curiosidad por saber si mi enfoque es correcto para saber si está bien continuar por este camino o si tengo que cambiar a una tecnología diferente.

Hay muchos protocolos en uso: tome un manual para algo que hable RS845 en una configuración compartida. Por lo general, un maestro envía la dirección de la persona con la que quiere hablar, y solo ese nodo puede responder en ese momento. Pero podría ser posible un esquema más peer to peer con detección de colisiones y retroceso aleatorio.
TCP/IP no controla el acceso al bus compartido; esto se hace mediante un protocolo inferior.
@ChrisStratton En mi caso, los sensores se comunican con un servidor y cada sensor (cuando se activa) puede enviar datos de forma asíncrona al servidor.
Ir a modbus. 1234567890
La detección de colisiones puede ser difícil (no imposible) con RS485, ya que ni el nivel alto ni el bajo son dominantes y un dispositivo que monitorea el bus mientras transmite solo puede ver su propia transmisión a pesar de una colisión con un dispositivo en la línea. Hubo una respuesta aquí hace un año o unos pocos que mostró una modificación para la detección de colisiones. Te paso un enlace si lo encuentro. Usé modbus y agregué encuestas basadas en intervalos de tiempo dependientes de la dirección para evitar colisiones al determinar qué esclavos estaban conectados.
Esta respuesta de Dave Tweed puede ser lo que estaba recordando: electronics.stackexchange.com/a/62380/25328 (no he probado esto)
Puede considerar CAN como una alternativa a RS485: electronics.stackexchange.com/q/304546/25328
Muchos protocolos de uso gratuito se enumeran en en.wikibooks.org/wiki/Embedded_Systems/Common_Protocols ; la mayoría de ellos funcionaría en hardware de enlace físico RS485.

Respuestas (1)

He hecho una demostración sobre la transferencia de TCP/IP a través de RS485: https://github.com/dukelec/cdbus_doc

El protocolo en RS485 es CDBUS, que podría usar un controlador independiente para resolver el problema de la colisión, también puede implementar el protocolo CDBUS por software, o simplemente no preocuparse por la colisión, reenviar el paquete cuando se detectó la pérdida de datos.
El protocolo CDBUS: https://github.com/dukelec/cdbus_ip

El protocolo anterior es CDNET, es similar al protocolo UDP, puede enviar paquetes UDP desde MCU con solo unas pocas líneas de códigos y sin ninguna biblioteca, pero necesita una puerta de enlace para traducir CDNET a un protocolo TCP/IP real. O puede definir su propio protocolo y traducirlo en la puerta de enlace.