Problema con libreria Modbus Slave Ayuda, soy nuevo en esto

Hola queria pedir ayuda, estoy trabajando con Arduino UNO y la siguiente biblioteca modbus slave

https://code.google.com/archive/p/simple-modbus/

Estoy tratando de comunicarme con un programa llamado Modscan32, este se comunica mediante un conversor USB-RS232. No puedo recibir datos ni enviar, puede ser que no este usando los pines correspondientes de transmisión y recepción.

La verdad es que soy nuevo en esto y me encantaria poder aprender, yo solo descargue la libreria y la añadi a arduino, alguien me puede ayudar? :(

Esta es la librería, corresponde a la SimplemodbusSlaveV10

#include <SimpleModbusSlave.h>
#define  LED 9  

enum 
{     
  // just add or remove registers and your good to go...
  // The first register starts at address 0
  ADC_VAL,     
  PWM_VAL,        
  HOLDING_REGS_SIZE // leave this one
  // total number of registers for function 3 and 16 share the same register array
  // i.e. the same address space
};

unsigned int holdingRegs[HOLDING_REGS_SIZE]; // function 3 and 16 register array
////////////////////////////////////////////////////////////

void setup()
{

  modbus_configure(&Serial, 9600, SERIAL_8N2, 1, 2, HOLDING_REGS_SIZE, holdingRegs);
  modbus_update_comms(9600, SERIAL_8N2, 1);
  
  pinMode(LED, OUTPUT);
}

void loop()
{
  modbus_update();
  
  holdingRegs[ADC_VAL] = analogRead(A0); // update data to be read by the master to adjust the PWM
  
  analogWrite(LED, holdingRegs[PWM_VAL]>>2); // constrain adc value from the arduino master to 255
  
  
}

Por favor, una breve descripción del hardware de conexión.

victorjam: Por favor, una breve descripción del hardware de conexión.

La verdad es que necesito conectar un plc con arduino UNO atraves de modbus rtu, la idea es que el arduino sea el esclavo. Descargue esta libreria pero no se usarla o interpretarla, tengo el programa modscan32 como metodo de prueba configuro lo parametros como sale ahí pero no logro alguna señal o algo. Tengo una foto del conexionado de prueba

me podrías echar una mano?

|500x373

mi encargado necesita conectar un plc con arduino UNO atraves de modbus rtu

Digo yo, y porque TU ENCARGADO te pone esa tarea de la que desconoces casi todo? Porque el no te ayuda?

surbyte:
Digo yo, y porque TU ENCARGADO te pone esa tarea de la que desconoces casi todo?
Porque el no te ayuda?

Estudie Tecnico en Automatización, y tuve un ramo que me enseñaron lo básico del micro controlador Arduino,
no es que desconozca todo, pero la comunicación nunca la he realizado :frowning:

Por lo menos empiezas bien, intentando comunicarte con el pc.

Bien, el problema que has cometido es que tienes un conversor USB a RS232 y esté lo conectas directamente al arduino. NOOOOOOO. Los niveles de tensión del RS232 son diferentes a los niveles TTL del arduino. RS232 trabaja con tensiones de +15 y -15 voltios. TTL funciona con 0 y 5 voltios. Espero no se te haya quemado el arduino los pines del arduino.

Opciones:

  1. conseguir un convertidor USB a TTL serial.
  2. conseguir un convertidor RS232 a TTL serial.

La segunda opción es si dispones de un puerto serie normal, o si pretendes usar el conversor que ya tienes. Yo uso la opción 2, ya que cuando cacharreo lo hago con ordenadores viejos que tengo y estos si tienen puerto serie.

Una vez hayas conseguido adaptar los niveles a los de arduino, hay que probar, y recuerda

ARDUINO <-> PC
RX <-> TX
TX <-> RX
GND <-> GND

Cuando lo hayas conseguido hablamos del PLC.

victorjam:
Por lo menos empiezas bien, intentando comunicarte con el pc.

Bien, el problema que has cometido es que tienes un conversor USB a RS232 y esté lo conectas directamente al arduino. NOOOOOOO. Los niveles de tensión del RS232 son diferentes a los niveles TTL del arduino. RS232 trabaja con tensiones de +15 y -15 voltios. TTL funciona con 0 y 5 voltios. Espero no se te haya quemado el arduino los pines del arduino.

Opciones:

  1. conseguir un convertidor USB a TTL serial.
  2. conseguir un convertidor RS232 a TTL serial.

La segunda opción es si dispones de un puerto serie normal, o si pretendes usar el conversor que ya tienes. Yo uso la opción 2, ya que cuando cacharreo lo hago con ordenadores viejos que tengo y estos si tienen puerto serie.

Una vez hayas conseguido adaptar los niveles a los de arduino, hay que probar, y recuerda

ARDUINO <-> PC
RX <-> TX
TX <-> RX
GND <-> GND

Cuando lo hayas conseguido hablamos del PLC.

Gracias por la ayuda, le agregue un conversor la de la opcion2 y sigo sin respuestas.

La librería sera la correcta?, de que otra forma puedo hacer la prueba?

No te preocupes por la libreria que es la correcta y también cuesta en un principio echar a andar.

Primero descargate el programa de esta pagina:

MTESTER

Es un programa muy útil para comprobar el funcionamiento del modbus.

Primero, sube el sketch que pusiste de ejemplo al arduino. Desenchufa el arduino y el conversor, y haz las conexiones. TX del conversor a RX del arduino; RX del conversor a TX del arduino. Conecta un led con una resistencia de 1K aproximadamente al pin 9 del arduino y GND. No olvides conectar el GND del arduino al GND del conversor que entonces no funcionará. Esquema:

|500x330

Vuelve a enchufar el arduino y el conversor para que se encienda. Abre el programa mbus.exe y tendrás que configurar:

Tiene tres pestañas. En la primera son las opciones del puerto serie. Tendrás que elegir modbus RTU, 9600, 8 bits de datos, 2 de parada y NONE de paridad. También tendrás que elegir el puerto serie con el que se comunica, la lástima es que solo permite los COM del 1 al 4 y el conversor si se basa en un chip FTDI no tendrá esos valores y tendrás que cambiarle el nombre (eso segun el sistema operativo que se use, ya me contaras). Si es un puerto serie normal del ordenador no será tan problematico. Quizás sea la parte más dificil.

|500x408

En la segunda pestaña "view data", hay que ponder la dirección del esclavo, que función en este caso es leer "holding register", poner de inicio 1 y la cantidad 2. Y pulsar conectar.

|500x408

Si todo ha ido bien, verás que arriba pondrá read status OK. En caso contrario te dirá un error. Si es de timeout revisa las conexiones si es una excepción de modbus, revisa lo que estes leyendo. En la tercera pestaña podrás ver las tramas de modbus en hexadecimal, lo que envia el maestro (PC) se pone en azul, lo que responde el esclavo (Arduino) será en negro y si aparece algo en rojo es que se está recibiendo algo que no deberia ser.

Prueba a ver si lo consigues.

victorjam: No te preocupes por la libreria que es la correcta y también cuesta en un principio echar a andar.

Primero descargate el programa de esta pagina:

MTESTER

Es un programa muy útil para comprobar el funcionamiento del modbus.

Primero, sube el sketch que pusiste de ejemplo al arduino. Desenchufa el arduino y el conversor, y haz las conexiones. TX del conversor a RX del arduino; RX del conversor a TX del arduino. Conecta un led con una resistencia de 1K aproximadamente al pin 9 del arduino y GND. No olvides conectar el GND del arduino al GND del conversor que entonces no funcionará. Esquema:

|500x330

Vuelve a enchufar el arduino y el conversor para que se encienda. Abre el programa mbus.exe y tendrás que configurar:

Tiene tres pestañas. En la primera son las opciones del puerto serie. Tendrás que elegir modbus RTU, 9600, 8 bits de datos, 2 de parada y NONE de paridad. También tendrás que elegir el puerto serie con el que se comunica, la lástima es que solo permite los COM del 1 al 4 y el conversor si se basa en un chip FTDI no tendrá esos valores y tendrás que cambiarle el nombre (eso segun el sistema operativo que se use, ya me contaras). Si es un puerto serie normal del ordenador no será tan problematico. Quizás sea la parte más dificil.

|500x408

En la segunda pestaña "view data", hay que ponder la dirección del esclavo, que función en este caso es leer "holding register", poner de inicio 1 y la cantidad 2. Y pulsar conectar.

|500x408

Si todo ha ido bien, verás que arriba pondrá read status OK. En caso contrario te dirá un error. Si es de timeout revisa las conexiones si es una excepción de modbus, revisa lo que estes leyendo. En la tercera pestaña podrás ver las tramas de modbus en hexadecimal, lo que envia el maestro (PC) se pone en azul, lo que responde el esclavo (Arduino) será en negro y si aparece algo en rojo es que se está recibiendo algo que no deberia ser.

Prueba a ver si lo consigues.

Me funciono Muchas gracias victor me fue muy útil el programa, lo que si tuve que modificar algunos codigos en la librería, pretendo subir acá el tema solucionado. !! :D