En modbus.org esta toda la informacion que necesitas, ya que es un estandar abierto.
Te recomiendo arrancar usando algun maestro en OPC, que hay gratuitos y muy buenos, y te aseguran que estas cumpliendo el estandar...
Hola MGLSOFT!! Muchas gracias por tu rta!
Estuve en la pagina de modbus leyendo bastante, pero siempre se habla del estándar, no aplicado a su implementacion en MCU que es lo que me da problemas.
En mi proyecto nació la necesidad de comunicar muchos PICs, y como era facil hacer un bus RS485, los conecte a todos...
Cuando me senté a definir la comunicación, me di cuenta que si yo mismo escribía un protocolo, no iba a funcionar tan bien como Modbus.... Me decidí ademas pq tengo un dispositivo MAESTRO que consulta y modifica variables en los esclavos de la red, que no necesitan hablar entre si (solo con el master)...
Por todo esto me pareció ideal implementar modbus.
Voy entendiendo cada vez mas sobre el protocolo, pero sigo complicado con el tema de como se definen las variables que se mueven por la red (que estan en los esclavos y el maestro puede consultar/leer)... y como las mapeo (me refiero a ellas), dentro de cada equipo (esclavo, y maestro).
Por ejemplo, una de las funciones incluidas en modbus.c dice:
modbus_write_single_register(address,reg_address,reg_value);
Esa función corresponde a la numero 06 especificada en el estandar Modbus.... Los parámetros son:
address, que es la dirección de esclavo,
reg_address direccion del registro que quiero escribir y
reg_value valor del registro que quiero escribir..
Según el estándar estos registros son de 16 bit, y aquí la gran pregunta:
¿¿Donde defino / declaro esos registros en el esclavo y en el maestro??.... y cuando desde el maestro me refiero a un registro de un esclavo (suponiendo que use la función del ejemplo), cuando digo
reg_address... esa dirección!!!!!! A que refiere???
Al mapa de RAM del esclavo?Ese es mi gran problema!
Ojala alguien me pueda explicar, o tenga algo para leer, o un ejemplo que me ayude...
GRACIAS A TODOS!