Hola a todos.
Estoy intentando hacer un simulador de esclavos de Modbus con Arduino.
La finalidad que tiene es probar un maestro que espera la comunicación con varios esclavo.
El código tendrá que simular con una sola conexión modbus varios ID de esclavos de forma que el Maestro cuando quiera información del esclavo (ejemplo:21) este le devuelva su petición y si lo siguiente que hace el maestro es pedir la petición de datos a otro esclavo (ejemplo:75) este le responda tambien.
Lo que busco es que sea escalable tanto en ID de esclavos como de "datos", "funciones", "direcciones"... por esclavo simulado
Hay mucha información de como realizar una conexión modus con Arduino como "único" esclavo pero no encuentro información de lo que pretendo.
Mil gracias a cualquiera que me pueda ayudar.
Su publicacion se MUEVE a su ubicacion actual ya que es mas adecuada.
Lo único que necesitas es un programa de PC que actúe como Maestro interrogando a todos los esclavos.
Uno de ellos, la mayoría son pagos. Algunos no. Te lo muestro como idea, busca cosas similares.
Gracias Surbyte por tu respuesta, ya conocía esa alternativa pero no es el objetivo que pretendo.
El objetivo final es tener un dispositivo portátil que se alimente con una powerbank y se conecte a un maestro para poder discernir si el problema es del maestro o de cualquier esclavo que este conectado.
Imagina que los equipos no están a tu alcance (físicamente) y tu eres responsable del maestro... tu le enviarías el dispositivo "arduino simulado de esclavos" y realizando una simple conexión sabrías si el problemas es tuyo o de los esclavos.
Un saludo
La mayoría de las librerías de Arduino están pensadas para que trabaje como maestro o como esclavo, por otra parte es casí normal. En PC si existen alternativas como ModRSim2 o Modbus slave. Así que no te queda más remedio que escribir tu propio programa, y ahí todo depende de tu habilidad como programador.
Tendrías que crear una "lista" de dispositivos a emular guardando la información del id, de las funciones que soporta y las direcciones de los registros (más que las direcciones en sí, la cantidad de registros).
Cuando recibas una "trama" tendrás que ver si el id del dispositivo está en la lista, analizar si la función es soportada y por último validar datos.
Aquí entra el problema de la memoria. No podrás simular los registros de datos por la escasa memoria de Arduino, así que lo lógico sería que los datos también fueran "emulados". Por ejemplo, si pides leer los registros del 10 al 20 devolver valores del 1 al 10.
Mi recomendación es que busques una libreria como Simple-Modbus la analices, veas como funciona y con la ayuda de la guia de modbus modifiques a tu gusto.
Gracias victorjam
He estado viendo la opción que comentas... No quiero empezar tocando librerias la verdad si no encontrar una que pueda realizar lo que pretendo.
El problema que la gran mayoría de librerías definen el ID del esclavo solo una vez, como es lógico, en el setup no en el loop.
Es cierto que la memoria será la que limite la cantidad de esclavos y "datos" simulados...
Un saludo
Es algo muy específico lo que quieres hacer, ya es difícil que alguien más lo haya hecho y más difícil que además escribiese una librería.