communication modbus rs485, HELP!!

hi, i need communicate a device with my arduino using the modbus rs485 protocol, i don´t understand the few examples in the web, maybe some one can give me a example more easy.
My communication is half-duplex i´m using the the RS-485 Breakout of sparkfun (SparkFun Transceiver Breakout - RS-485 - BOB-10124 - SparkFun Electronics).
I was read about of the SimpleModbus-Library(Arduino Playground - ModbusMaster Library), but i don´t find any example about it.

i hope your comments, thanks! :slight_smile:

i follow investigating, and i am using the simplemodbus-library, this is my code, but i don´t know how to test if mi communication to discard this posible problem, and too i don´t know how read the receiver value, i tryin read the value like the comment line:

#include <SimpleModbusMaster.h>
//////////////////// Port information ///////////////////
#define baud 9600
#define timeout 1000
#define polling 200 // the scan rate

#define retry_count 5

// used to toggle the receive/transmit pin on the driver
#define TxEnablePin 2 

enum
{
  PACKET1,
   // leave this last entry
  TOTAL_NO_OF_PACKETS
};

// Create an array of Packets to be configured
Packet packets[TOTAL_NO_OF_PACKETS];
packetPointer packet1 = &packets[PACKET1];

// The data from the PLC will be stored in the regs array
unsigned int regs[10];
long val = 0;

void setup()
{
    // modbus_construct(packet, id, function, address, number of registers, register array)
  
     modbus_construct(packet1, 1, READ_HOLDING_REGISTERS, 3001, 20, regs);

     modbus_configure(baud, timeout, polling, retry_count, TxEnablePin, packets, TOTAL_NO_OF_PACKETS);
}

void loop()
{
  modbus_update();
  
///////////////////////////////////////////////////////////////
////////////tryin to read////////////////////////////////////////
 /*
  while(val=Serial.available() > 0){
    for(int i=0; i<val; i++){
      regs[i] = Serial.read();
    }
  }
  Serial.print(regs[0]);
  Serial.print(regs[1]);
  Serial.print(regs[2]);
*/

  // update the array with the counter data
  regs[3] = packet1->requests;
  regs[4] = packet1->successful_requests;
  regs[5] = packet1->failed_requests;
  regs[6] = packet1->exception_errors;
 
 }

if have a suggestion can help.

Well you have most of the code commented out, that won't help.

Surely this modbus library has a call to receive a "packet" or whatever they are called, you shouldn't have to read each byte yourself.


Rob

hi,
I use SimpleModbus[Master/Slave] library too, and it works great.

Take a look at this walkthrough on modbus through rs485, it contains examples that can help you

elle

Thanks Graynomad, you´re right, that code don´t help, i need find a way to read the packet, but before, i need confirm my communication, i now understand a little bit more the library and noticed that this lines:

regs[3] = packet1->requests;
regs[4] = packet1->successful_requests;
regs[5] = packet1->failed_requests;
regs[6] = packet1->exception_errors;

are a counters, and i printed the regs[], and the successful_requests (regs[4] = packet1->successful_requests;) always are 0, my communication it´s bad, i need first confirm the communication to continue.

And ellepiu thanks, your links helped me for understand a little bit more this library.