Hi All,
Im trying to read holding register values of Elmeasure LG1129 and BM5140 energy meter using Modbus protocol through Arduino. I used RS485 to TTL converter between Energy meter and Arduino Mega but I haven’t succeeded. Please help me
This is the board i used for RS485 communication:
https://robokits.co.in/control-boards/interface-boards/max485-ttl-to-rs485-converter-module?gclid=EAIaIQobChMIhMDH_d2J5gIVizUrCh2MKwVHEAQYAiABEgKyZvD_BwE
Typical circuit diagram connection:
Some reference Code I got from forum and burned the same in Arduino:
#include <SimpleModbusMaster.h>
#define baud 9600
#define timeout 1000
#define polling 2000 // the scan rate
#define retry_count 10
#define TxEnablePin 2
#define TOTAL_NO_OF_REGISTERS 31
enum
{
PACKET1,
PACKET2,
TOTAL_NO_OF_PACKETS // leave this last entry
};
// Create an array of Packets to be configured
Packet packets[TOTAL_NO_OF_PACKETS];
// Masters register array
unsigned int regs[TOTAL_NO_OF_REGISTERS];
void setup()
{
// Initialize each packet
Serial.begin(9600);
Serial1.begin(9600);
modbus_construct(&packets[PACKET1], 1, READ_HOLDING_REGISTERS, 40133, 2, 10);
modbus_construct(&packets[PACKET2], 1, READ_HOLDING_REGISTERS, 40135, 2, 12);
modbus_configure(&Serial1, baud, SERIAL_8E1, timeout, polling, retry_count, TxEnablePin, packets, TOTAL_NO_OF_PACKETS, regs);
}
void loop()
{
modbus_update();
int A, B, C, D, E, F, G, H, I, J, K, L, M, N, O;
A = regs[10];
B = regs[12];
Serial.print("A = ");
Serial.println(A);
Serial.print("B = ");
Serial.println(B);
Serial.println("============================================");
delay(1000);
Serial.print("successful_requests: ");
Serial.println(packets[PACKET1].successful_requests);
Serial.println(" || ");
Serial.print("failed_requests: ");
Serial.print(packets[PACKET1].failed_requests);
Serial.println(" || ");
Serial.print("exception_errors: ");
Serial.print(packets[PACKET1].exception_errors);
Serial.println(" || ");
Serial.print("connection: ");
Serial.print(packets[PACKET1].connection);
Serial.println(" || ");
delay(1000);
}
Also Please clarify me this line of code what does number 10 represents although we have register number starting from 0 to 30
modbus_construct(&packets[PACKET1], 1, READ_HOLDING_REGISTERS, 40133, 2, 10);