Luchando con la comunicación en serie sobre RS 485 usando el protocolo modbus

1

Tengo alrededor de 60-70 inversores con los que quiero hablar usando arduino sobre RS-485. La conexión que estoy haciendo con arduino está de acuerdo con la imagen adjunta.

¡Ahora creo que mi parte de conexión está bien! Donde me estoy quedando atrás es la parte de codificación, supongo. En cuanto a cada solicitud, no puedo hacer ni una sola solicitud exitosa.

LabibliotecademodbusqueestoyusandoesSimpleModbusLibrary,aquíestáelenlace: enlace

El formato de datos que utiliza el fabricante del inversor es el siguiente: byte de inicio, dirección de esclavo, código de función, datos, verificación, byte final.

Mientras que la solicitud que estoy enviando a través de mi dispositivo maestro se ve así:

paquete1- > id = 25;   packet1- > function = READ_HOLDING_REGISTERS;   paquete1- > dirección = 3000;   packet1- > no_of_registers = 3;   packet1- > register_array = regs;

No estoy incluyendo ningún byte de inicio o final. ¿Es la razón por la que no puedo recibir ninguna respuesta del dispositivo esclavo? ¿O es porque también tengo que programar la respuesta de los dispositivos esclavos?

A partir de ahora solo estoy jugando con el código del dispositivo maestro y no he descubierto cómo recibir la respuesta del esclavo y cómo descodificarlo. Cada biblioteca modubs parece tener dos tipos de programas uno para el maestro y otro para el esclavo. Mientras que solo uso el código maestro para enviar solicitudes a los esclavos.

¿También tengo que programar para esclavos? Si es así, ¿cómo programar tanto el maestro como los esclavos en mi dispositivo maestro arduino que está hablando con mis inversores?

Soy nuevo en arduino pero tengo experiencia en programación. Solo falta algunos conceptos básicos en electrónica y modubs protorcol sobre RS-485. Por favor ayúdame por favor

Gracias de antemano.

P.S: He conectado todos mis inversores a través de los puertos RS_485 correctamente, estoy conectando el extremo negativo al pin 7 en el chip RS-485 y el cable positivo al pin 6 en el chip

    
pregunta topsy coder

3 respuestas

2

No tengo un gran conocimiento sobre la plataforma Arduino, pero he trabajado con Modbus en más de 485 líneas. Todos los procesadores que utilicé, requieren resistencias pull-up en las líneas Tx-Rx al MAX485. Tal vez la placa Arduino implemente resistencias internas, ¿puede verificar esto?

Tengo muchas dudas sobre la especificación del fabricante en el "byte de inicio" y en el "byte final", esto no aparece en el especificación del protocolo Modbus .

Y, finalmente, 60-70 nodos es un número de nodo grande ... tal vez deba consultar la especificación de para Modbus sobre serial línea .

También debe tener cuidado con la forma de terminar la línea de transmisión y la forma de realizar el cableado. Compruebe las especificaciones.

Aquí hay un ejemplo de un circuito que utilicé para Modbus sobre 485.

En este caso, es una línea aislada, pero es el mismo principio.

    
respondido por el Martin Petrei
2

Omita el chip MAX485 y comuníquese directamente entre dos arduinos; esto demuestra que puede comunicar TX a RX y viceversa. Todavía puede usar las mismas bibliotecas de códigos y sugeriría que lo que podría encontrar es que necesita ambas bibliotecas instaladas en ambos extremos, pero puede probarlo más tarde: solo intente enviar datos de un arduino a otro y deje que el destinatario encienda un LED si recibe el mensaje predefinido correcto. Resuelva el problema en etapas, y la etapa final está logrando que las 485 cosas funcionen.

    
respondido por el Andy aka
0

Supondré que no configuraste las ID de dispositivo en los inversores. Debe configurar el ID del dispositivo en un número diferente en cada uno. Tu maestro arduino debe consultar cada dispositivo individualmente ,. Le sugiero que use una PC con un maestro de mobbus gratis para probar la conexión a los inversores. Utilicé el sitio web simplemente modbus para obtener información para escribir un programa maestro modbus hace unos meses, un sitio muy útil.

    
respondido por el chambers

Lea otras preguntas en las etiquetas