Hi everyone, i have find an example register using with ADL400 it works perfectly but my problem is
#define degerVoltagePhaseA 2304
#define degerVoltagePhaseC 2308
#define degerToplamGuc 2322
#define degerToplamEnerji 2332
when i look for adl400 registers in adl400 manual i can't find any value to match with this registers' value so if i want to add something i can't find which registers should i use, so what is the connection beetwen them.

#define degerVoltagePhaseA 2304
#define degerVoltagePhaseC 2308
#define degerToplamGuc 2322
#define degerToplamEnerji 2332
when i look for adl400 registers in adl400 manual i can't find any value to match with this registers' value so if i want to add something i can't find which registers should i use, so what is the connection beetwen them.

esp32 with modbusrtu:
#include <ModbusMaster.h>
#define pinOkumaCP 27
#define pinOkumaPP 32
#define pinTxEkran 25
#define pinRxEkran 26
#define pinTxEnerjiMetre 14
#define pinRxEnerjiMetre 12
#define RSE_PIN 13 // RS485 RSE Pin ---> Arduino Pin 2
#define SLAVE_ID 1 // ADL400E'nin Slave ID'si (Genellikle 1'dir, ancak cihazınıza göre değişebilir)
#define REGISTER_ADDR_VOLTAGE 2304 // Gerilim adresi (Bu, ADL400E'nin voltaj register adresidir. Kılavuzdan kontrol edin.)
#define REGISTER_ADDR_CURRENT 2310 // Akım adresi (Yine, cihazın dökümantasyonundan öğrenin)
#define NUM_REGISTERS 2 // 32-bit float için 2 register
#define degerVoltagePhaseA 2304
#define degerVoltagePhaseC 2308
#define degerToplamGuc 2322
#define degerToplamEnerji 2332
#define degerStateA_Max 4100
#define degerStateA_Min 3600c
#define degerStateB_Max 3400
#define degerStateB_Min 3200
#define degerStateC_Max 3000
#define degerStateC_Min 2700
#define degerStateD_Max 2500
#define degerStateD_Min 2300
#define degerStateF_Max 2250
#define degerStateF_Min 1800
#define deger63A_Max 300
#define deger63A_Min 0
#define deger32A_Max 1000
#define deger32A_Min 400
#define deger20A_Max 1900
#define deger20A_Min 1300
#define deger13A_Max 2600
#define deger13A_Min 2000
#define degerNCA_Max 4095
#define degerNCA_Min 3500
//#define Serial Ekran
HardwareSerial Ekran(1);
HardwareSerial enerjiMetre(2);
ModbusMaster node;
void setup() {
Serial.begin(115200);
Ekran.begin(9600, SERIAL_8N1, pinRxEkran, pinTxEkran);
enerjiMetre.begin(9600,SERIAL_8N1,pinRxEnerjiMetre,pinTxEnerjiMetre); // Enerjimetrenizin baud hızına göre ayarlayın
pinMode(RSE_PIN, OUTPUT);
pinMode(pinOkumaCP, INPUT);
pinMode(pinOkumaPP, INPUT);
Serial.println("ADL400E Veri Okuma Basladi.");
node.begin(SLAVE_ID, enerjiMetre);
node.preTransmission(preTransmission);
node.postTransmission(postTransmission);
}
void loop() {
int intOkumaCP = analogRead(pinOkumaCP);
int intOkumaPP = analogRead(pinOkumaPP);
float voltagePhaseA = readRegister(degerVoltagePhaseA);
delay(10);
float voltagePhaseC = readRegister(degerVoltagePhaseC);
delay(10);
float currentPhaseA = readRegister(REGISTER_ADDR_CURRENT);
delay(10);
float powerTotal= readRegister(degerToplamGuc);
delay(10);
float energyTotal= readRegister(degerToplamEnerji);
const char* voltagePhase;
Serial.printf("voltagePhaseA %.2f VoltagePhaseC %.2f CurrentPhaseA %.2f powerTotal %.2f energyTotal %.2f \n"
,voltagePhaseA ,voltagePhaseC ,currentPhaseA ,powerTotal ,energyTotal );
// powerTotal ve energyTotal'ı const char*'a dönüştür
String powerTotalStr = String(powerTotal, 2); // 2 ondalık basamak
const char* powerTotalCStr = powerTotalStr.c_str(); // const char*'a dönüştür
String energyTotalStr = String(energyTotal, 2); // 2 ondalık basamak
const char* energyTotalCStr = energyTotalStr.c_str(); // const char*'a dönüştür
if(voltagePhaseC > 100 && voltagePhaseC != NAN) //tek faz
{
voltagePhase="3 faz 380V";
}
else if(voltagePhaseC < 100) //Üç faz
{
voltagePhase="1 faz 220V";
}
for(int i=0;i<500;i++)
{
int intOkumaFiltreCP = analogRead(pinOkumaCP);
if(intOkumaCP <= intOkumaFiltreCP)
{
intOkumaCP = intOkumaFiltreCP;
}
delayMicroseconds(10);
}
Serial.print(intOkumaCP); Serial.println("CP okuma");
delay(5);
Serial.print(intOkumaPP); Serial.println("PP okuma");
delay(5);
if( degerStateA_Max >= intOkumaCP && degerStateA_Min <= intOkumaCP)
{
funcCPDurumuYolla("Lutfen Soketi Yerlestiriniz");
node.writeSingleRegister(512, 1); // Konnektör çıkarılınca enerji değerlerini temizler
}else if(degerStateB_Max >= intOkumaCP && degerStateB_Min<= intOkumaCP)
{
funcCPDurumuYolla("Soket Basarili Bir Sekilde Takildi");
}else if(degerStateC_Max >= intOkumaCP && degerStateC_Min <= intOkumaCP)// Enerji metreden okunan değere göre de koşul değişecek
{
if(currentPhaseA > 0.8) //0.8 Amper
{
funcCPDurumuYolla("Sarj İslemi Basladi");
}
else
{
funcCPDurumuYolla("Lutfen Karti Okutunuz");
}
}else if(degerStateD_Max >= intOkumaCP && degerStateD_Min <= intOkumaCP)
{
funcCPDurumuYolla("Aracin Havalandirilmasi Gerekiyor");
}
else if(degerStateF_Max >= intOkumaCP && degerStateF_Min<= intOkumaCP)
{
funcCPDurumuYolla("Hata");
}else
{
funcCPDurumuYolla("Bilinmeyen Durum");
}
delay(250);
if( deger63A_Max >= intOkumaPP && deger63A_Min <= intOkumaPP )
{
funcPPDurumuYolla("63 Amper");
}else if(deger32A_Max >= intOkumaPP && deger32A_Min <= intOkumaPP)
{
funcPPDurumuYolla("32 Amper");
}else if(deger20A_Max >= intOkumaPP && deger20A_Min <= intOkumaPP)
{
funcPPDurumuYolla("20 Amper");
}else if(deger13A_Max >= intOkumaPP && deger13A_Min <= intOkumaPP)
{
funcPPDurumuYolla("13 Amper");
}else if(degerNCA_Max >= intOkumaPP && degerNCA_Min <= intOkumaPP)
{
funcPPDurumuYolla("Soket Takılı Değil");
}
delay(250);
//enerjiDegerleriniYolla(voltagePhase, powerTotalCStr, energyTotalCStr);
voltDegeriniYolla(voltagePhase);
delay(250);
if(!isnan(powerTotal))
{
GucDegeriniYolla( powerTotalCStr);
}
delay(250);
if(!isnan(energyTotal))
{
EnerjiDegeriniYolla(energyTotalCStr);
}
delay(250);
}
void funcCPDurumuYolla(const char* Cp)
{
// Serial.print(Cp); Serial.println("cp durumu");
Ekran.printf("tSarjDurumu.txt=\"%s\"",Cp);
Ekran.write(0xff);
Ekran.write(0xff);
Ekran.write(0xff);
delay(10);
}
void funcPPDurumuYolla(const char* Pp)
{
// Serial.print(Pp); Serial.println("pp durumu");
Ekran.printf("tAmper.txt=\"%s\"",Pp);
Ekran.write(0xff);
Ekran.write(0xff);
Ekran.write(0xff);
}
void enerjiDegerleriniYolla(const char* volt, const char* Guc, const char* Enerji)
{
// Serial.print(volt); Serial.println("gerilim durumu");
// Serial.print(Guc); Serial.println("guc durumu");
//Serial.print(Enerji); Serial.println("enerji durumu");
Ekran.printf("t1.txt=\"%s\"",volt);
Ekran.write(0xff);
Ekran.write(0xff);
Ekran.write(0xff);
//delay(250);
Ekran.printf("t3.txt=\"%s\"",Guc);
Ekran.write(0xff);
Ekran.write(0xff);
Ekran.write(0xff);
// delay(250);
Ekran.printf("t4.txt=\"%s\"",Enerji);
Ekran.write(0xff);
Ekran.write(0xff);
Ekran.write(0xff);
// delay(250);
}
void voltDegeriniYolla(const char* volt)
{
Ekran.printf("t1.txt=\"%s\"",volt);
Ekran.write(0xff);
Ekran.write(0xff);
Ekran.write(0xff);
}
void GucDegeriniYolla(const char* Guc)
{
Ekran.printf("t3.txt=\"%s kW\"",Guc);
Ekran.write(0xff);
Ekran.write(0xff);
Ekran.write(0xff);
}
void EnerjiDegeriniYolla(const char* Enerji)
{
Ekran.printf("t4.txt=\"%s kWH\"",Enerji);
Ekran.write(0xff);
Ekran.write(0xff);
Ekran.write(0xff);
}
void preTransmission() {
digitalWrite(RSE_PIN, HIGH); // Veri gönderimi öncesi transmitter moduna geç
}
void postTransmission() {
digitalWrite(RSE_PIN, LOW); // Gönderim sonrası receiver moduna dön
}
float readRegister(uint16_t address) {
uint8_t result = node.readHoldingRegisters(address, NUM_REGISTERS);
if (result == node.ku8MBSuccess) {
uint16_t highWord = node.getResponseBuffer(0);
uint16_t lowWord = node.getResponseBuffer(1);
// Byte sıralamasını düzelt (big-endian'dan little-endian'a)
uint8_t bytes[4];
bytes[0] = highWord >> 8; // highWord üst byte
bytes[1] = highWord & 0xFF; // highWord alt byte
bytes[2] = lowWord >> 8; // lowWord üst byte
bytes[3] = lowWord & 0xFF; // lowWord alt byte
// Big-endian'dan little-endian'a çevir
uint8_t temp = bytes[0];
bytes[0] = bytes[3];
bytes[3] = temp;
temp = bytes[1];
bytes[1] = bytes[2];
bytes[2] = temp;
// Byte dizisini float'a dönüştür
float value;
memcpy(&value, bytes, sizeof(value));
return value;
} else {
Serial.print("Modbus Hata Kodu: ");
Serial.println(result);
return NAN; // Hata durumunda NaN döndür
}
}