modbus rtu arduino con MAX485

buenas tardes gente, quisiera pedir de su ayuda, trabajo en un proyecto que busca leer una variable determinada ubicada en Arduino MEGA de un PLC SCHNEIDER (Modicom m221CE16T) a travez del puerto serie 485.

el problema que tengo es el siguiente, en mi PLC yo lo configuro como maestro y le establezco ciertas caracteristicas como ser:

protrocolo: Modbus
Velocidad: 9600 Baudios
Paridad: ninguna
datos: 8
bits de stop: 1
dispositivo a conectar: generico (seria el ARDUINO)
tiempo de respuesta 100ms
timeout: 100ms

y elaboro la matriz dentro del plc de la siguiente manera:

id del esclavo: 02
codigo de peticion: 03 (leer registros)
direccion de la primera palabra o variable a leer: 0
cantidad de palabras o variables a leer 1

bien ahora vamos al arduino, busco crean un ejemplo sencillo y una vez que funcione avanzar con mas dificultades (escribir una variable y demas cosas) por ahora solo quiero leer del plc una varable cotenida en arduino

aqui va el ejemplo que programe en arduino, teniendo en cuenta que parti de unos ejemplo encontrados en internet. en este programa guardo en una variable los millis() y este dato quiero poder leerlo desde mi plc

#include <SimpleModbusSlave.h>


enum 
{     
  // just add or remove registers and your good to go...
  // The first register starts at address 0
  ADC_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()
{
  /* parameters(HardwareSerial* SerialPort,
                long baudrate, 
 unsigned char byteFormat,
                unsigned char ID, 
                unsigned char transmit enable pin, 
                unsigned int holding registers size,
                unsigned int* holding register array)
  */
  
  /* Valid modbus byte formats are:
     SERIAL_8N2: 1 start bit, 8 data bits, 2 stop bits
     SERIAL_8E1: 1 start bit, 8 data bits, 1 Even parity bit, 1 stop bit
     SERIAL_8O1: 1 start bit, 8 data bits, 1 Odd parity bit, 1 stop bit
     
     You can obviously use SERIAL_8N1 but this does not adhere to the
     Modbus specifications. That said, I have tested the SERIAL_8N1 option 
     on various commercial masters and slaves that were suppose to adhere
     to this specification and was always able to communicate... Go figure.
     
     These byte formats are already defined in the Arduino global name space. 
  */
 
  modbus_configure(&Serial, 9600, SERIAL_8N1, 1, 2, HOLDING_REGS_SIZE, holdingRegs);

  // modbus_update_comms(baud, byteFormat, id) is not needed but allows for easy update of the
  // port variables and slave id dynamically in any function.
  modbus_update_comms(9600, SERIAL_8N1, 1);
  
  
}

void loop()
{
  // modbus_update() is the only method used in loop(). It returns the total error
  // count since the slave started. You don't have to use it but it's useful
  // for fault finding by the modbus master.
  
  modbus_update();
  
  holdingRegs[ADC_VAL] = millis(); // update data
  
  
  /* Note:
     The use of the enum instruction is not needed. You could set a maximum allowable
     size for holdinRegs[] by defining HOLDING_REGS_SIZE using a constant and then access 
     holdingRegs[] by "Index" addressing. 
     I.e.
     holdingRegs[0] = analogRead(A0);
     analogWrite(LED, holdingRegs[1]/4);
  */
  
}

con todo esto, lo que veo es que el plc y arduino si se conecta es decir los led del puerto serie de arduino y del plc prenden y apagan pero hasta ahora no eh podido recibir ningun dato

ojala puedan ayudarme

el cableado lo revise varias veces intercambie A y B en ambos puertos pero no se soluciono, creo tener algun error en el codigo de arduino

la libreria la descargue del siguiente link

https://drive.google.com/drive/u/1/folders/0B0B286tJkafVYnBhNGo4N3poQ2c

el archivo se llama “SimpleModbusSlavev10.sip”

saludos