Tengo alrededor de 60-70 inversores con los que quiero hablar usando arduino sobre RS-485. La conexion que estoy haciendo con arduino es segun 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.
La biblioteca modbus que estoy usando es la biblioteca SimpleModbus, aquí está el enlace: https://drive.google.com/folderview?id=0B0B286tJkafVSENVcU1RQVBfSzg&usp=drive_web
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 de finalización.
Mientras que la solicitud que estoy enviando a través de mi dispositivo maestro se parece a esto:
paquete1->id = 25; paquete1->función = READ_HOLDING_REGISTERS; paquete1->dirección = 3000; paquete1->nº_de_registros = 3; paquete1->registrar_matriz = regs;
No estoy incluyendo ningún byte de inicio o byte final. ¿Es por eso 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 decodificarla. Cada biblioteca de 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.
¿Tengo que programar también para esclavos? en caso afirmativo, ¿cómo programar tanto para el maestro como para los esclavos juntos en mi dispositivo maestro arduino que está hablando con mis inversores?
Soy nuevo en arduino pero tengo experiencia en programación. Sólo faltan algunos conceptos básicos de electrónica y protocolo modubs sobre RS-485. Amablemente por favor ayúdame
Gracias de antemano.
PD: he cableado todos mis inversores a través de 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
No tengo grandes conocimientos sobre la plataforma Arduino, pero he trabajado con Modbus sobre 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 pull-up internas, ¿puedes verificar esto?
Tengo muchas dudas sobre la especificación del fabricante sobre el "byte de inicio" y el "byte final", esto no aparece en la especificación del protocolo Modbus .
Y, por último, 60-70 nodos es un gran número de nodos... tal vez deba comprobar la especificación de Modbus a través de la línea serie .
También debe tener cuidado con la forma de terminar la línea de transmisión y la forma de realizar el cableado. Verifique las especificaciones.
Aquí hay un ejemplo de un circuito que usé para Modbus sobre 485.
En este caso, es una línea aislada, pero es el mismo principio.
Omita el chip MAX485 y comuníquese directamente entre dos arduinos; esto demuestra que puede comunicar TX a RX y viceversa; aún puede usar las mismas bibliotecas de código y sugeriría que lo que podría encontrar es que necesita ambas bibliotecas instaladas en ambos extremos pero puede probar esto más tarde: simplemente intente enviar datos de un arduino a otro y deje que el destinatario encienda un LED si recibe el mensaje predefinido correcto. Aborda el problema por etapas y la etapa final es hacer que las cosas del 485 funcionen.
Supongo que no configuró las identificaciones de los dispositivos 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 mobbus gratuito para probar la conexión a los inversores. Utilicé el sitio web de simplemente modbus para obtener información para escribir un programa maestro de modbus hace unos meses, un sitio muy útil.
nick johnson
Marko Bursic
Kvegaoro
codificador loco
jwygralak67
señor té